Deploy ASP.NET Core Backend #42
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 | |
permissions: | |
packages: write | |
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: 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@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Push Docker image | |
run: docker push ghcr.io/${{ github.repository_owner }}/frej_backend:latest | |
- name: Setup WireGuard | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y wireguard | |
echo "${{ secrets.WG_CLIENT_CONF }}" | sudo tee /etc/wireguard/wg0.conf | |
sudo wg-quick up wg0 | |
shell: bash | |
- 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 WireGuard | |
run: sudo wg-quick down wg0 | |
shell: bash | |
- name: Cleanup | |
run: rm -f $HOME/private_key | |
shell: bash |