Skip to content

Commit 0c7b14f

Browse files
committed
feat: dockerize backend, add to deployment workflow (#118)
closes #116
1 parent ceba3f6 commit 0c7b14f

File tree

2 files changed

+47
-41
lines changed

2 files changed

+47
-41
lines changed

.github/workflows/deploy_backend.yml

+28-41
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ on:
1212
jobs:
1313
build:
1414
runs-on: ubuntu-latest
15+
permissions:
16+
packages: write
1517

1618
steps:
1719
- name: Checkout repository
@@ -22,11 +24,6 @@ jobs:
2224
with:
2325
dotnet-version: 8.0.x
2426

25-
- name: Install EF Core tool
26-
run: |
27-
dotnet tool install --global dotnet-ef
28-
dotnet tool restore
29-
3027
- name: Restore dependencies
3128
run: dotnet restore
3229
working-directory: ./server
@@ -39,14 +36,23 @@ jobs:
3936
run: dotnet test
4037
working-directory: ./tests/serverTests
4138

42-
- name: Apply database migrations
43-
run: dotnet ef database update
44-
working-directory: ./server
45-
4639
- name: Publish
4740
run: dotnet publish --configuration Release --output ./out
4841
working-directory: ./server
4942

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+
5056
- name: Prepare SSH Key
5157
run: |
5258
echo "${{ secrets.SSH_PRIVATE_KEY }}" > $HOME/private_key
@@ -59,39 +65,20 @@ jobs:
5965
ssh-keyscan -H ${{ secrets.SERVER_IP }} >> ~/.ssh/known_hosts
6066
shell: bash
6167

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
9369
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
9582
shell: bash
9683

9784
- name: Cleanup

server/Dockerfile

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
2+
WORKDIR /app
3+
EXPOSE 5000
4+
5+
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
6+
WORKDIR /src
7+
COPY ["server.csproj", "."]
8+
RUN dotnet restore "server.csproj"
9+
COPY . .
10+
WORKDIR "/src"
11+
RUN dotnet build "server.csproj" -c Release -o /app/build
12+
13+
FROM build AS publish
14+
RUN dotnet publish "server.csproj" -c Release -o /app/publish
15+
16+
FROM base AS final
17+
WORKDIR /app
18+
COPY --from=publish /app/publish .
19+
ENTRYPOINT ["dotnet", "server.dll"]

0 commit comments

Comments
 (0)