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_DOCKER_IMAGE: ghcr.io/umami-software/umami:postgresql-latest
|
||||||
TRACK_TRAEFIK_HOST: umami.pivoine.art
|
TRACK_TRAEFIK_HOST: umami.pivoine.art
|
||||||
TRACK_DB_NAME: umami
|
TRACK_DB_NAME: umami
|
||||||
|
# AWSM
|
||||||
|
AWESOME_TRAEFIK_ENABLED: true
|
||||||
|
AWESOME_COMPOSE_PROJECT_NAME: awesome
|
||||||
|
AWESOME_TRAEFIK_HOST: awesome.pivoine.art
|
||||||
# Sexy
|
# Sexy
|
||||||
SEXY_TRAEFIK_ENABLED: true
|
SEXY_TRAEFIK_ENABLED: true
|
||||||
SEXY_COMPOSE_PROJECT_NAME: sexy
|
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
|
name: falcon
|
||||||
include:
|
include:
|
||||||
- core/compose.yaml
|
- core/compose.yaml
|
||||||
|
- awsm/compose.yaml
|
||||||
- sexy/compose.yaml
|
- sexy/compose.yaml
|
||||||
- gotify/compose.yaml
|
- gotify/compose.yaml
|
||||||
- track/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