Add build config

This commit is contained in:
2021-11-14 10:44:26 +03:00
parent 30835e31fa
commit 6a7966ed92
3 changed files with 90 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
name: Build docker image
on:
push:
branches:
- 'main'
jobs:
Build-Docker-Image:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- id: repository_name
uses: ASzc/change-string-case-action@v1
with:
string: ${{ github.repository }}
-
name: Login to ghcr.io
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v2
env:
IMAGE: ${{ steps.repository_name.outputs.lowercase }}
with:
push: true
tags: ghcr.io/${{ env.IMAGE }}:latest
context: .
file: ./docker/build.dockerfile
-
name: Invoke deployment hook
uses: joelwmale/webhook-action@master
with:
url: ${{ secrets.WEBHOOK_URL }}

38
docker/build.dockerfile Normal file
View File

@@ -0,0 +1,38 @@
FROM python:3.10-slim as build-image
RUN apt-get update \
&& apt-get install --no-install-recommends -y gcc build-essential python3-dev libpq-dev libffi-dev \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /root/poetry
COPY pyproject.toml poetry.lock /root/poetry/
RUN pip install poetry --no-cache-dir \
&& poetry export --without-hashes > requirements.txt
ENV VENV_PATH=/opt/venv
RUN python -m venv $VENV_PATH \
&& . /opt/venv/bin/activate \
&& pip install -r requirements.txt --no-cache-dir
FROM python:3.10-slim as runtime-image
RUN apt-get update \
&& apt-get install --no-install-recommends -y python3-dev libpq-dev libffi-dev \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY ./fastapi_book_server/ /app/
ENV VENV_PATH=/opt/venv
COPY --from=build-image $VENV_PATH $VENV_PATH
ENV PATH="$VENV_PATH/bin:$PATH"
COPY ./scripts/start.sh /root/
EXPOSE 8080
CMD bash /root/start.sh

3
scripts/start.sh Normal file
View File

@@ -0,0 +1,3 @@
cd /app
alembic -c ./app/alembic.ini upgrade head
uvicorn main:app --host="0.0.0.0" --port="8080"