12
12
jobs :
13
13
build :
14
14
runs-on : ubuntu-latest
15
+ permissions :
16
+ packages : write
15
17
16
18
steps :
17
19
- name : Checkout repository
22
24
with :
23
25
dotnet-version : 8.0.x
24
26
25
- - name : Install EF Core tool
26
- run : |
27
- dotnet tool install --global dotnet-ef
28
- dotnet tool restore
29
-
30
27
- name : Restore dependencies
31
28
run : dotnet restore
32
29
working-directory : ./server
@@ -39,14 +36,23 @@ jobs:
39
36
run : dotnet test
40
37
working-directory : ./tests/serverTests
41
38
42
- - name : Apply database migrations
43
- run : dotnet ef database update
44
- working-directory : ./server
45
-
46
39
- name : Publish
47
40
run : dotnet publish --configuration Release --output ./out
48
41
working-directory : ./server
49
42
43
+ - name : Build Docker image
44
+ run : docker build -t ghcr.io/${{ github.repository_owner }}/frej_backend:latest ./server
45
+
46
+ - name : Login to GitHub Container Registry
47
+ uses : docker/login-action@v3
48
+ with :
49
+ registry : ghcr.io
50
+ username : ${{ github.actor }}
51
+ password : ${{ secrets.GITHUB_TOKEN }}
52
+
53
+ - name : Push Docker image
54
+ run : docker push ghcr.io/${{ github.repository_owner }}/frej_backend:latest
55
+
50
56
- name : Prepare SSH Key
51
57
run : |
52
58
echo "${{ secrets.SSH_PRIVATE_KEY }}" > $HOME/private_key
@@ -59,39 +65,20 @@ jobs:
59
65
ssh-keyscan -H ${{ secrets.SERVER_IP }} >> ~/.ssh/known_hosts
60
66
shell : bash
61
67
62
- - name : Create deployment directory on server
63
- run : |
64
- ssh -i $HOME/private_key ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }} 'mkdir -p /var/www/project_frej_temp'
65
- shell : bash
66
-
67
- - name : Copy files to server
68
- run : |
69
- scp -i $HOME/private_key -r ./server/out/* ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }}:/var/www/project_frej_temp
70
- shell : bash
71
-
72
- - name : Backup existing database
73
- run : |
74
- ssh -i $HOME/private_key ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }} 'cp /var/www/project_frej/sensor_data.db /var/www/project_frej_temp/sensor_data.db'
75
- shell : bash
76
-
77
- - name : Replace old backend with new version
78
- run : |
79
- ssh -i $HOME/private_key ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }} 'rm -rf /var/www/project_frej_old && mv /var/www/project_frej /var/www/project_frej_old && mv /var/www/project_frej_temp /var/www/project_frej'
80
- shell : bash
81
-
82
- - name : Restore previous appsettings.json
83
- run : |
84
- ssh -i $HOME/private_key ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }} 'cp /var/www/project_frej_old/appsettings.json /var/www/project_frej/appsettings.json'
85
- shell : bash
86
-
87
- - name : Give www-data ownership of directory
88
- run : |
89
- ssh -i $HOME/private_key ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }} 'chown -R www-data:www-data /var/www/project_frej && chmod -R 775 /var/www/project_frej'
90
- shell : bash
91
-
92
- - name : Restart backend service
68
+ - name : Deploy Docker Container on Server
93
69
run : |
94
- ssh -i $HOME/private_key ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }} 'sudo systemctl restart project_frej.service'
70
+ ssh -i $HOME/private_key ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }} << 'EOF'
71
+ set -e
72
+ mkdir -p /var/lib/project_frej
73
+ docker pull ghcr.io/${GITHUB_REPOSITORY_OWNER}/frej_backend:latest
74
+ cp /var/lib/project_frej/sensor_data.db /var/lib/project_frej_old/sensor_data.db || true
75
+ docker stop frej_backend || true
76
+ docker rm frej_backend || true
77
+ docker run -d --name frej_backend --restart always -p 5000:8080 \
78
+ -v /var/lib/project_frej/appsettings.json:/app/appsettings.json \
79
+ -v /var/lib/project_frej/sensor_data.db:/app/sensor_data.db \
80
+ ghcr.io/${GITHUB_REPOSITORY_OWNER}/frej_backend:latest
81
+ EOF
95
82
shell : bash
96
83
97
84
- name : Cleanup
0 commit comments