Skip to content

Commit ef083ce

Browse files
committed
feat: add backup database and deploy api ci
1 parent 00b3826 commit ef083ce

File tree

3 files changed

+133
-18
lines changed

3 files changed

+133
-18
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: Backup MariaDB Database FTP
2+
on:
3+
schedule:
4+
- cron: '0 */12 * * *' # Run every 12 hours, backup at 00:00 and 12:00 each day
5+
workflow_dispatch:
6+
7+
jobs:
8+
backup_database:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Checkout repository
12+
uses: actions/checkout@v4
13+
14+
- name: Install MariaDB Client and Gzip
15+
run: sudo apt-get update && sudo apt-get install -y gzip mariadb-client
16+
17+
- name: MySQLDump - Connect Database and Backup MariaDB Database FTP
18+
run: |
19+
mkdir backup_databases && cd backup_databases
20+
FILENAME="database_${{ secrets.DATABASE_DB_NAME }}_backup-$(date +%d-%m-%Y-%H-%M-%S).sql.gz"
21+
mysqldump \
22+
--host='${{ secrets.DATABASE_HOST }}' \
23+
--user='${{ secrets.DATABASE_USERNAME }}' \
24+
--password='${{ secrets.DATABASE_PASSWORD }}' \
25+
--databases ${{ secrets.DATABASE_DB_NAME }} | gzip > $FILENAME
26+
27+
- name: Set the current date and time
28+
run: echo "CURRENT_DATETIME=$(date +%d-%m-%Y-%H-%M-%S)" >> $GITHUB_ENV
29+
30+
- name: Deploy backup .sql to FTP
31+
uses: SamKirkland/[email protected]
32+
with:
33+
server: ${{ secrets.SERVER_FTP_HOST }}
34+
username: ${{ secrets.SERVER_FTP_USERNAME }}
35+
password: ${{ secrets.SERVER_FTP_PASSWORD }}
36+
port: ${{ secrets.SERVER_FTP_PORT }}
37+
protocol: ftp
38+
local-dir: ./backup_databases/
39+
server-dir: backup_databases/
40+
state-name: .ftp-deploy-sync-state-${{ secrets.DATABASE_DB_NAME }}-${{ env.CURRENT_DATETIME }}.json

.github/workflows/deploy-api.yml

Lines changed: 67 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,90 @@
1-
name: 🚀 Deploy api to o2switch
1+
name: 🚀 Deploy API to OVH VPS
22

33
on:
44
push:
55
branches: [ 'main' ]
6+
paths:
7+
- 'api/**'
68
pull_request:
79
branches: [ 'main' ]
10+
paths:
11+
- 'api/**'
812
workflow_dispatch:
913

1014
jobs:
1115
deploy:
1216
runs-on: ubuntu-latest
13-
17+
env:
18+
APP_DIR: /var/www/aparteasy.api.dibodev.com
1419
steps:
1520
- name: 🚚 Get latest code
16-
uses: actions/checkout@v3
21+
uses: actions/checkout@v4
1722

1823
- name: 🚀 Setup Node.js
19-
uses: actions/setup-node@v3
24+
uses: actions/setup-node@v4
2025
with:
21-
node-version: '16.x'
26+
node-version: 18
2227

2328
- name: 🔍 Install dependencies
24-
run: cd api && npm install
29+
run: cd api && npm install
30+
31+
- name: 📝 Setup Production .env File
32+
run: cd api && cp .env.production .env
33+
34+
- name: 📝 Update .env with Secrets
35+
run: |
36+
sed -i "s/APP_KEY=.*/APP_KEY=${{ secrets.APP_KEY }}/" .env
37+
sed -i "s/MYSQL_DATABASE=.*/MYSQL_DATABASE=${{ secrets.DATABASE_DB_NAME }}/" .env
38+
sed -i "s/MYSQL_HOST=.*/MYSQL_HOST=${{ secrets.DATABASE_HOST }}/" .env
39+
sed -i "s/MYSQL_USER=.*/MYSQL_USER=${{ secrets.DATABASE_USERNAME }}/" .env
40+
sed -i "s/MYSQL_PASSWORD=.*/MYSQL_PASSWORD=${{ secrets.DATABASE_PASSWORD }}/" .env
41+
sed -i "s/SMTP_HOST=.*/SMTP_HOST=${{ secrets.SMTP_HOST }}/" .env
42+
sed -i "s/SMTP_PORT=.*/SMTP_PORT=${{ secrets.SMTP_PORT }}/" .env
43+
sed -i "s/SMTP_USERNAME=.*/SMTP_USERNAME=${{ secrets.SMTP_USERNAME }}/" .env
44+
sed -i "s/SMTP_PASSWORD=.*/SMTP_PASSWORD=${{ secrets.SMTP_PASSWORD }}/" .env
45+
sed -i "s/GOOGLE_API_KEY=.*/GOOGLE_API_KEY=${{ secrets.GOOGLE_API_KEY }}/" .env
46+
sed -i "s/GOOGLE_CLIENT_ID=.*/GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }}/" .env
47+
sed -i "s/GOOGLE_CLIENT_SECRET=.*/GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }}/" .env
48+
sed -i "s/GOOGLE_CALLBACK_URL=.*/GOOGLE_CALLBACK_URL=${{ secrets.GOOGLE_CALLBACK_URL }}/" .env
2549
2650
- name: 🧱 Build application
27-
run: cd api && npm run build
51+
run: |
52+
cd api
53+
npm run build
54+
cp .env build/.env
2855
29-
- name: 🛁 Clean install a project
30-
run: cd api/build && npm ci --production
56+
- name: 🛁 Clean install for production
57+
run: cd api/build && npm ci --production --ignore-scripts
3158

32-
- name: 📂 Sync files
33-
uses: SamKirkland/[email protected]
59+
- name: 📤 Deploy to VPS
60+
uses: easingthemes/ssh-deploy@main
3461
with:
35-
server: ${{ secrets.FTP_SERVER }}
36-
username: ${{ secrets.FTP_USERNAME }}
37-
password: ${{ secrets.FTP_PASSWORD }}
38-
port: 21
39-
protocol: ftp
40-
local-dir: ./api/build/
41-
server-dir: aparteasy.api.dibodev.com/app/
62+
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
63+
ARGS: "-azrut --delete"
64+
SOURCE: "api/build/"
65+
REMOTE_HOST: ${{ secrets.SSH_HOST }}
66+
REMOTE_USER: ${{ secrets.SSH_USERNAME }}
67+
REMOTE_PORT: ${{ secrets.SSH_PORT }}
68+
TARGET: ${{ env.APP_DIR }}/html
69+
SCRIPT_BEFORE: |
70+
if ! command -v rsync &> /dev/null
71+
then
72+
echo "rsync could not be found, installing..."
73+
sudo apt-get update
74+
sudo apt-get install -y rsync
75+
else
76+
echo "rsync is already installed."
77+
fi
78+
echo "Starting deployment..."
79+
SCRIPT_AFTER: |
80+
cd ${{ env.APP_DIR }}/html
81+
echo "Restarting API with PM2..."
82+
pm2 restart aparteasy.api.dibodev.com || pm2 start server.js --name aparteasy.api.dibodev.com
83+
pm2 save
84+
echo "Restarting Nginx..."
85+
sudo systemctl restart nginx
86+
echo "Running Migrations..."
87+
node ace migration:run --force
88+
echo "Running Seeders..."
89+
node ace db:seed
90+
echo "Deployment completed successfully!"

api/.env.production

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
PORT=5555
2+
HOST=0.0.0.0
3+
NODE_ENV=production
4+
APP_KEY=
5+
CACHE_VIEWS=false
6+
DRIVE_DISK=local
7+
APP_DOMAIN=aparteasy.dibodev.com
8+
APP_EMAIL_NO_REPLY=[email protected]
9+
APP_EMAIL_SUPPORT=[email protected]
10+
APP_LOGO=https://i.ibb.co/qRDCDjm/apart-easy.png
11+
APP_NAME=ApartEasy
12+
APP_PRIMARY_COLOR="#ff2560"
13+
APP_URL=https://aparteasy.dibodev.com
14+
DB_CONNECTION=mysql
15+
MYSQL_DATABASE=
16+
MYSQL_HOST=
17+
MYSQL_PASSWORD=
18+
MYSQL_USER=
19+
SMTP_HOST=
20+
SMTP_PASSWORD=
21+
SMTP_PORT=
22+
SMTP_USERNAME=
23+
GOOGLE_API_KEY=
24+
GOOGLE_CALLBACK_URL=
25+
GOOGLE_CLIENT_ID=
26+
GOOGLE_CLIENT_SECRET=

0 commit comments

Comments
 (0)