Nginx 설치
- nginx-proxy: Docker를 사용하여 nginx 리버스 프록시를 실행하는데 사용
- letsencrypt: ssl 인증서 발급
- 두 이미지를 받을 nginx frontend 서버가 필요
- 같은 네트워크로 묶여야함
version: '3'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./docker_volumes/nginx/certs:/etc/nginx/certs:rw
- ./docker_volumes/nginx/html:/usr/share/nginx/html:rw
- ./docker_volumes/nginx/vhost.d:/etc/nginx/vhost.d:rw
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- infra
environment:
- TZ=Asia/Seoul
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: letsencrypt
environment:
- TZ=Asia/Seoul
- NGINX_PROXY_CONTAINER=nginx-proxy
depends_on:
- nginx-proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./docker_volumes/nginx/certs:/etc/nginx/certs:rw
- ./docker_volumes/nginx/vhost.d:/etc/nginx/vhost.d:rw
- ./docker_volumes/nginx/html:/usr/share/nginx/html:rw
- ./docker_volumes/acme.sh:/etc/acme.sh
networks:
- infra
volumes:
certs:
driver: local
driver_opts:
type: none
device: $PWD/docker_volumes/nginx/certs
o: bind
vhostd:
driver: local
driver_opts:
type: none
device: $PWD/docker_volumes/nginx/vhost.d
o: bind
html:
driver: local
driver_opts:
type: none
device: $PWD/docker_volumes/nginx/html
o: bind
FrontEnd
- LETSENCRYPT_HOST에 URL을 넣으면 위의 letsecrypt 컨테이너가 ssl인증서를 발급함
version: '3'
services:
frontend:
image: ss0510s/a303-frontend
container_name: a303-frontend-dev
networks:
- infra
ports:
- "3000:80"
environment:
- VIRTUAL_HOST=${HOST}
- LETSENCRYPT_HOST=${HOST}
- LETSENCRYPT_EMAIL=${EMAIL}
networks:
infra:
external: true
- 잘 발급받았는지 확인하려면 아래 명령어로 로그 확인
docker-container logs letsencrypt
Nginx 설정
- 경로
./docker_volumes/nginx/vhost.d/[인증서 받을 사이트]
- 해당 파일을 수정하고 아래와 같은 명령어로 relaod 하면 설정이 반영됨
docker exec -it nginx-proxy nginx -s reload
location ^~ /.well-known/acme-challenge/ {
auth_basic off;
auth_request off;
allow all;
root /usr/share/nginx/html;
try_files $uri =404;
break;
}
location /api/ {
proxy_pass http://{container이름}:{port번호};
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}