diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..187f25c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +.git +.gitignore +.agents +.idea +__pycache__ +*.pyc +*.pyo +*.pyd +.pytest_cache diff --git a/.forgejo/workflows/build-push.yml b/.forgejo/workflows/build-push.yml new file mode 100644 index 0000000..e0501f9 --- /dev/null +++ b/.forgejo/workflows/build-push.yml @@ -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 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a8eb067 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.idea/ +__pycache__/ +*.pyc +*.pyo +*.pyd +.pytest_cache/ +.agents/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..639045e --- /dev/null +++ b/Dockerfile @@ -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"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..37a64e3 --- /dev/null +++ b/docker-compose.yml @@ -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