From d3cc24368618016dd6d1bf676ec5e7848654e3cd Mon Sep 17 00:00:00 2001 From: shop Date: Sat, 16 May 2026 21:10:41 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B0=20git/da?= =?UTF-8?q?ta,=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20server-update,=20f?= =?UTF-8?q?ix=20dubious=20ownership?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- README.md | 29 +++++++++++++++++++++++------ scripts/server-update.sh | 26 ++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 scripts/server-update.sh diff --git a/README.md b/README.md index b5d9dbb..b6d99a4 100644 --- a/README.md +++ b/README.md @@ -72,13 +72,16 @@ SESSION_SECRET=ваш-длинный-секрет ```bash cp /opt/shop/deploy/shop.service /etc/systemd/system/shop.service -# Зависимости и сборка (от root, до смены владельца) +# Код обновляйте от root; НЕ делайте chown -R на весь /opt/shop (ломает git pull) cd /opt/shop +git config --global --add safe.directory /opt/shop +git pull npm install --omit=dev -# Владелец — тот же пользователь, что в unit (www-data) -chown -R www-data:www-data /opt/shop -chmod +x /opt/shop/scripts/diagnose-502.sh +# Запись только в data/ — для пользователя службы www-data +mkdir -p /opt/shop/data +chown -R www-data:www-data /opt/shop/data +chmod +x /opt/shop/scripts/diagnose-502.sh 2>/dev/null || true systemctl daemon-reload systemctl enable shop @@ -186,7 +189,8 @@ curl -v http://127.0.0.1:3000/health |--------|-------------| | Служба `shop` не запущена или падает | `systemctl restart shop`, смотрите логи `journalctl -u shop -f` | | Нет `npm install` / сломан `better-sqlite3` | `cd /opt/shop && npm install --omit=dev` (нужны `build-essential`, `python3`) | -| Нет прав на `data/` у `www-data` | `mkdir -p /opt/shop/data && chown -R www-data:www-data /opt/shop` | +| Нет прав на `data/` у `www-data` | `mkdir -p /opt/shop/data && chown -R www-data:www-data /opt/shop/data` | +| `dubious ownership` / нет `git pull` | `chown -R root:root /opt/shop` + `safe.directory` (см. выше) | | В `.env` нет `HOST`/`PORT` | `HOST=127.0.0.1`, `PORT=3000`, затем `systemctl restart shop` | | Неверный путь к `node` в systemd | `which node` → подставьте в `ExecStart` в `/etc/systemd/system/shop.service` | | Caddy стартовал раньше shop | `cp deploy/caddy-after-shop.conf /etc/systemd/system/caddy.service.d/shop.conf` и `daemon-reload` | @@ -195,14 +199,27 @@ curl -v http://127.0.0.1:3000/health ```bash cd /opt/shop +git config --global --add safe.directory /opt/shop git pull npm install --omit=dev -chown -R www-data:www-data /opt/shop +mkdir -p data +chown -R www-data:www-data /opt/shop/data systemctl restart shop curl -s http://127.0.0.1:3000/health # должен быть {"ok":true,...} systemctl reload caddy ``` +**Ошибка `dubious ownership` при `git pull`:** + +Вы сделали `chown -R www-data` на весь каталог. Верните владельца репозиторию root и оставьте `data/` за www-data: + +```bash +chown -R root:root /opt/shop +chown -R www-data:www-data /opt/shop/data +git config --global --add safe.directory /opt/shop +git pull +``` + Пока `curl http://127.0.0.1:3000/health` не возвращает OK — HTTPS через Caddy будет отдавать 502. ### Другие проблемы diff --git a/scripts/server-update.sh b/scripts/server-update.sh new file mode 100644 index 0000000..be68617 --- /dev/null +++ b/scripts/server-update.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# Обновление на сервере (запускать от root в /opt/shop) +set -euo pipefail + +cd /opt/shop + +git config --global --add safe.directory /opt/shop 2>/dev/null || true +git pull + +npm install --omit=dev + +mkdir -p data +chown -R www-data:www-data data + +if systemctl is-active --quiet shop 2>/dev/null; then + systemctl restart shop + sleep 1 + curl -sf http://127.0.0.1:3000/health && echo || { + echo "shop не отвечает — смотрите: journalctl -u shop -n 30" + exit 1 + } + systemctl reload caddy 2>/dev/null || true + echo "OK" +else + echo "Служба shop не установлена. См. deploy/shop.service в README." +fi