기본 콘텐츠로 건너뛰기

OCI에 서버 세팅하기

   


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 백업” 순서입니다.

댓글

이 블로그의 인기 게시물

네이버페이 리뷰 API 연동

네이버 페이 리뷰 API 네이버 측에 문의 하면 sandbox용 인증키를 받습니다. AccessLicense, SecretKey 그리고 받은 파일의 4. WSDL을 열어 주시고 Naver_Pay_API_MallService41_WSDL(sandbox)_20140925파일 압축 풀어주세요 그럼 파일이 BaseType.xsd, CheckoutAPI.wsdl, MallServiceMessage.xsd 세개의 파일이 나옵니다. 네이버페이 리뷰 리스트 가져오는 메소드는 getPurchaseReviewList입니다. BaseType.xsd를 켜신 후 MallID로 검색하면 <xs:complexType name="purchaseReview"> 안쪽의 MallID밑에  <xs:element minOccurs="0" name="PurchaseReviewClassType" type="xs:string"/> 추가해주세요 포토 리뷰를 가져오는 파라미터 값을 보내기 위해서 입니다. <xs:element minOccurs="0" name="Content" type="xs:string"/> 이값도 필요합니다 이미지 경로를 가져오기 위해서 입니다. <xs:complexType name="purchaseReview">     <xs:sequence>       <xs:element minOccurs="0" name="CreateYmdt" type="xs:dateTime"/>       <xs:element minOccurs="0" name="MallID" type="xs:string"/>   <xs:element minOccurs="0" nam...

메이븐으로 라이브러리 인식

 간혹 퍼블릭 jar가 아닌 파일이 있는데 그럴때 쓰면 될듯 <dependency> <groupId> SimpleCryptLib </groupId> <artifactId> SimpleCryptLib </artifactId> <version> 1.1.0 </version> <scope> system </scope> <systemPath> ${basedir}/src/main/webapp/WEB-INF/lib/SimpleCryptLib-1.1.0.jar </systemPath> </dependency> version, scope, systemPath는 꼭 작성해야 한다 groupId, artifactId, version은 암거나 해도 되는거 같음 최근(2021.05.04)스프링 부트    < dependency > < groupId > NiceID </ groupId > < artifactId > NiceID </ artifactId > < version > 1.0 </ version > < scope > system </ scope > < systemPath > ${basedir}/src/main/resources/lib/NiceID.jar </ systemPath > </ dependency > 이걸 추가해주는것도 필요할지도..?? < build > < plugins > < plugin > < groupId > org.springframework.boot </ groupId > < artifactId > spring-bo...

mac 맥 맥북 Brew 완전 삭제

맥북에서 Brew 초기화 Brew를 써서 h2를 쓰려고 하는데 brew install h2가 안되서 이리 저리 알아보다가 완전 삭제 후 다시 설치 하니까 되서 그 방법을 남겨놈 1. 터미널에 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh)" 입력후 y랑 뭐 비번.. 2. /usr/local 폴더에서 Homebrew 폴더 삭제 rm -rf Homebrew/ 권한설정으로 잘.....삭제하고 3. 다시 설치 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" 좀 오래걸리니까 기다려야한다는걸 배움... 출처.... https://discourse.brew.sh/t/error-no-formulae-found-in-taps/8331/9