Merge pull request #39 from 0xdevcollins/feat/dashboard #9
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: | |
push: | |
branches: [main] | |
name: π Deploy Next.js AppRouter Website | |
jobs: | |
web-deploy: | |
name: π Deploy Next.js App | |
runs-on: ubuntu-latest | |
steps: | |
- name: π Get latest code | |
uses: actions/checkout@v4 | |
- name: Use Node.js 20 | |
uses: actions/setup-node@v2 | |
with: | |
node-version: '20' | |
- name: π¨ Install and Build Project | |
run: | | |
yarn install | |
yarn build | |
- name: Set up SSH | |
run: | | |
mkdir -p ~/.ssh | |
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa | |
chmod 600 ~/.ssh/id_rsa | |
ssh-keyscan -H ${{ secrets.SERVER_HOST }} >> ~/.ssh/known_hosts | |
chmod 644 ~/.ssh/known_hosts | |
- name: π Deploy via SSH | |
uses: appleboy/ssh-action@v0.1.7 | |
with: | |
host: ${{ secrets.SERVER_HOST }} | |
username: ${{ secrets.SERVER_USER }} | |
key: ${{ secrets.SSH_PRIVATE_KEY }} | |
port: 22 | |
script: | | |
# Ensure required tools are installed | |
node -v || (echo "Node.js not found. Installing..." && sudo apt update && sudo apt install -y nodejs yarn) | |
yarn -v || sudo npm install -g yarn | |
pm2 -v || sudo npm install -g pm2 | |
# Navigate to project directory or clone if not exists | |
PROJECT_DIR="/home/${{ secrets.SERVER_USER }}/public_html" | |
if [ ! -d "$PROJECT_DIR" ]; then | |
echo "Project directory not found. Cloning repository..." | |
git clone ${{ secrets.REPO_URL }} $PROJECT_DIR | |
fi | |
cd $PROJECT_DIR | |
# Pull latest changes | |
git fetch origin | |
git reset --hard origin/main | |
# Install dependencies and rebuild | |
yarn install --production | |
yarn build | |
# Ensure `.next` build output is served by PM2 | |
pm2 delete all || true | |
pm2 start yarn --name "next-app" -- start | |
# Save PM2 process list for server reboots | |
pm2 save |