Loading .dockerignore +1 −1 Original line number Diff line number Diff line * !rootfs !docker-entrypoint-initdb.d .gitlab-ci.yml +5 −96 Original line number Diff line number Diff line Loading @@ -7,105 +7,14 @@ include: file: '/deployment.yml' - project: 'redmic-project/gitlab-ci-templates' ref: master file: '/maintenance.yml' file: '/deployment-custom-image.yml' stages: - pre-package - package - test-package - post-package - deploy - maintenance .deploy: variables: STACK: vessel .deploy-development: variables: COMPOSE_FILE: docker-compose.${CI_PROJECT_NAME}.tmpl.yml:docker-compose.${CI_PROJECT_NAME}.dev.yml script: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} INTERVAL=${INTERVAL} MAINTENANCE_INTERVAL_MINUTE="${MAINTENANCE_INTERVAL_MINUTE}" MAINTENANCE_INTERVAL_HOUR="${MAINTENANCE_INTERVAL_HOUR}" MAINTENANCE_INTERVAL_DAY_OF_MONTH="${MAINTENANCE_INTERVAL_DAY_OF_MONTH}" MAINTENANCE_INTERVAL_MONTH="${MAINTENANCE_INTERVAL_MONTH}" MAINTENANCE_INTERVAL_DAY_OF_WEEK="${MAINTENANCE_INTERVAL_DAY_OF_WEEK}" RETENTION_TIME="${RETENTION_TIME}" POSTGRES_WORK_MEM=${POSTGRES_WORK_MEM} EXPORTER_USER=${EXPORTER_USER} EXPORTER_PASS=${EXPORTER_PASS} environment: name: dev/${CI_PROJECT_NAME} .deploy-production: variables: COMPOSE_FILE: docker-compose.${CI_PROJECT_NAME}.tmpl.yml:docker-compose.${CI_PROJECT_NAME}.prod.yml script: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} INTERVAL=${INTERVAL} MAINTENANCE_INTERVAL_MINUTE="${MAINTENANCE_INTERVAL_MINUTE}" MAINTENANCE_INTERVAL_HOUR="${MAINTENANCE_INTERVAL_HOUR}" MAINTENANCE_INTERVAL_DAY_OF_MONTH="${MAINTENANCE_INTERVAL_DAY_OF_MONTH}" MAINTENANCE_INTERVAL_MONTH="${MAINTENANCE_INTERVAL_MONTH}" MAINTENANCE_INTERVAL_DAY_OF_WEEK="${MAINTENANCE_INTERVAL_DAY_OF_WEEK}" RETENTION_TIME="${RETENTION_TIME}" POSTGRES_WORK_MEM=${POSTGRES_WORK_MEM} EXPORTER_USER=${EXPORTER_USER} EXPORTER_PASS=${EXPORTER_PASS} AWS_REGION=${AWS_REGION} environment: name: pro/${CI_PROJECT_NAME} .deploy-backup: extends: .deploy variables: SERVICES_TO_CHECK: ${STACK}_backup-db IMAGE_NAME: ${POSTGRES_BACKUP_IMAGE_NAME} IMAGE_TAG: ${POSTGRES_BACKUP_IMAGE_TAG} script: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} AWS_REGION=${AWS_REGION} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} POSTGRES_HOSTNAME=${POSTGRES_HOSTNAME} BUCKET_BACKUP_DB=${BUCKET_BACKUP_DB} AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} PUSHGATEWAY_HOST=${PUSHGATEWAY_HOST} PUSHGATEWAY_JOB=${PUSHGATEWAY_JOB} .deploy-backup-development: extends: .deploy-backup variables: SSH_REMOTE: ${DEV_SSH_REMOTE} COMPOSE_FILE: docker-compose.backup-db.tmpl.yml:docker-compose.backup-db.dev.yml environment: name: dev/backup-db .deploy-backup-production: extends: .deploy-backup variables: SSH_REMOTE: ${PRO_SSH_REMOTE} COMPOSE_FILE: docker-compose.backup-db.tmpl.yml:docker-compose.backup-db.prod.yml environment: name: pro/backup-db deploy-backup-support-branch-development: extends: .deploy-backup-development only: - branches except: - master - schedules deploy-backup-stable-branch-development: extends: .deploy-backup-development only: - master except: - schedules deploy-backup-stable-branch-production: extends: .deploy-backup-production only: - master except: - schedules .scheduled-run: variables: SERVICE: ${STACK}_backup-db scheduled-run-development: script: ':' Dockerfile +32 −25 Original line number Diff line number Diff line FROM mdillon/postgis:11-alpine ARG POSTGIS_IMAGE_TAG="11-3.2-alpine" FROM postgis/postgis:${POSTGIS_IMAGE_TAG} LABEL maintainer="info@redmic.es" ENV PG_CRON_VERSION="1.1.4" \ PG_PARTMAN_VERSION="4.0.0" \ POSTGRES_WORK_MEM="1GB" ARG PG_CRON_VERSION="1.4.1" \ PG_PARTMAN_VERSION="4.6.0" \ BUILD_BASE_VERSION="0.5-r2" \ CLANG_VERSION="12.0.1-r1" \ LLVM_VERSION="12.0.1-r0" \ CA_CERTIFICATES_VERSION="20211220-r0" \ OPENSSL_VERSION="1.1.1l-r8" \ TAR_VERSION="1.34-r0" RUN apk add --no-cache --virtual \ .build-deps \ build-base \ ca-certificates \ openssl \ tar && \ wget -O /pg_cron.tgz https://github.com/citusdata/pg_cron/archive/v${PG_CRON_VERSION}.tar.gz && \ tar xvzf /pg_cron.tgz && \ cd pg_cron-${PG_CRON_VERSION} && \ # hadolint ignore=DL3003 RUN apk add --no-cache --virtual .build-deps \ build-base="${BUILD_BASE_VERSION}" \ clang="${CLANG_VERSION}" \ llvm="${LLVM_VERSION}" \ ca-certificates="${CA_CERTIFICATES_VERSION}" \ openssl="${OPENSSL_VERSION}" \ tar="${TAR_VERSION}" && \ # install pg_cron wget -q -O pg_cron.tar.gz "https://github.com/citusdata/pg_cron/archive/v${PG_CRON_VERSION}.tar.gz" && \ tar -xzf pg_cron.tar.gz && \ cd pg_cron-* && \ sed -i.bak -e 's/-Werror//g' Makefile && \ sed -i.bak -e 's/-Wno-implicit-fallthrough//g' Makefile && \ make && \ make install && \ cd .. && \ rm -rf pg_cron.tgz pg_cron-* && \ wget -O /pg_partman.tgz https://github.com/pgpartman/pg_partman/archive/v${PG_PARTMAN_VERSION}.tar.gz && \ tar xvzf /pg_partman.tgz && \ cd pg_partman-${PG_PARTMAN_VERSION} && \ cd .. ; \ # install pg_partman wget -q -O pg_partman.tar.gz "https://github.com/pgpartman/pg_partman/archive/v${PG_PARTMAN_VERSION}.tar.gz" && \ tar -xzf pg_partman.tar.gz && \ cd pg_partman-* && \ make && \ make NO_BGW=1 install && \ cd .. && \ rm -rf pg_partman.tgz pg_partman-* && \ echo "shared_preload_libraries='pg_cron'" >> /usr/local/share/postgresql/postgresql.conf.sample && \ echo "checkpoint_timeout = 30min" >> /usr/local/share/postgresql/postgresql.conf.sample && \ echo "max_wal_size = 2GB" >> /usr/local/share/postgresql/postgresql.conf.sample && \ mv /usr/local/bin/docker-entrypoint.sh /usr/local/bin/docker-entrypoint-origin.sh cd .. ; \ # clean rm -rf pg_cron* pg_partman* && \ apk del .build-deps COPY rootfs / COPY docker-entrypoint-initdb.d /docker-entrypoint-initdb.d README.md +3 −2 Original line number Diff line number Diff line # AIS Postgres Base de datos PostgreSQL para almacenar datos AIS. La tabla principal está particionada por tiempo, de esta forma sólo se accede agiliza las búsquedas que impliquen consultas por fechas. La tabla principal está particionada por tiempo, para agilizar las consultas por fecha. # Cálculos ## Cálculos * Capacidad del disco 51200 MB * 5% de espacio reservado 2560 MB Loading deploy/.env +26 −4 Original line number Diff line number Diff line POSTGIS_IMAGE_TAG=11-3.2-alpine PG_CRON_VERSION=1.4.1 PG_PARTMAN_VERSION=4.6.0 BUILD_BASE_VERSION=0.5-r2 CLANG_VERSION=12.0.1-r1 LLVM_VERSION=12.0.1-r0 CA_CERTIFICATES_VERSION=20211220-r0 OPENSSL_VERSION=1.1.1l-r8 TAR_VERSION=1.34-r0 SHARED_PRELOAD_LIBRARIES=pg_cron CHECKPOINT_TIMEOUT=30min WORK_MEM=1GB MAX_WAL_SIZE=2GB POSTGRES_DB=ais POSTGRES_USER=postgres POSTGRES_PASSWORD=changeme PGDATA=/var/lib/postgresql/data/db-files/ INTERVAL=hourly MAINTENANCE_INTERVAL=30 * * * * RETENTION_TIME=7 days POSTGRES_DB=ais POSTGRES_WORK_MEM=1GB RETENTION_TIME=4 days MAINTENANCE_INTERVAL_MINUTE=30 MAINTENANCE_INTERVAL_HOUR=* MAINTENANCE_INTERVAL_DAY_OF_MONTH=* MAINTENANCE_INTERVAL_MONTH=* MAINTENANCE_INTERVAL_DAY_OF_WEEK=* EXPORTER_USER=exporter-user EXPORTER_PASS=exporter-pass NETWORK_ALIAS=ais-db DATA_VOL_NAME=vessel-postgres-vol Loading
.dockerignore +1 −1 Original line number Diff line number Diff line * !rootfs !docker-entrypoint-initdb.d
.gitlab-ci.yml +5 −96 Original line number Diff line number Diff line Loading @@ -7,105 +7,14 @@ include: file: '/deployment.yml' - project: 'redmic-project/gitlab-ci-templates' ref: master file: '/maintenance.yml' file: '/deployment-custom-image.yml' stages: - pre-package - package - test-package - post-package - deploy - maintenance .deploy: variables: STACK: vessel .deploy-development: variables: COMPOSE_FILE: docker-compose.${CI_PROJECT_NAME}.tmpl.yml:docker-compose.${CI_PROJECT_NAME}.dev.yml script: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} INTERVAL=${INTERVAL} MAINTENANCE_INTERVAL_MINUTE="${MAINTENANCE_INTERVAL_MINUTE}" MAINTENANCE_INTERVAL_HOUR="${MAINTENANCE_INTERVAL_HOUR}" MAINTENANCE_INTERVAL_DAY_OF_MONTH="${MAINTENANCE_INTERVAL_DAY_OF_MONTH}" MAINTENANCE_INTERVAL_MONTH="${MAINTENANCE_INTERVAL_MONTH}" MAINTENANCE_INTERVAL_DAY_OF_WEEK="${MAINTENANCE_INTERVAL_DAY_OF_WEEK}" RETENTION_TIME="${RETENTION_TIME}" POSTGRES_WORK_MEM=${POSTGRES_WORK_MEM} EXPORTER_USER=${EXPORTER_USER} EXPORTER_PASS=${EXPORTER_PASS} environment: name: dev/${CI_PROJECT_NAME} .deploy-production: variables: COMPOSE_FILE: docker-compose.${CI_PROJECT_NAME}.tmpl.yml:docker-compose.${CI_PROJECT_NAME}.prod.yml script: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} INTERVAL=${INTERVAL} MAINTENANCE_INTERVAL_MINUTE="${MAINTENANCE_INTERVAL_MINUTE}" MAINTENANCE_INTERVAL_HOUR="${MAINTENANCE_INTERVAL_HOUR}" MAINTENANCE_INTERVAL_DAY_OF_MONTH="${MAINTENANCE_INTERVAL_DAY_OF_MONTH}" MAINTENANCE_INTERVAL_MONTH="${MAINTENANCE_INTERVAL_MONTH}" MAINTENANCE_INTERVAL_DAY_OF_WEEK="${MAINTENANCE_INTERVAL_DAY_OF_WEEK}" RETENTION_TIME="${RETENTION_TIME}" POSTGRES_WORK_MEM=${POSTGRES_WORK_MEM} EXPORTER_USER=${EXPORTER_USER} EXPORTER_PASS=${EXPORTER_PASS} AWS_REGION=${AWS_REGION} environment: name: pro/${CI_PROJECT_NAME} .deploy-backup: extends: .deploy variables: SERVICES_TO_CHECK: ${STACK}_backup-db IMAGE_NAME: ${POSTGRES_BACKUP_IMAGE_NAME} IMAGE_TAG: ${POSTGRES_BACKUP_IMAGE_TAG} script: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} AWS_REGION=${AWS_REGION} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} POSTGRES_HOSTNAME=${POSTGRES_HOSTNAME} BUCKET_BACKUP_DB=${BUCKET_BACKUP_DB} AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} PUSHGATEWAY_HOST=${PUSHGATEWAY_HOST} PUSHGATEWAY_JOB=${PUSHGATEWAY_JOB} .deploy-backup-development: extends: .deploy-backup variables: SSH_REMOTE: ${DEV_SSH_REMOTE} COMPOSE_FILE: docker-compose.backup-db.tmpl.yml:docker-compose.backup-db.dev.yml environment: name: dev/backup-db .deploy-backup-production: extends: .deploy-backup variables: SSH_REMOTE: ${PRO_SSH_REMOTE} COMPOSE_FILE: docker-compose.backup-db.tmpl.yml:docker-compose.backup-db.prod.yml environment: name: pro/backup-db deploy-backup-support-branch-development: extends: .deploy-backup-development only: - branches except: - master - schedules deploy-backup-stable-branch-development: extends: .deploy-backup-development only: - master except: - schedules deploy-backup-stable-branch-production: extends: .deploy-backup-production only: - master except: - schedules .scheduled-run: variables: SERVICE: ${STACK}_backup-db scheduled-run-development: script: ':'
Dockerfile +32 −25 Original line number Diff line number Diff line FROM mdillon/postgis:11-alpine ARG POSTGIS_IMAGE_TAG="11-3.2-alpine" FROM postgis/postgis:${POSTGIS_IMAGE_TAG} LABEL maintainer="info@redmic.es" ENV PG_CRON_VERSION="1.1.4" \ PG_PARTMAN_VERSION="4.0.0" \ POSTGRES_WORK_MEM="1GB" ARG PG_CRON_VERSION="1.4.1" \ PG_PARTMAN_VERSION="4.6.0" \ BUILD_BASE_VERSION="0.5-r2" \ CLANG_VERSION="12.0.1-r1" \ LLVM_VERSION="12.0.1-r0" \ CA_CERTIFICATES_VERSION="20211220-r0" \ OPENSSL_VERSION="1.1.1l-r8" \ TAR_VERSION="1.34-r0" RUN apk add --no-cache --virtual \ .build-deps \ build-base \ ca-certificates \ openssl \ tar && \ wget -O /pg_cron.tgz https://github.com/citusdata/pg_cron/archive/v${PG_CRON_VERSION}.tar.gz && \ tar xvzf /pg_cron.tgz && \ cd pg_cron-${PG_CRON_VERSION} && \ # hadolint ignore=DL3003 RUN apk add --no-cache --virtual .build-deps \ build-base="${BUILD_BASE_VERSION}" \ clang="${CLANG_VERSION}" \ llvm="${LLVM_VERSION}" \ ca-certificates="${CA_CERTIFICATES_VERSION}" \ openssl="${OPENSSL_VERSION}" \ tar="${TAR_VERSION}" && \ # install pg_cron wget -q -O pg_cron.tar.gz "https://github.com/citusdata/pg_cron/archive/v${PG_CRON_VERSION}.tar.gz" && \ tar -xzf pg_cron.tar.gz && \ cd pg_cron-* && \ sed -i.bak -e 's/-Werror//g' Makefile && \ sed -i.bak -e 's/-Wno-implicit-fallthrough//g' Makefile && \ make && \ make install && \ cd .. && \ rm -rf pg_cron.tgz pg_cron-* && \ wget -O /pg_partman.tgz https://github.com/pgpartman/pg_partman/archive/v${PG_PARTMAN_VERSION}.tar.gz && \ tar xvzf /pg_partman.tgz && \ cd pg_partman-${PG_PARTMAN_VERSION} && \ cd .. ; \ # install pg_partman wget -q -O pg_partman.tar.gz "https://github.com/pgpartman/pg_partman/archive/v${PG_PARTMAN_VERSION}.tar.gz" && \ tar -xzf pg_partman.tar.gz && \ cd pg_partman-* && \ make && \ make NO_BGW=1 install && \ cd .. && \ rm -rf pg_partman.tgz pg_partman-* && \ echo "shared_preload_libraries='pg_cron'" >> /usr/local/share/postgresql/postgresql.conf.sample && \ echo "checkpoint_timeout = 30min" >> /usr/local/share/postgresql/postgresql.conf.sample && \ echo "max_wal_size = 2GB" >> /usr/local/share/postgresql/postgresql.conf.sample && \ mv /usr/local/bin/docker-entrypoint.sh /usr/local/bin/docker-entrypoint-origin.sh cd .. ; \ # clean rm -rf pg_cron* pg_partman* && \ apk del .build-deps COPY rootfs / COPY docker-entrypoint-initdb.d /docker-entrypoint-initdb.d
README.md +3 −2 Original line number Diff line number Diff line # AIS Postgres Base de datos PostgreSQL para almacenar datos AIS. La tabla principal está particionada por tiempo, de esta forma sólo se accede agiliza las búsquedas que impliquen consultas por fechas. La tabla principal está particionada por tiempo, para agilizar las consultas por fecha. # Cálculos ## Cálculos * Capacidad del disco 51200 MB * 5% de espacio reservado 2560 MB Loading
deploy/.env +26 −4 Original line number Diff line number Diff line POSTGIS_IMAGE_TAG=11-3.2-alpine PG_CRON_VERSION=1.4.1 PG_PARTMAN_VERSION=4.6.0 BUILD_BASE_VERSION=0.5-r2 CLANG_VERSION=12.0.1-r1 LLVM_VERSION=12.0.1-r0 CA_CERTIFICATES_VERSION=20211220-r0 OPENSSL_VERSION=1.1.1l-r8 TAR_VERSION=1.34-r0 SHARED_PRELOAD_LIBRARIES=pg_cron CHECKPOINT_TIMEOUT=30min WORK_MEM=1GB MAX_WAL_SIZE=2GB POSTGRES_DB=ais POSTGRES_USER=postgres POSTGRES_PASSWORD=changeme PGDATA=/var/lib/postgresql/data/db-files/ INTERVAL=hourly MAINTENANCE_INTERVAL=30 * * * * RETENTION_TIME=7 days POSTGRES_DB=ais POSTGRES_WORK_MEM=1GB RETENTION_TIME=4 days MAINTENANCE_INTERVAL_MINUTE=30 MAINTENANCE_INTERVAL_HOUR=* MAINTENANCE_INTERVAL_DAY_OF_MONTH=* MAINTENANCE_INTERVAL_MONTH=* MAINTENANCE_INTERVAL_DAY_OF_WEEK=* EXPORTER_USER=exporter-user EXPORTER_PASS=exporter-pass NETWORK_ALIAS=ais-db DATA_VOL_NAME=vessel-postgres-vol