From ac560a4a969cfe5f26f908fc022d1a647f47e724 Mon Sep 17 00:00:00 2001 From: Alexey Kovrizhkin Date: Mon, 16 Nov 2020 01:47:30 +0300 Subject: [PATCH] move pg extras to dcape-pg-upgrade repo --- Makefile | 85 ----------------------------------------------------- POSTGRES.md | 55 ---------------------------------- README.md | 2 +- 3 files changed, 1 insertion(+), 141 deletions(-) delete mode 100644 POSTGRES.md diff --git a/Makefile b/Makefile index 6775604..ce5c466 100644 --- a/Makefile +++ b/Makefile @@ -134,34 +134,6 @@ apply: @$(MAKE) -s dc CMD="up -d $(APPS_SYS)" || echo "" @for f in $(shell echo $(APPS)) ; do $(MAKE) -s $${f}-apply ; done -# Upgrade postgres major version with pg_upgrade -pg_upgrade: - @echo "*** $@ *** " ; \ - DCAPE_DB=$${PROJECT_NAME}_db_1 ; \ - PG_OLD=`cat ./var/data/db/PG_VERSION` ; \ - PG_NEW=`docker inspect --type=image $$PG_IMAGE | jq -r '.[0].ContainerConfig.Env[] | capture("PG_MAJOR=(?.+)") | .a'` ; \ - echo "*** $@ *** from $$PG_OLD to $$PG_NEW" ; \ - echo -n "Checking PG is down..." ; \ - if [[ `docker inspect -f "{{.State.Running}}" $$DCAPE_DB 2>/dev/null` == true ]] ; then \ - echo "Postgres container not stop. Exit" && exit 1 ; \ - else \ - echo "Postgres container not run. Continue" ; \ - fi ; \ - echo "Move current postgres data directory to ./var/data/db_$$PG_OLD" ; \ - mkdir ./var/data/db_$$PG_OLD ; \ - mv ./var/data/db/* ./var/data/db_$$PG_OLD/ ; \ - cp ./var/data/db_$$PG_OLD/postgresql.conf ./var/data/db_$$PG_OLD/postgresql_store.conf ; \ - sed -i "s%include_dir = '/opt/conf.d'%#include_dir = '/opt/conf.d'%" ./var/data/db_$$PG_OLD/postgresql.conf ; \ - docker pull tianon/postgres-upgrade:$$PG_OLD-to-$$PG_NEW ; \ - docker run --rm \ - -v $$PWD/var/data/db_$$PG_OLD:/var/lib/postgresql/$$PG_OLD/data \ - -v $$PWD/var/data/db:/var/lib/postgresql/$$PG_NEW/data \ - tianon/postgres-upgrade:$$PG_OLD-to-$$PG_NEW ; \ - cp -f ./var/data/db_$$PG_OLD/pg_hba.conf ./var/data/db/pg_hba.conf ; \ - cp -f ./var/data/db_$$PG_OLD/postgresql_store.conf ./var/data/db/postgresql.conf ; \ - echo "If the process succeeds, edit pg_hba.conf, other conf and start postgres container or dcape. \ - For more info see https://github.com/dopos/dcape/blob/master/POSTGRES.md" - # build file from app templates docker-compose.yml: $(DCINC) $(DCFILES) @echo "*** $@ ***" @@ -190,63 +162,6 @@ wild: wild: CMD=run --rm traefik-acme-wild wild: dc -# ------------------------------------------------------------------------------ -# Upgrade postgres databases via pipeline -upgrade-pg-via-pipe: - @echo "*** $@ *** " ; \ - DCAPE_DB=$${PROJECT_NAME}_db_1 ; \ - docker pull $$PG_IMAGE ; \ - PG_NEW=`docker inspect --type=image $$PG_IMAGE | jq -r '.[0].ContainerConfig.Env[] | capture("PG_MAJOR=(?.+)") | .a'` ; \ - echo "Preparing the container with the new postgres version" ; \ - PG_PORT_NEW=$(shell expr $(PG_PORT_LOCAL) + 1) ; \ - DCAPE_DB_NEW="dcape_db_new" ; \ - echo "Deny connections from hosts" ; \ - sed -i 's/host all all all md5/#host all all all md5/' $$PWD/var/data/db/pg_hba.conf ; \ - docker run --rm -d \ - --name dcape_db_new \ - -v $$PWD/var/data/db_$$PG_NEW:/var/lib/postgresql/data \ - -e "TZ=$$TZ" \ - -e "LANG=$$PG_ENCODING" \ - --network="d4s_default" \ - -p "$$PG_PORT_NEW:5432" \ - $$PG_IMAGE ; \ - echo -n "Checking for new version PG is ready..." ; \ - until [[ `docker inspect -f "{{.State.Running}}" $$DCAPE_DB_NEW` == true ]] ; do sleep 1 ; echo -n "." ; done - @echo "Ok. Run the migration on all databases" ; \ - PG_NEW=`docker inspect --type=image $$PG_IMAGE | jq -r '.[0].ContainerConfig.Env[] | capture("PG_MAJOR=(?.+)") | .a'` ; \ - DCAPE_DB_NEW="dcape_db_new" ; \ - docker exec -i -u postgres $$DCAPE_DB_NEW /bin/bash -c "echo "db:5432:*:postgres:$$PG_DB_PASS" > ~/.pgpass && chmod 0600 ~/.pgpass" ; \ - docker exec -i -u postgres $$DCAPE_DB_NEW /bin/bash -c "pg_dumpall -h db -p 5432 | psql && echo "Migration complete." " ; \ - docker stop $$DCAPE_DB_NEW ; \ - docker stop $$DCAPE_DB ; \ - mv ./var/data/db ./var/data/db_previous_version ; \ - cp ./var/data/db_/postgresql.conf ./var/data/db_$$PG_OLD/postgresql_store.conf ; \ - - # echo "If the process succeeds, edit pg_hba.conf, other conf and start postgres container or dcape. \ - # For more info see https://github.com/dopos/dcape/blob/master/POSTGRES.md" - - -# Upgrade postgres major version with pg_dumpall-psql -# Create dump for claster Postgres -pg_dumpall: - @echo "Start $@ to pg_dumpall_$${PROJECT_NAME}_`date +"%d.%m.%Y"`.sql.gz" ;\ - DCAPE_DB=$${PROJECT_NAME}_db_1 ; \ - docker exec -u postgres $$DCAPE_DB pg_dumpall | gzip -7 -c > \ - ./var/data/db-backup/pg_dumpall_$${PROJECT_NAME}_`date +"%d.%m.%Y"`.sql.gz - -# Load dump for claster Postgres -pg_load_dumpall: - @echo "Start $@ ..." ; \ - echo "Load dump file: pg_dumpall_$${PROJECT_NAME}_`date +"%d.%m.%Y"`.sql.gz" ;\ - docker exec -u postgres -e PROJECT_NAME=$${PROJECT_NAME} $${PROJECT_NAME}_db_1 \ - bash -c 'zcat /opt/backup/pg_dumpall_$${PROJECT_NAME}_`date +"$d.%m.%Y"`.sql.gz | psql' ; \ - echo "Load dump complete. Start databases ANALYZE." ; \ - docker exec -u postgres $${PROJECT_NAME}_db_1 psql -c "ANALYZE" && \ - echo "ANALYZE complete." - - - - # $$PWD используется для того, чтобы текущий каталог был доступен в контейнере по тому же пути # и относительные тома новых контейнеров могли его использовать ## run docker-compose diff --git a/POSTGRES.md b/POSTGRES.md deleted file mode 100644 index bdeac00..0000000 --- a/POSTGRES.md +++ /dev/null @@ -1,55 +0,0 @@ - -## Работа СУБД в составе dcape и использование ее для разворачиваемых приложений - -СУБД запускается в контейнере с именем `$PROJECT_NAME_db_1`. - -### Резервирование и восстановление баз данных - -Проектом [dcape-app-pg-backup](https://github.com/dopos/dcape-app-pg-backup) для БД -реализованы автоматические механизмы резервирования баз данных путем создания дампов -в каталоге `./var/data/db-backup`, где `./` - это каталог установки dcape. -Каталог для хранения дампов указывается при старте контейнера Postgres -в переменной `DCAPE_DB_DUMP_DEST`. - -### Обновление версии Postgres - -Обновление Postgres выполняется двумя способами: - -* облегченный, без применения специальных инструментов - остановка контейнера, -переключение в конфиге `.env` настройки на новый образ и запуск контейнера - выполняется при -обновлении корректирующих (minor) версий Postgres; -* основной, с применением специальных сценария pg_upgrade из Makefile - при обновлении основных (major) версий Postgres. - -#### Обновление основной версии при помощи pg_upgrade. - -Для обновления основной ветки Postgres используется следующий алгоритм: -1. установка значения с новой версией для PG_IMAGE -2. подготовка и запуск контейнера с новой версией Postgres -3. настройка паролей в контейнере с новой версией -4. выполнение миграции кластера со старого контейнера на новый исполнением команды 'pg_dump_all -h db -p 5432 | psql' -5. остановка обоих контейнеров Postgres, подготовка каталога data -6. запуск контейнера Postgres - -Этот алгоритм выполняется сценарием `pg-upgrade` в `Makefile` проекта `dcape`. После выполнения сценария, данные из каталога `data` -предыдущей версии кластера Postgres будут сохранены в каталоге `{DCAPE_DIR}/var/data/db_previous_version`. В случае необходимости отменить обновление, можно запустить предыдущую версию кластера БД с этим каталогом. - -Со стороны пользователя, для обновления Postgres по этому алгоритму необходимо выполненить: -* установить значение с новой версией для PG_IMAGE в .env -* выполнить команду `make pg-upgrade` - -#### Работа с резервными копиями кластера Postgres. - -В случае необходимости создания полного дампа кластера Postgres (резервирование, перенос на другой сервер), -дамп можно создать командой: - -``` - make pg_dumpall -``` -Сценарий создает файл дампа с именем: `pg_dumpall_$${PROJECT_NAME}_`date +"%d.%m.%Y"`.sql.gz"` (по умолчанию PROJECT_NAME=dcape) - -Для загрузки дампа кластера Postgres использовать: - -``` - make pg_load_dumpall -``` -Сценарий загружает файл дампа кластера с именем, созданным `make pg_dumpall`. diff --git a/README.md b/README.md index 870c3f4..34f5a0d 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ * [webtail](https://github.com/LeKovr/webtail) ([docker](https://store.docker.com/community/images/lekovr/webtail)) - агрегация и www доступ к логам событий приложений (запуск, удаление, обновление) * [enfist](https://github.com/apisite/app-enfist) ([docker](https://store.docker.com/community/images/apisite/enfist)) - хранилище файлов .env в postgresql * [narra](https://github.com/dopos/narra) ([docker](https://store.docker.com/community/images/dopos/narra)) - сервис авторизации для nginx через API gitea -* [postgresql](https://www.postgresql.org) ([docker](https://store.docker.com/images/postgres)) - хранение конфигураций приложений и баз данных, если приложению требуется СУБД. Детали в инструкции по работе с [Postgres](POSTGRES.md) +* [postgresql](https://www.postgresql.org) ([docker](https://store.docker.com/images/postgres)) - хранение конфигураций приложений и баз данных, если приложению требуется СУБД. Детали в инструкции по работе с [Postgres](https://github.com/dopos/dcape-pg-upgrade) **Служебные приложения dcape:**