Repository navigation
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
163 lines (157 loc) · 6.72 KB
/
Copy pathdocker-compose.yml
File metadata and controls
163 lines (157 loc) · 6.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# =============================================================================
# Louez — one-command self-host
# =============================================================================
# `docker compose up -d` starts a complete standalone instance on
# http://localhost:3000 with zero configuration: bundled MySQL, MinIO and
# background removal, automatic schema setup at boot, the storefront at the
# root of the site and the dashboard under /dashboard. Every value below can be
# overridden from a .env file next to this compose file.
#
# Custom domain: set NEXT_PUBLIC_APP_URL and AUTH_URL to your public URL and
# put a TLS reverse proxy in front of port 3000.
# Multi-tenant (subdomain-routed) deployments: set LOUEZ_MODE=platform and
# see .env.example for the full configuration surface.
services:
louez:
image: synapsr/louez:${LOUEZ_IMAGE_TAG:-latest}
# To run from source instead of the published image, replace `image:` with:
# build:
# context: .
# dockerfile: docker/Dockerfile.web
# target: app
ports:
- "${LOUEZ_PORT:-3000}:3000"
environment:
LOUEZ_MODE: ${LOUEZ_MODE:-standalone}
DATABASE_URL: mysql://louez:${DB_PASSWORD:-louez}@db:3306/louez
NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL:-http://localhost:3000}
NEXT_PUBLIC_APP_DOMAIN: ${NEXT_PUBLIC_APP_DOMAIN:-localhost:3000}
NEXT_PUBLIC_DASHBOARD_SUBDOMAIN: ${NEXT_PUBLIC_DASHBOARD_SUBDOMAIN:-app}
AUTH_URL: ${AUTH_URL:-http://localhost:3000}
AUTH_TRUST_HOST: "true"
# Leave empty to let the container generate and persist a secret in the
# louez_data volume (sessions then survive container recreation).
AUTH_SECRET: ${AUTH_SECRET:-}
# Bundled MinIO object storage — private to this compose network, with
# images served same-origin by the app under /files.
S3_ENDPOINT: http://minio:9000
S3_REGION: us-east-1
S3_BUCKET: louez
S3_ACCESS_KEY_ID: ${MINIO_ROOT_USER:-louez}
S3_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD:-louez-minio-secret}
S3_PUBLIC_URL: /files
# Private OSS worker included below. Direct background removal is ready
# without an API key; GPT enhancement remains optional.
AI_IMAGE_BACKGROUND_REMOVAL_URL: http://background-removal:7000
AI_IMAGE_BACKGROUND_REMOVAL_TOKEN: ${BACKGROUND_REMOVAL_API_TOKEN:-}
AI_IMAGE_OPENAI_API_KEY: ${AI_IMAGE_OPENAI_API_KEY:-}
AI_IMAGE_MODEL: ${AI_IMAGE_MODEL:-}
AI_IMAGE_QUALITY: ${AI_IMAGE_QUALITY:-}
AI_IMAGE_ENHANCE_CREDITS: ${AI_IMAGE_ENHANCE_CREDITS:-}
AI_IMAGE_USD_PER_IMAGE: ${AI_IMAGE_USD_PER_IMAGE:-}
AI_IMAGE_DEBUG_ENABLED: ${AI_IMAGE_DEBUG_ENABLED:-}
# Optional integrations — set them in .env when you need them.
SMTP_HOST: ${SMTP_HOST:-}
SMTP_PORT: ${SMTP_PORT:-587}
SMTP_SECURE: ${SMTP_SECURE:-false}
SMTP_USER: ${SMTP_USER:-}
SMTP_PASSWORD: ${SMTP_PASSWORD:-}
SMTP_FROM: ${SMTP_FROM:-}
AUTH_GOOGLE_ID: ${AUTH_GOOGLE_ID:-}
AUTH_GOOGLE_SECRET: ${AUTH_GOOGLE_SECRET:-}
STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY:-}
STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET:-}
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY: ${NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY:-}
# Browser configuration is validated and injected by the server at
# runtime. Keep the explicit list aligned with apps/web's public env
# schema; NEXT_PUBLIC_APP_VERSION is omitted because it identifies the
# immutable image rather than the deployment.
NEXT_PUBLIC_FORMAT_LOCALE: ${NEXT_PUBLIC_FORMAT_LOCALE:-}
NEXT_PUBLIC_VAPID_PUBLIC_KEY: ${NEXT_PUBLIC_VAPID_PUBLIC_KEY:-}
VAPID_PRIVATE_KEY: ${VAPID_PRIVATE_KEY:-}
VAPID_SUBJECT: ${VAPID_SUBJECT:-}
NEXT_PUBLIC_POSTHOG_KEY: ${NEXT_PUBLIC_POSTHOG_KEY:-}
NEXT_PUBLIC_POSTHOG_HOST: ${NEXT_PUBLIC_POSTHOG_HOST:-https://eu.i.posthog.com}
NEXT_PUBLIC_UMAMI_SCRIPT_URL: ${NEXT_PUBLIC_UMAMI_SCRIPT_URL:-}
NEXT_PUBLIC_UMAMI_WEBSITE_ID: ${NEXT_PUBLIC_UMAMI_WEBSITE_ID:-}
NEXT_PUBLIC_GLEAP_API_KEY: ${NEXT_PUBLIC_GLEAP_API_KEY:-}
NEXT_PUBLIC_OPENREPLAY_PROJECT_KEY: ${NEXT_PUBLIC_OPENREPLAY_PROJECT_KEY:-}
NEXT_PUBLIC_OPENREPLAY_STOREFRONT_PROJECT_KEY: ${NEXT_PUBLIC_OPENREPLAY_STOREFRONT_PROJECT_KEY:-}
NEXT_PUBLIC_OPENREPLAY_INGEST_POINT: ${NEXT_PUBLIC_OPENREPLAY_INGEST_POINT:-}
NEXT_PUBLIC_FROMHELLO_API_URL: ${NEXT_PUBLIC_FROMHELLO_API_URL:-}
NEXT_PUBLIC_FROMHELLO_KEY: ${NEXT_PUBLIC_FROMHELLO_KEY:-}
NEXT_PUBLIC_FROMHELLO_COOKIE_DOMAIN: ${NEXT_PUBLIC_FROMHELLO_COOKIE_DOMAIN:-}
CRON_SECRET: ${CRON_SECRET:-}
volumes:
- louez_data:/app/data
depends_on:
db:
condition: service_healthy
minio:
condition: service_healthy
minio-init:
condition: service_completed_successfully
background-removal:
condition: service_healthy
restart: unless-stopped
background-removal:
image: synapsr/louez-background-removal:${LOUEZ_IMAGE_TAG:-latest}
# The published image is pulled in normal installs. Keeping the build
# definition makes source checkouts self-contained before a release exists.
build:
context: .
dockerfile: apps/background-removal/Dockerfile
environment:
BACKGROUND_REMOVAL_API_TOKEN: ${BACKGROUND_REMOVAL_API_TOKEN:-}
expose:
- "7000"
restart: unless-stopped
db:
image: mysql:8.4
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-louez-root}
MYSQL_DATABASE: louez
MYSQL_USER: louez
MYSQL_PASSWORD: ${DB_PASSWORD:-louez}
volumes:
- mysql_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
minio:
image: minio/minio:latest
command: server /data
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-louez}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-louez-minio-secret}
volumes:
- minio_data:/data
healthcheck:
test: ["CMD-SHELL", "curl -sf http://localhost:9000/minio/health/live || exit 1"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
# One-shot bucket bootstrap. The bucket stays private: the app streams
# assets through /files with its own credentials.
minio-init:
image: minio/mc:latest
depends_on:
minio:
condition: service_healthy
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-louez}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-louez-minio-secret}
entrypoint: ["/bin/sh", "-c"]
command:
- |
mc alias set local http://minio:9000 "$$MINIO_ROOT_USER" "$$MINIO_ROOT_PASSWORD" &&
mc mb --ignore-existing local/louez
restart: "no"
volumes:
louez_data:
mysql_data:
minio_data: