← Notes

서버 배포 구성

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 컨테이너)

Related Notes

1개

sunshinemoon · 2026