Index: lnt/trunk/docker/.env =================================================================== --- lnt/trunk/docker/.env +++ lnt/trunk/docker/.env @@ -0,0 +1,2 @@ +DB_USER=lntuser +DB_BASE=lnt Index: lnt/trunk/docker/Dockerfile =================================================================== --- lnt/trunk/docker/Dockerfile +++ lnt/trunk/docker/Dockerfile @@ -0,0 +1,20 @@ +FROM python:2.7-alpine + +RUN apk update \ + && apk add --no-cache --virtual .build-deps git g++ postgresql-dev yaml-dev \ + && apk add --no-cache libpq \ + && git clone https://git.llvm.org/git/lnt /var/src/lnt \ + && python /var/src/lnt/setup.py install --server \ + && rm -rf /var/src \ + && apk --purge del .build-deps \ + && mkdir /var/log/lnt + +COPY docker-entrypoint.sh wait_db /usr/local/bin/ + +VOLUME /var/log + +EXPOSE 8000 + +ENV DB_ENGINE= DB_HOST= DB_USER= DB_PWD= DB_BASE= + +ENTRYPOINT docker-entrypoint.sh Index: lnt/trunk/docker/docker-compose.yml =================================================================== --- lnt/trunk/docker/docker-compose.yml +++ lnt/trunk/docker/docker-compose.yml @@ -0,0 +1,27 @@ +version: '3' + +services: + lnt: + build: + context: . + container_name: lnt + image: lnt + environment: + - DB_ENGINE=postgres + - DB_HOST=lnt-postgres + - DB_PWD + depends_on: + - db + deploy: + restart_policy: + condition: on-failure + ports: + - "8000:8000" + + db: + container_name: lnt-postgres + image: postgres:alpine + environment: + - POSTGRES_PASSWORD=${DB_PWD} + - POSTGRES_USER=${DB_USER} + - POSTGRES_DB=${DB_BASE} Index: lnt/trunk/docker/docker-entrypoint.sh =================================================================== --- lnt/trunk/docker/docker-entrypoint.sh +++ lnt/trunk/docker/docker-entrypoint.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +DB_PATH=${DB_ENGINE:-postgresql}://${DB_USER:-lntuser}:${DB_PWD:?}@${DB_HOST:?} +DB_BASE=${DB_BASE:-lnt} + +if [ ! -r /etc/lnt.cfg ]; then + DB_BASE_PATH="${DB_PATH}/${DB_BASE}" wait_db + lnt create /var/lib/lnt \ + --config /etc/lnt.cfg \ + --wsgi lnt_wsgi.py \ + --tmp-dir /tmp/lnt \ + --db-dir "${DB_PATH}" \ + --default-db "${DB_BASE}" +fi + +cd /var/lib/lnt +exec gunicorn lnt_wsgi:application \ + --bind 0.0.0.0:8000 \ + --workers 8 \ + --timeout 300 \ + --name lnt_server \ + --log-file /var/log/lnt/lnt.log \ + --access-logfile /var/log/lnt/gunicorn_access.log \ + --max-requests 250000 "$@" Index: lnt/trunk/docker/wait_db =================================================================== --- lnt/trunk/docker/wait_db +++ lnt/trunk/docker/wait_db @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +import os +from sqlalchemy import create_engine + +db_base_path = os.environ['DB_BASE_PATH'] + +engine = create_engine(db_base_path) +started = False + +while not started: + try: + engine.execute("SELECT 1") + started = True + except Exception as inst: + pass