Files
glchat/scripts/test-install.sh
T
grendervill 4bd1770cb5 feat(deploy): установщик, docker-скелет, шаблоны Caddy/LiveKit и CLI
- deploy/install.sh: идемпотентная установка, режимы встроенного и внешнего
  прокси (§10.13), --dry-run/--skip-tls/--reconfigure, auto-детект профиля (§10.10)
- deploy/compose.yaml.tpl: app, livekit, caddy с лимитами, healthcheck,
  ротацией логов, cap_drop и no-new-privileges (§4.3)
- deploy/caddy: Caddyfile.tpl (встроенный) и external-proxy.conf.tpl (наш стенд)
- deploy/livekit: конфиг с TURN, dynacast и лимитами комнат (§10.6)
- deploy/backup.sh + restore.sh: sqlite .backup, tar, age-шифрование (§10.8)
- deploy/update.sh: бэкап → pull/сборка → up → миграции → smoke (§9.3)
- deploy/smoke.sh: проверки §10.9 (healthz/readyz/meta, порты, UFW, fail2ban, бэкап)
- deploy/security-check.sh: аудит SSH, UFW, fail2ban, прав .env и ключей
- deploy/ufw-docker.sh, nftables и fail2ban-конфиги (sshd, glchat-auth, recidive)
- deploy/glchat-cli.sh: команды §10.7, systemd-юнит glchat.service
- scripts/test-install.sh: прогон установщика в чистом Ubuntu 24.04 (systemd-контейнер)
- Dockerfile: multi-stage (node → golang CGO → debian-slim), non-root, healthcheck
- Makefile: lint/test/build/dev/generate/security/smoke и фиксация версий инструментов
2026-09-19 18:21:02 +03:00

79 lines
3.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Прогон deploy/install.sh в чистом контейнере Ubuntu 24.04 (AGENT.md 11.3).
# Требуется Docker с поддержкой привилегированных контейнеров (systemd внутри).
set -euo pipefail
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
IMAGE="${GLCHAT_TEST_IMAGE:-jrei/systemd-ubuntu:24.04}"
CONTAINER="${GLCHAT_TEST_CONTAINER:-glchat-install-test-$$}"
log() { printf '\n=== %s ===\n' "$*"; }
cleanup() {
docker rm -f "$CONTAINER" >/dev/null 2>&1 || true
}
trap cleanup EXIT
log "запуск ${IMAGE} как systemd-контейнера"
docker rm -f "$CONTAINER" >/dev/null 2>&1 || true
docker run -d --name "$CONTAINER" \
--privileged \
--cgroupns=host \
--tmpfs /tmp:exec,size=2g --tmpfs /run --tmpfs /run/lock \
-v /sys/fs/cgroup:/sys/fs/cgroup:rw \
"$IMAGE" /sbin/init >/dev/null
log "ожидание systemd"
for _ in $(seq 1 30); do
if docker exec "$CONTAINER" systemctl is-system-running 2>/dev/null | grep -qE 'running|degraded'; then
break
fi
sleep 1
done
docker exec "$CONTAINER" systemctl is-system-running || true
docker exec "$CONTAINER" bash -lc '. /etc/os-release && echo "тестовое окружение: $PRETTY_NAME"'
log "копируем репозиторий внутрь контейнера"
docker exec "$CONTAINER" mkdir -p /opt/glchat-src
docker cp "${REPO_DIR}/." "${CONTAINER}:/opt/glchat-src/"
log "1/4 install.sh --dry-run"
docker exec "$CONTAINER" bash -lc '
cd /opt/glchat-src && GLCHAT_ETC_DIR=/tmp/dryrun \
bash deploy/install.sh --dry-run --domain gl.test.local --email admin@gl.test.local \
--admin admin@gl.test.local --password "test-password-123" --yes
'
log "2/4 install.sh (боевой прогон: TLS и публичные порты не трогаем)"
docker exec "$CONTAINER" bash -lc "
cd /opt/glchat-src && GLCHAT_ETC_DIR=/opt/glchat \
bash deploy/install.sh --domain gl.test.local --email admin@gl.test.local \
--admin admin@gl.test.local --password 'test-password-123' \
--skip-tls --app-port 8080 --no-turn --yes
"
log "3/4 идемпотентность: повторный запуск с --reconfigure"
docker exec "$CONTAINER" bash -lc "
cd /opt/glchat-src && GLCHAT_ETC_DIR=/opt/glchat \
bash deploy/install.sh --domain gl.test.local --email admin@gl.test.local \
--admin admin@gl.test.local --password 'test-password-123' \
--skip-tls --app-port 8080 --no-turn --reconfigure --yes
"
log "4/4 проверки состояния"
docker exec "$CONTAINER" bash -lc '
set -e
echo "--- healthz"; curl -fsS http://127.0.0.1:8080/healthz; echo
echo "--- readyz"; curl -fsS http://127.0.0.1:8080/readyz; echo
echo "--- meta"; curl -fsS http://127.0.0.1:8080/api/v1/meta; echo
echo "--- index"; curl -fsS http://127.0.0.1:8080/ | head -c 120; echo
test -x /usr/local/bin/glchat && echo "CLI: ok"
test -f /opt/glchat/compose.yaml && echo "compose: ok"
test -f /opt/glchat/external-proxy.conf && echo "external-proxy fragment: ok"
stat -c "perms %a %n" /opt/glchat/.env
systemctl is-enabled glchat.service
glchat version
'
log "ОК: прогон установщика в чистом Ubuntu 24.04 завершён"