서버 배포 구성
infra
3분 읽기서버 배포 구성
DNS
- A 레코드: 도메인 → IP 직접 연결
- CNAME: 도메인 → 다른 도메인 (iptime DDNS 쓸 때)
- 서브도메인은 각각 등록해야 함 (
mail,talk별개) - 확인:
dig talk.datco-sb.kr
nginx
sites-available vs sites-enabled
sites-available/= 설정 파일 보관sites-enabled/= 심볼릭 링크로 활성화된 것만- 끄고 싶으면 링크만 삭제, 파일은 보존
# 활성화
sudo ln -s /etc/nginx/sites-available/talk.conf /etc/nginx/sites-enabled/
# 비활성화
sudo rm /etc/nginx/sites-enabled/talk.conf
리버스 프록시
- nginx가 **도메인(Host 헤더)**으로 요청을 구분해서 내부 서비스로 분배
- 외부 포트(80/443)는 하나의 nginx가 잡고, 도메인별로 다른
proxy_pass
server {
server_name talk.datco-sb.kr;
location / {
proxy_pass http://localhost:9006;
}
}
- Mattermost처럼 WebSocket 쓰는 서비스는
Upgrade,Connection헤더 필요
SSL (certbot / Let's Encrypt)
- webroot 방식:
sudo certbot certonly --webroot -w /var/www/_letsencrypt -d 도메인 - nginx 설정에 아직 없는 인증서 경로를 참조하면 에러남 → 443 블록 주석 처리 → 발급 → 해제
- 90일 유효, 자동 갱신
Docker 포트
- 같은 서버에서 두 프로세스가 같은 포트를 동시에 쓸 수 없음
- 컨테이너 내부는 같아도 호스트 노출 포트는 달라야 함:
9006:9005 docker-compose.override.yml은 포트를 교체가 아니라 추가함 → 포트 변경 용도로 부적합- 환경변수 방식이 나음:
${WEBAPP_PORT:-9005}:9005+.env에서 관리
요청 흐름
사용자 → talk.datco-sb.kr (443)
→ 공유기 (포트포워딩)
→ 서버 nginx (도메인으로 판단)
→ localhost:9006 (Docker 컨테이너)