Browse Source

Refactor docker

pull/2907/head
Edward Ribeiro 6 years ago
parent
commit
0ed2c9b307
  1. 20
      .dockerignore
  2. 1
      .gitignore
  3. 33
      docker-compose.yml
  4. 42
      docker/Dockerfile
  5. 0
      docker/busy-wait.sh
  6. 0
      docker/check_solr.sh
  7. 0
      docker/config/env-sample
  8. 0
      docker/config/env_dockerfile
  9. 0
      docker/config/nginx/nginx.conf
  10. 0
      docker/config/nginx/sapl.conf
  11. 0
      docker/create_admin.py
  12. 46
      docker/docker-compose.yml
  13. 0
      docker/docker-env.sh
  14. 0
      docker/genkey.py
  15. 0
      docker/gunicorn_start.sh
  16. 17
      docker/scripts_docker/backup-sapl.sh
  17. 0
      docker/scripts_docker/remove-all-containers.sh
  18. 0
      docker/scripts_docker/remove-db.sh
  19. 0
      docker/scripts_docker/restore-db.sh
  20. 26
      docker/scripts_docker/restore-sapl.sh
  21. 0
      docker/scripts_docker/shell_sapl.sh
  22. 0
      docker/simple_gunicorn.sh
  23. 0
      docker/solr_api.py
  24. 0
      docker/start.sh

20
.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

1
.gitignore

@ -105,3 +105,4 @@ solr-*/
# ignora tudo dentro de media, mas cria a pasta no checkout
media/*
!media/.gitkeep

33
docker-compose.yml

@ -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"

42
Dockerfile → 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"]

0
busy-wait.sh → docker/busy-wait.sh

0
check_solr.sh → docker/check_solr.sh

0
config/env-sample → docker/config/env-sample

0
config/env_dockerfile → docker/config/env_dockerfile

0
config/nginx/nginx.conf → docker/config/nginx/nginx.conf

0
config/nginx/sapl.conf → docker/config/nginx/sapl.conf

0
create_admin.py → docker/create_admin.py

46
solr/docker-compose.yml → 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:
sapldb_data:
solr_data:
solr_configsets:
networks:
sapl-net:
driver: bridge

0
docker-env.sh → docker/docker-env.sh

0
genkey.py → docker/genkey.py

0
gunicorn_start.sh → docker/gunicorn_start.sh

17
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

0
scripts_docker/remove-all-containers.sh → docker/scripts_docker/remove-all-containers.sh

0
scripts_docker/remove-db.sh → docker/scripts_docker/remove-db.sh

0
scripts_docker/restore-db.sh → docker/scripts_docker/restore-db.sh

26
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 <backup directory>"
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 .'

0
scripts_docker/shell_sapl.sh → docker/scripts_docker/shell_sapl.sh

0
simple_gunicorn.sh → docker/simple_gunicorn.sh

0
solr_api.py → docker/solr_api.py

0
start.sh → docker/start.sh

Loading…
Cancel
Save