#!/bin/bash set -eu echo "=> Starting Docmost setup" # Initialize /app/data if it's empty (first run) if [ ! -f /app/data/.initialized ]; then echo "=> Initializing data directory" mkdir -p /app/data/uploads /app/data/logs chown -R cloudron:cloudron /app/data touch /app/data/.initialized fi # Generate APP_SECRET if not exists if [ ! -f /app/data/app_secret ]; then echo "=> Generating APP_SECRET" openssl rand -hex 32 > /app/data/app_secret chown cloudron:cloudron /app/data/app_secret chmod 600 /app/data/app_secret fi APP_SECRET=$(cat /app/data/app_secret) # Set up environment variables export NODE_ENV=production export APP_URL="${CLOUDRON_APP_ORIGIN}" export APP_SECRET="${APP_SECRET}" export PORT=3001 # Database configuration export DATABASE_URL="${CLOUDRON_POSTGRESQL_URL}" # Redis configuration - parse Cloudron format to standard format echo "=> Configuring Redis..." # Cloudron provides Redis addon with specific environment variables # The CLOUDRON_REDIS_URL is in format: redis://:password@host:port # We need to ensure it's in the correct format for ioredis # Debug: Print the original Redis URL echo "=> Original CLOUDRON_REDIS_URL: ${CLOUDRON_REDIS_URL}" if [ -n "${CLOUDRON_REDIS_URL}" ]; then # Try to use the original URL first and see if it's valid export REDIS_URL="${CLOUDRON_REDIS_URL}" # Also extract components for individual env vars REDIS_PASSWORD=$(echo "$CLOUDRON_REDIS_URL" | sed -n 's|redis://:\([^@]*\)@.*|\1|p') REDIS_HOST=$(echo "$CLOUDRON_REDIS_URL" | sed -n 's|redis://[^@]*@\([^:]*\):.*|\1|p') REDIS_PORT=$(echo "$CLOUDRON_REDIS_URL" | sed -n 's|redis://[^@]*@[^:]*:\([0-9]*\).*|\1|p') # Default port if not found if [ -z "$REDIS_PORT" ]; then REDIS_PORT="6379" fi # Export individual components for Docmost export REDIS_HOST="${REDIS_HOST}" export REDIS_PORT="${REDIS_PORT}" export REDIS_PASSWORD="${REDIS_PASSWORD}" export REDIS_DB="0" echo "=> Redis configured: host=${REDIS_HOST}, port=${REDIS_PORT}" echo "=> Using Redis URL: ${REDIS_URL}" # Try alternative formats if the original fails if [ -z "$REDIS_PASSWORD" ]; then export REDIS_URL="redis://${REDIS_HOST}:${REDIS_PORT}" fi else echo "=> Error: Redis URL not provided by Cloudron" exit 1 fi # Email configuration export MAIL_DRIVER=smtp export SMTP_HOST="${CLOUDRON_MAIL_SMTP_SERVER}" export SMTP_PORT="${CLOUDRON_MAIL_SMTP_PORT}" export SMTP_USERNAME="${CLOUDRON_MAIL_SMTP_USERNAME}" export SMTP_PASSWORD="${CLOUDRON_MAIL_SMTP_PASSWORD}" export MAIL_FROM_ADDRESS="${CLOUDRON_MAIL_FROM}" # Storage configuration (using local storage) export STORAGE_DRIVER=local export STORAGE_LOCAL_PATH="/app/data/uploads" # Authentication will use built-in email/password system echo "=> Using built-in email/password authentication" # File upload configuration export FILE_UPLOAD_SIZE_LIMIT="50mb" # JWT configuration export JWT_TOKEN_EXPIRES_IN="30d" # Wait for Redis to be available if [ -n "${CLOUDRON_REDIS_URL}" ]; then echo "=> Waiting for Redis to be available..." for i in {1..30}; do if nc -z "${REDIS_HOST}" "${REDIS_PORT}" 2>/dev/null; then echo "=> Redis is available" break fi if [ $i -eq 30 ]; then echo "=> Warning: Redis not reachable after 30 seconds" fi sleep 1 done fi echo "=> Running database migrations" cd /app/code chown -R cloudron:cloudron /app/data # Find the correct prisma binary path PRISMA_BIN="" if [ -f "/app/code/apps/server/node_modules/.bin/prisma" ]; then PRISMA_BIN="/app/code/apps/server/node_modules/.bin/prisma" elif [ -f "/app/code/node_modules/.bin/prisma" ]; then PRISMA_BIN="/app/code/node_modules/.bin/prisma" elif [ -f "/app/code/node_modules/@prisma/cli/build/index.js" ]; then PRISMA_BIN="/usr/bin/node /app/code/node_modules/@prisma/cli/build/index.js" fi if [ -n "$PRISMA_BIN" ]; then echo "=> Found Prisma at: $PRISMA_BIN" cd /app/code/apps/server sudo -u cloudron $PRISMA_BIN migrate deploy || true else echo "=> Warning: Prisma binary not found, skipping migrations" fi # Create nginx temp directories mkdir -p /tmp/nginx_client_temp /tmp/nginx_proxy_temp /tmp/nginx_fastcgi_temp /tmp/nginx_uwsgi_temp /tmp/nginx_scgi_temp chown -R cloudron:cloudron /tmp/nginx_* echo "=> Starting services with supervisor" exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf