Fix database connection issues by using standard PostgreSQL environment variables

This commit is contained in:
Andreas Düren 2025-03-16 23:39:14 +01:00
parent 5c76451474
commit 1358aefb60

View File

@ -688,6 +688,23 @@ export GOCACHE="/app/data/go/cache"
export GO111MODULE=on export GO111MODULE=on
export GOFLAGS="-modfile=/app/data/go/go.mod -mod=mod" 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 # Fix database migration state if needed
echo "==> Checking database migration state" echo "==> Checking database migration state"
if [ -d "$SERVER_DIR/cmd/museum" ]; then 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 # Execute as the cloudron user but use a proper script instead of env cd
cat > /tmp/run_migration.sh <<EOF cat > /tmp/run_migration.sh <<EOF
#!/bin/bash #!/bin/bash
cd "$SERVER_DIR" && 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" go run cmd/museum/main.go db force 25 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" \
go run cmd/museum/main.go db force 25
EOF EOF
chmod +x /tmp/run_migration.sh chmod +x /tmp/run_migration.sh
@ -739,7 +769,20 @@ elif [ -d "$SERVER_DIR/cmd/museum" ]; then
# Create a startup script # Create a startup script
cat > /tmp/run_server.sh <<EOF cat > /tmp/run_server.sh <<EOF
#!/bin/bash #!/bin/bash
cd "$SERVER_DIR" && 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" go run cmd/museum/main.go serve 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" \
go run cmd/museum/main.go serve
EOF EOF
chmod +x /tmp/run_server.sh chmod +x /tmp/run_server.sh
@ -755,6 +798,17 @@ EOF
MUSEUM_DB_PASSWORD="$MUSEUM_DB_PASSWORD" \ MUSEUM_DB_PASSWORD="$MUSEUM_DB_PASSWORD" \
MUSEUM_DB_NAME="$MUSEUM_DB_NAME" \ MUSEUM_DB_NAME="$MUSEUM_DB_NAME" \
ENTE_PG_DSN="postgres://${MUSEUM_DB_USER}:${MUSEUM_DB_PASSWORD}@${MUSEUM_DB_HOST}:${MUSEUM_DB_PORT}/${MUSEUM_DB_NAME}?sslmode=disable" \ ENTE_PG_DSN="postgres://${MUSEUM_DB_USER}:${MUSEUM_DB_PASSWORD}@${MUSEUM_DB_HOST}:${MUSEUM_DB_PORT}/${MUSEUM_DB_NAME}?sslmode=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" \
PGHOST="$PGHOST" \
PGPORT="$PGPORT" \
PGUSER="$PGUSER" \
PGPASSWORD="$PGPASSWORD" \
PGDATABASE="$PGDATABASE" \
PGSSLMODE="$PGSSLMODE" \
ENTE_LOG_LEVEL=debug \ ENTE_LOG_LEVEL=debug \
bash /tmp/run_server.sh > /app/data/logs/museum.log 2>&1 & bash /tmp/run_server.sh > /app/data/logs/museum.log 2>&1 &
SERVER_PID=$! SERVER_PID=$!
@ -783,6 +837,11 @@ func main() {
log.Println("MUSEUM_DB_USER:", os.Getenv("MUSEUM_DB_USER")) log.Println("MUSEUM_DB_USER:", os.Getenv("MUSEUM_DB_USER"))
log.Println("ENTE_PG_HOST:", os.Getenv("ENTE_PG_HOST")) log.Println("ENTE_PG_HOST:", os.Getenv("ENTE_PG_HOST"))
log.Println("ENTE_PG_DSN:", os.Getenv("ENTE_PG_DSN")) 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 // Add a health endpoint
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { 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_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" 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 & go run main.go > /app/data/logs/museum.log 2>&1 &
SERVER_PID=$! SERVER_PID=$!