forked from Noizboy/Mailwave
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
160 lines (151 loc) · 5.09 KB
/
Copy pathdocker-compose.yml
File metadata and controls
160 lines (151 loc) · 5.09 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
name: mailwave
# Mailwave - Easypanel Compose deployment.
#
# Goal:
# - Create one Easypanel service of type "Compose"
# - Point it at this repository
# - Configure environment variables
# - Deploy
#
# Required project env:
# APP_DOMAIN Public host, e.g. mailwave.example.com
# AUTH_URL Full public URL, e.g. https://mailwave.example.com
# POSTGRES_PASSWORD Password for the bundled postgres service
# AUTH_SECRET openssl rand -base64 32
# ENCRYPTION_KEY openssl rand -hex 16 (32+ chars)
#
# Optional project env:
# POSTGRES_USER Defaults to mailwave
# POSTGRES_DB Defaults to mailwave
# AUTH_TRUST_HOST Defaults to true
# NEXT_PUBLIC_APP_VERSION Defaults to 1.0.0
# REDIS_URL Defaults to redis://redis:6379
# TRAEFIK_NETWORK Defaults to easypanel
# TRAEFIK_CERT_RESOLVER Defaults to letsencrypt
# TRAEFIK_HTTP_MIDDLEWARE Defaults to redirect-to-https
#
# Local Docker development now lives in docker-compose.local.yml.
x-database-url: &database-url "postgresql://${POSTGRES_USER:-mailwave}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-mailwave}?schema=public"
x-redis-url: &redis-url "${REDIS_URL:-redis://redis:6379}"
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER:-mailwave}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD must be set in the Easypanel project env}
POSTGRES_DB: ${POSTGRES_DB:-mailwave}
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-mailwave} -d ${POSTGRES_DB:-mailwave}"]
interval: 5s
timeout: 5s
retries: 10
start_period: 5s
networks:
- mailwave-net
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
- redisdata:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 10
start_period: 3s
networks:
- mailwave-net
migrate:
build:
context: .
target: worker
restart: "no"
environment:
DATABASE_URL: *database-url
ENCRYPTION_KEY: ${ENCRYPTION_KEY:?ENCRYPTION_KEY must be set in the Easypanel project env}
entrypoint: ["sh", "-c"]
command:
- |
echo "[migrate] applying prisma migrate deploy"
node_modules/.bin/prisma migrate deploy
depends_on:
postgres:
condition: service_healthy
networks:
- mailwave-net
app:
build:
context: .
target: runner
restart: unless-stopped
environment:
DATABASE_URL: *database-url
AUTH_SECRET: ${AUTH_SECRET:?AUTH_SECRET must be set in the Easypanel project env}
AUTH_URL: ${AUTH_URL:?AUTH_URL must be set in the Easypanel project env}
AUTH_TRUST_HOST: ${AUTH_TRUST_HOST:-true}
ENCRYPTION_KEY: ${ENCRYPTION_KEY:?ENCRYPTION_KEY must be set in the Easypanel project env}
REDIS_URL: *redis-url
NEXT_PUBLIC_APP_VERSION: ${NEXT_PUBLIC_APP_VERSION:-1.0.0}
POSTGRES_HOST: postgres
POSTGRES_PORT: "5432"
REDIS_HOST: redis
REDIS_PORT: "6379"
PORT: "3001"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
migrate:
condition: service_completed_successfully
labels:
- "traefik.enable=true"
- "traefik.docker.network=${TRAEFIK_NETWORK:-easypanel}"
- "traefik.http.routers.mailwave-http.rule=Host(`${APP_DOMAIN:?APP_DOMAIN must be set in the Easypanel project env}`)"
- "traefik.http.routers.mailwave-http.entrypoints=http"
- "traefik.http.routers.mailwave-http.priority=100"
- "traefik.http.routers.mailwave-http.middlewares=${TRAEFIK_HTTP_MIDDLEWARE:-redirect-to-https}"
- "traefik.http.routers.mailwave-https.rule=Host(`${APP_DOMAIN:?APP_DOMAIN must be set in the Easypanel project env}`)"
- "traefik.http.routers.mailwave-https.entrypoints=https"
- "traefik.http.routers.mailwave-https.priority=100"
- "traefik.http.routers.mailwave-https.tls=true"
- "traefik.http.routers.mailwave-https.tls.certresolver=${TRAEFIK_CERT_RESOLVER:-letsencrypt}"
- "traefik.http.services.mailwave.loadbalancer.server.port=3001"
networks:
- mailwave-net
- proxy
worker:
build:
context: .
target: worker
restart: unless-stopped
environment:
DATABASE_URL: *database-url
AUTH_SECRET: ${AUTH_SECRET:?AUTH_SECRET must be set in the Easypanel project env}
ENCRYPTION_KEY: ${ENCRYPTION_KEY:?ENCRYPTION_KEY must be set in the Easypanel project env}
REDIS_URL: *redis-url
POSTGRES_HOST: postgres
POSTGRES_PORT: "5432"
REDIS_HOST: redis
REDIS_PORT: "6379"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
migrate:
condition: service_completed_successfully
networks:
- mailwave-net
networks:
mailwave-net:
driver: bridge
proxy:
external: true
name: ${TRAEFIK_NETWORK:-easypanel}
volumes:
pgdata:
redisdata: