Compare commits
3
Commits
c5131580e4
...
1c8835bcf3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1c8835bcf3 | ||
|
|
2750602fa5 | ||
|
|
3de764a055 |
@@ -36,7 +36,6 @@ declare -A DATABASES=(
|
||||
[blinko_db]="blinko:blinko"
|
||||
[gitea_db]="gitea:gitea"
|
||||
[mattermost_db]="mattermost:mattermost"
|
||||
[sexy_db]="sexy:sexy"
|
||||
[immich_db]="immich:immich"
|
||||
[coolify_db]="coolify:coolify"
|
||||
)
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
services:
|
||||
litellm:
|
||||
image: docker.litellm.ai/berriai/litellm:main-stable
|
||||
container_name: litellm
|
||||
volumes:
|
||||
- ./config.yaml:/app/config.yaml
|
||||
command:
|
||||
- "--config=/app/config.yaml"
|
||||
environment:
|
||||
DATABASE_URL: "postgresql://litellm:litellm@litellm_db:5432/litellm"
|
||||
LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY}
|
||||
LITELLM_SALT_KEY: ${LITELLM_SALT_KEY}
|
||||
NVIDIA_NIM_API_KEY: ${NVIDIA_NIM_API_KEY}
|
||||
NO_DOCS: "True"
|
||||
NO_REDOC: "True"
|
||||
depends_on:
|
||||
- db
|
||||
restart: always
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.litellm-redirect-web-secure.redirectscheme.scheme=https"
|
||||
- "traefik.http.routers.litellm-web.middlewares=litellm-redirect-web-secure"
|
||||
- "traefik.http.routers.litellm-web.rule=Host(`${TRAEFIK_HOST}`)"
|
||||
- "traefik.http.routers.litellm-web.entrypoints=web"
|
||||
- "traefik.http.routers.litellm-web-secure.rule=Host(`${TRAEFIK_HOST}`)"
|
||||
- "traefik.http.routers.litellm-web-secure.tls.certresolver=resolver"
|
||||
- "traefik.http.routers.litellm-web-secure.entrypoints=web-secure"
|
||||
- "traefik.http.routers.litellm-web-secure.middlewares=security-headers@file"
|
||||
- "traefik.http.services.litellm-web-secure.loadbalancer.server.port=4000"
|
||||
- "traefik.docker.network=${NETWORK_NAME}"
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
networks:
|
||||
- compose_network
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- python3 -c "import urllib.request; urllib.request.urlopen('http://localhost:4000/health/liveliness')"
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
db:
|
||||
image: postgres:16
|
||||
container_name: litellm_db
|
||||
environment:
|
||||
POSTGRES_DB: litellm
|
||||
POSTGRES_USER: litellm
|
||||
POSTGRES_PASSWORD: litellm
|
||||
volumes:
|
||||
- ../.data/litellm/db:/var/lib/postgresql/data
|
||||
restart: always
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
networks:
|
||||
- compose_network
|
||||
networks:
|
||||
compose_network:
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
||||
@@ -1,9 +0,0 @@
|
||||
model_list:
|
||||
- model_name: qwen3.5
|
||||
litellm_params:
|
||||
model: nvidia_nim/qwen/qwen3.5-397b-a17b
|
||||
drop_params: true
|
||||
- model_name: qwen3-coder
|
||||
litellm_params:
|
||||
model: nvidia_nim/qwen/qwen3-coder-480b-a35b-instruct
|
||||
drop_params: true
|
||||
@@ -1,58 +0,0 @@
|
||||
services:
|
||||
ghost:
|
||||
image: ghost:latest
|
||||
container_name: palina_ghost
|
||||
restart: always
|
||||
environment:
|
||||
database__client: mysql
|
||||
database__connection__host: palina_db
|
||||
database__connection__user: root
|
||||
database__connection__password: palina
|
||||
database__connection__database: palina
|
||||
mail__transport: SMTP
|
||||
mail__options__service: Mailpit
|
||||
mail__options__host: mailpit
|
||||
mail__options__port: 1025
|
||||
mail__options__secure: false
|
||||
mail__options__auth__user: ""
|
||||
mail__options__auth__pass: ""
|
||||
url: https://${TRAEFIK_HOST}
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- ../.data/ghost/content:/var/lib/ghost/content
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.palina-redirect-web-secure.redirectscheme.scheme=https"
|
||||
- "traefik.http.routers.palina-web.middlewares=palina-redirect-web-secure"
|
||||
- "traefik.http.routers.palina-web.rule=Host(`${TRAEFIK_HOST}`)"
|
||||
- "traefik.http.routers.palina-web.entrypoints=web"
|
||||
- "traefik.http.routers.palina-web-secure.rule=Host(`${TRAEFIK_HOST}`)"
|
||||
- "traefik.http.routers.palina-web-secure.tls.certresolver=resolver"
|
||||
- "traefik.http.routers.palina-web-secure.entrypoints=web-secure"
|
||||
- "traefik.http.routers.palina-web-secure.middlewares=security-headers@file"
|
||||
- "traefik.http.services.palina-web-secure.loadbalancer.server.port=2368"
|
||||
- "traefik.docker.network=${NETWORK_NAME}"
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
networks:
|
||||
- compose_network
|
||||
db:
|
||||
image: mysql:8.0
|
||||
container_name: palina_db
|
||||
restart: always
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: palina
|
||||
volumes:
|
||||
- ../.data/ghost/db:/var/lib/mysql
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
networks:
|
||||
- compose_network
|
||||
networks:
|
||||
compose_network:
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
||||
@@ -1,110 +0,0 @@
|
||||
services:
|
||||
sexy:
|
||||
image: dev.pivoine.art/valknar/sexy:latest
|
||||
container_name: sexy
|
||||
user: node
|
||||
working_dir: /home/node/app/packages/frontend
|
||||
command: ["node", "build/index.js"]
|
||||
environment:
|
||||
TZ: ${TIMEZONE:-Europe/Amsterdam}
|
||||
NODE_ENV: production
|
||||
PUBLIC_API_URL: https://${TRAEFIK_HOST}/api
|
||||
PUBLIC_URL: https://${TRAEFIK_HOST}
|
||||
PUBLIC_UMAMI_ID: ${UMAMI_ID}
|
||||
PUBLIC_UMAMI_SCRIPT: ${UMAMI_SCRIPT}
|
||||
restart: always
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.sexy-redirect-web-secure.redirectscheme.scheme=https"
|
||||
- "traefik.http.routers.sexy-web.middlewares=sexy-redirect-web-secure"
|
||||
- "traefik.http.routers.sexy-web.rule=Host(`${TRAEFIK_HOST}`)"
|
||||
- "traefik.http.routers.sexy-web.entrypoints=web"
|
||||
- "traefik.http.routers.sexy-web-secure.rule=Host(`${TRAEFIK_HOST}`)"
|
||||
- "traefik.http.routers.sexy-web-secure.tls.certresolver=resolver"
|
||||
- "traefik.http.routers.sexy-web-secure.entrypoints=web-secure"
|
||||
- "traefik.http.middlewares.sexy-compress.compress=true"
|
||||
- "traefik.http.routers.sexy-web-secure.middlewares=sexy-compress"
|
||||
- "traefik.http.services.sexy-web-secure.loadbalancer.server.port=3000"
|
||||
- "traefik.docker.network=${NETWORK_NAME}"
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
networks:
|
||||
- compose_network
|
||||
backend:
|
||||
image: dev.pivoine.art/valknar/sexy-backend:latest
|
||||
container_name: sexy_backend
|
||||
environment:
|
||||
TZ: ${TIMEZONE:-Europe/Amsterdam}
|
||||
NODE_ENV: production
|
||||
PORT: 4000
|
||||
DATABASE_URL: postgresql://${DB_USER:-sexy}:${DB_PASSWORD:-sexy}@sexy_db:5432/${DB_NAME:-sexy}
|
||||
REDIS_URL: redis://sexy_redis:6379
|
||||
UPLOAD_DIR: /data/uploads
|
||||
CORS_ORIGIN: https://${TRAEFIK_HOST}
|
||||
COOKIE_SECRET: ${COOKIE_SECRET}
|
||||
SESSION_COOKIE_SECURE: "true"
|
||||
SESSION_COOKIE_SAME_SITE: strict
|
||||
SESSION_COOKIE_DOMAIN: ${TRAEFIK_HOST}
|
||||
PUBLIC_URL: https://${TRAEFIK_HOST}
|
||||
SMTP_HOST: ${SMTP_HOST:-mailpit}
|
||||
SMTP_PORT: ${SMTP_PORT:-1025}
|
||||
SMTP_SECURE: ${SMTP_SECURE:-false}
|
||||
SMTP_USER: ${SMTP_USER:-}
|
||||
SMTP_PASS: ${SMTP_PASS:-}
|
||||
EMAIL_FROM: ${EMAIL_FROM:-noreply@sexy.pivoine.art}
|
||||
volumes:
|
||||
- ../.data/sexy/uploads:/data/uploads
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
restart: always
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.sexy-backend-redirect-web-secure.redirectscheme.scheme=https"
|
||||
- "traefik.http.routers.sexy-backend-web.middlewares=sexy-backend-redirect-web-secure"
|
||||
- "traefik.http.routers.sexy-backend-web.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/api`)"
|
||||
- "traefik.http.routers.sexy-backend-web.entrypoints=web"
|
||||
- "traefik.http.routers.sexy-backend-web-secure.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/api`)"
|
||||
- "traefik.http.routers.sexy-backend-web-secure.tls.certresolver=resolver"
|
||||
- "traefik.http.routers.sexy-backend-web-secure.entrypoints=web-secure"
|
||||
- "traefik.http.middlewares.sexy-backend-strip.stripprefix.prefixes=/api"
|
||||
- "traefik.http.middlewares.sexy-backend-compress.compress=true"
|
||||
- "traefik.http.routers.sexy-backend-web-secure.middlewares=sexy-backend-strip,sexy-backend-compress"
|
||||
- "traefik.http.services.sexy-backend-web-secure.loadbalancer.server.port=4000"
|
||||
- "traefik.docker.network=${NETWORK_NAME}"
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
networks:
|
||||
- compose_network
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: sexy_redis
|
||||
restart: always
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
networks:
|
||||
- compose_network
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
container_name: sexy_db
|
||||
environment:
|
||||
POSTGRES_DB: ${DB_NAME:-sexy}
|
||||
POSTGRES_USER: ${DB_USER:-sexy}
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD:-sexy}
|
||||
volumes:
|
||||
- ../.data/sexy/db:/var/lib/postgresql/data
|
||||
restart: always
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
networks:
|
||||
- compose_network
|
||||
networks:
|
||||
compose_network:
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
||||
Reference in New Issue
Block a user