Skip to content

initial commit

initial commit #66

Workflow file for this run

name: Deploy Vue App to Ubuntu Server using Docker
on:
push:
branches:
- master
env:
SERVER_HOST: 211.117.197.184
SERVER_SSH_USER: parkhaein
PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
DOCKER_IMAGE_NAME: kanepark/vue-app
jobs:
build-and-push-docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: |
# 기존 node_modules와 package-lock.json 삭제
rm -rf node_modules
rm -f package-lock.json
# npm 캐시를 정리하여 충돌 방지
npm cache clean --force
# 종속성 재설치
npm install
npm install vue-simple-range-slider
- name: Build the Vue app
run: npm run build
- name: Build Docker image
run: docker build . --file Dockerfile --tag ${{ env.DOCKER_IMAGE_NAME }}:latest
- name: Login to Docker Hub
run: echo "${{ secrets.DOCKER_HUB_TOKEN }}" | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
- name: Push Docker image
run: docker push ${{ env.DOCKER_IMAGE_NAME }}:latest
deploy-to-ubuntu-server:
needs: build-and-push-docker
runs-on: ubuntu-latest
steps:
- name: Deploy to Ubuntu Server
uses: appleboy/ssh-action@master
with:
host: ${{ env.SERVER_HOST }}
username: ${{ env.SERVER_SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: 234
script: |
LOG_DIR="/home/ubuntu/app-logs"
mkdir -p $LOG_DIR
touch $LOG_DIR/app.log
# sudo 명령어에 비밀번호 자동 입력
echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker container prune -f
echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker image prune -af
echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker volume prune -f
echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker system prune -af --volumes
# Docker 이미지 업데이트 및 컨테이너 실행
echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker pull ${{ env.DOCKER_IMAGE_NAME }}:latest
# 기존 컨테이너 중지 및 삭제
if [ "$(sudo docker ps -aq -f name=vue-container)" ]; then
echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker stop vue-container
echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker rm vue-container
fi
# 새로운 컨테이너 실행
echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker run --name vue-container -d -p 60:3000 -e TZ=Asia/Seoul \
-v $LOG_DIR/app.log:/app/logs/app.log ${{ env.DOCKER_IMAGE_NAME }}:latest