Skip to content

Adjustments for png #134

Adjustments for png

Adjustments for png #134

Workflow file for this run

name: Build and Deploy Docker Image to Server
on:
push:
branches:
- main
jobs:
test:
name: Run Vitest
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v2
- name: Set up Node
uses: actions/setup-node@v3
with:
node-version: 18
- name: Install Dependencies
run: npm install --legacy-peer-deps
- name: Run Tests
run: npm run test
build-deploy:
name: Build and Deploy Docker Image to Server
runs-on: ubuntu-latest
needs: test # This ensures the build only runs if tests pass
steps:
- name: Check out repository
uses: actions/checkout@v2
- name: Login to Docker Hub
id: docker-hub
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
- name: Build the Docker Image
id: build-docker-image
run: |
ls -la
docker build . -f Dockerfile -t ${{ secrets.DOCKER_USERNAME }}/webportfolio:latest
- name: Push the Docker Image
id: push-docker-image
run: docker push ${{ secrets.DOCKER_USERNAME }}/webportfolio:latest
- name: Set up SSH key for server connection
uses: webfactory/ssh-agent@v0.5.3
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Connect to server via SSH and deploy
uses: appleboy/ssh-action@v0.1.8
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
# Stop and remove any existing containers
sudo docker stop $(sudo docker ps -aq) || true
sudo docker rm $(sudo docker ps -aq) || true
# Pull the latest image from Docker Hub
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/webportfolio:latest
# Copy SSL certificates to server paths
echo "${{ secrets.SSL_PRIVATE_KEY }}" > /etc/ssl/private/ssl.key
echo "${{ secrets.SSL_CERT_CHAIN }}" > /etc/ssl/certs/ssl.crt
# Run container with mapped SSL certs
sudo docker run -d -p 80:80 -p 443:443 --name webportfolio \
-v /etc/ssl/private/ssl.key:/app/ssl.key \
-v /etc/ssl/certs/ssl.crt:/app/ssl.crt \
-e SSL_PRIVATE_KEY="/app/ssl.key" \
-e SSL_CERT_CHAIN="/app/ssl.crt" \
${{ secrets.DOCKER_USERNAME }}/webportfolio:latest