From 1358aefb60a45022552850855741e311c82a3019 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20D=C3=BCren?= Date: Sun, 16 Mar 2025 23:39:14 +0100 Subject: [PATCH] Fix database connection issues by using standard PostgreSQL environment variables --- start.sh | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/start.sh b/start.sh index 5d3ada8..a4cfc52 100644 --- a/start.sh +++ b/start.sh @@ -688,6 +688,23 @@ export GOCACHE="/app/data/go/cache" export GO111MODULE=on export GOFLAGS="-modfile=/app/data/go/go.mod -mod=mod" +# Standard PostgreSQL environment variables (critical for Go's database/sql driver) +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" + +# Try to modify hosts file to block localhost PostgreSQL connections (may not work in containers) +if [ -w /etc/hosts ]; then + echo "==> Adding entry to /etc/hosts to redirect localhost PostgreSQL" + echo "127.0.0.1 postgres-unavailable # Added by Ente startup script" >> /etc/hosts + echo "::1 postgres-unavailable # Added by Ente startup script" >> /etc/hosts +else + echo "==> Cannot modify /etc/hosts (read-only filesystem)" +fi + # Fix database migration state if needed echo "==> Checking database migration state" if [ -d "$SERVER_DIR/cmd/museum" ]; then @@ -700,7 +717,20 @@ if [ -d "$SERVER_DIR/cmd/museum" ]; then # Execute as the cloudron user but use a proper script instead of env cd cat > /tmp/run_migration.sh < /tmp/run_server.sh < /app/data/logs/museum.log 2>&1 & SERVER_PID=$! @@ -783,6 +837,11 @@ func main() { log.Println("MUSEUM_DB_USER:", os.Getenv("MUSEUM_DB_USER")) log.Println("ENTE_PG_HOST:", os.Getenv("ENTE_PG_HOST")) log.Println("ENTE_PG_DSN:", os.Getenv("ENTE_PG_DSN")) + log.Println("PGHOST:", os.Getenv("PGHOST")) + log.Println("PGPORT:", os.Getenv("PGPORT")) + log.Println("PGUSER:", os.Getenv("PGUSER")) + log.Println("PGDATABASE:", os.Getenv("PGDATABASE")) + log.Println("PGSSLMODE:", os.Getenv("PGSSLMODE")) // Add a health endpoint http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { @@ -816,6 +875,14 @@ EOT export ENTE_PG_DATABASE="${MUSEUM_DB_NAME}" export ENTE_PG_DSN="postgres://${MUSEUM_DB_USER}:${MUSEUM_DB_PASSWORD}@${MUSEUM_DB_HOST}:${MUSEUM_DB_PORT}/${MUSEUM_DB_NAME}?sslmode=disable" + # Make sure we pass the standard PostgreSQL environment variables too + 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" + go run main.go > /app/data/logs/museum.log 2>&1 & SERVER_PID=$!