ci(docker): containerize application and add forgejo deployment workflow

This commit is contained in:
Tibo De Peuter 2026-08-18 18:04:16 +02:00
parent b72ad44318
commit afeb502b8e
5 changed files with 111 additions and 0 deletions

9
.dockerignore Normal file
View file

@ -0,0 +1,9 @@
.git
.gitignore
.agents
.idea
__pycache__
*.pyc
*.pyo
*.pyd
.pytest_cache

View file

@ -0,0 +1,46 @@
name: Build and Push Docker Image to Forgejo Registry
on:
push:
branches:
- main
- master
- fix_robustness_dockerize_project
tags:
- 'v*'
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Forgejo Container Registry
uses: docker/login-action@v3
with:
registry: ${{ gitea.server_url }}
username: ${{ gitea.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract Metadata for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ gitea.server_url }}/${{ gitea.repository }}
tags: |
type=raw,value=latest,enable=${{ gitea.ref == 'refs/heads/main' || gitea.ref == 'refs/heads/master' }}
type=sha,prefix=
- name: Build and Push Docker Image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max

7
.gitignore vendored Normal file
View file

@ -0,0 +1,7 @@
.idea/
__pycache__/
*.pyc
*.pyo
*.pyd
.pytest_cache/
.agents/

22
Dockerfile Normal file
View file

@ -0,0 +1,22 @@
# Use official lightweight Python base image
FROM python:3.11-slim
# Set working directory inside container
WORKDIR /app
# Install Python dependencies first to leverage Docker layer caching
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy application files
COPY . .
# Expose default port
EXPOSE 8000
# Set default environment variables
ENV PORT=8000
ENV USER_AGENT="Phikipathia/1.0 (Wikipedia Philosophy Path Visualizer; https://github.com/tdpeuter/2022ST-project-Phikipathia)"
# Run Python HTTP server
CMD ["python", "server.py"]

27
docker-compose.yml Normal file
View file

@ -0,0 +1,27 @@
services:
phikipathia:
build:
context: .
dockerfile: Dockerfile
image: ${DOCKER_REGISTRY:-phikipathia}:${DOCKER_TAG:-latest}
container_name: phikipathia-app
restart: unless-stopped
ports:
- "${PORT:-8000}:8000"
environment:
- PORT=8000
- USER_AGENT=${USER_AGENT:-Phikipathia/1.0 (https://github.com/tdpeuter/2022ST-project-Phikipathia)}
healthcheck:
test: ["CMD-SHELL", "python -c 'import urllib.request; urllib.request.urlopen(\"http://localhost:8000/\")'"]
interval: 30s
timeout: 10s
retries: 3
start_period: 5s
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.25'
memory: 128M