From 0ed2c9b307ea11552419b10599e67ffc584f35ad Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Thu, 1 Aug 2019 16:47:41 -0300 Subject: [PATCH] Refactor docker --- .dockerignore | 20 +++++-- .gitignore | 1 + docker-compose.yml | 33 ------------ Dockerfile => docker/Dockerfile | 42 +++++++++------ busy-wait.sh => docker/busy-wait.sh | 0 check_solr.sh => docker/check_solr.sh | 0 {config => docker/config}/env-sample | 0 {config => docker/config}/env_dockerfile | 0 {config => docker/config}/nginx/nginx.conf | 0 {config => docker/config}/nginx/sapl.conf | 0 create_admin.py => docker/create_admin.py | 0 {solr => docker}/docker-compose.yml | 54 ++++++++++++++----- docker-env.sh => docker/docker-env.sh | 0 genkey.py => docker/genkey.py | 0 gunicorn_start.sh => docker/gunicorn_start.sh | 0 docker/scripts_docker/backup-sapl.sh | 17 ++++++ .../scripts_docker}/remove-all-containers.sh | 0 .../scripts_docker}/remove-db.sh | 0 .../scripts_docker}/restore-db.sh | 0 docker/scripts_docker/restore-sapl.sh | 26 +++++++++ .../scripts_docker}/shell_sapl.sh | 0 .../simple_gunicorn.sh | 0 solr_api.py => docker/solr_api.py | 0 start.sh => docker/start.sh | 0 24 files changed, 130 insertions(+), 63 deletions(-) delete mode 100644 docker-compose.yml rename Dockerfile => docker/Dockerfile (60%) rename busy-wait.sh => docker/busy-wait.sh (100%) rename check_solr.sh => docker/check_solr.sh (100%) rename {config => docker/config}/env-sample (100%) rename {config => docker/config}/env_dockerfile (100%) rename {config => docker/config}/nginx/nginx.conf (100%) rename {config => docker/config}/nginx/sapl.conf (100%) rename create_admin.py => docker/create_admin.py (100%) rename {solr => docker}/docker-compose.yml (51%) rename docker-env.sh => docker/docker-env.sh (100%) rename genkey.py => docker/genkey.py (100%) rename gunicorn_start.sh => docker/gunicorn_start.sh (100%) create mode 100755 docker/scripts_docker/backup-sapl.sh rename {scripts_docker => docker/scripts_docker}/remove-all-containers.sh (100%) rename {scripts_docker => docker/scripts_docker}/remove-db.sh (100%) rename {scripts_docker => docker/scripts_docker}/restore-db.sh (100%) create mode 100755 docker/scripts_docker/restore-sapl.sh rename {scripts_docker => docker/scripts_docker}/shell_sapl.sh (100%) rename simple_gunicorn.sh => docker/simple_gunicorn.sh (100%) rename solr_api.py => docker/solr_api.py (100%) rename start.sh => docker/start.sh (100%) diff --git a/.dockerignore b/.dockerignore index 8f4c8f147..14b4481ad 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,18 @@ -media -collected_static +*.log +*.swp +*~ +whoosh_index/ +whoosh/ +media/ +collected_static/ +bower +bower_components +postgres-data/ +data/ +solr-*/ +.cache .git -whoosh +.github +.idea +.project +.env \ No newline at end of file diff --git a/.gitignore b/.gitignore index e59540379..67e285e2e 100644 --- a/.gitignore +++ b/.gitignore @@ -105,3 +105,4 @@ solr-*/ # ignora tudo dentro de media, mas cria a pasta no checkout media/* !media/.gitkeep + diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 3f4eb46b3..000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,33 +0,0 @@ -sapldb: - image: postgres:10.5-alpine - restart: always - environment: - POSTGRES_PASSWORD: sapl - POSTGRES_USER: sapl - POSTGRES_DB: sapl - PGDATA : /var/lib/postgresql/data/ - volumes: - - sapldb_data:/var/lib/postgresql/data/ - ports: - - "5432:5432" -sapl: - image: interlegis/sapl:3.1.160-RC0 - restart: always - environment: - ADMIN_PASSWORD: interlegis - ADMIN_EMAIL: email@dominio.net - DEBUG: 'False' - EMAIL_PORT: 587 - EMAIL_USE_TLS: 'False' - EMAIL_HOST: smtp.dominio.net - EMAIL_HOST_USER: usuariosmtp - EMAIL_SEND_USER: usuariosmtp - EMAIL_HOST_PASSWORD: senhasmtp - TZ: America/Sao_Paulo - volumes: - - sapl_data:/var/interlegis/sapl/data - - sapl_media:/var/interlegis/sapl/media - links: - - sapldb - ports: - - "80:80" \ No newline at end of file diff --git a/Dockerfile b/docker/Dockerfile similarity index 60% rename from Dockerfile rename to docker/Dockerfile index 9c33fcd0f..1879da32f 100644 --- a/Dockerfile +++ b/docker/Dockerfile @@ -1,11 +1,13 @@ -FROM alpine:3.8 +# SAPL BASE IMAGE +FROM alpine:3.8 AS sapl-base ENV BUILD_PACKAGES postgresql-dev graphviz-dev graphviz build-base git pkgconfig \ python3-dev libxml2-dev jpeg-dev libressl-dev libffi-dev libxslt-dev \ nodejs py3-lxml py3-magic postgresql-client poppler-utils antiword \ curl jq openssh-client vim bash -RUN apk update --update-cache && apk upgrade +RUN apk update --update-cache && apk upgrade && \ + apk add --update --no-cache $BUILD_PACKAGES RUN apk --update add fontconfig ttf-dejavu && fc-cache -fv @@ -16,21 +18,32 @@ RUN apk add --no-cache python3 nginx tzdata && \ rm -r /root/.cache && \ rm -f /etc/nginx/conf.d/* -RUN mkdir -p /var/interlegis/sapl && \ - apk add --update --no-cache $BUILD_PACKAGES - +# TODO: move to sapl production image? +RUN mkdir -p /var/interlegis/sapl && mkdir /var/log/sapl WORKDIR /var/interlegis/sapl/ +COPY . /var/interlegis/sapl/ +RUN pip install -r /var/interlegis/sapl/requirements/dev-requirements.txt --upgrade setuptools && \ + rm -r /root/.cache -ADD . /var/interlegis/sapl/ -COPY start.sh /var/interlegis/sapl/ -COPY config/nginx/sapl.conf /etc/nginx/conf.d -COPY config/nginx/nginx.conf /etc/nginx/nginx.conf +# SAPL PRODUCTION IMAGE +FROM sapl-base AS sapl -RUN pip install -r /var/interlegis/sapl/requirements/dev-requirements.txt --upgrade setuptools && \ - rm -r /root/.cache +WORKDIR /var/interlegis/sapl/ + +ENV HOME=/var/interlegis/sapl + +COPY docker/start.sh $HOME +COPY docker/check_solr.sh $HOME +COPY docker/solr_api.py $HOME +COPY docker/busy-wait.sh $HOME +COPY docker/create_admin.py $HOME +COPY docker/genkey.py $HOME +COPY docker/gunicorn_start.sh $HOME -COPY config/env_dockerfile /var/interlegis/sapl/sapl/.env +COPY docker/config/nginx/sapl.conf /etc/nginx/conf.d +COPY docker/config/nginx/nginx.conf /etc/nginx/nginx.conf +COPY docker/config/env_dockerfile /var/interlegis/sapl/sapl/.env RUN python3 manage.py collectstatic --noinput --clear @@ -38,11 +51,10 @@ RUN python3 manage.py collectstatic --noinput --clear RUN rm -rf /var/interlegis/sapl/sapl/.env && \ rm -rf /var/interlegis/sapl/sapl.db -RUN chmod +x /var/interlegis/sapl/start.sh && \ - chmod +x /var/interlegis/sapl/check_solr.sh && \ +RUN chmod +x /var/interlegis/sapl/*.sh && \ ln -sf /dev/stdout /var/log/nginx/access.log && \ ln -sf /dev/stderr /var/log/nginx/error.log && \ - mkdir /var/log/sapl/ && touch /var/interlegis/sapl/sapl.log && \ + touch /var/interlegis/sapl/sapl.log && \ ln -s /var/interlegis/sapl/sapl.log /var/log/sapl/sapl.log VOLUME ["/var/interlegis/sapl/data", "/var/interlegis/sapl/media"] diff --git a/busy-wait.sh b/docker/busy-wait.sh similarity index 100% rename from busy-wait.sh rename to docker/busy-wait.sh diff --git a/check_solr.sh b/docker/check_solr.sh similarity index 100% rename from check_solr.sh rename to docker/check_solr.sh diff --git a/config/env-sample b/docker/config/env-sample similarity index 100% rename from config/env-sample rename to docker/config/env-sample diff --git a/config/env_dockerfile b/docker/config/env_dockerfile similarity index 100% rename from config/env_dockerfile rename to docker/config/env_dockerfile diff --git a/config/nginx/nginx.conf b/docker/config/nginx/nginx.conf similarity index 100% rename from config/nginx/nginx.conf rename to docker/config/nginx/nginx.conf diff --git a/config/nginx/sapl.conf b/docker/config/nginx/sapl.conf similarity index 100% rename from config/nginx/sapl.conf rename to docker/config/nginx/sapl.conf diff --git a/create_admin.py b/docker/create_admin.py similarity index 100% rename from create_admin.py rename to docker/create_admin.py diff --git a/solr/docker-compose.yml b/docker/docker-compose.yml similarity index 51% rename from solr/docker-compose.yml rename to docker/docker-compose.yml index 71e25c76c..884b749a4 100644 --- a/solr/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,7 +1,21 @@ -version: '2' +## +## +## ATENÇÃO: A ATUALIZAÇÃO DESTE ARQUIVO EM AMBIENTES DE PRODUÇÃO PODE CAUSAR PERDA DE DADOS +## +## Esta atualização da versão e formato do arquivo docker-compose.yml pode POTENCIALMENTE causar +## a perda de dados. Portanto, aconselha-se a fazer o BACKUP da base de dados do PostgreSQL e +## da pasta 'media', assim como outros arquivos que julgar necessários, mas não expresso neste +## disclaimer por PRECAUÇÃO. +## +## Adicionalmente, temos um novo container (saplsolr) que possui seus volumes que devem ser +## mapeados para um diretório no host da máquina. +## +## +version: "3" services: sapldb: image: postgres:10.5-alpine + container_name: postgres restart: always environment: POSTGRES_PASSWORD: sapl @@ -11,10 +25,13 @@ services: volumes: - sapldb_data:/var/lib/postgresql/data/ ports: - - "5432:5432" + - "5433:5432" + networks: + - sapl-net saplsolr: image: solr:7.4-alpine + container_name: solr restart: always command: bin/solr start -c -f volumes: @@ -22,10 +39,17 @@ services: - solr_configsets:/opt/solr/server/solr/configsets ports: - "8983:8983" + networks: + - sapl-net sapl: - image: interlegis/sapl:3.1.152 - # build: . + image: interlegis/sapl:3.1.160-RC0 +# build: +# context: ../ +# dockerfile: ./docker/Dockerfile + container_name: sapl + labels: + NAME: "sapl" restart: always environment: ADMIN_PASSWORD: interlegis @@ -35,6 +59,7 @@ services: EMAIL_USE_TLS: 'False' EMAIL_HOST: smtp.dominio.net EMAIL_HOST_USER: usuariosmtp + EMAIL_SEND_USER: usuariosmtp EMAIL_HOST_PASSWORD: senhasmtp USE_SOLR: 'True' SOLR_COLLECTION: sapl @@ -43,18 +68,23 @@ services: volumes: - sapl_data:/var/interlegis/sapl/data - sapl_media:/var/interlegis/sapl/media - - sapl_root:/var/interlegis/sapl - volumes_from: + links: + - sapldb - saplsolr depends_on: - sapldb - saplsolr + networks: + - sapl-net ports: - "80:80" volumes: - sapldb_data: - sapl_data: - sapl_media: - sapl_root: - solr_data: - solr_configsets: + sapl_data: + sapl_media: + sapldb_data: + solr_data: + solr_configsets: + +networks: + sapl-net: + driver: bridge diff --git a/docker-env.sh b/docker/docker-env.sh similarity index 100% rename from docker-env.sh rename to docker/docker-env.sh diff --git a/genkey.py b/docker/genkey.py similarity index 100% rename from genkey.py rename to docker/genkey.py diff --git a/gunicorn_start.sh b/docker/gunicorn_start.sh similarity index 100% rename from gunicorn_start.sh rename to docker/gunicorn_start.sh diff --git a/docker/scripts_docker/backup-sapl.sh b/docker/scripts_docker/backup-sapl.sh new file mode 100755 index 000000000..c95945e1d --- /dev/null +++ b/docker/scripts_docker/backup-sapl.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +### +### NÃO ESTÁ BACKUP E RESTAURANDO CORRETAMENTE O BANCO!!!! +### + + +BACKUP_DIR=sapl-backup-`date -u +%Y-%m-%d-%H-%M` +mkdir -p ./$BACKUP_DIR + +# BACKUP DO BANCO DE DADOS +sudo docker exec -it postgres bash -c 'pg_dump -U sapl -d sapl -Fc -v > /tmp/database.backup' +sudo docker cp postgres:/tmp/database.backup ./$BACKUP_DIR + +# BACKUP DA PASTA MEDIA +sudo docker exec -it sapl bash -c 'tar -cvzf media.tar.gz media' +sudo docker cp sapl:/var/interlegis/sapl/media.tar.gz ./$BACKUP_DIR diff --git a/scripts_docker/remove-all-containers.sh b/docker/scripts_docker/remove-all-containers.sh similarity index 100% rename from scripts_docker/remove-all-containers.sh rename to docker/scripts_docker/remove-all-containers.sh diff --git a/scripts_docker/remove-db.sh b/docker/scripts_docker/remove-db.sh similarity index 100% rename from scripts_docker/remove-db.sh rename to docker/scripts_docker/remove-db.sh diff --git a/scripts_docker/restore-db.sh b/docker/scripts_docker/restore-db.sh similarity index 100% rename from scripts_docker/restore-db.sh rename to docker/scripts_docker/restore-db.sh diff --git a/docker/scripts_docker/restore-sapl.sh b/docker/scripts_docker/restore-sapl.sh new file mode 100755 index 000000000..4f5adbf1f --- /dev/null +++ b/docker/scripts_docker/restore-sapl.sh @@ -0,0 +1,26 @@ +#!/bin/bash + + +### +### NÃO ESTÁ RESTAURANDO CORRETAMENTE O BANCO!!!! +### + +BACKUP_DIR=$1 +if [ -z $BACKUP_DIR ]; then + echo "Diretório de backup não informado!" + echo "uso: $./restore-sapl.sh " + exit 1 +fi + +# RESTORE DO BANCO DE DADOS +sudo docker cp ./$BACKUP_DIR/database.backup postgres:/tmp/ +sudo docker exec -it postgres bash -c 'ls -lah /tmp/database.backup' + +# --clean --data-only --disable-trigger ???? +sudo docker exec -it postgres bash -c 'pg_restore --disable-triggers --data-only -Fc -v -U sapl -d sapl /tmp/database.backup' + +# RESTORE DA PASTA MEDIA +sudo docker cp ./$BACKUP_DIR/media.tar.gz sapl:/var/interlegis/sapl +sudo docker exec -it sapl bash -c 'ls -lah /var/interlegis/sapl/media.tar.gz' +#sudo docker exec -it sapl bash -c 'cd /var/interlegis/sapl && tar -zxvf media.tar.gz .' + diff --git a/scripts_docker/shell_sapl.sh b/docker/scripts_docker/shell_sapl.sh similarity index 100% rename from scripts_docker/shell_sapl.sh rename to docker/scripts_docker/shell_sapl.sh diff --git a/simple_gunicorn.sh b/docker/simple_gunicorn.sh similarity index 100% rename from simple_gunicorn.sh rename to docker/simple_gunicorn.sh diff --git a/solr_api.py b/docker/solr_api.py similarity index 100% rename from solr_api.py rename to docker/solr_api.py diff --git a/start.sh b/docker/start.sh similarity index 100% rename from start.sh rename to docker/start.sh