d31a63829c
Co-authored-by: Cursor <cursoragent@cursor.com>
208 lines
5.3 KiB
Markdown
208 lines
5.3 KiB
Markdown
# Решение проблем
|
||
|
||
## Диагностика одной командой
|
||
|
||
```bash
|
||
bash /opt/shop/shop10/scripts/diagnose-502.sh
|
||
```
|
||
|
||
(замените путь на каталог вашего клона — где есть `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
|
||
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 не установлена
|
||
|
||
Код обновился, но 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`.
|
||
|
||
---
|
||
|
||
## 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
|
||
|
||
```bash
|
||
docker compose logs app
|
||
docker compose logs postgres
|
||
docker compose up -d --build
|
||
```
|
||
|
||
---
|
||
|
||
## Docker: нет связи с БД
|
||
|
||
Проверьте, что `DATABASE_URL` в compose указывает на хост `postgres`, а не `127.0.0.1` (внутри контейнера app).
|
||
|
||
---
|
||
|
||
## Полезные ссылки
|
||
|
||
- [Установка Docker](Install-Docker)
|
||
- [Установка без Docker](Install-Native)
|
||
- [Репозиторий](https://git.evilfox.cc/test/shop10)
|