-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add backend dockerfile and cd workflow
- Loading branch information
1 parent
aac4f23
commit a414833
Showing
2 changed files
with
123 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
name: Backend CD | ||
on: | ||
workflow_dispatch: | ||
# schedule: | ||
# - cron: '38 19 * * *' # run the cron job every day at 19.38 | ||
# push: | ||
# branches: | ||
# - "main" | ||
# tags-ignore: | ||
# - "**" | ||
# paths: | ||
# - "backend/**" | ||
# - ".github/workflows/**" | ||
# - ".github/actions/**" | ||
env: | ||
REGISTRY: ghcr.io | ||
jobs: | ||
build-and-push-blackjack-backend: | ||
runs-on: ubuntu-latest | ||
permissions: | ||
contents: read | ||
packages: write | ||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@v4 | ||
- name: Log in to the Container registry | ||
uses: docker/login-action@v3 | ||
with: | ||
registry: ${{ env.REGISTRY }} | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
- name: Extract metadata (tags, labels) for Docker | ||
id: meta | ||
uses: docker/metadata-action@v5 | ||
with: | ||
images: ${{ env.REGISTRY }}/sahinakkaya/blackjack-backend | ||
- name: Build and push Docker image | ||
uses: docker/build-push-action@v6 | ||
with: | ||
context: server | ||
file: server/Dockerfile | ||
push: true | ||
tags: ${{ steps.meta.outputs.tags }} | ||
labels: ${{ steps.meta.outputs.labels }} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
# syntax=docker/dockerfile:1 | ||
# Keep this syntax directive! It's used to enable Docker BuildKit | ||
|
||
# Based on https://github.com/python-poetry/poetry/discussions/1879?sort=top#discussioncomment-216865 | ||
# but I try to keep it updated (see history) | ||
|
||
################################ | ||
# PYTHON-BASE | ||
# Sets up all our shared environment variables | ||
################################ | ||
FROM python:3.12-slim as python-base | ||
Check warning on line 11 in server/Dockerfile GitHub Actions / build-and-push-blackjack-backendThe 'as' keyword should match the case of the 'from' keyword
|
||
|
||
# python | ||
ENV PYTHONUNBUFFERED=1 \ | ||
# prevents python creating .pyc files | ||
PYTHONDONTWRITEBYTECODE=1 \ | ||
\ | ||
# pip | ||
PIP_DISABLE_PIP_VERSION_CHECK=on \ | ||
PIP_DEFAULT_TIMEOUT=100 \ | ||
\ | ||
# poetry | ||
# https://python-poetry.org/docs/configuration/#using-environment-variables | ||
POETRY_VERSION=1.8.2 \ | ||
# make poetry install to this location | ||
POETRY_HOME="/opt/poetry" \ | ||
# make poetry create the virtual environment in the project's root | ||
# it gets named `.venv` | ||
POETRY_VIRTUALENVS_IN_PROJECT=true \ | ||
# do not ask any interactive question | ||
POETRY_NO_INTERACTION=1 \ | ||
\ | ||
# paths | ||
# this is where our requirements + virtual environment will live | ||
PYSETUP_PATH="/opt/pysetup" \ | ||
VENV_PATH="/opt/pysetup/.venv" | ||
|
||
# prepend poetry and venv to path | ||
ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH" | ||
|
||
|
||
################################ | ||
# BUILDER-BASE | ||
# Used to build deps + create our virtual environment | ||
################################ | ||
FROM python-base as builder-base | ||
Check warning on line 46 in server/Dockerfile GitHub Actions / build-and-push-blackjack-backendThe 'as' keyword should match the case of the 'from' keyword
|
||
RUN apt-get update \ | ||
&& apt-get install --no-install-recommends -y \ | ||
# deps for installing poetry | ||
curl \ | ||
# deps for building python deps | ||
build-essential | ||
|
||
# install poetry - respects $POETRY_VERSION & $POETRY_HOME | ||
# The --mount will mount the buildx cache directory to where | ||
# Poetry and Pip store their cache so that they can re-use it | ||
RUN --mount=type=cache,target=/root/.cache \ | ||
curl -sSL https://install.python-poetry.org | python3 - | ||
|
||
# copy project requirement files here to ensure they will be cached. | ||
WORKDIR $PYSETUP_PATH | ||
COPY poetry.lock pyproject.toml ./ | ||
|
||
# install runtime deps - uses $POETRY_VIRTUALENVS_IN_PROJECT internally | ||
RUN --mount=type=cache,target=/root/.cache \ | ||
poetry install --no-root --no-directory --only main | ||
|
||
################################ | ||
# PRODUCTION | ||
# Final image used for runtime | ||
################################ | ||
FROM python-base as production | ||
Check warning on line 72 in server/Dockerfile GitHub Actions / build-and-push-blackjack-backendThe 'as' keyword should match the case of the 'from' keyword
|
||
ENV FASTAPI_ENV=production | ||
COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH | ||
COPY ./blackjack /app/blackjack | ||
|
||
WORKDIR /app | ||
|
||
CMD ["gunicorn", "-b", ":8000", "-k", "uvicorn.workers.UvicornWorker", "blackjack.socketio_test:app"] |