nginx/default.conf
(리버스 프록시 + HTTPS 설정용)nginx/default.conf
파일을 다음처럼 만들어주세요:
server {
listen 80;
server_name howtoeat.ai.kr www.howtoeat.ai.kr;
location /.well-known/acme-challenge/ {
root /var/lib/letsencrypt/;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name howtoeat.ai.kr www.howtoeat.ai.kr;
ssl_certificate /etc/letsencrypt/live/howtoeat.ai.kr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/howtoeat.ai.kr/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location /api/ {
rewrite ^/api(/.*)$ $1 break;
proxy_pass <http://backend:8080/>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
proxy_pass <http://frontend:3000/>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
docker-compose.yml
당신의 기존 구성에 nginx + certbot 서비스, 볼륨만 추가된 완전 버전입니다:
version: '3.8'
services:
backend:
image: jay1261/howtoeat-back:latest
container_name: backend
ports:
- "8080:8080"
environment:
DATASOURCE_URL: jdbc:mysql://howtoeat.ctsu8qq6enj7.ap-northeast-2.rds.amazonaws.com:3306/howtoeat
DATASOURCE_USERNAME: root
DATASOURCE_PASSWORD: ekdhf1234
restart: always
networks:
- app-network
frontend:
image: jay1261/howtoeat-front:latest
container_name: frontend
ports:
- "3000:3000"
environment:
- REACT_APP_BACKEND_URL=http://backend:8080
depends_on:
- backend
restart: always
networks:
- app-network
nginx:
image: nginx:latest
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
- certbot-etc:/etc/letsencrypt
- certbot-var:/var/lib/letsencrypt
depends_on:
- frontend
- backend
networks:
- app-network
certbot:
image: certbot/certbot
container_name: certbot
volumes:
- certbot-etc:/etc/letsencrypt
- certbot-var:/var/lib/letsencrypt
command: certonly --webroot --webroot-path=/var/lib/letsencrypt \\
--email [email protected] --agree-tos --no-eff-email \\
-d howtoeat.ai.kr -d www.howtoeat.ai.kr
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
certbot-etc:
certbot-var:
# 1. 컨테이너 빌드 및 실행 (nginx 포함)
docker-compose up -d nginx
# 2. 인증서 발급 (certbot은 한 번만 실행하면 됨)
docker-compose run --rm certbot
# 3. 전체 재시작해서 HTTPS 적용
docker-compose down
docker-compose up -d
crontab -e
맨 아래 줄 추가:
0 4 * * * docker-compose run --rm certbot renew --webroot -w /var/lib/letsencrypt && docker-compose restart nginx
시간 설정 | 의미 |
---|---|
0 4 * * * |
매일 새벽 4시에 실행 |
docker-compose run ... |
인증서 만료 여부 확인 후 필요 시 갱신 |
&& docker-compose restart nginx |
갱신되면 nginx 자동 재시작 |