fix: migrations

This commit is contained in:
2026-03-11 13:34:52 +01:00
parent 5921987ad7
commit b610e46bd5
10 changed files with 557 additions and 697 deletions

View File

@@ -1,41 +1,65 @@
version: "3"
vars:
PROJECT: nalu_b2b
BUILD_DIR: ./bin
REMOTE_USER: root
REMOTE_HOST: dc02-de
EMAIL_SMTP_PORT: 1025
EMAIL_SMTP_HOST: localhost
LOCAL_DB_SERVICE: db
LOCAL_DB_USER: nalu
LOCAL_DB_NAME: nalu
LOCAL_DB_PASSWORD: Maal12345678
DUMP_FILE_NAME:
sh: echo nalu_$(date +%Y_%m_%d__%H_%M_%S).sql
REMOTE_DB_SERVICE: "www_naluconcept_com_nalu_db"
REMOTE_DB_NAME: "presta"
REMOTE_DB_USER: "presta"
REMOTE_DB_PASS: "presta"
tasks:
reset:
desc: Drop and recreate database
cmds:
- |
docker compose -p {{.PROJECT}} exec -T {{.DB_SERVICE_NAME}} sh -c "PGPASSWORD='{{.DB_PASSWORD}}' psql -U {{.DB_USER}} -d postgres -c \
\"SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='{{.DB_NAME}}' AND pid<>pg_backend_pid();\""
- |
docker compose -p {{.PROJECT}} exec -T {{.DB_SERVICE_NAME}} sh -c "PGPASSWORD='{{.DB_PASSWORD}}' psql -U {{.DB_USER}} -d postgres -c \"DROP DATABASE IF EXISTS {{.DB_NAME}};\""
- |
docker compose -p {{.PROJECT}} exec -T {{.DB_SERVICE_NAME}} sh -c "PGPASSWORD='{{.DB_PASSWORD}}' psql -U {{.DB_USER}} -d postgres -c \"CREATE DATABASE {{.DB_NAME}};\""
- >
docker compose -p {{.PROJECT}} exec -T {{.LOCAL_DB_SERVICE}} mariadb -u {{.LOCAL_DB_USER}} --password={{.LOCAL_DB_PASSWORD}}
-e 'DROP DATABASE IF EXISTS {{.LOCAL_DB_NAME}}; CREATE DATABASE IF NOT EXISTS {{.LOCAL_DB_NAME}};'
restore:
desc: Restore DB from file
aliases: [r]
silent: true
preconditions:
- sh: '[ -n "{{index .CLI_ARGS_LIST 0}}" ]'
msg: "Usage: task db:restore -- dump.sql"
cmds:
- task db:reset
- |
cat {{index .CLI_ARGS_LIST 0}} | docker compose -p {{.PROJECT}} exec -T {{.DB_SERVICE_NAME}} sh -c "PGPASSWORD='{{.DB_PASSWORD}}' psql -U {{.DB_USER}} -d {{.DB_NAME}}"
- task db:migrate
{{if eq (len .CLI_ARGS_LIST) 0}}
echo "Error: No file path provided."
exit 1
{{else}}
cat {{index .CLI_ARGS_LIST 0}} | docker compose -p {{.PROJECT}} exec -T {{.LOCAL_DB_SERVICE}} mariadb \
-u {{.LOCAL_DB_USER}} --password={{.LOCAL_DB_PASSWORD}} \
{{.LOCAL_DB_NAME}}
{{end}}
- task db:mal
migrate:
desc: Apply SQL migrations
aliases: [m]
migrations_apply_localy:
aliases: [mal]
desc: Apply Migrations to local database
silent: true
cmds:
- |
sed '/-- +goose Down/,$d' i18n/migrations/20260302163100_routes.sql | docker compose -p {{.PROJECT}} exec -T -e PGPASSWORD={{.DB_PASSWORD}} {{.DB_SERVICE_NAME}} psql -U {{.DB_USER}} -d {{.DB_NAME}}
sed '/-- +goose Down/,$d' i18n/migrations/20260302163122_create_tables.sql | docker compose -p {{.PROJECT}} exec -T -e PGPASSWORD={{.DB_PASSWORD}} {{.DB_SERVICE_NAME}} psql -U {{.DB_USER}} -d {{.DB_NAME}}
sed '/-- +goose Down/,$d' i18n/migrations/20260302163152_translations_backoffice.sql | docker compose -p {{.PROJECT}} exec -T -e PGPASSWORD={{.DB_PASSWORD}} {{.DB_SERVICE_NAME}} psql -U {{.DB_USER}} -d {{.DB_NAME}}
sed '/-- +goose Down/,$d' i18n/migrations/20260302163157_translations_backend.sql | docker compose -p {{.PROJECT}} exec -T -e PGPASSWORD={{.DB_PASSWORD}} {{.DB_SERVICE_NAME}} psql -U {{.DB_USER}} -d {{.DB_NAME}}
- |
sed '/-- +goose Down/,$d' i18n/migrations/20260302163100_routes.sql | docker compose -p {{.PROJECT}} exec -T {{.LOCAL_DB_SERVICE}} mariadb -u {{.LOCAL_DB_USER}} --password={{.LOCAL_DB_PASSWORD}} {{.LOCAL_DB_NAME}}
sed '/-- +goose Down/,$d' i18n/migrations/20260302163122_create_tables.sql | docker compose -p {{.PROJECT}} exec -T {{.LOCAL_DB_SERVICE}} mariadb -u {{.LOCAL_DB_USER}} --password={{.LOCAL_DB_PASSWORD}} {{.LOCAL_DB_NAME}}
sed '/-- +goose Down/,$d' i18n/migrations/20260302163152_translations_backoffice.sql | docker compose -p {{.PROJECT}} exec -T {{.LOCAL_DB_SERVICE}} mariadb -u {{.LOCAL_DB_USER}} --password={{.LOCAL_DB_PASSWORD}} {{.LOCAL_DB_NAME}}
sed '/-- +goose Down/,$d' i18n/migrations/20260302163157_translations_backend.sql | docker compose -p {{.PROJECT}} exec -T {{.LOCAL_DB_SERVICE}} mariadb -u {{.LOCAL_DB_USER}} --password={{.LOCAL_DB_PASSWORD}} {{.LOCAL_DB_NAME}}

View File

@@ -1,47 +0,0 @@
version: "3"
tasks:
pull:
desc: Pull remote Gitea DB into local DB
aliases: [gp]
silent: true
cmds:
- task db:reset
- |
ssh {{.REMOTE_USER}}@{{.REMOTE_HOST}} \
"docker exec {{.GITEA_SERVICE}} pg_dump -U {{.GITEA_USER}} {{.GITEA_DB}}" | docker compose -p {{.PROJECT}} exec -T {{.DB_SERVICE_NAME}} sh -c "PGPASSWORD='{{.DB_PASSWORD}}' psql -U {{.DB_USER}} -d {{.DB_NAME}}"
dump:
desc: Dump remote Gitea DB to file
aliases: [gd]
silent: true
cmds:
- |
ssh {{.REMOTE_USER}}@{{.REMOTE_HOST}} "docker exec {{.GITEA_SERVICE}} pg_dump -U {{.GITEA_USER}} {{.GITEA_DB}}" > {{.DUMP_FILE_NAME}}
gitea_pull_db_to_file_ma_al_pl:
desc: Pull remote Gitea DB and upload to file.ma-al.pl
aliases: [rdbtfmpl]
silent: true
vars:
SERVER: https://file.ma-al.pl
TARGET_DIR: maal_internal/timetracker/dumps
TMP_DIR: /tmp
TOKEN:
sh: |
curl -s -u "{{.FILE_MAAL_PL_USER}}:{{.FILE_MAAL_PL_PASSWORD}}" "{{.SERVER}}/api/v2/user/token" | jq -r .access_token
preconditions:
- sh: '[ -n "{{.FILE_MAAL_PL_USER}}" ]'
msg: "Missing FILE_MAAL_PL_USER in .env"
- sh: '[ -n "{{.FILE_MAAL_PL_PASSWORD}}" ]'
msg: "Missing FILE_MAAL_PL_PASSWORD in .env"
cmds:
- |
ssh {{.REMOTE_USER}}@{{.REMOTE_HOST}} "docker exec {{.GITEA_REMOTE_SERVICE}} pg_dump -U {{.GITEA_REMOTE_DB_USER}} {{.GITEA_REMOTE_DB_NAME}}" > {{.TMP_DIR}}/{{.DUMP_FILE_NAME}}
- >
curl -X POST "{{.SERVER}}/api/v2/user/files/upload?path={{.TARGET_DIR}}/{{.DUMP_FILE_NAME}}&mkdir_parents=true" -H "Authorization: Bearer {{.TOKEN}}" -H "Content-Type: application/x-tar" --data-binary "@{{.TMP_DIR}}/{{.DUMP_FILE_NAME}}"
- |
rm -f {{.TMP_DIR}}/{{.DUMP_FILE_NAME}}

65
taskfiles/nalu_db.yml Normal file
View File

@@ -0,0 +1,65 @@
version: "3"
tasks:
pull:
desc: Pull remote Gitea DB into local DB
aliases: [gp]
silent: true
cmds:
- task db:reset
- |
ssh {{.REMOTE_USER}}@{{.REMOTE_HOST}} \
"docker exec {{.GITEA_SERVICE}} pg_dump -U {{.GITEA_USER}} {{.GITEA_DB}}" | docker compose -p {{.PROJECT}} exec -T {{.DB_SERVICE_NAME}} sh -c "PGPASSWORD='{{.DB_PASSWORD}}' psql -U {{.DB_USER}} -d {{.DB_NAME}}"
dump:
desc: Dump remote Gitea DB to file
aliases: [dump]
# silent: true
vars:
TEMP_DB_NAME: "temp_db_copy"
SERVER: https://file.ma-al.pl
TARGET_DIR: /maal_internal/nalu_b2b/dumps
TMP_DIR: /tmp
REMOTE_DB_USER: root
REMOTE_DB_PASS: Maal12345678
TOKEN:
sh: curl -s -X GET {{.SERVER}}/api/v2/user/token -u "{{.FILE_MAAL_PL_USER}}:{{.FILE_MAAL_PL_PASSWORD}}" | jq -r .access_token
cmds:
- >
ssh {{.REMOTE_USER}}@{{.REMOTE_HOST}} "docker exec \$(docker ps -q -f name={{.REMOTE_DB_SERVICE}}) mariadb -u {{.REMOTE_DB_USER}} --password={{.REMOTE_DB_PASS}} -e 'CREATE DATABASE IF NOT EXISTS {{.TEMP_DB_NAME}}'"
- >
ssh {{.REMOTE_USER}}@{{.REMOTE_HOST}}
"docker exec \$(docker ps -q -f name={{.REMOTE_DB_SERVICE}}) bash -c \"mariadb-dump --routines --events --triggers -u {{.REMOTE_DB_USER}} --password={{.REMOTE_DB_PASS}} {{.REMOTE_DB_NAME}} | sed 's/DEFINER[ ]*=[ ]*[^ ]*//' | mariadb -u {{.REMOTE_DB_USER}} --password={{.REMOTE_DB_PASS}} {{.TEMP_DB_NAME}}\""
- >
ssh {{.REMOTE_USER}}@{{.REMOTE_HOST}}
"docker exec \$(docker ps -q -f name={{.REMOTE_DB_SERVICE}}) mariadb -u {{.REMOTE_DB_USER}} --password={{.REMOTE_DB_PASS}} {{.TEMP_DB_NAME}} -e \"
UPDATE IGNORE ps_customer SET email = REGEXP_REPLACE(email, '@.*$', '@ma-al.com');
UPDATE ps_configuration SET value = '${HOST_TO_SERVE}' WHERE name = 'PS_SHOP_DOMAIN';
UPDATE ps_configuration SET value = '${HOST_TO_SERVE}' WHERE name = 'PS_SHOP_DOMAIN_SSL';
UPDATE ps_configuration SET value = '${USE_SSL:-1}' WHERE name = 'PS_SSL_ENABLED';
UPDATE ps_configuration SET value = '1' WHERE name = 'PS_SSL_ENABLED_EVERYWHERE';
UPDATE ps_configuration SET value = '2' WHERE name = 'PS_MAIL_METHOD';
UPDATE ps_configuration SET value = 'admin@ma-al.com' WHERE name = 'PS_SHOP_EMAIL';
UPDATE ps_configuration SET value = 'maildev' WHERE name = 'PS_MAIL_SERVER';
UPDATE ps_configuration SET value = '' WHERE name = 'PS_MAIL_USER';
UPDATE ps_configuration SET value = '' WHERE name = 'PS_MAIL_PASSWD';
UPDATE ps_configuration SET value = 'off' WHERE name = 'PS_MAIL_SMTP_ENCRYPTION';
UPDATE ps_configuration SET value = '1025' WHERE name = 'PS_MAIL_SMTP_PORT';
UPDATE ps_configuration SET value = 'admin@ma-al.com' WHERE name = 'MA_MERCHANT_MAILS';
UPDATE ps_shop_url SET domain = '${HOST_TO_SERVE}', domain_ssl = '${HOST_TO_SERVE}' WHERE id_shop_url = '1';
UPDATE ps_configuration SET value='0' WHERE (ps_configuration.name = 'PS_SMARTY_CACHE');
UPDATE ps_configuration SET value='0' WHERE (ps_configuration.name = 'PS_CSS_THEME_CACHE');
UPDATE ps_configuration SET value='0' WHERE (ps_configuration.name = 'PS_JS_THEME_CACHE');
\""
- >
ssh {{.REMOTE_USER}}@{{.REMOTE_HOST}}
"docker exec \$(docker ps -q -f name={{.REMOTE_DB_SERVICE}}) mariadb-dump --routines --events --triggers -u {{.REMOTE_DB_USER}} --password={{.REMOTE_DB_PASS}} {{.TEMP_DB_NAME}}" > {{.TMP_DIR}}/{{.DUMP_FILE_NAME}}
- sed -i 's/DEFINER[ ]*=[ ]*[^ ]*//' {{.TMP_DIR}}/{{.DUMP_FILE_NAME}}
- >
curl -X POST "{{.SERVER}}/api/v2/user/files/upload?path={{.TARGET_DIR}}/{{.DUMP_FILE_NAME}}&mkdir_parents=true" -H "Authorization: Bearer {{.TOKEN}}" -H "Content-Type: application/x-tar" --data-binary "@{{.TMP_DIR}}/{{.DUMP_FILE_NAME}}"
- rm -rf {{.TMP_DIR}}/{{.DUMP_FILE_NAME}}
- >
ssh {{.REMOTE_USER}}@{{.REMOTE_HOST}} "docker exec \$(docker ps -q -f name={{.REMOTE_DB_SERVICE}}) mariadb -u {{.REMOTE_DB_USER}} --password={{.REMOTE_DB_PASS}} -e 'DROP DATABASE IF EXISTS {{.TEMP_DB_NAME}}'"