-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
82 lines (76 loc) · 2.35 KB
/
Copy pathdocker-compose.yml
File metadata and controls
82 lines (76 loc) · 2.35 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
version: "3.9"
x-vars:
domain: &domain kolosov.dev
services:
# 1. Nginx‑entrypoint для kolosov.dev
nginx-entrypoint:
image: nginx:1.27-alpine
container_name: nginx-entrypoint
restart: unless-stopped
depends_on:
- react-app
environment:
DOMAIN: *domain
volumes:
- ./infra/nginx/entrypoint.conf:/etc/nginx/conf.d/default.conf:ro
- certbot-etc:/etc/letsencrypt
- certbot-var:/var/www/certbot
- nginx-pid:/var/run # общий каталог с PID‑файлом
ports:
- "80:80"
- "443:443"
networks:
- web
# ⚠️ Генерируем временный self‑signed, если реальный ещё не выпущен
command: >-
/bin/sh -c 'set -e; \
DOMAIN=$${DOMAIN:-kolosov.dev}; \
CERT_DIR=/etc/letsencrypt/live/$${DOMAIN}; \
CERT=$$CERT_DIR/fullchain.pem; \
KEY=$$CERT_DIR/privkey.pem; \
if [ ! -r "$$CERT" ] || [ ! -r "$$KEY" ]; then \
echo "→ Generating temporary self‑signed cert for $$DOMAIN"; \
rm -rf "$$CERT_DIR" && mkdir -p "$$CERT_DIR"; \
apk add --no-cache openssl >/dev/null 2>&1; \
openssl req -x509 -nodes -newkey rsa:2048 -days 1 \
-subj "/CN=$$DOMAIN" -keyout "$$KEY" -out "$$CERT"; \
fi; \
exec nginx -g "daemon off;"'
# 2. Certbot — авто‑обновление SSL‑сертификатов
certbot:
image: certbot/certbot:latest
container_name: certbot
restart: unless-stopped
depends_on:
- nginx-entrypoint
volumes:
- certbot-etc:/etc/letsencrypt
- certbot-var:/var/www/certbot
- nginx-pid:/var/run:ro
entrypoint: >-
sh -c 'trap exit TERM; while :; do
certbot renew --webroot -w /var/www/certbot --quiet \
--deploy-hook "/bin/sh -c \"PID=/var/run/nginx.pid; [ -f $$PID ] && kill -s HUP $$(cat $$PID) || true\"";
sleep 12h & wait $$!;
done'
networks:
- web
# 3. React‑приложение (c nginx на 8080)
react-app:
build:
context: ./k_undr_constr
dockerfile: Dockerfile
container_name: react-app
restart: unless-stopped
expose:
- "8080"
networks:
- web
# ---- Named volumes ----
volumes:
certbot-etc: {}
certbot-var: {}
nginx-pid: {}
networks:
web:
driver: bridge