diff --git a/CloudronManifest.json b/CloudronManifest.json index b30336d..9b1dc11 100644 --- a/CloudronManifest.json +++ b/CloudronManifest.json @@ -5,7 +5,7 @@ "description": "Next-gen knowledge base that blends docs, whiteboards, and databases for self-hosted teams.", "website": "https://affine.pro", "contactEmail": "support@affine.pro", - "version": "0.1.3", + "version": "0.1.4", "changelog": "Initial Cloudron packaging", "manifestVersion": 2, "minBoxVersion": "7.0.0", diff --git a/run-affine.sh b/run-affine.sh index 718aaa8..c948a46 100644 --- a/run-affine.sh +++ b/run-affine.sh @@ -3,6 +3,14 @@ set -euo pipefail APP_DIR=${APP_BUILD_DIR:-/app/code/affine} cd "$APP_DIR" +ENV_EXPORT_FILE=${ENV_EXPORT_FILE:-/run/affine/runtime.env} + +if [ -f "$ENV_EXPORT_FILE" ]; then + set -a + # shellcheck disable=SC1090 + source "$ENV_EXPORT_FILE" + set +a +fi log() { printf '[%s] %s\n' "$(date --iso-8601=seconds)" "$*" diff --git a/start.sh b/start.sh index e61dd3f..9d33320 100644 --- a/start.sh +++ b/start.sh @@ -8,12 +8,23 @@ APP_TMP_DIR=${APP_TMP_DIR:-/tmp/data} APP_BUILD_DIR=${APP_BUILD_DIR:-/app/code/affine} APP_HOME_DIR=${APP_HOME_DIR:-/app/data/home} AFFINE_HOME=${AFFINE_HOME:-$APP_HOME_DIR/.affine} -export APP_CODE_DIR APP_DATA_DIR APP_RUNTIME_DIR APP_TMP_DIR APP_BUILD_DIR APP_HOME_DIR AFFINE_HOME +ENV_EXPORT_FILE=${ENV_EXPORT_FILE:-$APP_RUNTIME_DIR/runtime.env} +export APP_CODE_DIR APP_DATA_DIR APP_RUNTIME_DIR APP_TMP_DIR APP_BUILD_DIR APP_HOME_DIR AFFINE_HOME ENV_EXPORT_FILE log() { printf '[%s] %s\n' "$(date --iso-8601=seconds)" "$*" } +persist_env_vars() { + local var + for var in "$@"; do + local value="${!var-}" + if [ -n "$value" ]; then + printf '%s=%q\n' "$var" "$value" >> "$ENV_EXPORT_FILE" + fi + done +} + require_env() { local var_name="$1" if [ -z "${!var_name:-}" ]; then @@ -26,6 +37,7 @@ prepare_data_dirs() { log "Preparing persistent directories" mkdir -p "$APP_DATA_DIR/config" "$APP_DATA_DIR/storage" "$APP_DATA_DIR/logs" "$APP_RUNTIME_DIR" "$APP_HOME_DIR" "$AFFINE_HOME" mkdir -p /run/nginx/body /run/nginx/proxy /run/nginx/fastcgi + : > "$ENV_EXPORT_FILE" if [ ! -f "$APP_DATA_DIR/config/config.json" ]; then log "Seeding default configuration" @@ -54,6 +66,7 @@ configure_database() { db_url="postgresql://${db_url#postgres://}" fi export DATABASE_URL="$db_url" + persist_env_vars DATABASE_URL log "Configured PostgreSQL endpoint" } @@ -83,6 +96,7 @@ PY export REDIS_SERVER_USERNAME="$username" export REDIS_URL="$CLOUDRON_REDIS_URL" export REDIS_SERVER_URL="$CLOUDRON_REDIS_URL" + persist_env_vars REDIS_SERVER_HOST REDIS_SERVER_PORT REDIS_SERVER_PASSWORD REDIS_SERVER_DATABASE REDIS_SERVER_USERNAME REDIS_URL REDIS_SERVER_URL log "Configured Redis endpoint" } @@ -97,6 +111,7 @@ configure_mail() { export MAILER_PASSWORD="${CLOUDRON_MAIL_SMTP_PASSWORD:-}" export MAILER_SENDER="${CLOUDRON_MAIL_FROM:-AFFiNE }" export MAILER_SERVERNAME="${MAILER_SERVERNAME:-AFFiNE Server}" + persist_env_vars MAILER_HOST MAILER_PORT MAILER_USER MAILER_PASSWORD MAILER_SENDER MAILER_SERVERNAME log "Configured SMTP relay" } @@ -120,6 +135,7 @@ PY fi fi export AFFINE_INDEXER_ENABLED=${AFFINE_INDEXER_ENABLED:-false} + persist_env_vars AFFINE_SERVER_EXTERNAL_URL AFFINE_SERVER_HOST AFFINE_SERVER_HTTPS AFFINE_INDEXER_ENABLED } configure_auth() {