diff --git a/start.sh b/start.sh index 56c15b7..e581be2 100644 --- a/start.sh +++ b/start.sh @@ -10,6 +10,11 @@ echo "==> Starting Ente Cloudron app..." # Create necessary directories mkdir -p /app/data/config /app/data/storage /app/data/caddy /app/data/go /app/data/logs +# Create and set proper permissions for patched directory early +mkdir -p /app/data/patched +chmod -R 777 /app/data/patched +echo "==> Created and set full permissions (777) on /app/data/patched directory" + # Add comment about Cloudron filesystem limitations echo "==> NOTE: Running in Cloudron environment with limited write access" echo "==> Writable directories: /app/data, /tmp, /run" @@ -400,6 +405,7 @@ echo "==> Created db_override.go in writable location: /app/data/overrides" mkdir -p /app/data/patched cp /app/data/overrides/db_override.go /app/data/patched/ chmod -R 777 /app/data/patched +chmod 666 /app/data/patched/db_override.go echo "==> Copied db_override.go to patched directory for Go compiler compatibility" echo "==> Set permissions on patched directory to 777" @@ -474,25 +480,45 @@ if [ -d "$SERVER_DIR/cmd/museum" ]; then #!/bin/bash # Unset any module-related flags that cause issues unset GOFLAGS -cd "$SERVER_DIR" && \ -PGHOST="${CLOUDRON_POSTGRESQL_HOST}" \ -PGPORT="${CLOUDRON_POSTGRESQL_PORT}" \ -PGUSER="${CLOUDRON_POSTGRESQL_USERNAME}" \ -PGPASSWORD="${CLOUDRON_POSTGRESQL_PASSWORD}" \ -PGDATABASE="${CLOUDRON_POSTGRESQL_DATABASE}" \ -PGSSLMODE="disable" \ -ENTE_PG_HOST="${MUSEUM_DB_HOST}" \ -ENTE_PG_PORT="${MUSEUM_DB_PORT}" \ -ENTE_PG_USER="${MUSEUM_DB_USER}" \ -ENTE_PG_PASSWORD="${MUSEUM_DB_PASSWORD}" \ -ENTE_PG_DATABASE="${MUSEUM_DB_NAME}" \ -ENTE_PG_DSN="postgres://${MUSEUM_DB_USER}:${MUSEUM_DB_PASSWORD}@${MUSEUM_DB_HOST}:${MUSEUM_DB_PORT}/${MUSEUM_DB_NAME}?sslmode=disable&host=${MUSEUM_DB_HOST}" \ -CLOUDRON_POSTGRESQL_HOST="${CLOUDRON_POSTGRESQL_HOST}" \ -CLOUDRON_POSTGRESQL_PORT="${CLOUDRON_POSTGRESQL_PORT}" \ -CLOUDRON_POSTGRESQL_USERNAME="${CLOUDRON_POSTGRESQL_USERNAME}" \ -CLOUDRON_POSTGRESQL_PASSWORD="${CLOUDRON_POSTGRESQL_PASSWORD}" \ -CLOUDRON_POSTGRESQL_DATABASE="${CLOUDRON_POSTGRESQL_DATABASE}" \ -cp $SERVER_DIR/cmd/museum/main.go /app/data/patched/ && cd /app/data/patched && GO111MODULE=on go run -ldflags "-X 'github.com/lib/pq.defaulthost=${MUSEUM_DB_HOST}'" *.go db force 25 +unset GO111MODULE + +# Set PostgreSQL environment variables +export PGHOST="${CLOUDRON_POSTGRESQL_HOST}" +export PGPORT="${CLOUDRON_POSTGRESQL_PORT}" +export PGUSER="${CLOUDRON_POSTGRESQL_USERNAME}" +export PGPASSWORD="${CLOUDRON_POSTGRESQL_PASSWORD}" +export PGDATABASE="${CLOUDRON_POSTGRESQL_DATABASE}" +export PGSSLMODE="disable" + +# Create go.mod and go.sum files +cd /app/data/patched +cat > go.mod <<EOG +module ente.io/server + +go 1.24 + +require ( + github.com/lib/pq v1.10.9 +) +EOG + +# Generate empty go.sum file (needed to prevent errors) +touch go.sum +chmod 666 go.mod go.sum + +# Download the dependency to populate go.sum +go mod tidy +go mod download github.com/lib/pq + +# Echo the pq dependency explicitly +cat >> go.sum <<EOG +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +EOG + +# Run the migration +export GO111MODULE=on +go run -ldflags "-X 'github.com/lib/pq.defaulthost=${MUSEUM_DB_HOST}'" *.go db force 25 EOF chmod +x /tmp/run_migration.sh @@ -531,23 +557,23 @@ elif [ -d "$SERVER_DIR/cmd/museum" ]; then # Create a startup script cat > /tmp/run_server.sh <<EOF #!/bin/bash -cd "$SERVER_DIR" && \\ -PGHOST="${CLOUDRON_POSTGRESQL_HOST}" \\ -PGPORT="${CLOUDRON_POSTGRESQL_PORT}" \\ -PGUSER="${CLOUDRON_POSTGRESQL_USERNAME}" \\ -PGPASSWORD="${CLOUDRON_POSTGRESQL_PASSWORD}" \\ -PGDATABASE="${CLOUDRON_POSTGRESQL_DATABASE}" \\ -PGSSLMODE="disable" \\ -ENTE_PG_HOST="${MUSEUM_DB_HOST}" \\ -ENTE_PG_PORT="${MUSEUM_DB_PORT}" \\ -ENTE_PG_USER="${MUSEUM_DB_USER}" \\ -ENTE_PG_PASSWORD="${MUSEUM_DB_PASSWORD}" \\ -ENTE_PG_DATABASE="${MUSEUM_DB_NAME}" \\ -ENTE_PG_DSN="postgres://${MUSEUM_DB_USER}:${MUSEUM_DB_PASSWORD}@${MUSEUM_DB_HOST}:${MUSEUM_DB_PORT}/${MUSEUM_DB_NAME}?sslmode=disable&host=${MUSEUM_DB_HOST}" \\ -CLOUDRON_POSTGRESQL_HOST="${CLOUDRON_POSTGRESQL_HOST}" \\ -CLOUDRON_POSTGRESQL_PORT="${CLOUDRON_POSTGRESQL_PORT}" \\ -CLOUDRON_POSTGRESQL_USERNAME="${CLOUDRON_POSTGRESQL_USERNAME}" \\ -CLOUDRON_POSTGRESQL_PASSWORD="${CLOUDRON_POSTGRESQL_PASSWORD}" \\ +cd "$SERVER_DIR" && \ +PGHOST="${CLOUDRON_POSTGRESQL_HOST}" \ +PGPORT="${CLOUDRON_POSTGRESQL_PORT}" \ +PGUSER="${CLOUDRON_POSTGRESQL_USERNAME}" \ +PGPASSWORD="${CLOUDRON_POSTGRESQL_PASSWORD}" \ +PGDATABASE="${CLOUDRON_POSTGRESQL_DATABASE}" \ +PGSSLMODE="disable" \ +ENTE_PG_HOST="${MUSEUM_DB_HOST}" \ +ENTE_PG_PORT="${MUSEUM_DB_PORT}" \ +ENTE_PG_USER="${MUSEUM_DB_USER}" \ +ENTE_PG_PASSWORD="${MUSEUM_DB_PASSWORD}" \ +ENTE_PG_DATABASE="${MUSEUM_DB_NAME}" \ +ENTE_PG_DSN="postgres://${MUSEUM_DB_USER}:${MUSEUM_DB_PASSWORD}@${MUSEUM_DB_HOST}:${MUSEUM_DB_PORT}/${MUSEUM_DB_NAME}?sslmode=disable&host=${MUSEUM_DB_HOST}" \ +CLOUDRON_POSTGRESQL_HOST="${CLOUDRON_POSTGRESQL_HOST}" \ +CLOUDRON_POSTGRESQL_PORT="${CLOUDRON_POSTGRESQL_PORT}" \ +CLOUDRON_POSTGRESQL_USERNAME="${CLOUDRON_POSTGRESQL_USERNAME}" \ +CLOUDRON_POSTGRESQL_PASSWORD="${CLOUDRON_POSTGRESQL_PASSWORD}" \ CLOUDRON_POSTGRESQL_DATABASE="${CLOUDRON_POSTGRESQL_DATABASE}" EOF @@ -859,33 +885,28 @@ cat > /app/data/caddy/Caddyfile <<EOT output file /app/data/logs/caddy.log } - # MIME types settings - mime { - # JavaScript files - ext js application/javascript - # Next.js chunks - path /_next/static/chunks/* application/javascript - # CSS files - ext css text/css - # JSON files - ext json application/json - # SVG files - ext svg image/svg+xml - # WOFF2 font files - ext woff2 font/woff2 - } - # Root path serves the photos app handle / { root * /app/web/photos try_files {path} /index.html - file_server + file_server { + # Set headers for common static file types + header /*.js Content-Type application/javascript + header /*.css Content-Type text/css + header /*.json Content-Type application/json + header /*.svg Content-Type image/svg+xml + header /*.woff2 Content-Type font/woff2 + } } # Next.js static files handle /_next/* { root * /app/web/photos - file_server + file_server { + # Set specific headers for Next.js chunks + header /static/chunks/*.js Content-Type application/javascript + header /static/css/*.css Content-Type text/css + } } # Accounts app @@ -893,7 +914,11 @@ cat > /app/data/caddy/Caddyfile <<EOT root * /app/web/accounts uri strip_prefix /accounts try_files {path} /index.html - file_server + file_server { + # Set headers for common static file types + header /*.js Content-Type application/javascript + header /*.css Content-Type text/css + } } # Auth app @@ -901,7 +926,11 @@ cat > /app/data/caddy/Caddyfile <<EOT root * /app/web/auth uri strip_prefix /auth try_files {path} /index.html - file_server + file_server { + # Set headers for common static file types + header /*.js Content-Type application/javascript + header /*.css Content-Type text/css + } } # Cast app @@ -909,7 +938,11 @@ cat > /app/data/caddy/Caddyfile <<EOT root * /app/web/cast uri strip_prefix /cast try_files {path} /index.html - file_server + file_server { + # Set headers for common static file types + header /*.js Content-Type application/javascript + header /*.css Content-Type text/css + } } # Main API proxy