Files
docker-compose/arty.yml
Sebastian Krüger d3d9c7d0e2 fix: use hardcoded DB credentials for VPS production
Changed from ${DB_USER} and ${SEXY_DB_NAME} variables to hardcoded
values 'valknar' and 'directus' for production VPS environment.

Arty environment variables are not exported to the shell where scripts
execute, so the variables were empty when docker exec commands ran.

Production VPS always uses:
- PostgreSQL container: core_postgres
- DB user: valknar
- Database name: directus

These values are stable for production and won't change.
2025-10-28 23:26:12 +01:00

156 lines
6.2 KiB
YAML

name: "docker.compose"
version: "1.0.0"
description: "Valknar's Stacks"
author: "valknar@pivoine.art"
license: "private"
envs:
default:
# Common
ADMIN_EMAIL: valknar@pivoine.art
NETWORK_NAME: falcon_network
TIMEZONE: Europe/Berlin
# Core
CORE_COMPOSE_PROJECT_NAME: core
CORE_DB_HOST: postgres
CORE_DB_PORT: 5432
CORE_REDIS_HOST: redis
CORE_REDIS_PORT: 6379
CORE_REDIS_IMAGE: redis:7-alpine
CORE_POSTGRES_IMAGE: postgres:16-alpine
# VPN
VPN_TRAEFIK_ENABLED: true
VPN_COMPOSE_PROJECT_NAME: vpn
VPN_DOCKER_IMAGE: ghcr.io/wg-easy/wg-easy:latest
VPN_TRAEFIK_HOST: vpn.pivoine.art
# Track
TRACK_TRAEFIK_ENABLED: true
TRACK_COMPOSE_PROJECT_NAME: track
TRACK_DOCKER_IMAGE: ghcr.io/umami-software/umami:postgresql-latest
TRACK_TRAEFIK_HOST: umami.pivoine.art
TRACK_DB_NAME: umami
# AWSM
AWESOME_TRAEFIK_ENABLED: true
AWESOME_COMPOSE_PROJECT_NAME: awesome
AWESOME_TRAEFIK_HOST: awesome.pivoine.art
# Sexy
SEXY_TRAEFIK_ENABLED: true
SEXY_COMPOSE_PROJECT_NAME: sexy
SEXY_TRAEFIK_HOST: sexy.pivoine.art
SEXY_DIRECTUS_IMAGE: directus/directus:11.12.0
SEXY_FRONTEND_IMAGE: ghcr.io/valknarxxx/sexy:latest
SEXY_DB_NAME: directus
SEXY_PUBLIC_URL: https://sexy.pivoine.art/api
SEXY_CORS_ORIGIN: https://sexy.pivoine.art
SEXY_SESSION_COOKIE_DOMAIN: sexy.pivoine.art
SEXY_CONTENT_SECURITY_POLICY_DIRECTIVES__FRAME_SRC: https://sexy.pivoine.art
SEXY_USER_REGISTER_URL_ALLOW_LIST: https://sexy.pivoine.art/signup/verify
SEXY_PASSWORD_RESET_URL_ALLOW_LIST: https://sexy.pivoine.art/password/reset
SEXY_FRONTEND_PUBLIC_API_URL: https://sexy.pivoine.art/api
SEXY_FRONTEND_PUBLIC_URL: https://sexy.pivoine.art
# Gotify
GOTIFY_TRAEFIK_ENABLED: true
GOTIFY_COMPOSE_PROJECT_NAME: messaging
GOTIFY_IMAGE: gotify/server:latest
GOTIFY_TRAEFIK_HOST: gotify.pivoine.art
# Proxy
PROXY_COMPOSE_PROJECT_NAME: proxy
PROXY_DOCKER_IMAGE: traefik:latest
scripts:
config: docker compose config
up: docker compose up -d
down: docker compose down
logs: docker compose logs -f
restart: docker compose restart
ps: docker compose ps
pull: docker compose pull
run: docker compose exec -it
env/sync: rsync -avzhe ssh ./.env root@vps:~/Projects/docker-compose/
# Database export scripts for sexy.pivoine.art
# Export PostgreSQL database schema and data with DROP IF EXISTS statements
sexy/db/export: |
docker exec core_postgres pg_dump \
-U sexy \
-d sexy \
--no-owner \
--no-acl \
--clean \
--if-exists \
> ~/Projects/docker-compose/sexy/directus.sql &&
echo "Database exported to ~/Projects/docker-compose/sexy/directus.sql"
# Export Directus schema.yaml (collections, fields, relations, etc.)
sexy/schema/export: |
docker exec sexy_api mkdir -p /directus/snapshots &&
docker exec sexy_api npx directus schema snapshot /directus/snapshots/schema.yaml &&
docker cp sexy_api:/directus/snapshots/schema.yaml ~/Projects/docker-compose/sexy/schema.yaml &&
echo "Directus schema exported to ~/Projects/docker-compose/sexy/schema.yaml"
# Combined export: both database and schema
sexy/export/all: |
echo "Exporting database..." &&
docker exec core_postgres pg_dump \
-U sexy \
-d sexy \
--no-owner \
--no-acl \
--clean \
--if-exists \
> ~/Projects/docker-compose/sexy/directus.sql &&
echo "✓ Database exported" &&
echo "Exporting Directus schema..." &&
docker exec sexy_api mkdir -p /directus/snapshots &&
docker exec sexy_api npx directus schema snapshot /directus/snapshots/schema.yaml &&
docker cp sexy_api:/directus/snapshots/schema.yaml ~/Projects/docker-compose/sexy/schema.yaml &&
echo "✓ Directus schema exported" &&
echo "All exports completed successfully!"
# Import PostgreSQL database from SQL dump
# WARNING: This will DROP existing tables if they exist (uses --clean --if-exists)
sexy/db/import: |
echo "⚠️ WARNING: This will replace the current database!" &&
echo "Make sure core_postgres container is running..." &&
docker exec -i core_postgres psql -U valknar -d directus < ~/Projects/docker-compose/sexy/directus.sql &&
echo "✓ Database imported from ~/Projects/docker-compose/sexy/directus.sql" &&
echo "Restarting Directus API..." &&
docker restart sexy_api &&
echo "✓ Import completed successfully!"
# Apply Directus schema snapshot (collections, fields, relations)
# This uses 'directus schema apply' which is non-destructive by default
sexy/schema/import: |
echo "Applying Directus schema snapshot..." &&
docker cp ~/Projects/docker-compose/sexy/schema.yaml sexy_api:/directus/schema.yaml &&
docker exec sexy_api npx directus schema apply --yes /directus/schema.yaml &&
echo "✓ Directus schema applied from ~/Projects/docker-compose/sexy/schema.yaml" &&
echo "Restarting Directus API..." &&
docker restart sexy_api &&
echo "✓ Schema import completed successfully!"
# Combined import: database and schema (use with caution!)
# Step 1: Import database (drops/recreates all tables)
# Step 2: Apply schema (updates Directus metadata)
sexy/import/all: |
echo "⚠️ WARNING: This will completely replace the database and schema!" &&
echo "Importing database..." &&
docker exec -i core_postgres psql -U valknar -d directus < ~/Projects/docker-compose/sexy/directus.sql &&
echo "✓ Database imported" &&
echo "Applying Directus schema..." &&
docker cp ~/Projects/docker-compose/sexy/schema.yaml sexy_api:/directus/schema.yaml &&
docker exec sexy_api npx directus schema apply --yes /directus/schema.yaml &&
echo "✓ Schema applied" &&
echo "Restarting Directus API..." &&
docker restart sexy_api &&
echo "✓✓✓ Complete import finished successfully!"
sexy/uploads/export: |
rm -rf sexy/uploads
docker cp "sexy_api:/directus/uploads" "sexy/uploads"
sexy/uploads/import: |
docker cp "sexy/uploads" "sexy_api:/directus"
net/create: docker network create "$NETWORK_NAME"
awsm/import: |
artifact_github_download.sh valknarness/awesome-app -n awesome-database -o /tmp
docker cp "/tmp/awesome-database" "awesome_app:/home/node/.awesome"