Update image building

This commit is contained in:
2022-05-06 10:19:45 +03:00
parent 40053f1f8d
commit cdde328ec5
2 changed files with 15 additions and 20 deletions

View File

@@ -1,37 +1,29 @@
FROM python:3.10-slim as build-image FROM ghcr.io/kurbezz/base_docker_images:3.10-postgres-asyncpg-poetry-buildtime 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 WORKDIR /root/poetry
COPY pyproject.toml poetry.lock /root/poetry/ COPY pyproject.toml poetry.lock /root/poetry/
RUN pip install poetry wheel --no-cache-dir \
&& poetry export --without-hashes > requirements.txt
ENV VENV_PATH=/opt/venv ENV VENV_PATH=/opt/venv
RUN python -m venv $VENV_PATH \ RUN poetry export --without-hashes > requirements.txt \
&& . "${VENV_PATH}/bin/activate" \ && . "${VENV_PATH}/bin/activate" \
&& pip install -r requirements.txt --no-cache-dir && pip install -r requirements.txt --no-cache-dir
FROM python:3.10-slim as runtime-image FROM ghcr.io/kurbezz/base_docker_images:3.10-postgres-runtime as runtime-image
RUN apt-get update \ RUN apt-get update \
&& apt-get install --no-install-recommends -y wget python3-dev libpq-dev libffi-dev default-mysql-client-core \ && apt-get install --no-install-recommends -y wget default-mysql-client-core \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
COPY ./src/ /app/
ENV VENV_PATH=/opt/venv ENV VENV_PATH=/opt/venv
COPY --from=build-image $VENV_PATH $VENV_PATH
ENV PATH="$VENV_PATH/bin:$PATH" ENV PATH="$VENV_PATH/bin:$PATH"
WORKDIR /app/
COPY ./src/ /app/
COPY --from=build-image $VENV_PATH $VENV_PATH
COPY ./scripts/healthcheck.py /root/ COPY ./scripts/healthcheck.py /root/
EXPOSE 8080 EXPOSE 8080
WORKDIR /app/
CMD gunicorn -k uvicorn.workers.UvicornWorker main:app --bind 0.0.0.0:8080 CMD gunicorn -k uvicorn.workers.UvicornWorker main:app --bind 0.0.0.0:8080

View File

@@ -55,15 +55,18 @@ class JobId(Enum):
async def import_fl_dump(ctx: dict, filename: str, *args, **kwargs): async def import_fl_dump(ctx: dict, filename: str, *args, **kwargs):
await run_cmd( stdout, stderr, return_code = await run_cmd(
f"wget -O - {env_config.FL_BASE_URL}/sql/{filename}.gz | gunzip | " f"wget -O - {env_config.FL_BASE_URL}/sql/{filename}.gz | gunzip | "
f"mysql -h {env_config.MYSQL_HOST} -u {env_config.MYSQL_USER} " f"mysql -h {env_config.MYSQL_HOST} -u {env_config.MYSQL_USER} "
f'-p"{env_config.MYSQL_PASSWORD}" {env_config.MYSQL_DB_NAME}' f'-p"{env_config.MYSQL_PASSWORD}" {env_config.MYSQL_DB_NAME}'
) )
if return_code != 0:
raise InterruptedError(stdout, stderr)
async def get_db_cons() -> tuple[asyncpg.Connection, aiomysql.Connection]: async def get_db_cons() -> tuple[asyncpg.Connection, aiomysql.Connection]:
posgres = await asyncpg.connect( postgres = await asyncpg.connect(
database=env_config.POSTGRES_DB_NAME, database=env_config.POSTGRES_DB_NAME,
host=env_config.POSTGRES_HOST, host=env_config.POSTGRES_HOST,
port=env_config.POSTGRES_PORT, port=env_config.POSTGRES_PORT,
@@ -79,9 +82,9 @@ async def get_db_cons() -> tuple[asyncpg.Connection, aiomysql.Connection]:
password=env_config.MYSQL_PASSWORD, password=env_config.MYSQL_PASSWORD,
) )
assert posgres assert postgres
return posgres, mysql return postgres, mysql
async def get_source(postgres: asyncpg.Connection) -> int: async def get_source(postgres: asyncpg.Connection) -> int: