feat: awsm
This commit is contained in:
4
arty.yml
4
arty.yml
@@ -29,6 +29,10 @@ envs:
|
||||
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
|
||||
|
||||
68
awsm/compose.yml
Normal file
68
awsm/compose.yml
Normal file
@@ -0,0 +1,68 @@
|
||||
services:
|
||||
# Awesome App - Next.js application for exploring awesome lists
|
||||
awesome-app:
|
||||
image: ${AWESOME_IMAGE:-ghcr.io/valknarness/awesome-app:latest}
|
||||
container_name: ${AWESOME_COMPOSE_PROJECT_NAME:-awesome}_app
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- compose_network
|
||||
environment:
|
||||
# Node
|
||||
NODE_ENV: production
|
||||
PORT: 3000
|
||||
HOSTNAME: 0.0.0.0
|
||||
|
||||
# Next.js
|
||||
NEXT_TELEMETRY_DISABLED: ${NEXT_TELEMETRY_DISABLED:-1}
|
||||
|
||||
# Database path
|
||||
AWESOME_DB_PATH: ${AWESOME_DB_PATH:-/app/awesome.db}
|
||||
|
||||
# Optional: Webhook secret for database updates
|
||||
WEBHOOK_SECRET: ${AWESOME_WEBHOOK_SECRET:-}
|
||||
|
||||
# Optional: GitHub token for rate limits
|
||||
GITHUB_TOKEN: ${AWESOME_GITHUB_TOKEN:-}
|
||||
|
||||
# Timezone
|
||||
TZ: ${TIMEZONE:-UTC}
|
||||
|
||||
volumes:
|
||||
# Mount database directory for persistence
|
||||
- ${AWESOME_DB_VOLUME:-awesome_data}:/app/data
|
||||
# Optional: Mount a pre-existing database
|
||||
# - ./awesome.db:/app/awesome.db:ro
|
||||
|
||||
labels:
|
||||
# Traefik labels for reverse proxy
|
||||
- 'traefik.enable=${AWESOME_TRAEFIK_ENABLED:-true}'
|
||||
|
||||
# HTTP to HTTPS redirect
|
||||
- 'traefik.http.middlewares.${AWESOME_COMPOSE_PROJECT_NAME:-awesome}-redirect-web-secure.redirectscheme.scheme=https'
|
||||
- 'traefik.http.routers.${AWESOME_COMPOSE_PROJECT_NAME:-awesome}-web.middlewares=${AWESOME_COMPOSE_PROJECT_NAME:-awesome}-redirect-web-secure'
|
||||
- 'traefik.http.routers.${AWESOME_COMPOSE_PROJECT_NAME:-awesome}-web.rule=Host(`${AWESOME_TRAEFIK_HOST}`)'
|
||||
- 'traefik.http.routers.${AWESOME_COMPOSE_PROJECT_NAME:-awesome}-web.entrypoints=web'
|
||||
|
||||
# HTTPS configuration
|
||||
- 'traefik.http.routers.${AWESOME_COMPOSE_PROJECT_NAME:-awesome}-web-secure.rule=Host(`${AWESOME_TRAEFIK_HOST}`)'
|
||||
- 'traefik.http.routers.${AWESOME_COMPOSE_PROJECT_NAME:-awesome}-web-secure.tls.certresolver=resolver'
|
||||
- 'traefik.http.routers.${AWESOME_COMPOSE_PROJECT_NAME:-awesome}-web-secure.entrypoints=web-secure'
|
||||
|
||||
# Compression middleware
|
||||
- 'traefik.http.middlewares.${AWESOME_COMPOSE_PROJECT_NAME:-awesome}-compress.compress=true'
|
||||
- 'traefik.http.routers.${AWESOME_COMPOSE_PROJECT_NAME:-awesome}-web-secure.middlewares=${AWESOME_COMPOSE_PROJECT_NAME:-awesome}-compress'
|
||||
|
||||
# Load balancer configuration
|
||||
- 'traefik.http.services.${AWESOME_COMPOSE_PROJECT_NAME:-awesome}-web-secure.loadbalancer.server.port=3000'
|
||||
- 'traefik.docker.network=compose_network'
|
||||
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/api/stats"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
volumes:
|
||||
awesome_data:
|
||||
name: ${AWESOME_COMPOSE_PROJECT_NAME:-awesome}_data
|
||||
@@ -1,6 +1,7 @@
|
||||
name: falcon
|
||||
include:
|
||||
- core/compose.yaml
|
||||
- awsm/compose.yaml
|
||||
- sexy/compose.yaml
|
||||
- gotify/compose.yaml
|
||||
- track/compose.yaml
|
||||
|
||||
@@ -1,117 +0,0 @@
|
||||
# ============================================================================
|
||||
# Production Environment Variables for sexy.pivoine.art
|
||||
# ============================================================================
|
||||
# Copy this file to .env and fill in your values
|
||||
# Usage: docker compose -f compose.yaml up -d
|
||||
|
||||
# ============================================================================
|
||||
# Project Configuration
|
||||
# ============================================================================
|
||||
SEXY_COMPOSE_PROJECT_NAME=sexy
|
||||
CORE_COMPOSE_PROJECT_NAME=core
|
||||
NETWORK_NAME=compose_network
|
||||
TIMEZONE=Europe/Amsterdam
|
||||
|
||||
# ============================================================================
|
||||
# External Database Configuration (from compose_network)
|
||||
# ============================================================================
|
||||
CORE_DB_HOST=postgres
|
||||
CORE_DB_PORT=5432
|
||||
SEXY_DB_NAME=sexy
|
||||
DB_USER=sexy
|
||||
DB_PASSWORD=your-database-password-here
|
||||
|
||||
# ============================================================================
|
||||
# External Redis Configuration (from compose_network)
|
||||
# ============================================================================
|
||||
CORE_REDIS_HOST=redis
|
||||
CORE_REDIS_PORT=6379
|
||||
|
||||
# ============================================================================
|
||||
# Directus Configuration
|
||||
# ============================================================================
|
||||
SEXY_DIRECTUS_IMAGE=directus/directus:11
|
||||
SEXY_DIRECTUS_SECRET=your-32-char-random-secret-here-min-32-characters
|
||||
ADMIN_EMAIL=admin@sexy.pivoine.art
|
||||
ADMIN_PASSWORD=your-admin-password-here
|
||||
|
||||
# Directus public URL (accessible via Traefik)
|
||||
SEXY_PUBLIC_URL=https://sexy.pivoine.art
|
||||
|
||||
# Uploads and bundle paths (use named volumes or host paths)
|
||||
SEXY_DIRECTUS_UPLOADS=directus_uploads
|
||||
SEXY_DIRECTUS_BUNDLE=directus_bundle
|
||||
|
||||
# ============================================================================
|
||||
# Cache Configuration
|
||||
# ============================================================================
|
||||
SEXY_CACHE_ENABLED=true
|
||||
SEXY_CACHE_AUTO_PURGE=true
|
||||
|
||||
# ============================================================================
|
||||
# CORS Configuration
|
||||
# ============================================================================
|
||||
SEXY_CORS_ENABLED=true
|
||||
SEXY_CORS_ORIGIN=https://sexy.pivoine.art
|
||||
|
||||
# ============================================================================
|
||||
# Security (Production)
|
||||
# ============================================================================
|
||||
SEXY_SESSION_COOKIE_SECURE=true
|
||||
SEXY_SESSION_COOKIE_SAME_SITE=strict
|
||||
SEXY_SESSION_COOKIE_DOMAIN=.pivoine.art
|
||||
|
||||
# ============================================================================
|
||||
# Extensions
|
||||
# ============================================================================
|
||||
SEXY_EXTENSIONS_PATH=/directus/extensions
|
||||
SEXY_EXTENSIONS_AUTO_RELOAD=false
|
||||
|
||||
# ============================================================================
|
||||
# WebSockets
|
||||
# ============================================================================
|
||||
SEXY_WEBSOCKETS_ENABLED=true
|
||||
|
||||
# ============================================================================
|
||||
# Email Configuration (Production SMTP)
|
||||
# ============================================================================
|
||||
EMAIL_TRANSPORT=smtp
|
||||
EMAIL_FROM=noreply@sexy.pivoine.art
|
||||
EMAIL_SMTP_HOST=smtp.example.com
|
||||
EMAIL_SMTP_PORT=587
|
||||
EMAIL_SMTP_USER=your-email@example.com
|
||||
EMAIL_SMTP_PASSWORD=your-smtp-password
|
||||
|
||||
# ============================================================================
|
||||
# User URLs
|
||||
# ============================================================================
|
||||
SEXY_USER_REGISTER_URL_ALLOW_LIST=https://sexy.pivoine.art/signup/verify
|
||||
SEXY_PASSWORD_RESET_URL_ALLOW_LIST=https://sexy.pivoine.art/password/reset
|
||||
|
||||
# ============================================================================
|
||||
# Content Security Policy
|
||||
# ============================================================================
|
||||
SEXY_CONTENT_SECURITY_POLICY_DIRECTIVES__FRAME_SRC=
|
||||
|
||||
# ============================================================================
|
||||
# Frontend Configuration
|
||||
# ============================================================================
|
||||
SEXY_FRONTEND_IMAGE=ghcr.io/valknarxxx/sexy:latest
|
||||
|
||||
# IMPORTANT: These PUBLIC_* variables are BAKED INTO THE BUILD
|
||||
# They cannot be changed at runtime! If you need different values,
|
||||
# you must rebuild the image with the correct values.
|
||||
SEXY_FRONTEND_PUBLIC_API_URL=https://sexy.pivoine.art/api
|
||||
SEXY_FRONTEND_PUBLIC_URL=https://sexy.pivoine.art
|
||||
SEXY_FRONTEND_PUBLIC_UMAMI_ID=
|
||||
|
||||
# Optional: Letterspace integration (also baked into build)
|
||||
SEXY_FRONTEND_LETTERSPACE_API_URL=
|
||||
SEXY_FRONTEND_LETTERSPACE_API_KEY=
|
||||
SEXY_FRONTEND_LETTERSPACE_LIST_ID=
|
||||
|
||||
# ============================================================================
|
||||
# Traefik Configuration
|
||||
# ============================================================================
|
||||
SEXY_TRAEFIK_ENABLED=true
|
||||
SEXY_TRAEFIK_HOST=sexy.pivoine.art
|
||||
Reference in New Issue
Block a user