Skip to content

Digital Ocean Strapi Deploy #25

Digital Ocean Strapi Deploy

Digital Ocean Strapi Deploy #25

Workflow file for this run

name: Test Workflow
on:
push:
paths:
- 'backend/**'
branches:
# - 'main'
- 'update/docker-be'
workflow_dispatch:
jobs:
# path_to_registry:
# runs-on: ubuntu-22.04
# steps:
# - name: Checkout repository
# uses: actions/checkout@v4
# - name: Set up Docker Buildx
# uses: docker/setup-buildx-action@v3
# - name: Create .env file
# run: |
# echo "DATABASE_URL=${{ secrets.DATABASE_URL }}" >> server/.env
# echo "JWT_SECRET=${{ secrets.JWT_SECRET }}" >> server/.env
# echo "APP_KEYS=${{ secrets.APP_KEYS }}" >> server/.env
# echo "NODE_ENV=${{ secrets.NODE_ENV }}" >> server/.env
# echo "AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }}" >> server/.env
# echo "AWS_ACCESS_SECRET=${{ secrets.AWS_ACCESS_SECRET }}" >> server/.env
# echo "AWS_BUCKET_NAME=${{ secrets.AWS_BUCKET_NAME }}" >> server/.env
# echo "AWS_REGION=${{ secrets.AWS_REGION }}" >> server/.env
# echo "DATABASE_USERNAME=${{ secrets.DATABASE_USERNAME }}" >> server/.env
# echo "DATABASE_PASSWORD=${{ secrets.DATABASE_PASSWORD }}" >> server/.env
# echo "DATABASE_NAME=${{ secrets.DATABASE_NAME }}" >> server/.env
# - name: Login to Docker Hub
# uses: docker/login-action@v3
# with:
# username: ${{ secrets.DOCKERHUB_USERNAME }}
# password: ${{ secrets.DOCKERHUB_TOKEN }}
# - name: Build and push "Strapi" Docker image using docker-compose
# run: |
# docker-compose -f server/docker-compose.yml build
# docker-compose -f server/docker-compose.yml push
deploy_to_remote:
# needs: path_to_registry
runs-on: ubuntu-22.04
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up SSH key for remote access
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -t rsa ${{ secrets.SERVER_IP }} >> ~/.ssh/known_hosts
- name: Copy repository to remote server
run: |
ssh ${{ secrets.SERVER_USERNAME }}@${{ secrets.SERVER_IP }} << EOF
rm -rf ~/nextjs-portfolio
mkdir -p ~/nextjs-portfolio
EOF
scp -r server ${{ secrets.SERVER_USERNAME }}@${{ secrets.SERVER_IP }}:~/nextjs-portfolio/
- name: Create .env file on remote server
run: |
ssh ${{ secrets.SERVER_USERNAME }}@${{ secrets.SERVER_IP }} << 'EOF'
cat > ~/nextjs-portfolio/server/.env << 'ENV_EOF'
DATABASE_URL=${{ secrets.DATABASE_URL }}
JWT_SECRET=${{ secrets.JWT_SECRET }}
API_TOKEN_SALT=${{ secrets.API_TOKEN_SALT }}
APP_KEYS=${{ secrets.APP_KEYS }}
NODE_ENV=${{ secrets.NODE_ENV }}
AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_ACCESS_SECRET=${{ secrets.AWS_ACCESS_SECRET }}
AWS_BUCKET_NAME=${{ secrets.AWS_BUCKET_NAME }}
AWS_REGION=${{ secrets.AWS_REGION }}
DATABASE_USERNAME=${{ secrets.DATABASE_USERNAME }}
DATABASE_PASSWORD=${{ secrets.DATABASE_PASSWORD }}
DATABASE_NAME=${{ secrets.DATABASE_NAME }}
ENV_EOF
EOF
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Deploy to remote server
timeout-minutes: 10
run: |
ssh ${{ secrets.SERVER_USERNAME }}@${{ secrets.SERVER_IP }} << EOF
cd ~/nextjs-portfolio/server
docker compose -f docker-compose.yml pull
docker compose -f docker-compose.yml up -d
EOF
# - name: Clean up remote .env
# run: |
# ssh ${{ secrets.SERVER_USERNAME }}@${{ secrets.SERVER_IP }} "rm ~/nextjs-portfolio/.env"