diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml new file mode 100644 index 0000000..9f55605 --- /dev/null +++ b/.github/workflows/deploy-dev.yaml @@ -0,0 +1,61 @@ +name: Test deploy on EC2 + +on: + push: + branches: + - main + - dev + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set environment variables + run: | + if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then + echo "DEPLOY_DIR=/data/MusicCPRFEProd" >> $GITHUB_ENV + echo "IMAGE_NAME=frontend:prod" >> $GITHUB_ENV + echo "CONTAINER_NAME=frontend-prod" >> $GITHUB_ENV + echo "HOST_PORT=3003" >> $GITHUB_ENV + else + echo "DEPLOY_DIR=/data/MusicCPRFEDev" >> $GITHUB_ENV + echo "IMAGE_NAME=frontend:dev" >> $GITHUB_ENV + echo "CONTAINER_NAME=frontend-dev" >> $GITHUB_ENV + echo "HOST_PORT=3000" >> $GITHUB_ENV + fi + + - name: Set up SSH + run: | + mkdir -p ~/.ssh + echo "${{ secrets.EC2_SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts + + - name: Deploy to EC2 + run: | + ssh ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF' + set -e + echo "Deploying to ${{ env.DEPLOY_DIR }}..." + + cd ${{ env.DEPLOY_DIR }} + + echo "Pulling latest changes..." + git pull origin ${{ github.ref_name }} + + echo "Stopping and removing old container" + docker stop ${{ env.CONTAINER_NAME }}|| true + docker rm ${{ env.CONTAINER_NAME }}|| true + + echo "Removing old container" + docker rmi ${{ env.IMAGE_NAME }} || true + + echo "Building new image..." + docker build -t ${{ env.IMAGE_NAME }} . + + echo "Starting new container..." + docker run -d --name ${{ env.CONTAINER_NAME }} -p ${{ env.HOST_PORT }}:3000 ${{ env.IMAGE_NAME }} + EOF diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..694022d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM node:18 + +WORKDIR /app + +COPY package.json package-lock.json ./ +RUN npm install + +COPY . . + +RUN npm run build + +CMD ["npm", "run", "start"] +