Enhance Docker and PowerShell scripts for improved functionality and maintainability
All checks were successful
Publish FaceAI Container / publish (push) Successful in 6m52s
All checks were successful
Publish FaceAI Container / publish (push) Successful in 6m52s
- Updated Dockerfile to include default MySQL client for better database interaction. - Modified entrypoint.sh to support additional workspace for legacy applications and added MySQL readiness check before startup. - Enhanced PowerShell script for trimming MySQL dumps to include overlay dumps and improved error handling for missing race and user IDs. - Added new image files and face encoding pickles for various projects, ensuring comprehensive data availability. - Removed outdated face encoding pickle from PISA directory to maintain data relevance. Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
parent
c227fce036
commit
dd7d4c865b
54 changed files with 492 additions and 144 deletions
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
This stack boots the `www` Tomcat webapp locally, seeds MySQL from the checked-in `pg` dump, overrides environment-sensitive `PARM` rows, and captures outgoing email into files.
|
||||
|
||||
The default local model seed is `db/pg-model-seed-trimmed-20260421.sql`.
|
||||
The default local model seed is `db/pg-local-purpose-seed-20260422.sql`.
|
||||
|
||||
## Services
|
||||
|
||||
- `tomcat-www`: Tomcat 9 on Java 11 serving a runtime copy of `www`
|
||||
- `mysql`: MySQL 8 with first-boot import of `db/pg-model-seed-trimmed-20260421.sql` by default
|
||||
- `mysql`: MySQL 8 with first-boot import of `db/pg-local-purpose-seed-20260422.sql` by default
|
||||
- `maildump`: local SMTP sink writing `.eml`, `.txt`, and `.html` payloads to disk
|
||||
|
||||
## What Gets Mocked
|
||||
|
|
@ -31,11 +31,15 @@ Mail output is written under `local-jsp-docker/runtime/maildump/out`.
|
|||
|
||||
## First Boot
|
||||
|
||||
The first MySQL start imports the file named by `LOCAL_DB_SEED_DUMP`, which defaults to `db/pg-model-seed-trimmed-20260421.sql`.
|
||||
The first MySQL start imports the file named by `LOCAL_DB_SEED_DUMP`, which defaults to `db/pg-local-purpose-seed-20260422.sql`.
|
||||
|
||||
After the import finishes, the local override script updates `PARM` with local-safe values.
|
||||
After the import finishes, the local override script updates `PARM` with local-safe values and forces a deterministic legacy login for local testing.
|
||||
|
||||
The Tomcat runtime also patches the deployed `WEB-INF/web.xml` so the `instance` context-param is `local-model` instead of `main`. That keeps the startup DB updater servlets from mutating the model database during local boot.
|
||||
The default local test credential is `test` / `test1`. Override it with `LOCAL_TEST_USER_LOGIN`, `LOCAL_TEST_USER_PASSWORD`, and `LOCAL_TEST_USER_EMAIL` if needed.
|
||||
|
||||
The local MySQL container initializes with `lower_case_table_names=1` because the legacy app issues uppercase table names such as `PARM` on Linux. If you change this setting or are coming from an older volume, rebuild from a fresh volume with `docker compose down -v` before starting again.
|
||||
|
||||
The Tomcat runtime patches the deployed `WEB-INF/web.xml` from `LOCAL_APP_INSTANCE`, which now defaults to `main` so the legacy startup initialization path runs locally as it does on the site. You can still override `LOCAL_APP_INSTANCE` when you need to suppress that startup path for a targeted debug session.
|
||||
|
||||
## Restart Workflow
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ services:
|
|||
FACEAI_DEV_DISPLAY_NAME: ${FACEAI_DEV_DISPLAY_NAME:-Local Model User}
|
||||
FACEAI_DEV_EMAIL: ${FACEAI_DEV_EMAIL:-local.model.user@example.invalid}
|
||||
FACEAI_DEV_MEMBERSHIP_STATUS: ${FACEAI_DEV_MEMBERSHIP_STATUS:-active}
|
||||
LOCAL_APP_INSTANCE: ${LOCAL_APP_INSTANCE:-local-model}
|
||||
LOCAL_APP_INSTANCE: ${LOCAL_APP_INSTANCE:-main}
|
||||
LOCAL_DOCBASE: /data/docbase/
|
||||
FACEAI_FEATURE_ENABLED: ${FACEAI_FEATURE_ENABLED:-1}
|
||||
FACEAI_FRONTEND_URL: ${FACEAI_FRONTEND_URL:-http://localhost:3001}
|
||||
|
|
@ -26,6 +26,7 @@ services:
|
|||
FACEAI_IDENTITY_COOKIE: ${FACEAI_IDENTITY_COOKIE:-rus_faceai_identity}
|
||||
volumes:
|
||||
- ../www:/workspace/www:ro
|
||||
- ../rus:/workspace/rus:ro
|
||||
- ../test_pkl:/workspace/test_pkl:ro
|
||||
- ./runtime/docbase:/data/docbase
|
||||
- ./runtime/tomcat-work:/usr/local/tomcat/work
|
||||
|
|
@ -46,15 +47,21 @@ services:
|
|||
- --max_allowed_packet=1G
|
||||
- --net_read_timeout=600
|
||||
- --net_write_timeout=600
|
||||
- --lower_case_table_names=1
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: root
|
||||
MYSQL_DATABASE: pg
|
||||
MYSQL_ROOT_HOST: '%'
|
||||
LOCAL_DB_SEED_DUMP: ${LOCAL_DB_SEED_DUMP:-pg-model-seed-trimmed-20260421.sql}
|
||||
LOCAL_DB_SEED_DUMP: ${LOCAL_DB_SEED_DUMP:-pg-local-purpose-seed-20260422.sql}
|
||||
LOCAL_DB_OVERLAY_DUMP: ${LOCAL_DB_OVERLAY_DUMP:-}
|
||||
LOCAL_DOCBASE: /data/docbase/
|
||||
LOCAL_MAIL_SMTP_HOST: maildump
|
||||
LOCAL_MAIL_SMTP_PORT: 1025
|
||||
LOCAL_SOURCE_DIR: /workspace/www/
|
||||
LOCAL_TEST_USER_ID: ${LOCAL_TEST_USER_ID:-2}
|
||||
LOCAL_TEST_USER_LOGIN: ${LOCAL_TEST_USER_LOGIN:-test}
|
||||
LOCAL_TEST_USER_PASSWORD: ${LOCAL_TEST_USER_PASSWORD:-test1}
|
||||
LOCAL_TEST_USER_EMAIL: ${LOCAL_TEST_USER_EMAIL:-localtest@regalamiunsorriso.test}
|
||||
volumes:
|
||||
- mysql-data:/var/lib/mysql
|
||||
- ../db:/seed:ro
|
||||
|
|
@ -63,11 +70,9 @@ services:
|
|||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- mysqladmin
|
||||
- ping
|
||||
- -h
|
||||
- 127.0.0.1
|
||||
- -proot
|
||||
- sh
|
||||
- -lc
|
||||
- mysql -uroot -p"$$MYSQL_ROOT_PASSWORD" -Nse "SELECT CASE WHEN EXISTS (SELECT 1 FROM pg.parm WHERE codice = 'REWRITE_URL_ENABLE' AND numero = 1) AND EXISTS (SELECT 1 FROM pg.gara LIMIT 1) THEN 1 ELSE 0 END" | grep -qx 1
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 30
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
seed_dump="${LOCAL_DB_SEED_DUMP:-pg-model-seed-trimmed-20260421.sql}"
|
||||
seed_dump="${LOCAL_DB_SEED_DUMP:-pg-local-purpose-seed-20260422.sql}"
|
||||
overlay_dump="${LOCAL_DB_OVERLAY_DUMP:-}"
|
||||
|
||||
if [ ! -f "/seed/${seed_dump}" ]; then
|
||||
echo "Seed dump not found: /seed/${seed_dump}" >&2
|
||||
|
|
@ -9,4 +10,12 @@ if [ ! -f "/seed/${seed_dump}" ]; then
|
|||
fi
|
||||
|
||||
echo "Importing seed dump: ${seed_dump}"
|
||||
mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" "${MYSQL_DATABASE}" < "/seed/${seed_dump}"
|
||||
mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" "${MYSQL_DATABASE}" < "/seed/${seed_dump}"
|
||||
|
||||
if [ -n "${overlay_dump}" ] && [ -f "/seed/${overlay_dump}" ]; then
|
||||
echo "Importing seed overlay: ${overlay_dump}"
|
||||
mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" "${MYSQL_DATABASE}" < "/seed/${overlay_dump}"
|
||||
elif [ -n "${overlay_dump}" ]; then
|
||||
echo "Seed overlay not found: /seed/${overlay_dump}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -1,6 +1,12 @@
|
|||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
LOCAL_TEST_USER_ID="${LOCAL_TEST_USER_ID:-2}"
|
||||
LOCAL_TEST_USER_LOGIN="${LOCAL_TEST_USER_LOGIN:-test}"
|
||||
LOCAL_TEST_USER_PASSWORD="${LOCAL_TEST_USER_PASSWORD:-test1}"
|
||||
LOCAL_TEST_USER_EMAIL="${LOCAL_TEST_USER_EMAIL:-localtest@regalamiunsorriso.test}"
|
||||
LOCAL_TEST_USER_HASH_SQL="REPLACE(TO_BASE64(SHA2('${LOCAL_TEST_USER_PASSWORD}', 256)), '\\n', '')"
|
||||
|
||||
mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" "${MYSQL_DATABASE}" <<SQL
|
||||
INSERT INTO parm (codice, descrizione, testo, numero, tipoParm, flgTipo, flgAdmin, createTmst, lastUpdTmst)
|
||||
VALUES
|
||||
|
|
@ -30,4 +36,79 @@ ON DUPLICATE KEY UPDATE
|
|||
flgTipo = VALUES(flgTipo),
|
||||
flgAdmin = VALUES(flgAdmin),
|
||||
lastUpdTmst = NOW();
|
||||
|
||||
INSERT INTO users (
|
||||
id_users,
|
||||
login,
|
||||
id_userProfile,
|
||||
pwd,
|
||||
flgValido,
|
||||
dataInizioVld,
|
||||
dataFineVld,
|
||||
nome,
|
||||
cognome,
|
||||
eMail,
|
||||
lang,
|
||||
nominativo,
|
||||
dataScadenza,
|
||||
dataCreazionePwd,
|
||||
dataScadenzaPwd,
|
||||
oldPwd,
|
||||
pwdCrypt,
|
||||
nFotoVisual,
|
||||
nFotoMax,
|
||||
createTmst
|
||||
)
|
||||
SELECT
|
||||
${LOCAL_TEST_USER_ID},
|
||||
'${LOCAL_TEST_USER_LOGIN}',
|
||||
COALESCE(
|
||||
(SELECT seed_profile.id_userProfile
|
||||
FROM (SELECT id_userProfile FROM users WHERE id_userProfile IS NOT NULL ORDER BY id_users LIMIT 1) AS seed_profile),
|
||||
9
|
||||
),
|
||||
${LOCAL_TEST_USER_HASH_SQL},
|
||||
'S',
|
||||
NULL,
|
||||
NULL,
|
||||
'Local',
|
||||
'Test User',
|
||||
'${LOCAL_TEST_USER_EMAIL}',
|
||||
'it',
|
||||
'Local Test User',
|
||||
'2030-12-31',
|
||||
CURRENT_DATE,
|
||||
'2030-12-31',
|
||||
CONCAT(${LOCAL_TEST_USER_HASH_SQL}, '|'),
|
||||
'${LOCAL_TEST_USER_PASSWORD}',
|
||||
0,
|
||||
500,
|
||||
NOW()
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM users
|
||||
WHERE id_users = ${LOCAL_TEST_USER_ID}
|
||||
);
|
||||
|
||||
UPDATE users
|
||||
SET
|
||||
login = '${LOCAL_TEST_USER_LOGIN}',
|
||||
pwd = ${LOCAL_TEST_USER_HASH_SQL},
|
||||
flgValido = 'S',
|
||||
dataInizioVld = NULL,
|
||||
dataFineVld = NULL,
|
||||
nome = COALESCE(NULLIF(nome, ''), 'Local'),
|
||||
cognome = COALESCE(NULLIF(cognome, ''), 'Test User'),
|
||||
eMail = '${LOCAL_TEST_USER_EMAIL}',
|
||||
lang = COALESCE(NULLIF(lang, ''), 'it'),
|
||||
nominativo = 'Local Test User',
|
||||
dataScadenza = '2030-12-31',
|
||||
dataCreazionePwd = CURRENT_DATE,
|
||||
dataScadenzaPwd = '2030-12-31',
|
||||
oldPwd = CONCAT(${LOCAL_TEST_USER_HASH_SQL}, '|'),
|
||||
pwdCrypt = '${LOCAL_TEST_USER_PASSWORD}',
|
||||
nFotoVisual = COALESCE(nFotoVisual, 0),
|
||||
nFotoMax = COALESCE(NULLIF(nFotoMax, 0), 500),
|
||||
lastUpdTmst = NOW()
|
||||
WHERE id_users = ${LOCAL_TEST_USER_ID};
|
||||
SQL
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
FROM tomcat:9.0.102-jdk11-temurin
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends ca-certificates bash perl rsync \
|
||||
&& apt-get install -y --no-install-recommends ca-certificates bash default-mysql-client perl rsync \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY tomcat/bootstrap-docbase.sh /usr/local/bin/bootstrap-docbase.sh
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ export CATALINA_TMPDIR=/usr/local/tomcat/temp
|
|||
|
||||
runtime_root="/usr/local/tomcat/webapps/ROOT"
|
||||
workspace_www="/workspace/www"
|
||||
workspace_rus="/workspace/rus"
|
||||
|
||||
rm -rf "$runtime_root"
|
||||
mkdir -p "$runtime_root"
|
||||
|
|
@ -22,6 +23,11 @@ done
|
|||
mkdir -p "$runtime_root/WEB-INF"
|
||||
cp -a "$workspace_www/WEB-INF/." "$runtime_root/WEB-INF/"
|
||||
|
||||
if [ -d "$workspace_rus/WEB-INF/classes" ]; then
|
||||
mkdir -p "$runtime_root/WEB-INF/classes"
|
||||
cp -a "$workspace_rus/WEB-INF/classes/." "$runtime_root/WEB-INF/classes/"
|
||||
fi
|
||||
|
||||
mkdir -p /usr/local/tomcat/conf/Catalina/localhost
|
||||
cat > /usr/local/tomcat/conf/Catalina/localhost/ROOT.xml <<'EOF'
|
||||
<Context>
|
||||
|
|
@ -31,6 +37,30 @@ EOF
|
|||
|
||||
/usr/local/bin/bootstrap-docbase.sh
|
||||
|
||||
wait_for_mysql() {
|
||||
local host="${LOCAL_DB_HOST:-mysql}"
|
||||
local port="${LOCAL_DB_PORT:-3306}"
|
||||
local database="${LOCAL_DB_NAME:-pg}"
|
||||
local user="${LOCAL_DB_USER:-root}"
|
||||
local password="${LOCAL_DB_PASSWORD:-root}"
|
||||
local attempts=60
|
||||
|
||||
for ((attempt=1; attempt<=attempts; attempt++)); do
|
||||
if mysql --protocol=TCP -h "$host" -P "$port" -u"$user" -p"$password" -D "$database" -Nse "SELECT 1 FROM parm WHERE codice = 'REWRITE_URL_ENABLE' LIMIT 1" >/dev/null 2>&1; then
|
||||
echo "MySQL is ready for legacy app startup"
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo "Waiting for MySQL readiness ($attempt/$attempts)"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
echo "MySQL did not become ready for legacy app startup" >&2
|
||||
return 1
|
||||
}
|
||||
|
||||
wait_for_mysql
|
||||
|
||||
patch_context_param() {
|
||||
local param_name="$1"
|
||||
local param_value="$2"
|
||||
|
|
@ -42,6 +72,6 @@ patch_context_param database "//${LOCAL_DB_HOST:-mysql}/${LOCAL_DB_NAME:-pg}"
|
|||
patch_context_param catalog "${LOCAL_DB_NAME:-pg}"
|
||||
patch_context_param user "${LOCAL_DB_USER:-root}"
|
||||
patch_context_param password "${LOCAL_DB_PASSWORD:-root}"
|
||||
patch_context_param instance "${LOCAL_APP_INSTANCE:-local-model}"
|
||||
patch_context_param instance "${LOCAL_APP_INSTANCE:-main}"
|
||||
|
||||
exec catalina.sh run
|
||||
Loading…
Add table
Add a link
Reference in a new issue