From f6454fc59533d5a203f4cfbf3fc3b350ca857067 Mon Sep 17 00:00:00 2001 From: sergey grinko Date: Tue, 22 Aug 2023 11:28:26 +0300 Subject: [PATCH] =?UTF-8?q?=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=B9=D0=BD=D0=B5=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=B4=D0=BE=2015.4=20=D0=B8=20=D0=B4=D1=80=D1=83?= =?UTF-8?q?=D0=B3=D0=B8=D1=85=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=D0=B4=D0=BD?= =?UTF-8?q?=D0=B8=D1=85=20=D0=BC=D0=B8=D0=BD=D0=BE=D1=80=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Поправил документацию - Добавил новую папку /app_db_init_sql для запуска скриптов во вновь созданной БД с именем APP_DB - Добавил переменную APP_DB_PASSWORD. - Обновил минорные версии для pgbouncer, postgres, mamonsu - Исправление ложных срабатываний в контроле JOBs для mamonsu - Update init_db_3_cron.sql --- 12/bin/hub_push.sh | 6 ++--- 12/docker-mamonsu/Dockerfile | 2 +- 12/docker-mamonsu/pg_jobs_check.py | 2 +- 12/docker-postgres/Dockerfile | 7 +++--- 12/docker-postgres/initdb-extension.sh | 9 ++++++- 12/docker-postgres/sql/init_db_3_cron.sql | 8 +++--- 12/docker-postgres/sql/pre.sql | 17 +++++++++++++ 12/postgres-service.yml | 2 ++ 12/postgres-service_all.yml | 2 ++ 12/postgres-service_pgb.yml | 2 ++ 13/bin/hub_push.sh | 6 ++--- 13/docker-mamonsu/Dockerfile | 2 +- 13/docker-mamonsu/pg_jobs_check.py | 2 +- 13/docker-postgres/Dockerfile | 7 +++--- 13/docker-postgres/initdb-extension.sh | 9 ++++++- 13/docker-postgres/sql/init_db_3_cron.sql | 8 +++--- 13/docker-postgres/sql/pre.sql | 17 +++++++++++++ 13/postgres-service.yml | 2 ++ 13/postgres-service_all.yml | 2 ++ 13/postgres-service_pgb.yml | 2 ++ 14/bin/hub_push.sh | 6 ++--- 14/docker-mamonsu/Dockerfile | 2 +- 14/docker-mamonsu/pg_jobs_check.py | 2 +- 14/docker-postgres/Dockerfile | 7 +++--- 14/docker-postgres/initdb-extension.sh | 9 ++++++- 14/docker-postgres/sql/init_db_3_cron.sql | 8 +++--- 14/docker-postgres/sql/pre.sql | 17 +++++++++++++ 14/postgres-service.yml | 2 ++ 14/postgres-service_all.yml | 2 ++ 14/postgres-service_pgb.yml | 2 ++ 15/bin/hub_push.sh | 26 ++++++++++---------- 15/docker-mamonsu/Dockerfile | 2 +- 15/docker-mamonsu/pg_jobs_check.py | 2 +- 15/docker-postgres/Dockerfile | 8 +++--- 15/docker-postgres/initdb-extension.sh | 9 ++++++- 15/docker-postgres/sql/init_db_3_cron.sql | 8 +++--- 15/docker-postgres/sql/pre.sql | 17 +++++++++++++ 15/postgres-service.yml | 2 ++ 15/postgres-service_all.yml | 2 ++ 15/postgres-service_pgb.yml | 2 ++ README.md | 30 +++++++++++++++++------ 41 files changed, 209 insertions(+), 70 deletions(-) diff --git a/12/bin/hub_push.sh b/12/bin/hub_push.sh index 49e412c..76ad90e 100644 --- a/12/bin/hub_push.sh +++ b/12/bin/hub_push.sh @@ -1,6 +1,6 @@ #!/bin/bash VERSION=12 -MINOR=15 +MINOR=16 set -euo pipefail @@ -72,6 +72,6 @@ if ! docker image ls | grep "grufos/mamonsu" ; then echo " push ..." docker tag ${VERSION}_mamonsu:latest grufos/mamonsu:latest # docker push grufos/mamonsu:latest - docker tag grufos/mamonsu:latest grufos/mamonsu:${VERSION}_3.5.3 - docker push grufos/mamonsu:${VERSION}_3.5.3 + docker tag grufos/mamonsu:latest grufos/mamonsu:${VERSION}_3.5.5 + docker push grufos/mamonsu:${VERSION}_3.5.5 fi diff --git a/12/docker-mamonsu/Dockerfile b/12/docker-mamonsu/Dockerfile index cf72fea..359a3cd 100644 --- a/12/docker-mamonsu/Dockerfile +++ b/12/docker-mamonsu/Dockerfile @@ -9,7 +9,7 @@ ENV DEBIAN_RELEASE bullseye ENV PG_MAJOR 12 ENV BACKUP_PATH /mnt/pgbak # version mamonsu -ENV VERSION 3.5.3 +ENV VERSION 3.5.5 # explicitly set user/group IDs RUN set -eux; \ diff --git a/12/docker-mamonsu/pg_jobs_check.py b/12/docker-mamonsu/pg_jobs_check.py index 82706f9..3b2929d 100644 --- a/12/docker-mamonsu/pg_jobs_check.py +++ b/12/docker-mamonsu/pg_jobs_check.py @@ -13,7 +13,7 @@ class PgJobsCheck(Plugin): # получаем список всех БД query_agent_discovery = "select datname from pg_catalog.pg_database where datistemplate = false" # контролируем ошибки для конкретной БД - query = "select count(*) from cron.get_job_run_details('{1}','{0}'::interval) where status <> 'succeeded'" + query = "select count(*) from cron.get_job_run_details('{1}','{0}'::interval) where status = 'failed'" query_table_exists = "select 1 from pg_class where relname='job_run_details' and relnamespace=(select oid from pg_namespace where nspname='cron')" AgentPluginType = 'pg' diff --git a/12/docker-postgres/Dockerfile b/12/docker-postgres/Dockerfile index 8826ef9..382f5b1 100644 --- a/12/docker-postgres/Dockerfile +++ b/12/docker-postgres/Dockerfile @@ -4,7 +4,7 @@ # https://hub.docker.com/r/postgis/postgis # https://github.com/postgis/docker-postgis # -FROM postgres:12.15 +FROM postgres:12.16 LABEL maintainer="Sergey Grinko " @@ -103,14 +103,15 @@ RUN localedef -i ru_RU -c -f UTF-8 -A /usr/share/locale/locale.alias ru_RU.UTF-8 && cd / \ && ln -s /usr/share/postgresql/$PG_MAJOR/tsearch_data /usr/share/postgresql/ \ # ====== clean all unused package... - && apt-mark hold llvm-11-runtime \ && apt-get purge -y gcc freetds-dev git make postgresql-server-dev-$PG_MAJOR libicu-dev *-dev* \ && apt-get -f install \ && apt-get -y autoremove \ && apt-get -y clean \ && apt-get -y autoclean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /var/cache/apt/* \ - && mkdir -p /docker-entrypoint-initdb.d + && mkdir -p /docker-entrypoint-initdb.d \ + && mkdir -p /app_db_init_sql \ + && chmod 0777 /app_db_init_sql COPY ./locales.conf /etc/locales.conf # copy bash files diff --git a/12/docker-postgres/initdb-extension.sh b/12/docker-postgres/initdb-extension.sh index ae7e26e..38f234b 100644 --- a/12/docker-postgres/initdb-extension.sh +++ b/12/docker-postgres/initdb-extension.sh @@ -61,7 +61,7 @@ cd /usr/local/bin/ # Create the 'template_extension' template DB and application DB if [ "$APP_DB" != "" ]; then - psql -f pre.sql -v DEPLOY_PASSWORD="$DEPLOY_PASSWORD" -v PGBOUNCER_PASSWORD="$PGBOUNCER_PASSWORD" -v APP_DB="$APP_DB" + psql -f pre.sql -v DEPLOY_PASSWORD="$DEPLOY_PASSWORD" -v PGBOUNCER_PASSWORD="$PGBOUNCER_PASSWORD" -v APP_DB="$APP_DB" -v APP_DB_PASSWORD="$APP_DB_PASSWORD" else psql -f pre.sql -v DEPLOY_PASSWORD="$DEPLOY_PASSWORD" -v PGBOUNCER_PASSWORD="$PGBOUNCER_PASSWORD" fi @@ -80,6 +80,13 @@ for DB in "$POSTGRES_DB" template_extension "$APP_DB" ; do if [ "$DB" != "template_extension" ] ; then psql --dbname="$DB" -f db_target.sql -v DEV_SCHEMA="$DEV_SCHEMA" -v email_server="$EMAIL_SERVER" fi + if [ "$DB" = "$APP_DB" ] ; then + echo " Иннициализируем БД всеми скриптами из каталога /app_db_init_sql ..." + for file_sql in $(ls /app_db_init_sql/*.sql) ; do + echo "Файл: $file_sql" + psql --dbname="$DB" -f "$file_sql" + done + fi fi fi done diff --git a/12/docker-postgres/sql/init_db_3_cron.sql b/12/docker-postgres/sql/init_db_3_cron.sql index 6184217..0faa828 100644 --- a/12/docker-postgres/sql/init_db_3_cron.sql +++ b/12/docker-postgres/sql/init_db_3_cron.sql @@ -212,10 +212,10 @@ GRANT ALL ON SCHEMA cron TO postgres; -- в 1-ю неделю месяца замораживаем идентификаторы транзакций, в остальные недели только собираем статистику \if :{?IS_SETUPDB} \if :IS_SETUPDB - select cron.schedule('vacuum JOB freeze', '0 0 1-7 * 0', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого месяца - select cron.schedule('vacuum JOB', '0 0 8-31 * 0', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца + select cron.schedule('vacuum JOB freeze', '0 0 1-7 1,6 */7', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого полугодия + select cron.schedule('vacuum JOB', '0 0 8-31 * */7', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца \endif \else - select cron.schedule('vacuum JOB freeze', '0 0 1-7 * 0', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого месяца - select cron.schedule('vacuum JOB', '0 0 8-31 * 0', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца + select cron.schedule('vacuum JOB freeze', '0 0 1-7 1,6 */7', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого полугодия + select cron.schedule('vacuum JOB', '0 0 8-31 * */7', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца \endif diff --git a/12/docker-postgres/sql/pre.sql b/12/docker-postgres/sql/pre.sql index a19832b..ee9e3a9 100644 --- a/12/docker-postgres/sql/pre.sql +++ b/12/docker-postgres/sql/pre.sql @@ -15,6 +15,17 @@ select not exists(select true FROM pg_catalog.pg_database where datname='templat \if :is_check CREATE DATABASE :"APP_DB"; \endif + + -- роль для приложения + select not exists(select true FROM pg_catalog.pg_roles where rolname=:'APP_DB') as is_check + \gset + \if :is_check + CREATE ROLE :"APP_DB" ; + SET log_statement='none'; + ALTER ROLE :"APP_DB" WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD :'APP_DB_PASSWORD'; + SET log_statement='ddl'; + ALTER DATABASE :"APP_DB" OWNER TO :"APP_DB"; + \endif \endif -- create role deploy @@ -109,3 +120,9 @@ GRANT CONNECT ON DATABASE postgres TO execution_group; GRANT CONNECT ON DATABASE postgres TO read_procedure_group; GRANT CONNECT ON DATABASE postgres TO monitoring_group; GRANT ALL PRIVILEGES ON TABLESPACE pg_global TO monitoring_group; + +-- на пока даём права как для ORM роли приложения +\if :{?APP_DB} + GRANT write_group TO :"APP_DB" ; + GRANT execution_group TO :"APP_DB" ; +\endif diff --git a/12/postgres-service.yml b/12/postgres-service.yml index 9e65ef5..69e4907 100644 --- a/12/postgres-service.yml +++ b/12/postgres-service.yml @@ -17,11 +17,13 @@ services: - "/var/log/postgresql1:/var/log/postgresql" - "/mnt/pgbak2/:/mnt/pgbak/" - "/usr/share/postgres/12_1/tsearch_data:/usr/share/postgresql/tsearch_data" + - "/var/lib/pgsql/12_1/app_db_init_sql:/app_db_init_sql" ports: - "5433:5432" environment: ENV_DB_VALUE: DEV APP_DB: "My_db" + APP_DB_PASSWORD: qweasdzxc # POSTGRES_INITDB_ARGS: "--locale=ru_RU.UTF8 --data-checksums" POSTGRES_PASSWORD: qweasdzxc POSTGRES_HOST_AUTH_METHOD: trust diff --git a/12/postgres-service_all.yml b/12/postgres-service_all.yml index 7260522..e574e96 100644 --- a/12/postgres-service_all.yml +++ b/12/postgres-service_all.yml @@ -17,11 +17,13 @@ services: - "/var/log/postgresql1:/var/log/postgresql" - "/mnt/pgbak2/:/mnt/pgbak/" - "/usr/share/postgres/12_1/tsearch_data:/usr/share/postgresql/tsearch_data" + - "/var/lib/pgsql/12_1/app_db_init_sql:/app_db_init_sql" ports: - "5433:5432" environment: ENV_DB_VALUE: DEV APP_DB: "My_db" + APP_DB_PASSWORD: qweasdzxc # POSTGRES_INITDB_ARGS: "--locale=ru_RU.UTF8 --data-checksums" POSTGRES_PASSWORD: qweasdzxc POSTGRES_HOST_AUTH_METHOD: trust diff --git a/12/postgres-service_pgb.yml b/12/postgres-service_pgb.yml index 00cc532..84095a3 100644 --- a/12/postgres-service_pgb.yml +++ b/12/postgres-service_pgb.yml @@ -17,11 +17,13 @@ services: - "/var/log/postgresql1:/var/log/postgresql" - "/mnt/pgbak2/:/mnt/pgbak/" - "/usr/share/postgres/12_1/tsearch_data:/usr/share/postgresql/tsearch_data" + - "/var/lib/pgsql/12_1/app_db_init_sql:/app_db_init_sql" ports: - "5433:5432" environment: ENV_DB_VALUE: DEV APP_DB: "My_db" + APP_DB_PASSWORD: qweasdzxc # POSTGRES_INITDB_ARGS: "--locale=ru_RU.UTF8 --data-checksums" POSTGRES_PASSWORD: qweasdzxc POSTGRES_HOST_AUTH_METHOD: trust diff --git a/13/bin/hub_push.sh b/13/bin/hub_push.sh index b20b052..58c1ea7 100644 --- a/13/bin/hub_push.sh +++ b/13/bin/hub_push.sh @@ -1,6 +1,6 @@ #!/bin/bash VERSION=13 -MINOR=11 +MINOR=12 set -euo pipefail @@ -72,6 +72,6 @@ if ! docker image ls | grep "grufos/mamonsu" ; then echo " push ..." docker tag ${VERSION}_mamonsu:latest grufos/mamonsu:latest # docker push grufos/mamonsu:latest - docker tag grufos/mamonsu:latest grufos/mamonsu:${VERSION}_3.5.3 - docker push grufos/mamonsu:${VERSION}_3.5.3 + docker tag grufos/mamonsu:latest grufos/mamonsu:${VERSION}_3.5.5 + docker push grufos/mamonsu:${VERSION}_3.5.5 fi diff --git a/13/docker-mamonsu/Dockerfile b/13/docker-mamonsu/Dockerfile index d64a5b4..3a4e792 100644 --- a/13/docker-mamonsu/Dockerfile +++ b/13/docker-mamonsu/Dockerfile @@ -9,7 +9,7 @@ ENV DEBIAN_RELEASE bullseye ENV PG_MAJOR 13 ENV BACKUP_PATH /mnt/pgbak # version mamonsu -ENV VERSION 3.5.3 +ENV VERSION 3.5.5 # explicitly set user/group IDs RUN set -eux; \ diff --git a/13/docker-mamonsu/pg_jobs_check.py b/13/docker-mamonsu/pg_jobs_check.py index 82706f9..3b2929d 100644 --- a/13/docker-mamonsu/pg_jobs_check.py +++ b/13/docker-mamonsu/pg_jobs_check.py @@ -13,7 +13,7 @@ class PgJobsCheck(Plugin): # получаем список всех БД query_agent_discovery = "select datname from pg_catalog.pg_database where datistemplate = false" # контролируем ошибки для конкретной БД - query = "select count(*) from cron.get_job_run_details('{1}','{0}'::interval) where status <> 'succeeded'" + query = "select count(*) from cron.get_job_run_details('{1}','{0}'::interval) where status = 'failed'" query_table_exists = "select 1 from pg_class where relname='job_run_details' and relnamespace=(select oid from pg_namespace where nspname='cron')" AgentPluginType = 'pg' diff --git a/13/docker-postgres/Dockerfile b/13/docker-postgres/Dockerfile index fcd218c..ec21a8e 100644 --- a/13/docker-postgres/Dockerfile +++ b/13/docker-postgres/Dockerfile @@ -4,7 +4,7 @@ # https://hub.docker.com/r/postgis/postgis # https://github.com/postgis/docker-postgis # -FROM postgres:13.11 +FROM postgres:13.12 LABEL maintainer="Sergey Grinko " @@ -103,14 +103,15 @@ RUN localedef -i ru_RU -c -f UTF-8 -A /usr/share/locale/locale.alias ru_RU.UTF-8 && cd / \ && ln -s /usr/share/postgresql/$PG_MAJOR/tsearch_data /usr/share/postgresql/ \ # ====== clean all unused package... - && apt-mark hold llvm-11-runtime \ && apt-get purge -y gcc freetds-dev git make postgresql-server-dev-$PG_MAJOR libicu-dev *-dev* \ && apt-get -f install \ && apt-get -y autoremove \ && apt-get -y clean \ && apt-get -y autoclean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /var/cache/apt/* \ - && mkdir -p /docker-entrypoint-initdb.d + && mkdir -p /docker-entrypoint-initdb.d \ + && mkdir -p /app_db_init_sql \ + && chmod 0777 /app_db_init_sql COPY ./locales.conf /etc/locales.conf # copy bash files diff --git a/13/docker-postgres/initdb-extension.sh b/13/docker-postgres/initdb-extension.sh index ae7e26e..38f234b 100644 --- a/13/docker-postgres/initdb-extension.sh +++ b/13/docker-postgres/initdb-extension.sh @@ -61,7 +61,7 @@ cd /usr/local/bin/ # Create the 'template_extension' template DB and application DB if [ "$APP_DB" != "" ]; then - psql -f pre.sql -v DEPLOY_PASSWORD="$DEPLOY_PASSWORD" -v PGBOUNCER_PASSWORD="$PGBOUNCER_PASSWORD" -v APP_DB="$APP_DB" + psql -f pre.sql -v DEPLOY_PASSWORD="$DEPLOY_PASSWORD" -v PGBOUNCER_PASSWORD="$PGBOUNCER_PASSWORD" -v APP_DB="$APP_DB" -v APP_DB_PASSWORD="$APP_DB_PASSWORD" else psql -f pre.sql -v DEPLOY_PASSWORD="$DEPLOY_PASSWORD" -v PGBOUNCER_PASSWORD="$PGBOUNCER_PASSWORD" fi @@ -80,6 +80,13 @@ for DB in "$POSTGRES_DB" template_extension "$APP_DB" ; do if [ "$DB" != "template_extension" ] ; then psql --dbname="$DB" -f db_target.sql -v DEV_SCHEMA="$DEV_SCHEMA" -v email_server="$EMAIL_SERVER" fi + if [ "$DB" = "$APP_DB" ] ; then + echo " Иннициализируем БД всеми скриптами из каталога /app_db_init_sql ..." + for file_sql in $(ls /app_db_init_sql/*.sql) ; do + echo "Файл: $file_sql" + psql --dbname="$DB" -f "$file_sql" + done + fi fi fi done diff --git a/13/docker-postgres/sql/init_db_3_cron.sql b/13/docker-postgres/sql/init_db_3_cron.sql index b7b3693..6dc8209 100644 --- a/13/docker-postgres/sql/init_db_3_cron.sql +++ b/13/docker-postgres/sql/init_db_3_cron.sql @@ -212,10 +212,10 @@ GRANT ALL ON SCHEMA cron TO postgres; -- в 1-ю неделю месяца замораживаем идентификаторы транзакций, в остальные недели только собираем статистику \if :{?IS_SETUPDB} \if :IS_SETUPDB - select cron.schedule('vacuum JOB freeze', '0 0 1-7 * 0', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого месяца - select cron.schedule('vacuum JOB', '0 0 8-31 * 0', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца + select cron.schedule('vacuum JOB freeze', '0 0 1-7 1,6 */7', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого полугодия + select cron.schedule('vacuum JOB', '0 0 8-31 * */7', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца \endif \else - select cron.schedule('vacuum JOB freeze', '0 0 1-7 * 0', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого месяца - select cron.schedule('vacuum JOB', '0 0 8-31 * 0', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца + select cron.schedule('vacuum JOB freeze', '0 0 1-7 1,6 */7', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого полугодия + select cron.schedule('vacuum JOB', '0 0 8-31 * */7', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца \endif diff --git a/13/docker-postgres/sql/pre.sql b/13/docker-postgres/sql/pre.sql index a19832b..ee9e3a9 100644 --- a/13/docker-postgres/sql/pre.sql +++ b/13/docker-postgres/sql/pre.sql @@ -15,6 +15,17 @@ select not exists(select true FROM pg_catalog.pg_database where datname='templat \if :is_check CREATE DATABASE :"APP_DB"; \endif + + -- роль для приложения + select not exists(select true FROM pg_catalog.pg_roles where rolname=:'APP_DB') as is_check + \gset + \if :is_check + CREATE ROLE :"APP_DB" ; + SET log_statement='none'; + ALTER ROLE :"APP_DB" WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD :'APP_DB_PASSWORD'; + SET log_statement='ddl'; + ALTER DATABASE :"APP_DB" OWNER TO :"APP_DB"; + \endif \endif -- create role deploy @@ -109,3 +120,9 @@ GRANT CONNECT ON DATABASE postgres TO execution_group; GRANT CONNECT ON DATABASE postgres TO read_procedure_group; GRANT CONNECT ON DATABASE postgres TO monitoring_group; GRANT ALL PRIVILEGES ON TABLESPACE pg_global TO monitoring_group; + +-- на пока даём права как для ORM роли приложения +\if :{?APP_DB} + GRANT write_group TO :"APP_DB" ; + GRANT execution_group TO :"APP_DB" ; +\endif diff --git a/13/postgres-service.yml b/13/postgres-service.yml index f6754d9..523598b 100644 --- a/13/postgres-service.yml +++ b/13/postgres-service.yml @@ -17,11 +17,13 @@ services: - "/var/log/postgresql1:/var/log/postgresql" - "/mnt/pgbak2/:/mnt/pgbak/" - "/usr/share/postgres/13_1/tsearch_data:/usr/share/postgresql/tsearch_data" + - "/var/lib/pgsql/13_1/app_db_init_sql:/app_db_init_sql" ports: - "5433:5432" environment: ENV_DB_VALUE: DEV APP_DB: "My_db" + APP_DB_PASSWORD: qweasdzxc # POSTGRES_INITDB_ARGS: "--locale=ru_RU.UTF8 --data-checksums" POSTGRES_PASSWORD: qweasdzxc POSTGRES_HOST_AUTH_METHOD: trust diff --git a/13/postgres-service_all.yml b/13/postgres-service_all.yml index fb5e25a..c7b18b4 100644 --- a/13/postgres-service_all.yml +++ b/13/postgres-service_all.yml @@ -17,11 +17,13 @@ services: - "/var/log/postgresql1:/var/log/postgresql" - "/mnt/pgbak2/:/mnt/pgbak/" - "/usr/share/postgres/13_1/tsearch_data:/usr/share/postgresql/tsearch_data" + - "/var/lib/pgsql/13_1/app_db_init_sql:/app_db_init_sql" ports: - "5433:5432" environment: ENV_DB_VALUE: DEV APP_DB: "My_db" + APP_DB_PASSWORD: qweasdzxc # POSTGRES_INITDB_ARGS: "--locale=ru_RU.UTF8 --data-checksums" POSTGRES_PASSWORD: qweasdzxc POSTGRES_HOST_AUTH_METHOD: trust diff --git a/13/postgres-service_pgb.yml b/13/postgres-service_pgb.yml index b2da041..38f6b09 100644 --- a/13/postgres-service_pgb.yml +++ b/13/postgres-service_pgb.yml @@ -17,11 +17,13 @@ services: - "/var/log/postgresql1:/var/log/postgresql" - "/mnt/pgbak2/:/mnt/pgbak/" - "/usr/share/postgres/13_1/tsearch_data:/usr/share/postgresql/tsearch_data" + - "/var/lib/pgsql/13_1/app_db_init_sql:/app_db_init_sql" ports: - "5433:5432" environment: ENV_DB_VALUE: DEV APP_DB: "My_db" + APP_DB_PASSWORD: qweasdzxc # POSTGRES_INITDB_ARGS: "--locale=ru_RU.UTF8 --data-checksums" POSTGRES_PASSWORD: qweasdzxc POSTGRES_HOST_AUTH_METHOD: trust diff --git a/14/bin/hub_push.sh b/14/bin/hub_push.sh index e321dcb..4a358d3 100644 --- a/14/bin/hub_push.sh +++ b/14/bin/hub_push.sh @@ -1,6 +1,6 @@ #!/bin/bash VERSION=14 -MINOR=8 +MINOR=9 set -euo pipefail @@ -72,6 +72,6 @@ if ! docker image ls | grep "grufos/mamonsu" ; then echo " push ..." docker tag ${VERSION}_mamonsu:latest grufos/mamonsu:latest # docker push grufos/mamonsu:latest - docker tag grufos/mamonsu:latest grufos/mamonsu:${VERSION}_3.5.3 - docker push grufos/mamonsu:${VERSION}_3.5.3 + docker tag grufos/mamonsu:latest grufos/mamonsu:${VERSION}_3.5.5 + docker push grufos/mamonsu:${VERSION}_3.5.5 fi diff --git a/14/docker-mamonsu/Dockerfile b/14/docker-mamonsu/Dockerfile index 20c90ad..22d1bbd 100644 --- a/14/docker-mamonsu/Dockerfile +++ b/14/docker-mamonsu/Dockerfile @@ -9,7 +9,7 @@ ENV DEBIAN_RELEASE bullseye ENV PG_MAJOR 14 ENV BACKUP_PATH /mnt/pgbak # version mamonsu -ENV VERSION 3.5.3 +ENV VERSION 3.5.5 # explicitly set user/group IDs RUN set -eux; \ diff --git a/14/docker-mamonsu/pg_jobs_check.py b/14/docker-mamonsu/pg_jobs_check.py index 82706f9..3b2929d 100644 --- a/14/docker-mamonsu/pg_jobs_check.py +++ b/14/docker-mamonsu/pg_jobs_check.py @@ -13,7 +13,7 @@ class PgJobsCheck(Plugin): # получаем список всех БД query_agent_discovery = "select datname from pg_catalog.pg_database where datistemplate = false" # контролируем ошибки для конкретной БД - query = "select count(*) from cron.get_job_run_details('{1}','{0}'::interval) where status <> 'succeeded'" + query = "select count(*) from cron.get_job_run_details('{1}','{0}'::interval) where status = 'failed'" query_table_exists = "select 1 from pg_class where relname='job_run_details' and relnamespace=(select oid from pg_namespace where nspname='cron')" AgentPluginType = 'pg' diff --git a/14/docker-postgres/Dockerfile b/14/docker-postgres/Dockerfile index ffe71be..74e5849 100644 --- a/14/docker-postgres/Dockerfile +++ b/14/docker-postgres/Dockerfile @@ -4,7 +4,7 @@ # https://hub.docker.com/r/postgis/postgis # https://github.com/postgis/docker-postgis # -FROM postgres:14.8 +FROM postgres:14.9 LABEL maintainer="Sergey Grinko " @@ -103,14 +103,15 @@ RUN localedef -i ru_RU -c -f UTF-8 -A /usr/share/locale/locale.alias ru_RU.UTF-8 && cd / \ && ln -s /usr/share/postgresql/$PG_MAJOR/tsearch_data /usr/share/postgresql/ \ # ====== clean all unused package... - && apt-mark hold llvm-11-runtime \ && apt-get purge -y gcc freetds-dev git make postgresql-server-dev-$PG_MAJOR libicu-dev *-dev* \ && apt-get -f install \ && apt-get -y autoremove \ && apt-get -y clean \ && apt-get -y autoclean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /var/cache/apt/* \ - && mkdir -p /docker-entrypoint-initdb.d + && mkdir -p /docker-entrypoint-initdb.d \ + && mkdir -p /app_db_init_sql \ + && chmod 0777 /app_db_init_sql COPY ./locales.conf /etc/locales.conf # copy bash files diff --git a/14/docker-postgres/initdb-extension.sh b/14/docker-postgres/initdb-extension.sh index ae7e26e..38f234b 100644 --- a/14/docker-postgres/initdb-extension.sh +++ b/14/docker-postgres/initdb-extension.sh @@ -61,7 +61,7 @@ cd /usr/local/bin/ # Create the 'template_extension' template DB and application DB if [ "$APP_DB" != "" ]; then - psql -f pre.sql -v DEPLOY_PASSWORD="$DEPLOY_PASSWORD" -v PGBOUNCER_PASSWORD="$PGBOUNCER_PASSWORD" -v APP_DB="$APP_DB" + psql -f pre.sql -v DEPLOY_PASSWORD="$DEPLOY_PASSWORD" -v PGBOUNCER_PASSWORD="$PGBOUNCER_PASSWORD" -v APP_DB="$APP_DB" -v APP_DB_PASSWORD="$APP_DB_PASSWORD" else psql -f pre.sql -v DEPLOY_PASSWORD="$DEPLOY_PASSWORD" -v PGBOUNCER_PASSWORD="$PGBOUNCER_PASSWORD" fi @@ -80,6 +80,13 @@ for DB in "$POSTGRES_DB" template_extension "$APP_DB" ; do if [ "$DB" != "template_extension" ] ; then psql --dbname="$DB" -f db_target.sql -v DEV_SCHEMA="$DEV_SCHEMA" -v email_server="$EMAIL_SERVER" fi + if [ "$DB" = "$APP_DB" ] ; then + echo " Иннициализируем БД всеми скриптами из каталога /app_db_init_sql ..." + for file_sql in $(ls /app_db_init_sql/*.sql) ; do + echo "Файл: $file_sql" + psql --dbname="$DB" -f "$file_sql" + done + fi fi fi done diff --git a/14/docker-postgres/sql/init_db_3_cron.sql b/14/docker-postgres/sql/init_db_3_cron.sql index b7b3693..6dc8209 100644 --- a/14/docker-postgres/sql/init_db_3_cron.sql +++ b/14/docker-postgres/sql/init_db_3_cron.sql @@ -212,10 +212,10 @@ GRANT ALL ON SCHEMA cron TO postgres; -- в 1-ю неделю месяца замораживаем идентификаторы транзакций, в остальные недели только собираем статистику \if :{?IS_SETUPDB} \if :IS_SETUPDB - select cron.schedule('vacuum JOB freeze', '0 0 1-7 * 0', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого месяца - select cron.schedule('vacuum JOB', '0 0 8-31 * 0', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца + select cron.schedule('vacuum JOB freeze', '0 0 1-7 1,6 */7', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого полугодия + select cron.schedule('vacuum JOB', '0 0 8-31 * */7', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца \endif \else - select cron.schedule('vacuum JOB freeze', '0 0 1-7 * 0', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого месяца - select cron.schedule('vacuum JOB', '0 0 8-31 * 0', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца + select cron.schedule('vacuum JOB freeze', '0 0 1-7 1,6 */7', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого полугодия + select cron.schedule('vacuum JOB', '0 0 8-31 * */7', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца \endif diff --git a/14/docker-postgres/sql/pre.sql b/14/docker-postgres/sql/pre.sql index a19832b..ee9e3a9 100644 --- a/14/docker-postgres/sql/pre.sql +++ b/14/docker-postgres/sql/pre.sql @@ -15,6 +15,17 @@ select not exists(select true FROM pg_catalog.pg_database where datname='templat \if :is_check CREATE DATABASE :"APP_DB"; \endif + + -- роль для приложения + select not exists(select true FROM pg_catalog.pg_roles where rolname=:'APP_DB') as is_check + \gset + \if :is_check + CREATE ROLE :"APP_DB" ; + SET log_statement='none'; + ALTER ROLE :"APP_DB" WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD :'APP_DB_PASSWORD'; + SET log_statement='ddl'; + ALTER DATABASE :"APP_DB" OWNER TO :"APP_DB"; + \endif \endif -- create role deploy @@ -109,3 +120,9 @@ GRANT CONNECT ON DATABASE postgres TO execution_group; GRANT CONNECT ON DATABASE postgres TO read_procedure_group; GRANT CONNECT ON DATABASE postgres TO monitoring_group; GRANT ALL PRIVILEGES ON TABLESPACE pg_global TO monitoring_group; + +-- на пока даём права как для ORM роли приложения +\if :{?APP_DB} + GRANT write_group TO :"APP_DB" ; + GRANT execution_group TO :"APP_DB" ; +\endif diff --git a/14/postgres-service.yml b/14/postgres-service.yml index 5e5585c..5c61a7e 100644 --- a/14/postgres-service.yml +++ b/14/postgres-service.yml @@ -17,11 +17,13 @@ services: - "/var/log/postgresql1:/var/log/postgresql" - "/mnt/pgbak2/:/mnt/pgbak/" - "/usr/share/postgres/14_1/tsearch_data:/usr/share/postgresql/tsearch_data" + - "/var/lib/pgsql/14_1/app_db_init_sql:/app_db_init_sql" ports: - "5433:5432" environment: ENV_DB_VALUE: DEV APP_DB: "My_db" + APP_DB_PASSWORD: qweasdzxc # POSTGRES_INITDB_ARGS: "--locale=ru_RU.UTF8 --data-checksums" POSTGRES_PASSWORD: qweasdzxc POSTGRES_HOST_AUTH_METHOD: trust diff --git a/14/postgres-service_all.yml b/14/postgres-service_all.yml index 114fff3..14e8556 100644 --- a/14/postgres-service_all.yml +++ b/14/postgres-service_all.yml @@ -17,11 +17,13 @@ services: - "/var/log/postgresql1:/var/log/postgresql" - "/mnt/pgbak2/:/mnt/pgbak/" - "/usr/share/postgres/14_1/tsearch_data:/usr/share/postgresql/tsearch_data" + - "/var/lib/pgsql/14_1/app_db_init_sql:/app_db_init_sql" ports: - "5433:5432" environment: ENV_DB_VALUE: DEV APP_DB: "My_db" + APP_DB_PASSWORD: qweasdzxc # POSTGRES_INITDB_ARGS: "--locale=ru_RU.UTF8 --data-checksums" POSTGRES_PASSWORD: qweasdzxc POSTGRES_HOST_AUTH_METHOD: trust diff --git a/14/postgres-service_pgb.yml b/14/postgres-service_pgb.yml index 6c0736a..108c115 100644 --- a/14/postgres-service_pgb.yml +++ b/14/postgres-service_pgb.yml @@ -17,11 +17,13 @@ services: - "/var/log/postgresql1:/var/log/postgresql" - "/mnt/pgbak2/:/mnt/pgbak/" - "/usr/share/postgres/14_1/tsearch_data:/usr/share/postgresql/tsearch_data" + - "/var/lib/pgsql/14_1/app_db_init_sql:/app_db_init_sql" ports: - "5433:5432" environment: ENV_DB_VALUE: DEV APP_DB: "My_db" + APP_DB_PASSWORD: qweasdzxc # POSTGRES_INITDB_ARGS: "--locale=ru_RU.UTF8 --data-checksums" POSTGRES_PASSWORD: qweasdzxc POSTGRES_HOST_AUTH_METHOD: trust diff --git a/15/bin/hub_push.sh b/15/bin/hub_push.sh index eea68a5..90c7789 100644 --- a/15/bin/hub_push.sh +++ b/15/bin/hub_push.sh @@ -1,20 +1,20 @@ #!/bin/bash VERSION=15 -MINOR=3 +MINOR=4 set -euo pipefail # pgbouncer -#echo "=========" -#echo "pgbouncer" -#echo "=========" -#if ! docker image ls | grep "grufos/pgbouncer" ; then -# echo " push ..." -# docker tag ${VERSION}_pgbouncer:latest grufos/pgbouncer:latest -# docker push grufos/pgbouncer:latest -# docker tag grufos/pgbouncer:latest grufos/pgbouncer:1.19.0 -# docker push grufos/pgbouncer:1.19.0 -#fi +echo "=========" +echo "pgbouncer" +echo "=========" +if ! docker image ls | grep "grufos/pgbouncer" ; then + echo " push ..." + docker tag ${VERSION}_pgbouncer:latest grufos/pgbouncer:latest + docker push grufos/pgbouncer:latest + docker tag grufos/pgbouncer:latest grufos/pgbouncer:1.20.1 + docker push grufos/pgbouncer:1.20.1 +fi # postgres echo "========" @@ -84,6 +84,6 @@ if ! docker image ls | grep "grufos/mamonsu" ; then echo " push ..." docker tag ${VERSION}_mamonsu:latest grufos/mamonsu:latest docker push grufos/mamonsu:latest - docker tag grufos/mamonsu:latest grufos/mamonsu:${VERSION}_3.5.3 - docker push grufos/mamonsu:${VERSION}_3.5.3 + docker tag grufos/mamonsu:latest grufos/mamonsu:${VERSION}_3.5.5 + docker push grufos/mamonsu:${VERSION}_3.5.5 fi diff --git a/15/docker-mamonsu/Dockerfile b/15/docker-mamonsu/Dockerfile index b55bfc3..aade025 100644 --- a/15/docker-mamonsu/Dockerfile +++ b/15/docker-mamonsu/Dockerfile @@ -9,7 +9,7 @@ ENV DEBIAN_RELEASE bullseye ENV PG_MAJOR 15 ENV BACKUP_PATH /mnt/pgbak # version mamonsu -ENV VERSION 3.5.3 +ENV VERSION 3.5.5 # explicitly set user/group IDs RUN set -eux; \ diff --git a/15/docker-mamonsu/pg_jobs_check.py b/15/docker-mamonsu/pg_jobs_check.py index 82706f9..3b2929d 100644 --- a/15/docker-mamonsu/pg_jobs_check.py +++ b/15/docker-mamonsu/pg_jobs_check.py @@ -13,7 +13,7 @@ class PgJobsCheck(Plugin): # получаем список всех БД query_agent_discovery = "select datname from pg_catalog.pg_database where datistemplate = false" # контролируем ошибки для конкретной БД - query = "select count(*) from cron.get_job_run_details('{1}','{0}'::interval) where status <> 'succeeded'" + query = "select count(*) from cron.get_job_run_details('{1}','{0}'::interval) where status = 'failed'" query_table_exists = "select 1 from pg_class where relname='job_run_details' and relnamespace=(select oid from pg_namespace where nspname='cron')" AgentPluginType = 'pg' diff --git a/15/docker-postgres/Dockerfile b/15/docker-postgres/Dockerfile index 413001e..ced4f15 100644 --- a/15/docker-postgres/Dockerfile +++ b/15/docker-postgres/Dockerfile @@ -4,7 +4,7 @@ # https://hub.docker.com/r/postgis/postgis # https://github.com/postgis/docker-postgis # -FROM postgres:15.3 +FROM postgres:15.4 LABEL maintainer="Sergey Grinko " @@ -103,14 +103,15 @@ RUN localedef -i ru_RU -c -f UTF-8 -A /usr/share/locale/locale.alias ru_RU.UTF-8 && cd / \ && ln -s /usr/share/postgresql/$PG_MAJOR/tsearch_data /usr/share/postgresql/ \ # ====== clean all unused package... - && apt-mark hold llvm-11-runtime \ && apt-get purge -y gcc freetds-dev git make postgresql-server-dev-$PG_MAJOR libicu-dev *-dev* \ && apt-get -f install \ && apt-get -y autoremove \ && apt-get -y clean \ && apt-get -y autoclean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /var/cache/apt/* \ - && mkdir -p /docker-entrypoint-initdb.d + && mkdir -p /docker-entrypoint-initdb.d \ + && mkdir -p /app_db_init_sql \ + && chmod 0777 /app_db_init_sql COPY ./locales.conf /etc/locales.conf # copy bash files @@ -130,7 +131,6 @@ RUN chmod +x /usr/local/bin/*.sh \ && chmod +x /docker-entrypoint-initdb.d/*.sh \ && chown postgres:postgres /usr/local/bin/pg_hba.conf /usr/local/bin/pg_ident.conf /usr/local/bin/postgresql.conf - # We set the default STOPSIGNAL to SIGINT, which corresponds to what PostgreSQL # calls "Fast Shutdown mode" wherein new connections are disallowed and any # in-progress transactions are aborted, allowing PostgreSQL to stop cleanly and diff --git a/15/docker-postgres/initdb-extension.sh b/15/docker-postgres/initdb-extension.sh index ae7e26e..38f234b 100644 --- a/15/docker-postgres/initdb-extension.sh +++ b/15/docker-postgres/initdb-extension.sh @@ -61,7 +61,7 @@ cd /usr/local/bin/ # Create the 'template_extension' template DB and application DB if [ "$APP_DB" != "" ]; then - psql -f pre.sql -v DEPLOY_PASSWORD="$DEPLOY_PASSWORD" -v PGBOUNCER_PASSWORD="$PGBOUNCER_PASSWORD" -v APP_DB="$APP_DB" + psql -f pre.sql -v DEPLOY_PASSWORD="$DEPLOY_PASSWORD" -v PGBOUNCER_PASSWORD="$PGBOUNCER_PASSWORD" -v APP_DB="$APP_DB" -v APP_DB_PASSWORD="$APP_DB_PASSWORD" else psql -f pre.sql -v DEPLOY_PASSWORD="$DEPLOY_PASSWORD" -v PGBOUNCER_PASSWORD="$PGBOUNCER_PASSWORD" fi @@ -80,6 +80,13 @@ for DB in "$POSTGRES_DB" template_extension "$APP_DB" ; do if [ "$DB" != "template_extension" ] ; then psql --dbname="$DB" -f db_target.sql -v DEV_SCHEMA="$DEV_SCHEMA" -v email_server="$EMAIL_SERVER" fi + if [ "$DB" = "$APP_DB" ] ; then + echo " Иннициализируем БД всеми скриптами из каталога /app_db_init_sql ..." + for file_sql in $(ls /app_db_init_sql/*.sql) ; do + echo "Файл: $file_sql" + psql --dbname="$DB" -f "$file_sql" + done + fi fi fi done diff --git a/15/docker-postgres/sql/init_db_3_cron.sql b/15/docker-postgres/sql/init_db_3_cron.sql index b7b3693..6dc8209 100644 --- a/15/docker-postgres/sql/init_db_3_cron.sql +++ b/15/docker-postgres/sql/init_db_3_cron.sql @@ -212,10 +212,10 @@ GRANT ALL ON SCHEMA cron TO postgres; -- в 1-ю неделю месяца замораживаем идентификаторы транзакций, в остальные недели только собираем статистику \if :{?IS_SETUPDB} \if :IS_SETUPDB - select cron.schedule('vacuum JOB freeze', '0 0 1-7 * 0', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого месяца - select cron.schedule('vacuum JOB', '0 0 8-31 * 0', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца + select cron.schedule('vacuum JOB freeze', '0 0 1-7 1,6 */7', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого полугодия + select cron.schedule('vacuum JOB', '0 0 8-31 * */7', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца \endif \else - select cron.schedule('vacuum JOB freeze', '0 0 1-7 * 0', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого месяца - select cron.schedule('vacuum JOB', '0 0 8-31 * 0', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца + select cron.schedule('vacuum JOB freeze', '0 0 1-7 1,6 */7', 'vacuum (freeze,analyze);'); -- 1-я неделя каждого полугодия + select cron.schedule('vacuum JOB', '0 0 8-31 * */7', 'vacuum (analyze);'); -- 2-4 неделя каждого месяца \endif diff --git a/15/docker-postgres/sql/pre.sql b/15/docker-postgres/sql/pre.sql index a19832b..ee9e3a9 100644 --- a/15/docker-postgres/sql/pre.sql +++ b/15/docker-postgres/sql/pre.sql @@ -15,6 +15,17 @@ select not exists(select true FROM pg_catalog.pg_database where datname='templat \if :is_check CREATE DATABASE :"APP_DB"; \endif + + -- роль для приложения + select not exists(select true FROM pg_catalog.pg_roles where rolname=:'APP_DB') as is_check + \gset + \if :is_check + CREATE ROLE :"APP_DB" ; + SET log_statement='none'; + ALTER ROLE :"APP_DB" WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD :'APP_DB_PASSWORD'; + SET log_statement='ddl'; + ALTER DATABASE :"APP_DB" OWNER TO :"APP_DB"; + \endif \endif -- create role deploy @@ -109,3 +120,9 @@ GRANT CONNECT ON DATABASE postgres TO execution_group; GRANT CONNECT ON DATABASE postgres TO read_procedure_group; GRANT CONNECT ON DATABASE postgres TO monitoring_group; GRANT ALL PRIVILEGES ON TABLESPACE pg_global TO monitoring_group; + +-- на пока даём права как для ORM роли приложения +\if :{?APP_DB} + GRANT write_group TO :"APP_DB" ; + GRANT execution_group TO :"APP_DB" ; +\endif diff --git a/15/postgres-service.yml b/15/postgres-service.yml index 79cde79..c2a2d01 100644 --- a/15/postgres-service.yml +++ b/15/postgres-service.yml @@ -17,11 +17,13 @@ services: - "/var/log/postgresql1:/var/log/postgresql" - "/mnt/pgbak2/:/mnt/pgbak/" - "/usr/share/postgres/15_1/tsearch_data:/usr/share/postgresql/tsearch_data" + - "/var/lib/pgsql/15_1/app_db_init_sql:/app_db_init_sql" ports: - "5433:5432" environment: ENV_DB_VALUE: DEV APP_DB: "My_db" + APP_DB_PASSWORD: qweasdzxc # POSTGRES_INITDB_ARGS: "--locale=ru_RU.UTF8 --data-checksums" POSTGRES_PASSWORD: qweasdzxc POSTGRES_HOST_AUTH_METHOD: trust diff --git a/15/postgres-service_all.yml b/15/postgres-service_all.yml index fd86281..e3d1d7d 100644 --- a/15/postgres-service_all.yml +++ b/15/postgres-service_all.yml @@ -17,11 +17,13 @@ services: - "/var/log/postgresql1:/var/log/postgresql" - "/mnt/pgbak2/:/mnt/pgbak/" - "/usr/share/postgres/15_1/tsearch_data:/usr/share/postgresql/tsearch_data" + - "/var/lib/pgsql/15_1/app_db_init_sql:/app_db_init_sql" ports: - "5433:5432" environment: ENV_DB_VALUE: DEV APP_DB: "My_db" + APP_DB_PASSWORD: qweasdzxc # POSTGRES_INITDB_ARGS: "--locale=ru_RU.UTF8 --data-checksums" POSTGRES_PASSWORD: qweasdzxc POSTGRES_HOST_AUTH_METHOD: trust diff --git a/15/postgres-service_pgb.yml b/15/postgres-service_pgb.yml index fe4af7b..0a88ee2 100644 --- a/15/postgres-service_pgb.yml +++ b/15/postgres-service_pgb.yml @@ -17,11 +17,13 @@ services: - "/var/log/postgresql1:/var/log/postgresql" - "/mnt/pgbak2/:/mnt/pgbak/" - "/usr/share/postgres/15_1/tsearch_data:/usr/share/postgresql/tsearch_data" + - "/var/lib/pgsql/15_1/app_db_init_sql:/app_db_init_sql" ports: - "5433:5432" environment: ENV_DB_VALUE: DEV APP_DB: "My_db" + APP_DB_PASSWORD: qweasdzxc # POSTGRES_INITDB_ARGS: "--locale=ru_RU.UTF8 --data-checksums" POSTGRES_PASSWORD: qweasdzxc POSTGRES_HOST_AUTH_METHOD: trust diff --git a/README.md b/README.md index 9e2b2ed..cc93033 100644 --- a/README.md +++ b/README.md @@ -255,10 +255,19 @@ _Переменные использующиеся только при перв | PGDATA | /var/lib/postgresql/data | Эту необязательную переменную можно использовать для определения другого местоположения - например, подкаталога - для файлов базы данных. По умолчанию это /var/lib/postgresql/data. Если используемый вами том данных является точкой монтирования файловой системы (например, с постоянными дисками GCE) или удаленной папкой, которая не может быть подключена для пользователя postgres (например, некоторые точки монтирования в NFS), Postgres initdb рекомендует создать подкаталог для хранения данных | | POSTGRES_INITDB_WALDIR | PGDATA/pg_wal | Эту необязательную переменную среды можно использовать для определения другого места для журнала транзакций Postgres. Иногда может быть желательно хранить журнал транзакций в другом каталоге, который может поддерживаться хранилищем с другими характеристиками производительности или надежности. | | APP_DB | | Эту необязательную переменную среды можно использовать для определения имени БД которую нужно создать сразу при старте контейнера. БД будет создана только если кластер БД не существует. БД создается также как если вручную создать БД на основе шаблонной БД template_extension и по ней пргонать скрипт update-extension.sh | +| APP_DB_PASSWORD | | Эту необязательную переменную среды можно использовать для определения пароля учетной записи по имени создаваемой БД. Учетная запись будет создана только если кластер БД не существует. БД создается также как если вручную создать БД на основе шаблонной БД template_extension и по ней пргонать скрипт update-extension.sh | | ENV_DB_VALUE | DEV | Эту необязательную переменную среды можно использовать для установки нужного значения на БД пользовательского параметра "adm.environment" | -Значение ENV_DB_VALUE устанавливается во время первичной иннициализации кластера или же при вызове скрипта обновления update-extension.sh +Значение ENV_DB_VALUE устанавливается для параметра "adm.environment" во время первичной иннициализации кластера или же при вызове скрипта обновления update-extension.sh +Значение присваивается, только если в этой БД ещё нет такого параметра. +При указании имени в переменной APP_DB и пустом каталоге данных (PGDATA) будет создана новая БД с указанным именем. +Для доступа к эту БД будет создан логин с таким же именем как и БД. Этот логин будет включен в следующие группы: +`write_group` и `execution_group` +Также этот пользователь является владельцем вновь созданной БД. + +Для того, чтобы создаваемая БД могла быть иннициализирована в нужное состояние есть возможность задать набор скриптов sql в каталоге: `/app_db_init_sql` +Если в этот каталог положить необходимые файлы, то они будут выполнены сразу после создания БД. Пример показывающий использование подкаталога для каталога данных: @@ -366,7 +375,7 @@ docker run -d --name dev-db -p 5433:5432/tcp --shm-size 2147483648 \ -e POSTGRES_HOST_AUTH_METHOD=trust \ -e DEPLOY_PASSWORD=cxzdsaewq \ -e TZ="Etc/UTC" \ - grufos/postgres:15.2 \ + grufos/postgres:15.4 \ -c shared_preload_libraries="plugin_debugger,plpgsql_check,pg_stat_statements,auto_explain,pg_buffercache,pg_cron,shared_ispell,pg_prewarm" \ -c shared_ispell.max_size=70MB ``` @@ -383,7 +392,8 @@ docker run -d --name dev-db -p 5433:5432/tcp --shm-size 2147483648 \ -v "/var/log/postgresql:/var/log/postgresql" \ -v "/mnt/pgbak2:/mnt/pgbak" \ -v "/usr/share/postgres/tsearch_data:/usr/share/postgresql/tsearch_data" \ - grufos/postgres:15.2 \ + -v "/var/lib/pgsql/app_db_init_sql:/app_db_init_sql" \ + grufos/postgres:15.4 \ -c shared_preload_libraries="plugin_debugger,plpgsql_check,pg_stat_statements,auto_explain,pg_buffercache,pg_cron,shared_ispell,pg_prewarm" \ -c shared_ispell.max_size=70MB ``` @@ -410,7 +420,7 @@ services: postgres: -# image: grufos/postgres:15.2 +# image: grufos/postgres:15.4 build: context: ./docker-postgres dockerfile: Dockerfile @@ -423,9 +433,12 @@ services: - "/var/log/postgresql1:/var/log/postgresql" - "/mnt/pgbak2/:/mnt/pgbak/" - "/usr/share/postgres/tsearch_data:/usr/share/postgresql/tsearch_data" + - "/var/lib/pgsql/15_1/app_db_init_sql:/app_db_init_sql" ports: - "5433:5432" environment: + APP_DB: "My_db" + APP_DB_PASSWORD: qweasdzxc # POSTGRES_INITDB_ARGS: "--locale=ru_RU.UTF8 --data-checksums" POSTGRES_PASSWORD: qweasdzxc POSTGRES_HOST_AUTH_METHOD: trust @@ -456,7 +469,7 @@ services: postgres: -# image: grufos/postgres:15.2 +# image: grufos/postgres:15.4 build: context: ./docker-postgres dockerfile: Dockerfile @@ -469,9 +482,12 @@ services: - "/var/log/postgresql1:/var/log/postgresql" - "/mnt/pgbak2/:/mnt/pgbak/" - "/usr/share/postgres/tsearch_data:/usr/share/postgresql/tsearch_data" + - "/var/lib/pgsql/15_1/app_db_init_sql:/app_db_init_sql" ports: - "5433:5432" environment: + APP_DB: "My_db" + APP_DB_PASSWORD: qweasdzxc # POSTGRES_INITDB_ARGS: "--locale=ru_RU.UTF8 --data-checksums" POSTGRES_PASSWORD: qweasdzxc POSTGRES_HOST_AUTH_METHOD: trust @@ -666,7 +682,7 @@ services: pgupgrade: -# image: grufos/pgupgrade:15.2 +# image: grufos/pgupgrade:15.4 build: context: ./docker-pgupgrade dockerfile: Dockerfile @@ -686,6 +702,6 @@ docker run --rm --name upgrade-db --shm-size 2147483648 \ -v "/var/log/postgresql1:/var/log/postgresql" \ -v "/usr/share/postgres/14/tsearch_data:/usr/share/postgresql/14/tsearch_data" \ -v "/usr/share/postgres/15/tsearch_data:/usr/share/postgresql/15/tsearch_data" \ - grufos/pgpostgres:15.2 + grufos/pgpostgres:15.4 # 15_pgupgrade ```