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..673d9cd --- /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 + - 'ci/*' + 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..4e9a9a7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM python:3.11-slim + +WORKDIR /app + +# Prevent Python from writing .pyc files & buffer stdout/stderr +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + PORT=8000 \ + USER_AGENT="Phikipathia/1.0 (https://git.depeuter.dev/tdpeuter/2022ST-project-Phikipathia)" + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +EXPOSE 8000 + +CMD ["python", "server.py"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..57d3d5c --- /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://git.depeuter.dev/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