feat(config): adjust to upsun

This commit is contained in:
Joshua Keck 2025-12-10 12:00:05 +01:00
parent dc06a9c3e1
commit d93c78a0ec
4 changed files with 84 additions and 41 deletions

View file

@ -1,30 +1,32 @@
#!/bin/bash
# This script can be a starting point to convert
# PLATFORM_RELATIONSHIPS into another environment variable
# Many CMS systems use a DATABASE_URL to connect to the database
# Feel free to use this as inspiration
# Upsun Environment Configuration
# Dieses Script erstellt die DATABASE_URL aus den Upsun-Umgebungsvariablen
getRelationshipInfo() {
RELATIONSHIP_NAME="$1"
PROPERTY="$2"
JQ_STR="to_entries[] | select(.key==\"$RELATIONSHIP_NAME\") | .value[].$PROPERTY"
CMD="echo $PLATFORM_RELATIONSHIPS | base64 -d | jq -r '$JQ_STR'"
eval $CMD
}
# Upsun stellt Relationship-Informationen über Umgebungsvariablen bereit
# Format: <RELATIONSHIP_NAME>_<PROPERTY> (uppercase, - wird zu _)
# Beispiel: POSTGRESDATABASE_HOST, POSTGRESDATABASE_PORT, etc.
# choose the name of the relationship to parse, feel free to alter this
RELATIONSHIP="postgresdatabase"
DB_DATABASE="main"
# Prüfen ob wir auf Upsun/Platform.sh laufen
if [ -n "$PLATFORM_RELATIONSHIPS" ]; then
# Upsun/Platform.sh Umgebung - Relationships parsen
getRelationshipInfo() {
RELATIONSHIP_NAME="$1"
PROPERTY="$2"
JQ_STR="to_entries[] | select(.key==\"$RELATIONSHIP_NAME\") | .value[].$PROPERTY"
CMD="echo $PLATFORM_RELATIONSHIPS | base64 -d | jq -r '$JQ_STR'"
eval $CMD
}
# Extract the information we need
DB_TYPE=$(getRelationshipInfo "$RELATIONSHIP" 'scheme')
DB_USERNAME=$(getRelationshipInfo "$RELATIONSHIP" 'username')
DB_HOST=$(getRelationshipInfo "$RELATIONSHIP" 'host')
DB_PASS=$(getRelationshipInfo "$RELATIONSHIP" 'password')
DB_PORT=$(getRelationshipInfo "$RELATIONSHIP" 'port')
RELATIONSHIP="postgresdatabase"
DB_DATABASE="main"
# Create your DATABASE_URL variable here
export DATABASE_URL="postgresql://$DB_USERNAME:$DB_PASS@$DB_HOST:$DB_PORT/$DB_DATABASE"
DB_USERNAME=$(getRelationshipInfo "$RELATIONSHIP" 'username')
DB_HOST=$(getRelationshipInfo "$RELATIONSHIP" 'host')
DB_PASS=$(getRelationshipInfo "$RELATIONSHIP" 'password')
DB_PORT=$(getRelationshipInfo "$RELATIONSHIP" 'port')
# So now we have postgresql://user:@db_mysql.internal:3306/main
# echo "$DATABASE_URL" #only echo to test since it will expose the credentials
export DATABASE_URL="postgresql://$DB_USERNAME:$DB_PASS@$DB_HOST:$DB_PORT/$DB_DATABASE"
fi
# Hinweis: Die DATABASE_URL kann auch direkt in den Upsun-Projekteinstellungen
# als Umgebungsvariable gesetzt werden, was die bevorzugte Methode ist.

View file

@ -1,7 +0,0 @@
"https://{default}/":
type: upstream
upstream: "app:http"
# "https://www.{default}/":
# type: redirect
# to: "https://{default}/"

View file

@ -1,10 +0,0 @@
# The name given to the PostgreSQL service (lowercase alphanumeric only).
dbpostgres:
# The type of your service (postgresql), which uses the format
# 'type:version'. Be sure to consult the PostgreSQL documentation
# (https://docs.platform.sh/add-services/postgresql.html#supported-versions)
# when choosing a version. If you specify a version number which is not available,
# the CLI will return an error.
type: postgresql:15
# The disk attribute is the size of the persistent disk (in MB) allocated to the service.
disk: 4864

58
.upsun/config.yaml Normal file
View file

@ -0,0 +1,58 @@
# Upsun Konfiguration für Umami Analytics
# https://docs.upsun.com/configuration.html
applications:
app:
# Die Anwendung verwendet Node.js 22
stack:
- 'nodejs:22'
# Build-Konfiguration
build:
flavor: none
# Build- und Deploy-Hooks
hooks:
build: |
set -e
corepack enable
corepack prepare pnpm@latest --activate
pnpm install --frozen-lockfile
pnpm build
deploy: |
set -e
pnpm update-db
# Writable Mounts für Uploads
mounts:
'web/uploads':
source: storage
source_path: uploads
# Webserver-Konfiguration
web:
commands:
start: 'pnpm start'
# Beziehung zur PostgreSQL-Datenbank
relationships:
postgresdatabase: 'dbpostgres:postgresql'
# Service-Definitionen
services:
dbpostgres:
type: postgresql:16
configuration:
resources:
disk: 5120
# Routen-Konfiguration
routes:
'https://{default}/':
type: upstream
upstream: 'app:http'
# Optional: www-Redirect aktivieren
# 'https://www.{default}/':
# type: redirect
# to: 'https://{default}/'