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