mirror of
https://github.com/andrey271192/amnezia_web-PRO.git
synced 2026-09-20 14:42:00 +00:00
fix(install): preserve HOST_PORT on upgrade; NO_CACHE; bust tarball fetch
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
23
README.md
23
README.md
@@ -42,6 +42,7 @@ cd /opt/amnezia-admin && chmod +x scripts/install.sh && sudo SKIP_DOWNLOAD=1 bas
|
|||||||
| `SKIP_LANDING` | `0` | `1` — не ставить публичную страницу с футером поддержки |
|
| `SKIP_LANDING` | `0` | `1` — не ставить публичную страницу с футером поддержки |
|
||||||
| `LANDING_PORT` | `80` | Порт nginx-лендинга (если `80` занят — например `8081`) |
|
| `LANDING_PORT` | `80` | Порт nginx-лендинга (если `80` занят — например `8081`) |
|
||||||
| `LANDING_CONTAINER` | `amnezia-web-landing` | Имя контейнера лендинга |
|
| `LANDING_CONTAINER` | `amnezia-web-landing` | Имя контейнера лендинга |
|
||||||
|
| `NO_CACHE` | `0` | `1` — `docker build --no-cache` при проблемах с обновлением образа |
|
||||||
|
|
||||||
После установки: **админ-панель** `http://IP:8080` (или ваш `HOST_PORT`), **страница с поддержкой проекта** `http://IP/` на порту лендинга (по умолчанию **80**). Кнопка на лендинге ведёт на админку с тем же `HOST_PORT`.
|
После установки: **админ-панель** `http://IP:8080` (или ваш `HOST_PORT`), **страница с поддержкой проекта** `http://IP/` на порту лендинга (по умолчанию **80**). Кнопка на лендинге ведёт на админку с тем же `HOST_PORT`.
|
||||||
|
|
||||||
@@ -51,19 +52,35 @@ cd /opt/amnezia-admin && chmod +x scripts/install.sh && sudo SKIP_DOWNLOAD=1 bas
|
|||||||
|
|
||||||
Коммиты на GitHub **сами не попадают** в уже запущенный контейнер: нужно заново **скачать код и пересобрать образ**.
|
Коммиты на GitHub **сами не попадают** в уже запущенный контейнер: нужно заново **скачать код и пересобрать образ**.
|
||||||
|
|
||||||
Проще всего — та же команда, что при установке (данные в `DATA_DIR`, пароль сохранится):
|
Проще всего — та же команда, что при установке (данные в `DATA_DIR`, пароль сохранится). Скрипт **подставит прежний внешний порт** контейнера `amnezia-admin`, если вы не передавали `HOST_PORT` и в коде по умолчанию стоит `8080`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://raw.githubusercontent.com/andrey271192/Amnezia_web/main/scripts/install.sh | sudo bash
|
curl -fsSL https://raw.githubusercontent.com/andrey271192/Amnezia_web/main/scripts/install.sh | sudo bash
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Если интерфейс после этого всё ещё старый — принудительно без кэша слоёв Docker:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://raw.githubusercontent.com/andrey271192/Amnezia_web/main/scripts/install.sh | sudo NO_CACHE=1 bash
|
||||||
|
```
|
||||||
|
|
||||||
Если проект уже лежит в `/opt/amnezia-admin` через git и вы подтянули изменения (`git pull`), пересоберите без повторной загрузки архива:
|
Если проект уже лежит в `/opt/amnezia-admin` через git и вы подтянули изменения (`git pull`), пересоберите без повторной загрузки архива:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/amnezia-admin && sudo SKIP_DOWNLOAD=1 HOST_PORT=8080 bash scripts/install.sh
|
cd /opt/amnezia-admin && chmod +x scripts/install.sh && sudo SKIP_DOWNLOAD=1 bash scripts/install.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Подставьте свой `HOST_PORT`, если панель не на `8080`. После обновления сделайте в браузере **жёсткое обновление** страницы (Ctrl+Shift+R / ⌘+Shift+R), если интерфейс всё ещё старый.
|
Порт при этом возьмётся из уже работающего контейнера так же, как при установке с GitHub.
|
||||||
|
|
||||||
|
Подставьте **`HOST_PORT=ваш_порт`** перед `bash`, если нужно явно зафиксировать порт (в том числе сменить его при обновлении).
|
||||||
|
|
||||||
|
После обновления сделайте в браузере **жёсткое обновление** страницы (Ctrl+Shift+R / ⌘+Shift+R), если интерфейс всё ещё старый.
|
||||||
|
|
||||||
|
Команда на сервере для проверки, что в образ попали новые статические файлы (после установки должно быть **Amnezia Admin WebUI**, не «Kaskad»):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo docker run --rm amnezia-admin:latest grep -E -o 'Amnezia Admin WebUI|Kaskad' /app/public/index.html | head -1
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,10 @@ trap cleanup EXIT
|
|||||||
if [[ "${SKIP_DOWNLOAD:-}" != "1" ]]; then
|
if [[ "${SKIP_DOWNLOAD:-}" != "1" ]]; then
|
||||||
echo "→ Клонирование релиза ${GITHUB_REPO} (${BRANCH})..."
|
echo "→ Клонирование релиза ${GITHUB_REPO} (${BRANCH})..."
|
||||||
TMP=$(mktemp -d)
|
TMP=$(mktemp -d)
|
||||||
curl -fsSL "https://github.com/${GITHUB_REPO}/archive/refs/heads/${BRANCH}.tar.gz" \
|
curl -fsSL \
|
||||||
|
-H 'Cache-Control: no-cache' \
|
||||||
|
-H 'Pragma: no-cache' \
|
||||||
|
"https://github.com/${GITHUB_REPO}/archive/refs/heads/${BRANCH}.tar.gz" \
|
||||||
| tar xz -C "${TMP}"
|
| tar xz -C "${TMP}"
|
||||||
rm -rf "${INSTALL_DIR}"
|
rm -rf "${INSTALL_DIR}"
|
||||||
mkdir -p "$(dirname "${INSTALL_DIR}")"
|
mkdir -p "$(dirname "${INSTALL_DIR}")"
|
||||||
@@ -53,6 +56,16 @@ fi
|
|||||||
|
|
||||||
mkdir -p "${DATA_DIR}"
|
mkdir -p "${DATA_DIR}"
|
||||||
|
|
||||||
|
# При повторном запуске не менять внешний порт панели, если не указали HOST_PORT явно (по умолчанию 8080).
|
||||||
|
PREV_HOST_PORT=""
|
||||||
|
if docker inspect "${CONTAINER_NAME}" >/dev/null 2>&1; then
|
||||||
|
PREV_HOST_PORT="$(docker port "${CONTAINER_NAME}" 3980/tcp 2>/dev/null | head -1 | awk -F: '{print $NF}')"
|
||||||
|
if [[ -n "${PREV_HOST_PORT}" && "${HOST_PORT}" == "8080" ]]; then
|
||||||
|
HOST_PORT="${PREV_HOST_PORT}"
|
||||||
|
echo "→ Уже запущен ${CONTAINER_NAME}: сохраняю внешний порт ${HOST_PORT} (укажите HOST_PORT=… чтобы сменить)."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
BOOT_PW=""
|
BOOT_PW=""
|
||||||
PASS_FILE="/root/amnezia-admin.initial-password"
|
PASS_FILE="/root/amnezia-admin.initial-password"
|
||||||
if [[ -f "${DATA_DIR}/password.hash" ]]; then
|
if [[ -f "${DATA_DIR}/password.hash" ]]; then
|
||||||
@@ -69,8 +82,14 @@ else
|
|||||||
echo "→ Первый пароль записан в ${PASS_FILE}"
|
echo "→ Первый пароль записан в ${PASS_FILE}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
DOCKER_BUILD_EXTRA=()
|
||||||
|
if [[ "${NO_CACHE:-}" == "1" ]]; then
|
||||||
|
DOCKER_BUILD_EXTRA+=(--no-cache)
|
||||||
|
echo "→ NO_CACHE=1 — сборка без слоя кэша Docker."
|
||||||
|
fi
|
||||||
|
|
||||||
echo "→ Сборка образа amnezia-admin:latest ..."
|
echo "→ Сборка образа amnezia-admin:latest ..."
|
||||||
docker build -t amnezia-admin:latest "${INSTALL_DIR}"
|
docker build "${DOCKER_BUILD_EXTRA[@]}" -t amnezia-admin:latest "${INSTALL_DIR}"
|
||||||
|
|
||||||
docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
|
docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
|
||||||
|
|
||||||
@@ -96,7 +115,7 @@ docker run -d --name "${CONTAINER_NAME}" --restart unless-stopped \
|
|||||||
if [[ "${SKIP_LANDING:-}" != "1" ]] && [[ -d "${INSTALL_DIR}/landing" ]]; then
|
if [[ "${SKIP_LANDING:-}" != "1" ]] && [[ -d "${INSTALL_DIR}/landing" ]]; then
|
||||||
printf "window.__AMNEZIA_ADMIN_PORT__='%s';\n" "${HOST_PORT}" >"${INSTALL_DIR}/landing/admin-port.js"
|
printf "window.__AMNEZIA_ADMIN_PORT__='%s';\n" "${HOST_PORT}" >"${INSTALL_DIR}/landing/admin-port.js"
|
||||||
echo "→ Сборка образа ${LANDING_IMAGE} (страница на порту ${LANDING_PORT})..."
|
echo "→ Сборка образа ${LANDING_IMAGE} (страница на порту ${LANDING_PORT})..."
|
||||||
docker build -t "${LANDING_IMAGE}" "${INSTALL_DIR}/landing"
|
docker build "${DOCKER_BUILD_EXTRA[@]}" -t "${LANDING_IMAGE}" "${INSTALL_DIR}/landing"
|
||||||
docker rm -f "${LANDING_CONTAINER}" 2>/dev/null || true
|
docker rm -f "${LANDING_CONTAINER}" 2>/dev/null || true
|
||||||
if docker run -d --name "${LANDING_CONTAINER}" --restart unless-stopped \
|
if docker run -d --name "${LANDING_CONTAINER}" --restart unless-stopped \
|
||||||
-p "${LANDING_PORT}:80" \
|
-p "${LANDING_PORT}:80" \
|
||||||
|
|||||||
Reference in New Issue
Block a user