mirror of
https://github.com/jrasanen/writefreely-docker.git
synced 2025-05-08 15:16:03 +03:00
refactor init script
This commit is contained in:
parent
c67b1f0f75
commit
103f2546bd
1 changed files with 65 additions and 53 deletions
|
@ -23,6 +23,10 @@ WRITEFREELY=/writefreely/writefreely
|
||||||
attempts=0
|
attempts=0
|
||||||
max_attempts=5
|
max_attempts=5
|
||||||
|
|
||||||
|
log() {
|
||||||
|
echo "$(date '+%Y/%m/%d %H:%M:%S') $1"
|
||||||
|
}
|
||||||
|
|
||||||
validate_url() {
|
validate_url() {
|
||||||
URL="$1"
|
URL="$1"
|
||||||
if echo "$URL" | grep -Eq "^https?://[a-zA-Z0-9._-]+"; then
|
if echo "$URL" | grep -Eq "^https?://[a-zA-Z0-9._-]+"; then
|
||||||
|
@ -32,37 +36,69 @@ validate_url() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Validate WRITEFREELY_HOST
|
retry_command() {
|
||||||
if ! validate_url "$WRITEFREELY_HOST"; then
|
local cmd=$1
|
||||||
echo "Error: $WRITEFREELY_HOST is not a valid URL. It must start with http:// or https:// and be followed by a valid hostname."
|
attempts=0
|
||||||
|
until $cmd; do
|
||||||
|
attempts=$((attempts+1))
|
||||||
|
if [ $attempts -ge $max_attempts ]; then
|
||||||
|
log "Failed to execute '$cmd' after $attempts attempts."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
log "Retrying '$cmd' ($attempts/$max_attempts)..."
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
initialize_database() {
|
||||||
|
log "Initializing database..."
|
||||||
|
if ! retry_command "${WRITEFREELY} --init-db"; then
|
||||||
|
log "Initialization of database failed. Removing config.ini."
|
||||||
|
rm ./config.ini
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_keys() {
|
||||||
|
log "Generating keys..."
|
||||||
|
${WRITEFREELY} --gen-keys
|
||||||
|
}
|
||||||
|
|
||||||
|
create_admin_user() {
|
||||||
|
if [ -n "$WRITEFREELY_ADMIN_USER" ]; then
|
||||||
|
${WRITEFREELY} user create --admin ${WRITEFREELY_ADMIN_USER}:${WRITEFREELY_ADMIN_PASSWORD}
|
||||||
|
log "Created admin user ${WRITEFREELY_ADMIN_USER}"
|
||||||
|
else
|
||||||
|
log "Admin user not defined"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
create_writer_user() {
|
||||||
|
if [ -n "$WRITEFREELY_WRITER_USER" ]; then
|
||||||
|
${WRITEFREELY} user create ${WRITEFREELY_WRITER_USER}:${WRITEFREELY_WRITER_PASSWORD}
|
||||||
|
log "Created writer user ${WRITEFREELY_WRITER_USER}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
validate_url "$WRITEFREELY_HOST" || {
|
||||||
|
log "Error: $WRITEFREELY_HOST is not a valid URL. It must start with http:// or https:// and be followed by a valid hostname."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
}
|
||||||
|
|
||||||
if [ -e ./config.ini ] && [ -e ./keys/email.aes256 ]; then
|
if [ -e ./config.ini ] && [ -e ./keys/email.aes256 ]; then
|
||||||
${WRITEFREELY} -migrate
|
log "Migration required. Running migration..."
|
||||||
exec ${WRITEFREELY}
|
${WRITEFREELY} -migrate
|
||||||
|
exec ${WRITEFREELY}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -e ./config.ini ]; then
|
if [ -e ./config.ini ]; then
|
||||||
until ${WRITEFREELY} --init-db; do
|
initialize_database
|
||||||
attempts=$((attempts+1))
|
generate_keys
|
||||||
if [ $attempts -ge $max_attempts ]; then
|
create_admin_user
|
||||||
echo "Failed to initialize database after $attempts attempts."
|
create_writer_user
|
||||||
exit 1
|
exec ${WRITEFREELY}
|
||||||
fi
|
|
||||||
echo "Retrying --init-db ($attempts/$max_attempts)..."
|
|
||||||
sleep 5
|
|
||||||
done
|
|
||||||
echo "Generating keys..."
|
|
||||||
${WRITEFREELY} -gen-keys
|
|
||||||
if [ -n "$WRITEFREELY_ADMIN_USER" ]; then
|
|
||||||
${WRITEFREELY} user create --admin ${WRITEFREELY_ADMIN_USER}:${WRITEFREELY_ADMIN_PASSWORD}
|
|
||||||
echo Created user ${WRITEFREELY_ADMIN_USER}
|
|
||||||
else
|
|
||||||
echo Admin user not defined
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
exec ${WRITEFREELY}
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
WRITEFREELY_BIND_PORT="${WRITEFREELY_BIND_PORT:-8080}"
|
WRITEFREELY_BIND_PORT="${WRITEFREELY_BIND_PORT:-8080}"
|
||||||
|
@ -179,33 +215,9 @@ EOF
|
||||||
|
|
||||||
chmod 600 ./config.ini
|
chmod 600 ./config.ini
|
||||||
|
|
||||||
# Retry --init-db until it succeeds
|
initialize_database
|
||||||
echo "Initializing database..."
|
generate_keys
|
||||||
until ${WRITEFREELY} --init-db; do
|
create_admin_user
|
||||||
attempts=$((attempts+1))
|
create_writer_user
|
||||||
if [ $attempts -ge $max_attempts ]; then
|
|
||||||
echo "Failed to initialize database after $attempts attempts."
|
|
||||||
rm ./config.ini
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Retrying --init-db ($attempts/$max_attempts)..."
|
|
||||||
sleep 5
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Generating keys..."
|
|
||||||
${WRITEFREELY} --gen-keys
|
|
||||||
|
|
||||||
if [ -n "$WRITEFREELY_ADMIN_USER" ]; then
|
|
||||||
${WRITEFREELY} user create --admin ${WRITEFREELY_ADMIN_USER}:${WRITEFREELY_ADMIN_PASSWORD}
|
|
||||||
echo Created user ${WRITEFREELY_ADMIN_USER}
|
|
||||||
else
|
|
||||||
echo Admin user not defined
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$WRITEFREELY_WRITER_USER" ]; then
|
|
||||||
${WRITEFREELY} user create ${WRITEFREELY_WRITER_USER}:${WRITEFREELY_WRITER_PASSWORD}
|
|
||||||
echo Created user ${WRITEFREELY_WRITER_USER}
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec ${WRITEFREELY}
|
exec ${WRITEFREELY}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue