Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 디자인 패턴
- CoffiesVol.02
- LV0
- 데이터 베이스
- LV.02
- LV1
- 이것이 자바다
- 연습문제
- 알고리즘
- GIT
- 포트폴리오
- docker
- JPA
- 일정관리프로젝트
- 일정관리 프로젝트
- Join
- CI/CD
- SQL
- Lv.0
- spring boot
- 코테
- LV01
- mysql
- Java
- LV02
- Til
- 프로그래머스
- LV03
- S3
- Redis
Archives
- Today
- Total
코드 저장소.
서브도메인(API) 기반 Nginx HTTPS 적용 with Docker + Certbot 본문
목차
1.목표
2.사전구성
3.설정 구성
4.인증서 발급 과정
5.이후 과정
6. 추가적인 팁
1.목표
- 메인 도메인: schedulemanagement.site → Vercel에서 프론트 호스팅
- API 서브도메인: api.schedulemanagement.site → Lightsail에서 백엔드 운영 (Spring Boot + Nginx)
- HTTPS 기반으로 보안 통신 적용
- Docker 기반으로 전체 인프라 구성
2. 사전 구성
- 도메인: 가비아에서 구매
- DNS는 AWS Route 53 사용 중
- Route 53에서 api.schedulemanagement.site → Lightsail 퍼블릭 IP로 A 레코드 등록
- Nginx, Spring Boot, Kafka 등은 Docker Compose로 관리
- 인증서는 Certbot + Docker 방식으로 발급
3. 설정 구성
schedule-app/
├── certbot/ │
├── conf/ # 인증서 저장 위치 (마운트됨) │
└── www/ # 인증 파일 경로 (webroot)
├── nginx/ │
└── nginx.conf # nginx 설정
└── docker-compose.dev.yml
Docker-Compose.dev.yml 에서 Nginx와 cerbot의 구성 내용
services:
nginx:
image: nginx:alpine
ports:
- "80:80" - "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
depends_on:
- backend
certbot:
image: certbot/certbot
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do sleep 6h & wait $${!}; certbot renew; done'"
nginx.conf 설정
server {
listen 80;
server_name api.schedulemanagement.site;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
# 인증서 발급 후 아래 블록 주석 해제
server {
listen 443 ssl;
server_name api.schedulemanagement.site;
ssl_certificate /etc/letsencrypt/live/api.schedulemanagement.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.schedulemanagement.site/privkey.pem;
location /api/ { proxy_pass http://backend:8082/api/; ... }
}
4. 인증서 발급 순서
4-1. HTTPS 블록은 주석 처리
# server { # listen 443 ssl; # ... # }
4-2. 도커 컴포즈로 Nginx 실행
docker compose up -d
4-3. well-known 접근 테스트
mkdir -p ./certbot/www/.well-known/acme-challenge echo "test-ok" > ./certbot/www/.well-known/acme-challenge/test.txt curl http://api.schedulemanagement.site/.well-known/acme-challenge/test.txt # → "test-ok" 응답 확인
4-4. 인증서 발급(docker cerbot)
docker run
--rm \ -v $(pwd)/certbot/conf:/etc/letsencrypt \
-v $(pwd)/certbot/www:/var/www/certbot \ certbot/certbot certonly \
--webroot \ --webroot-path=/var/www/certbot \
-d api.schedulemanagement.site \
--email your@email.com \
--agree-tos \ --no-eff-email
5. 이후 작업
- 인증서 발급 성공 후 nginx.conf에서 HTTPS 블록 주석 해제
- Nginx 다시 실행:
docker compose restart nginx
- HTTPS 정상 작동 확인:
6. 기타 팁
- certbot은 renew 주기적 실행 중 (entrypoint로 설정)
- 필요 시 nginx -t → 설정 테스트 후 reload
- Route 53에 A 레코드 등록되어 있어야 DNS 인증 통과됨
'DevOps > Docker' 카테고리의 다른 글
Docker (0) | 2024.09.05 |
---|---|
도커 컴포즈 사용법 (0) | 2024.06.23 |
docker -access denied for user 'root'@'localhost' (using password: yes) 에러 (0) | 2024.05.15 |