docs: Server-Operations — универсальное развёртывание без привязки к домену

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
shop
2026-05-17 13:34:25 +03:00
parent d31a63829c
commit 561fbd22e0
11 changed files with 336 additions and 402 deletions
+38 -165
View File
@@ -1,190 +1,56 @@
# Решение проблем
## Диагностика одной командой
Полное руководство по развёртыванию: **[Сервер: установка и обновление](Server-Operations)**.
Перед любыми командами задайте каталог клона:
```bash
bash /opt/shop/shop10/scripts/diagnose-502.sh
export SHOP_ROOT=/opt/shop # замените на свой путь (где есть package.json)
cd "$SHOP_ROOT"
```
(замените путь на каталог вашего клона — где есть `package.json`)
---
## Ошибки при «быстром развёртывании»
| Ошибка | Причина | Решение |
|--------|---------|---------|
| `Unable to locate package postgresql-17` | В Ubuntu нет PG 17 без PGDG | `sudo bash /opt/shop/shop10/scripts/install-postgresql-ubuntu.sh` |
| `URL_РЕПОЗИТОРИЯ: No such file` | Скопирован placeholder из README | Используйте реальный URL: `git clone https://git.evilfox.cc/test/shop10.git /opt/shop/shop10` |
| `package.json` в `/opt/shop` | Неверный каталог | Репозиторий в `/opt/shop/shop10` |
| Изменения не применились | `git pull` не в том каталоге | `bash /opt/shop/shop10/scripts/server-update.sh` |
Полное развёртывание / обновление:
## Диагностика
```bash
cd /opt/shop/shop10 && git pull
sudo bash scripts/quick-deploy-ubuntu.sh
```
Только обновление кода (сайт уже работает):
```bash
bash /opt/shop/shop10/scripts/server-update.sh
```
## git: You are not currently on a branch / not a git repository
Клон на теге (detached HEAD) или обновление из `/opt/shop` вместо `/opt/shop/shop10`:
```bash
cd /opt/shop/shop10
git status
bash scripts/git-sync.sh
bash scripts/server-update.sh
```
Если `fatal: not a git repository` в `/opt/shop/shop10`:
```bash
ls -la /opt/shop/shop10/.git
# нет .git — заново:
mv /opt/shop/shop10 /opt/shop/shop10.bak.$(date +%s)
git clone https://git.evilfox.cc/test/shop10.git /opt/shop/shop10
cp /opt/shop/shop10.bak.*/.env /opt/shop/shop10/.env 2>/dev/null || cp /opt/shop/shop10/.env.example /opt/shop/shop10/.env
bash /opt/shop/shop10/scripts/server-update.sh
```
## shop.service: exit-code / activating (auto-restart)
**Health ответил OK, но systemd падает** — часто порт 3000 занят старым `npm start`:
```bash
cd /opt/shop/shop10
git pull
sudo bash scripts/free-port-3000.sh
sudo systemctl restart shop
systemctl status shop
```
Лог:
```bash
journalctl -u shop -n 30 --no-pager
# EADDRINUSE → free-port-3000.sh
# MODULE_NOT_FOUND → npm install --omit=dev
```
## Job for shop.service failed (control process exited)
Чаще всего не запущен PostgreSQL или не прошёл `ExecStartPre`:
```bash
cd /opt/shop/shop10
git pull
sudo bash scripts/install-postgresql-ubuntu.sh
bash scripts/setup-postgres-ubuntu.sh
sudo bash scripts/install-shop-service.sh
```
Диагностика:
```bash
bash /opt/shop/shop10/scripts/diagnose-shop-service.sh
bash "$SHOP_ROOT/scripts/diagnose-502.sh"
bash "$SHOP_ROOT/scripts/diagnose-shop-service.sh"
journalctl -u shop -n 50 --no-pager
```
Скопировать старый `.env`:
---
```bash
cp /opt/shop/.env /opt/shop/shop10/.env
sudo bash /opt/shop/shop10/scripts/install-shop-service.sh
```
## Краткая таблица ошибок
## Служба shop не установлена
| Симптом | Что делать |
|---------|------------|
| `postgresql-17` not found | `sudo bash scripts/install-postgresql-ubuntu.sh` |
| Placeholder / `URL_РЕПОЗИТОРИЯ` | `git clone <ваш-url> "$SHOP_ROOT"` — не копировать шаблоны как команды |
| Нет `package.json` | `find /opt -name package.json`; `cd` в найденный каталог |
| detached HEAD | `bash scripts/git-sync.sh` |
| Нет `scripts/...` | `bash "$SHOP_ROOT/scripts/server-update.sh"` |
| Unit shop not found | `sudo bash scripts/install-shop-service.sh` |
| shop exit-code / auto-restart | `sudo bash scripts/free-port-3000.sh`; `systemctl restart shop` |
| 502 в браузере | `curl http://127.0.0.1:3000/health` — сначала backend |
| ECONNREFUSED :5432 | `bash scripts/fix-db-connection.sh` |
Код обновился, но systemd unit не настроен:
```bash
cd /opt/shop/shop10
sudo bash scripts/install-shop-service.sh
```
Проверка:
```bash
systemctl status shop
curl -s http://127.0.0.1:3000/health
```
## 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`.
Подробности — в [Server-Operations](Server-Operations).
---
## HTTP 502 (Caddy / браузер)
**SSL работает, страница 502** — Caddy жив, backend (Node) не отвечает.
```bash
curl -s http://127.0.0.1:3000/health
systemctl status shop
journalctl -u shop -n 30 --no-pager
```
Пока `/health` не OK — Caddy будет отдавать 502.
---
## ECONNREFUSED 127.0.0.1:5432
PostgreSQL не запущен или не установлен.
```bash
bash /opt/shop/shop10/scripts/fix-db-connection.sh
```
Или вручную:
```bash
systemctl start postgresql
pg_isready -h 127.0.0.1 -p 5432
bash scripts/setup-postgres-ubuntu.sh
```
Проверьте `DATABASE_URL` в `/opt/shop/shop10/.env`.
---
## Служба shop сразу останавливается
В логе только «База уже содержит товары» без строки `Магазин: http://...`:
```bash
bash /opt/shop/shop10/scripts/server-update.sh
systemctl restart shop
```
---
## dubious ownership (git pull)
Не делайте `chown -R www-data /opt/shop`.
```bash
chown -R root:root /opt/shop
git config --global --add safe.directory /opt/shop
git pull
```
---
## Docker: контейнер app unhealthy
## Docker
```bash
docker compose logs app
@@ -192,16 +58,23 @@ docker compose logs postgres
docker compose up -d --build
```
---
## Docker: нет связи с БД
Проверьте, что `DATABASE_URL` в compose указывает на хост `postgres`, а не `127.0.0.1` (внутри контейнера app).
`DATABASE_URL` в compose должен указывать на сервис `postgres`, не на `127.0.0.1` внутри контейнера app.
---
## Полезные ссылки
## git pull / dubious ownership
Не делайте `chown -R www-data` на весь каталог репозитория.
```bash
git config --global --add safe.directory "$SHOP_ROOT"
cd "$SHOP_ROOT" && git pull
```
---
## Ссылки
- [Сервер: установка и обновление](Server-Operations)
- [Установка Docker](Install-Docker)
- [Установка без Docker](Install-Native)
- [Репозиторий](https://git.evilfox.cc/test/shop10)