[add] added docker
This commit is contained in:
125
docker/files/entrypoint.sh
Executable file
125
docker/files/entrypoint.sh
Executable file
@@ -0,0 +1,125 @@
|
||||
#!/bin/sh
|
||||
|
||||
##############################
|
||||
# configuration
|
||||
|
||||
prefix_file="${API_PREFIX_FILE:-/app/data/api_prefix}"
|
||||
db_file="${RAILS_DB_PATH:-/app/data/rynDNS.sqlite3}"
|
||||
default_admin_file="${API_DEFAULT_KEY_FILE:-/app/data/api_default_admin}"
|
||||
rails_bin="${RAILS_BINARY:-/app/bin/rails}"
|
||||
demo_cycle="${RAILS_DEMO_RESET:-300s}"
|
||||
demo_prefix="zW3If4s5"
|
||||
seed_default_key_text="Created default admin with api_key" # for grep'ing the default admin key
|
||||
|
||||
# end configuration
|
||||
##############################
|
||||
|
||||
function log()
|
||||
{
|
||||
local time=$(date +%F_%T)
|
||||
local prefix="LOG"
|
||||
case $1 in
|
||||
ERR | ERROR)
|
||||
prefix="ERR"
|
||||
shift
|
||||
;;
|
||||
WAR | WARNING)
|
||||
prefix="WAR"
|
||||
shift
|
||||
;;
|
||||
INF | INFO)
|
||||
prefix="INF"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
local func=$1; shift
|
||||
# remove any \n
|
||||
#local text=$(echo "$@"| tr '\n' '#' | sed 's|#|\\n |g')
|
||||
case "$logfile" in
|
||||
"")
|
||||
echo "[$time]:[$prefix]:[$0][$func]: $@" 2>&1
|
||||
;;
|
||||
*)
|
||||
echo "[$time]:[$prefix]:[$0][$func]: $@" >> $logfile
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
function random_sting()
|
||||
{
|
||||
echo -n "$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w "${1:-32}" | head -n 1)"
|
||||
}
|
||||
|
||||
function get_prefix_file()
|
||||
{
|
||||
if [ -f "$prefix_file" ]; then
|
||||
echo -n "$(head -1 $prefix_file)"
|
||||
else
|
||||
new_prefix=$(random_sting 8)
|
||||
log get_prefix_file no prefix file, generating new one
|
||||
echo -n "$new_prefix" > "$prefix_file"
|
||||
echo -n "$new_prefix"
|
||||
fi
|
||||
}
|
||||
|
||||
function set_api_prefix()
|
||||
{
|
||||
if [ -z "$RAILS_API_KEY_PREFIX" ]; then
|
||||
log set_api_prefix setting prefix from file
|
||||
RAILS_API_KEY_PREFIX=$(get_prefix_file | tail -1)
|
||||
export RAILS_API_KEY_PREFIX
|
||||
else
|
||||
log set_api_prefix saving prefix from ENV to file
|
||||
echo -n "$RAILS_API_KEY_PREFIX" > "$prefix_file"
|
||||
fi
|
||||
}
|
||||
|
||||
function demo_cleaner()
|
||||
{
|
||||
while true; do
|
||||
log demo_cleaner cleaning up;
|
||||
db_setup
|
||||
# starting sleep in subshell to be able to quickly terminate
|
||||
sleep $demo_cycle &
|
||||
wait
|
||||
done
|
||||
}
|
||||
|
||||
function demo()
|
||||
{
|
||||
if [ ! -z "$RAILS_API_DEMO" ]; then
|
||||
log demo "setting prefix to $demo_prefix"
|
||||
RAILS_API_KEY_PREFIX="$demo_prefix"
|
||||
export RAILS_API_KEY_PREFIX
|
||||
log demo "setting up demo cleaner, resetting every $demo_cycle"
|
||||
demo_cleaner &
|
||||
fi
|
||||
}
|
||||
|
||||
function db_setup()
|
||||
{
|
||||
if [ ! -f $db_file ]; then
|
||||
log db_setup running first time migrations
|
||||
echo "$($rails_bin db:migrate)"
|
||||
fi
|
||||
log db_setup seeding database
|
||||
seed_log="$($rails_bin db:seed)"
|
||||
echo "$seed_log"
|
||||
# save default login to file
|
||||
default_admin=$(echo "$seed_log" | grep "$seed_default_key_text")
|
||||
[ "${#default_admin}" -gt 8 ] && echo -n "$default_admin" > $default_admin_file
|
||||
log db_setup "see \`docker exec \$CONTAINER cat $default_admin_file\` for initial admin api_key"
|
||||
}
|
||||
|
||||
function main()
|
||||
{
|
||||
set_api_prefix
|
||||
log main prefix: $RAILS_API_KEY_PREFIX
|
||||
db_setup
|
||||
[ "$(id -u)" -eq 0 ] && log WARN main running server as root
|
||||
demo
|
||||
log main starting server
|
||||
exec $rails_bin s
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user