fix: server-update ищет корень репо (в т.ч. /opt/shop/shop10)
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -203,18 +203,28 @@ journalctl -u shop -n 5 --no-pager
|
|||||||
|
|
||||||
## Обновление на сервере (git pull)
|
## Обновление на сервере (git pull)
|
||||||
|
|
||||||
|
Каталог клона — там, где лежат `package.json` и `scripts/` (часто `/opt/shop` или `/opt/shop/shop10`):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/shop
|
cd /opt/shop/shop10 # ваш путь к репозиторию
|
||||||
git config --global --add safe.directory /opt/shop
|
git config --global --add safe.directory "$(pwd)"
|
||||||
bash scripts/server-update.sh
|
bash scripts/server-update.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Или одной командой (путь к скрипту в вашем клоне):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash /opt/shop/shop10/scripts/server-update.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Скрипт сам найдёт корень репозитория. В `deploy/shop.service` поле `WorkingDirectory` должно указывать на тот же каталог.
|
||||||
|
|
||||||
Скрипт: `git pull` → `npm install` → проверка PostgreSQL → `restart shop` → `curl /health` → `reload caddy`.
|
Скрипт: `git pull` → `npm install` → проверка PostgreSQL → `restart shop` → `curl /health` → `reload caddy`.
|
||||||
|
|
||||||
Вручную:
|
Вручную:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/shop
|
cd /opt/shop/shop10
|
||||||
git pull
|
git pull
|
||||||
npm install --omit=dev
|
npm install --omit=dev
|
||||||
systemctl restart shop
|
systemctl restart shop
|
||||||
|
|||||||
+3
-2
@@ -7,8 +7,9 @@ Wants=postgresql.service
|
|||||||
Type=simple
|
Type=simple
|
||||||
User=www-data
|
User=www-data
|
||||||
Group=www-data
|
Group=www-data
|
||||||
WorkingDirectory=/opt/shop
|
# Путь к клону (package.json): /opt/shop или /opt/shop/shop10
|
||||||
EnvironmentFile=/opt/shop/.env
|
WorkingDirectory=/opt/shop/shop10
|
||||||
|
EnvironmentFile=/opt/shop/shop10/.env
|
||||||
# Дождаться PostgreSQL (запуск от root, +)
|
# Дождаться PostgreSQL (запуск от root, +)
|
||||||
ExecStartPre=+/bin/bash -c 'for i in $(seq 1 60); do pg_isready -h 127.0.0.1 -p 5432 -q && exit 0; sleep 1; done; echo "PostgreSQL не отвечает на 127.0.0.1:5432"; exit 1'
|
ExecStartPre=+/bin/bash -c 'for i in $(seq 1 60); do pg_isready -h 127.0.0.1 -p 5432 -q && exit 0; sleep 1; done; echo "PostgreSQL не отвечает на 127.0.0.1:5432"; exit 1'
|
||||||
ExecStart=/usr/bin/node src/server.js
|
ExecStart=/usr/bin/node src/server.js
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
# Диагностика HTTP 502 (Caddy не достучался до Node / БД)
|
# Диагностика HTTP 502 (Caddy не достучался до Node / БД)
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
echo "=== Shop / Caddy 502 diagnostic ==="
|
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/shop-root.sh" 2>/dev/null || SHOP_ROOT=/opt/shop
|
||||||
|
|
||||||
|
echo "=== Shop / Caddy 502 diagnostic ($SHOP_ROOT) ==="
|
||||||
echo
|
echo
|
||||||
|
|
||||||
echo "1. PostgreSQL"
|
echo "1. PostgreSQL"
|
||||||
@@ -40,11 +42,11 @@ fi
|
|||||||
echo
|
echo
|
||||||
|
|
||||||
echo "6. .env"
|
echo "6. .env"
|
||||||
if [ -f /opt/shop/.env ]; then
|
if [ -f "$SHOP_ROOT/.env" ]; then
|
||||||
grep -E '^(DATABASE_URL|HOST|PORT)=' /opt/shop/.env 2>/dev/null | sed 's/=.*/=***/' || true
|
grep -E '^(DATABASE_URL|HOST|PORT)=' "$SHOP_ROOT/.env" 2>/dev/null | sed 's/=.*/=***/' || true
|
||||||
grep -E '^DATABASE_URL=' /opt/shop/.env || echo " DATABASE_URL не задан"
|
grep -E '^DATABASE_URL=' "$SHOP_ROOT/.env" || echo " DATABASE_URL не задан"
|
||||||
else
|
else
|
||||||
echo " /opt/shop/.env не найден"
|
echo " $SHOP_ROOT/.env не найден"
|
||||||
fi
|
fi
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
# Быстрое исправление ECONNREFUSED 127.0.0.1:5432
|
# Быстрое исправление ECONNREFUSED 127.0.0.1:5432
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
cd /opt/shop 2>/dev/null || cd "$(dirname "$0")/.."
|
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/shop-root.sh"
|
||||||
|
|
||||||
echo "=== Исправление подключения к PostgreSQL ==="
|
echo "=== Исправление подключения к PostgreSQL ==="
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Обновление на сервере (запускать от root в /opt/shop)
|
# Обновление на сервере: git pull, npm, restart shop
|
||||||
|
# Запуск из любого места:
|
||||||
|
# bash /opt/shop/shop10/scripts/server-update.sh
|
||||||
|
# cd /opt/shop/shop10 && bash scripts/server-update.sh
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
cd /opt/shop
|
# shellcheck source=shop-root.sh
|
||||||
|
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/shop-root.sh"
|
||||||
|
|
||||||
git config --global --add safe.directory /opt/shop 2>/dev/null || true
|
echo "=== Shop update: $SHOP_ROOT ==="
|
||||||
|
|
||||||
|
git config --global --add safe.directory "$SHOP_ROOT" 2>/dev/null || true
|
||||||
git pull
|
git pull
|
||||||
|
|
||||||
npm install --omit=dev
|
npm install --omit=dev
|
||||||
@@ -31,5 +37,6 @@ if systemctl is-active --quiet shop 2>/dev/null; then
|
|||||||
systemctl reload caddy 2>/dev/null || true
|
systemctl reload caddy 2>/dev/null || true
|
||||||
echo "OK"
|
echo "OK"
|
||||||
else
|
else
|
||||||
echo "Служба shop не установлена. См. deploy/shop.service в README."
|
echo "Служба shop не установлена. См. deploy/shop.service"
|
||||||
|
echo "WorkingDirectory в unit должен совпадать с: $SHOP_ROOT"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Каталог репозитория (где package.json). Переопределение: SHOP_ROOT=/path
|
||||||
|
_resolve_shop_root() {
|
||||||
|
if [ -n "${SHOP_ROOT:-}" ] && [ -f "${SHOP_ROOT}/package.json" ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
local here
|
||||||
|
here="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
if [ -f "${here}/package.json" ]; then
|
||||||
|
SHOP_ROOT="$here"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if [ -f /opt/shop/shop10/package.json ]; then
|
||||||
|
SHOP_ROOT=/opt/shop/shop10
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if [ -f /opt/shop/package.json ]; then
|
||||||
|
SHOP_ROOT=/opt/shop
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if ! _resolve_shop_root; then
|
||||||
|
echo "Ошибка: не найден каталог Shop (нет package.json)."
|
||||||
|
echo "Перейдите в каталог клона и запустите:"
|
||||||
|
echo " bash scripts/server-update.sh"
|
||||||
|
echo "Или задайте: SHOP_ROOT=/opt/shop/shop10 bash scripts/server-update.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
export SHOP_ROOT
|
||||||
|
cd "$SHOP_ROOT"
|
||||||
@@ -195,11 +195,17 @@ systemctl daemon-reload
|
|||||||
## 10. Обновление
|
## 10. Обновление
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/shop
|
cd /opt/shop/shop10
|
||||||
git config --global --add safe.directory /opt/shop
|
git config --global --add safe.directory "$(pwd)"
|
||||||
bash scripts/server-update.sh
|
bash scripts/server-update.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Если клон в `/opt/shop` без подкаталога — используйте `/opt/shop`. Скрипт ищет `package.json` автоматически; можно запустить так:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash /opt/shop/shop10/scripts/server-update.sh
|
||||||
|
```
|
||||||
|
|
||||||
Или вручную:
|
Или вручную:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
+14
-1
@@ -3,9 +3,22 @@
|
|||||||
## Диагностика одной командой
|
## Диагностика одной командой
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash /opt/shop/scripts/diagnose-502.sh
|
bash /opt/shop/shop10/scripts/diagnose-502.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
(замените путь на каталог вашего клона — где есть `package.json`)
|
||||||
|
|
||||||
|
## scripts/server-update.sh: No such file or directory
|
||||||
|
|
||||||
|
Вы не в каталоге репозитория или клон в подпапке (например `/opt/shop/shop10`):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ls /opt/shop/shop10/package.json
|
||||||
|
bash /opt/shop/shop10/scripts/server-update.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
В `deploy/shop.service` укажите тот же путь в `WorkingDirectory` и `EnvironmentFile`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## HTTP 502 (Caddy / браузер)
|
## HTTP 502 (Caddy / браузер)
|
||||||
|
|||||||
Reference in New Issue
Block a user