프로젝트 개발 표류기 (1)

이강희·2025년 12월 8일

개발표류기

목록 보기
1/2

도메인을 구매하여 Oracle Cloud와 연동하시다.

개발 목표

  1. nginx로 reverse proxy하는 것을 목표로 합니다.
  2. docker 내부에 nginx를 위치하여 경량화하여 작업합니다 (cerbot 설정을 커스텀합니다)
  3. SSL/TLS (전송층에서 서버 인증 장치를 만듭니다.

소스코드

services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./certbot/www:/var/www/certbot
      - ./certbot/conf:/etc/letsencrypt
    depends_on:
      - spring
    restart: always
    networks:
      - proxy

  certbot:
    image: certbot/certbot
    container_name: certbot
    volumes:
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot
    entrypoint: /bin/sh
    networks:
      - proxy

  postgres:
    image: postgres:16
    container_name: postgres-db
    environment:
      POSTGRES_USER: 비밀이지롱
      POSTGRES_PASSWORD: 비밀이지롱
      POSTGRES_DB: 비밀이지롱
    volumes:
      - ./postgres/data:/var/lib/postgresql/data
    restart: always
    networks:
      - proxy

  spring:
    image: spring-app:latest
    container_name: spring-app
    restart: always
    expose:
      - "8080"
    networks:
      - proxy

networks:
  proxy:
    driver: bridge

github action을 하시다.

개발목표

  1. 서버 내부에 스프링을 동작시크는 것을 목표로 합니다.
  2. 소규모 프로젝트임으로 최소화하여 develop 서버 없이 운영 서버로만 진행합니다.

헤맨 내용

  1. 딱히 없지만 적어보자면 spring-app.tar에 권한을 부여하지 않으면 업로드 할 수 없습니다. 유의하세요
  2. Host는 서버 host 번호, user는 서버 운영체제 이름, ssh 키는 private 키, password는 꼭 하세요 (sass에서 발급 받는 key 말고 개인이 발급하는 것을 권유드립니다.)

소스코드

name: Deploy Spring Boot Application

on:
  push:
    branches: [ "main" ]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up JDK
        uses: actions/setup-java@v3
        with:
          java-version: 17
          distribution: temurin

      - name: Build Spring Boot JAR
        run: ./gradlew clean build -x test

      - name: Build Docker image
        run: docker build -t spring-app:latest .

      - name: Save Docker image to tar
        run: docker save spring-app:latest -o spring-app.tar

      - name: Fix permissions for tar
        run: sudo chmod 644 spring-app.tar

      - name: Upload image to server
        uses: appleboy/scp-action@v0.1.6
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SERVER_SSH_KEY }}
          passphrase: ${{ secrets.SERVER_SSH_KEY_PASSPHRASE }}
          source: spring-app.tar
          target: ~/pinebase/

      - name: Restart spring container on server
        uses: appleboy/ssh-action@v0.1.7
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SERVER_SSH_KEY }}
          passphrase: ${{ secrets.SERVER_SSH_KEY_PASSPHRASE }}
          script: |
            cd ~/pinebase
            sudo docker load -i spring-app.tar
            sudo docker compose up -d spring

이외에도 많지만 사실 기억이 안나요,, 다들 이런 경험 있으시잖아요,, 공감 부탁 드립니다.

0개의 댓글