예전에 겪었던 이슈인데 뒤늦게 메모하는거라 에러 로그는 없다...
해결 방법
Nginx 컨테이너가 돌아가고 있어야 인증서를 발급받을 수 있는데(아니면 cannot configure web server인가 에러 뜸)
Nginx 컨테이너가 자꾸만 종료되는 문제 발생
-> nginx.conf에 443포트 설정이 있었는데, 인증서 발급 전이라 nginx 컨테이너가 띄워질 때 인증서를 인식할 수 없어서 Nginx 컨테이너가 종료됐던 것!
server {
listen 443 ssl;
server_name rising-aha.net;
charset utf-8;
ssl_certificate /etc/letsencrypt/live/도메인/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/도메인/privkey.pem;
# /api 경로로 오는 요청을 백엔드 upstream 의 /api 경로로 포워딩
location /api {
}
location /stomp {
}
location / {
}
}
이렇게 443포트 설정이 되어 있었는데, 처음에는 인증서를 불러오지 못해 오류나는 것을 알고 ssl_certificate 부분만 주석처리 했다
-> 똑같이 안됨
그래서 443포트 관련 설정을 모두 지웠더니 Nginx가 종료되지 않고 정상적으로 컨테이너 실행됐다
이제 letsencrypt.sh 실행해서 인증서 발급 받으면 잘 됨!
발급받은 후에 443포트 설정을 추가하고, ssl_certificate에 인증서 경로 설정을 해주면 된다
인증서가 도메인 이름을 기반으로 발급되긴 하는데, 여러번 하다 보면 도메인-001 이런 이름으로 발급되기도 하니까
발급받을 때 로그 잘 확인하고 이름을 맞춰줘야 한다
그리고 인증서가 날아가면 안되므로 + nginx와 cerbot이 인증서를 공유해야 하므로 볼륨 설정도 해야 한다
# docker-compose.yml
nginx:
container_name: nginx_con
restart: on-failure
build:
dockerfile: Dockerfile
context: ./frontend
ports:
- "80:80"
- "443:443" #443포트 꼭 열고
- "8081:8081"
expose:
- "61613"
volumes:
- ./frontend:/client
- ./data/nginx:/etc/nginx/conf.d
- ./data/certbot/conf:/etc/letsencrypt #공유 볼륨
- ./data/certbot/www:/var/www/certbot #공유 볼륨
depends_on:
- backend
certbot:
container_name: certbot-con
image: certbot/certbot:latest
# command: certonly --webroot --webroot-path=/var/www/certbot --email 이메일 --agree-tos --no-eff-email -d 도메인
volumes:
- ./data/certbot/conf:/etc/letsencrypt #공유 볼륨
- ./data/certbot/www:/var/www/certbot #공유 볼륨
인증서 발급은 일주일에 5회인가,,,뭐 아무튼 제한이 있으니 조심하자!!
막 시도해보다가 발급 횟수 제한 걸리면 답 없다!