feat: dockerize backend, add to deployment workflow (#118) #35
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
name: Deploy ASP.NET Core Backend | |
on: | |
push: | |
branches: | |
- 'main' | |
paths: | |
- server/** | |
workflow_dispatch: | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 8.0.x | |
- name: Restore dependencies | |
run: dotnet restore | |
working-directory: ./server | |
- name: Build | |
run: dotnet build --no-restore | |
working-directory: ./server | |
- name: Test | |
run: dotnet test | |
working-directory: ./tests/serverTests | |
- name: Apply database migrations | |
run: dotnet ef database update | |
working-directory: ./server | |
- name: Publish | |
run: dotnet publish --configuration Release --output ./out | |
working-directory: ./server | |
- name: Build Docker image | |
run: docker build -t ghcr.io/${{ github.repository_owner }}/frej_backend:latest ./server | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.GHCR_USERNAME }} | |
password: ${{ secrets.GHCR_TOKEN }} | |
- name: Push Docker image | |
run: docker push ghcr.io/${{ github.repository_owner }}/frej_backend:latest | |
- name: Prepare SSH Key | |
run: | | |
echo "${{ secrets.SSH_PRIVATE_KEY }}" > $HOME/private_key | |
chmod 600 $HOME/private_key | |
shell: bash | |
- name: Add server to known hosts | |
run: | | |
mkdir -p ~/.ssh | |
ssh-keyscan -H ${{ secrets.SERVER_IP }} >> ~/.ssh/known_hosts | |
shell: bash | |
- name: Deploy Docker Container on Server | |
run: | | |
ssh -i $HOME/private_key ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }} << 'EOF' | |
set -e | |
mkdir -p /var/lib/project_frej | |
docker pull ghcr.io/${GITHUB_REPOSITORY_OWNER}/frej_backend:latest | |
cp /var/lib/project_frej/sensor_data.db /var/lib/project_frej_old/sensor_data.db || true | |
docker stop frej_backend || true | |
docker rm frej_backend || true | |
docker run -d --name frej_backend --restart always -p 5000:8080 \ | |
-v /var/lib/project_frej/appsettings.json:/app/appsettings.json \ | |
-v /var/lib/project_frej/sensor_data.db:/app/sensor_data.db \ | |
ghcr.io/${GITHUB_REPOSITORY_OWNER}/frej_backend:latest | |
EOF | |
shell: bash | |
- name: Cleanup | |
run: rm -f $HOME/private_key | |
shell: bash |