commit
61b64d9353
|
@ -0,0 +1,64 @@
|
||||||
|
FROM alpine:3.8
|
||||||
|
|
||||||
|
ARG VERSION
|
||||||
|
ENV VERSION master
|
||||||
|
|
||||||
|
ENV uid 1337
|
||||||
|
ENV gid 1337
|
||||||
|
ENV user lemur
|
||||||
|
ENV group lemur
|
||||||
|
|
||||||
|
COPY entrypoint /
|
||||||
|
COPY src/lemur.conf.py /home/lemur/.lemur/lemur.conf.py
|
||||||
|
COPY supervisor.conf /
|
||||||
|
COPY nginx/default.conf /etc/nginx/conf.d/
|
||||||
|
COPY nginx/default-ssl.conf /etc/nginx/conf.d/
|
||||||
|
|
||||||
|
RUN addgroup -S ${group} -g ${gid} && \
|
||||||
|
adduser -D -S ${user} -G ${group} -u ${uid} && \
|
||||||
|
apk --update add python3 libldap postgresql-client nginx supervisor curl tzdata openssl bash && \
|
||||||
|
apk --update add --virtual build-dependencies \
|
||||||
|
git \
|
||||||
|
tar \
|
||||||
|
curl \
|
||||||
|
python3-dev \
|
||||||
|
npm \
|
||||||
|
bash \
|
||||||
|
musl-dev \
|
||||||
|
gcc \
|
||||||
|
autoconf \
|
||||||
|
automake \
|
||||||
|
make \
|
||||||
|
nasm \
|
||||||
|
zlib-dev \
|
||||||
|
postgresql-dev \
|
||||||
|
libressl-dev \
|
||||||
|
libffi-dev \
|
||||||
|
cyrus-sasl-dev \
|
||||||
|
openldap-dev && \
|
||||||
|
mkdir -p /opt/lemur /home/lemur/.lemur/ && \
|
||||||
|
curl -sSL https://github.com/Netflix/lemur/archive/$VERSION.tar.gz | tar xz -C /opt/lemur --strip-components=1 && \
|
||||||
|
pip3 install --upgrade pip && \
|
||||||
|
pip3 install --upgrade setuptools && \
|
||||||
|
chmod +x /entrypoint && \
|
||||||
|
mkdir -p /run/nginx/ /etc/nginx/ssl/ && \
|
||||||
|
chown -R $user:$group /opt/lemur/ /home/lemur/.lemur/
|
||||||
|
|
||||||
|
WORKDIR /opt/lemur
|
||||||
|
|
||||||
|
RUN npm install --unsafe-perm && \
|
||||||
|
pip3 install -e . && \
|
||||||
|
node_modules/.bin/gulp build && \
|
||||||
|
node_modules/.bin/gulp package --urlContextPath=$(urlContextPath) && \
|
||||||
|
apk del build-dependencies
|
||||||
|
|
||||||
|
WORKDIR /
|
||||||
|
|
||||||
|
HEALTHCHECK --interval=12s --timeout=12s --start-period=30s \
|
||||||
|
CMD curl --fail http://localhost:80/api/1/healthcheck | grep -q ok || exit 1
|
||||||
|
|
||||||
|
USER root
|
||||||
|
|
||||||
|
ENTRYPOINT ["/entrypoint"]
|
||||||
|
|
||||||
|
CMD ["/usr/bin/supervisord","-c","supervisor.conf"]
|
|
@ -0,0 +1,54 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ -z "${POSTGRES_USER}" ] || [ -z "${POSTGRES_PASSWORD}" ] || [ -z "${POSTGRES_HOST}" ] || [ -z "${POSTGRES_DB}" ];then
|
||||||
|
echo "Database vars not set"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
export POSTGRES_PORT="${POSTGRES_PORT:-5432}"
|
||||||
|
|
||||||
|
echo 'export SQLALCHEMY_DATABASE_URI="postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST:$POSTGRES_PORT/$POSTGRES_DB"' >> /etc/profile
|
||||||
|
|
||||||
|
source /etc/profile
|
||||||
|
|
||||||
|
PGPASSWORD=$POSTGRES_PASSWORD psql -h $POSTGRES_HOST -p $POSTGRES_PORT -U $POSTGRES_USER -d $POSTGRES_DB --command 'select 1;'
|
||||||
|
|
||||||
|
echo " # Create Postgres trgm extension"
|
||||||
|
PGPASSWORD=$POSTGRES_PASSWORD psql -h $POSTGRES_HOST -p $POSTGRES_PORT -U $POSTGRES_USER -d $POSTGRES_DB --command 'CREATE EXTENSION pg_trgm;'
|
||||||
|
echo " # Done"
|
||||||
|
|
||||||
|
if [ -z "${SKIP_SSL}" ]; then
|
||||||
|
if [ ! -f /etc/nginx/ssl/server.crt ] && [ ! -f /etc/nginx/ssl/server.key ]; then
|
||||||
|
openssl req -x509 -newkey rsa:4096 -nodes -keyout /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.crt -days 365 -subj "/C=US/ST=FAKE/L=FAKE/O=FAKE/OU=FAKE/CN=FAKE"
|
||||||
|
fi
|
||||||
|
mv /etc/nginx/conf.d/default-ssl.conf.a /etc/nginx/conf.d/default-ssl.conf
|
||||||
|
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.a
|
||||||
|
fi
|
||||||
|
|
||||||
|
# if [ ! -f /home/lemur/.lemur/lemur.conf.py ]; then
|
||||||
|
# echo "Creating config"
|
||||||
|
# https://github.com/Netflix/lemur/issues/2257
|
||||||
|
# python3 /opt/lemur/lemur/manage.py create_config
|
||||||
|
# echo "Done"
|
||||||
|
# fi
|
||||||
|
|
||||||
|
echo " # Running init"
|
||||||
|
su lemur -c "python3 /opt/lemur/lemur/manage.py init"
|
||||||
|
echo " # Done"
|
||||||
|
|
||||||
|
# echo "Creating user"
|
||||||
|
# https://github.com/Netflix/lemur/issues/
|
||||||
|
# echo "something that will create user" | python3 /opt/lemur/lemur/manage.py shell
|
||||||
|
# echo "Done"
|
||||||
|
|
||||||
|
cron_notify="${CRON_NOTIFY:-"0 22 * * *"}"
|
||||||
|
cron_sync="${CRON_SYNC:-"*/15 * * * *"}"
|
||||||
|
cron_revoked="${CRON_CHECK_REVOKED:-"0 22 * * *"}"
|
||||||
|
|
||||||
|
echo " # Populating crontab"
|
||||||
|
echo "${cron_notify} lemur python3 /opt/lemur/lemur/manage.py notify expirations" > /etc/crontabs/lemur_notify
|
||||||
|
echo "${cron_sync} lemur python3 /opt/lemur/lemur/manage.py source sync -s all" > /etc/crontabs/lemur_sync
|
||||||
|
echo "${cron_revoked} lemur python3 /opt/lemur/lemur/manage.py certificate check_revoked" > /etc/crontabs/lemur_revoked
|
||||||
|
echo " # Done"
|
||||||
|
|
||||||
|
exec "$@"
|
|
@ -0,0 +1,37 @@
|
||||||
|
add_header X-Frame-Options DENY;
|
||||||
|
add_header X-Content-Type-Options nosniff;
|
||||||
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name _;
|
||||||
|
return 301 https://$host$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 443;
|
||||||
|
server_name _;
|
||||||
|
access_log /dev/stdout;
|
||||||
|
error_log /dev/stderr;
|
||||||
|
ssl_certificate /etc/nginx/ssl/server.crt;
|
||||||
|
ssl_certificate_key /etc/nginx/ssl/server.key;
|
||||||
|
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
||||||
|
ssl_ciphers HIGH:!aNULL:!MD5;
|
||||||
|
|
||||||
|
location /api {
|
||||||
|
proxy_pass http://127.0.0.1:8000;
|
||||||
|
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
|
||||||
|
proxy_redirect off;
|
||||||
|
proxy_buffering off;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /opt/lemur/lemur/static/dist;
|
||||||
|
include mime.types;
|
||||||
|
index index.html;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
add_header X-Frame-Options DENY;
|
||||||
|
add_header X-Content-Type-Options nosniff;
|
||||||
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
access_log /dev/stdout;
|
||||||
|
error_log /dev/stderr;
|
||||||
|
|
||||||
|
location /api {
|
||||||
|
proxy_pass http://127.0.0.1:8000;
|
||||||
|
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
|
||||||
|
proxy_redirect off;
|
||||||
|
proxy_buffering off;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /opt/lemur/lemur/static/dist;
|
||||||
|
include mime.types;
|
||||||
|
index index.html;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
import os
|
||||||
|
_basedir = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
|
CORS = os.environ.get("CORS") == "True"
|
||||||
|
debug = os.environ.get("DEBUG") == "True"
|
||||||
|
|
||||||
|
SECRET_KEY = repr(os.environ.get('SECRET_KEY','Hrs8kCDNPuT9vtshsSWzlrYW+d+PrAXvg/HwbRE6M3vzSJTTrA/ZEw=='))
|
||||||
|
|
||||||
|
LEMUR_TOKEN_SECRET = repr(os.environ.get('LEMUR_TOKEN_SECRET','YVKT6nNHnWRWk28Lra1OPxMvHTqg1ZXvAcO7bkVNSbrEuDQPABM0VQ=='))
|
||||||
|
LEMUR_ENCRYPTION_KEYS = repr(os.environ.get('LEMUR_ENCRYPTION_KEYS','Ls-qg9j3EMFHyGB_NL0GcQLI6622n9pSyGM_Pu0GdCo='))
|
||||||
|
|
||||||
|
LEMUR_WHITELISTED_DOMAINS = []
|
||||||
|
|
||||||
|
LEMUR_EMAIL = ''
|
||||||
|
LEMUR_SECURITY_TEAM_EMAIL = []
|
||||||
|
|
||||||
|
|
||||||
|
LEMUR_DEFAULT_COUNTRY = repr(os.environ.get('LEMUR_DEFAULT_COUNTRY',''))
|
||||||
|
LEMUR_DEFAULT_STATE = repr(os.environ.get('LEMUR_DEFAULT_STATE',''))
|
||||||
|
LEMUR_DEFAULT_LOCATION = repr(os.environ.get('LEMUR_DEFAULT_LOCATION',''))
|
||||||
|
LEMUR_DEFAULT_ORGANIZATION = repr(os.environ.get('LEMUR_DEFAULT_ORGANIZATION',''))
|
||||||
|
LEMUR_DEFAULT_ORGANIZATIONAL_UNIT = repr(os.environ.get('LEMUR_DEFAULT_ORGANIZATIONAL_UNIT',''))
|
||||||
|
|
||||||
|
ACTIVE_PROVIDERS = []
|
||||||
|
|
||||||
|
METRIC_PROVIDERS = []
|
||||||
|
|
||||||
|
LOG_LEVEL = str(os.environ.get('LOG_LEVEL','DEBUG'))
|
||||||
|
LOG_FILE = str(os.environ.get('LOG_FILE','/home/lemur/.lemur/lemur.log'))
|
||||||
|
|
||||||
|
SQLALCHEMY_DATABASE_URI = os.environ.get('SQLALCHEMY_DATABASE_URI','postgresql://lemur:lemur@localhost:5432/lemur')
|
|
@ -0,0 +1,32 @@
|
||||||
|
[supervisord]
|
||||||
|
nodaemon=true
|
||||||
|
user=root
|
||||||
|
logfile=/dev/stdout
|
||||||
|
logfile_maxbytes=0
|
||||||
|
pidfile = /tmp/supervisord.pid
|
||||||
|
|
||||||
|
[program:lemur]
|
||||||
|
environment=LEMUR_CONF=/home/lemur/.lemur/lemur.conf.py
|
||||||
|
command=/usr/bin/python3 manage.py start -b 0.0.0.0:8000
|
||||||
|
user=lemur
|
||||||
|
directory=/opt/lemur/lemur
|
||||||
|
stdout_logfile=/dev/stdout
|
||||||
|
stdout_logfile_maxbytes = 0
|
||||||
|
stderr_logfile=/dev/stderr
|
||||||
|
stderr_logfile_maxbytes=0
|
||||||
|
|
||||||
|
[program:nginx]
|
||||||
|
command=/usr/sbin/nginx -g "daemon off;"
|
||||||
|
user=root
|
||||||
|
stdout_logfile=/dev/stdout
|
||||||
|
stdout_logfile_maxbytes = 0
|
||||||
|
stderr_logfile=/dev/stderr
|
||||||
|
stderr_logfile_maxbytes=0
|
||||||
|
|
||||||
|
[program:cron]
|
||||||
|
command=/usr/sbin/crond -f
|
||||||
|
user=root
|
||||||
|
stdout_logfile=/dev/stdout
|
||||||
|
stdout_logfile_maxbytes = 0
|
||||||
|
stderr_logfile=/dev/stderr
|
||||||
|
stderr_logfile_maxbytes=0
|
Loading…
Reference in New Issue