1. 서버 기본 준비
OCI A1 인스턴스를 만들고 Ubuntu 같은 OS를 설치합니다. A1은 ARM 기반이므로, 사용하는
Docker 이미지와 의존성이 linux/arm64를 지원하는지 먼저 확인해야 해요. 특히 일부 오래된
DB 이미지나 네이티브 모듈은 주의가 필요합니다.
2. 네트워크와 보안 설정
OCI 보안 목록/NSG와 서버 방화벽에서 최소한 80, 443, 22 포트를 정리합니다.
- 80: HTTP 및 인증서 발급
- 443: HTTPS
- 22: SSH 관리용 — 가능하면 내 IP만 허용
앱 컨테이너의 포트(예: 3000, 8080, DB 포트)는 인터넷에 직접 열지 않는 게 핵심입니다.
3. Docker 운영 기반 구성
서버에 Docker와 Docker Compose 플러그인을 설치하고, 프로젝트별 디렉터리를 분리합니다.
예를 들면:
/srv/apps/
promeditor/
other-project/
proxy/
각 프로젝트는 자기 compose.yml, 환경변수 파일, DB 볼륨을 독립적으로 가지게 합니다.
4. 공용 Nginx 리버스 프록시 구성
Nginx는 한 개만 앞단에서 실행하고, 도메인/서브도메인에 따라 내부 컨테이너로 프록시합니
다.
app.example.com → promeditor 웹 컨테이너
api.example.com → promeditor API 컨테이너
project2.example.com → 다른 프로젝트 컨테이너
로컬 테스트 단계에서는 도메인 없이 서버 IP와 임시 포트로 앱을 먼저 확인할 수 있지만,
HTTPS와 정상적인 서브도메인 운영은 도메인 구매 뒤 진행하는 편이 깔끔합니다.
5. 도메인 및 HTTPS 연결
도메인을 구매한 뒤 DNS에서 A 레코드를 OCI 서버 공인 IP로 연결합니다. 와일드카드 방식
(*.example.com)을 쓸지, 필요한 서브도메인을 하나씩 등록할지도 정합니다.
이후 Nginx와 Let’s Encrypt/Certbot(또는 Nginx Proxy Manager, Traefik 등)으로 무료 TLS
인증서를 자동 갱신하게 구성합니다.
6. 배포 자동화
처음에는 서버에서 수동 배포가 되는지 확실히 검증합니다. 그 다음 GitHub Actions를 붙입니
다.
권장 초기 흐름은:
GitHub main push
→ GitHub Actions
→ OCI 서버 SSH 접속
→ 소스 갱신
→ docker compose up -d --build
→ 간단한 상태 확인
배포용 SSH 키, 서버 환경변수, API 키 등은 GitHub Secrets와 서버의 .env로 분리하고 저장
소에 커밋하지 않습니다.
DB는 현재처럼 프로젝트별 Docker Compose에 포함해도 됩니다. 특히 개인 프로젝트나 초기 운영
단계에는 설정과 이관이 쉬워서 좋은 선택이에요. 서버에 PostgreSQL/MySQL 등을 별도 설치할 필
요는 없습니다.
다만 아래 원칙은 꼭 지키는 편이 좋아요.
- DB 포트는 외부 공개하지 않기
- DB 데이터는 반드시 named volume 또는 서버의 명시적 디렉터리에 영속화하기
- 앱과 DB를 서로 다른 Compose 프로젝트로 무조건 분리할 필요는 없음
- 프로젝트별 DB/볼륨/계정은 분리하기
- 백업을 별도로 자동화하기 — 컨테이너 재시작은 문제가 아니지만, 서버 디스크 장애나 실수에
는 백업만이 답입니다
즉, 권장 첫 목표는 “Docker로 앱과 DB를 한 프로젝트 단위로 서버에 수동 기동 → Nginx로 외부
연결 → 도메인·HTTPS → GitHub Actions 자동 배포 → DB 백업” 순서입니다.
댓글
댓글 쓰기