Dockerfile
FROM python:3.6.9-slim-stretch as base
RUN apt-get update && apt-get install -y curl git libxml2-dev libxslt1-dev gnupg libjpeg62-turbo-dev python3-dev default-libmysqlclient-dev
RUN curl -sL
https://deb.nodesource.com/setup_8.x | bash -
RUN apt-get update && apt-get install -y nodejs && \
rm -rf /var/lib/apt/lists/*
FROM base as build
WORKDIR /build
RUN apt-get update && \
apt-get install -y build-essential default-libmysqlclient-dev python-dev zlib1g-dev && \
rm -rf /var/lib/apt/lists/*
COPY requirements.txt ./
RUN pip install -r requirements.txt
FROM base as release
WORKDIR /app
COPY --from=build /root/.cache /root/.cache
COPY . .
RUN addgroup --gid 998 gitlab-runner && useradd --uid 999 --gid 998 gitlab-runner
RUN pip install -r requirements.txt
ARG CI_ENVIRONMENT_NAME=dev
ENV CI_ENVIRONMENT_NAME=${CI_ENVIRONMENT_NAME}
RUN python
manage.py collectstatic --noinput
VOLUME /app/static
VOLUME /app/media
docker-compose
version: '2.4'
services:
web:
image:
gitlab.brln.tv:4567/rmb/xxx/web:${CI_COMMIT_SHA} hostname: web
command: bash -c "gunicorn wsgi:application -c
gunicorn.conf.py"
volumes:
- ./ci/logs:/app/ci/logs
- ./media:/app/media
- ./static:/app/static
depends_on:
- db
- redis
restart: always
db:
image: percona:latest
hostname: db
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: somepass
ports:
- "
0.0.0.0:3306:3306"
volumes:
# хранилище данных
- ./ci/mysql:/var/lib/mysql
- ./ci/mysqld.conf:/etc/mysql/percona-server.conf.d/mysqld.cnf
restart: always
nginx:
image: nginx:mainline
ports:
- "
0.0.0.0:80:80"
- "
0.0.0.0:443:443"
volumes:
# хранилища конфигов и статических файлов
- ./ci/nginx/dev:/etc/nginx/conf.d:ro
- ./ci/seo/subdomains:/app/subdomains:ro
- ./ci/ssl:/app/ssl:ro
- ./ci/nginx/passwd:/etc/nginx/passwd
volumes_from:
- web:ro
depends_on:
- web
restart: always
mail:
image: boky/postfix
ports:
- "
0.0.0.0:587:587"
environment:
HOSTNAME:
example.com ALLOWED_SENDER_DOMAINS:
example.com depends_on:
- web
restart: always
redis:
image: redis:4-alpine
ports:
- "6380:6379"
command: ["redis-server", "--appendonly", "yes"]
hostname: redis
volumes:
- ./ci/redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 1s
timeout: 3s
retries: 30
restart: always