Co-authored-by: Cursor <cursoragent@cursor.com>
5.5 KiB
Сервер: установка и обновление
Инструкция без привязки к конкретному домену или хостингу. Подставьте свои значения:
| Переменная | Что это | Пример |
|---|---|---|
SHOP_ROOT |
Каталог клона, где лежат package.json и scripts/ |
/opt/shop |
GIT_REPO_URL |
URL вашего git-репозитория | https://forge.example.com/user/shop.git |
SITE_URL |
Публичный URL магазина (для писем и passkey) | https://shop.example.com |
Проверка каталога:
export SHOP_ROOT=/opt/shop
test -f "$SHOP_ROOT/package.json" && echo OK || echo "Неверный SHOP_ROOT"
Первая установка (Ubuntu, без Docker)
export SHOP_ROOT=/opt/shop
export GIT_REPO_URL='https://ВАШ-FORGE/путь/к/shop.git'
apt update && apt install -y git curl
git clone "$GIT_REPO_URL" "$SHOP_ROOT"
cd "$SHOP_ROOT"
sudo SHOP_INSTALL_DIR="$SHOP_ROOT" SHOP_GIT_URL="$GIT_REPO_URL" \
bash scripts/quick-deploy-ubuntu.sh
Скрипт: Node.js (если нет), PostgreSQL (PGDG), .env, npm install, служба shop (systemd).
Обновление кода (сайт уже работает)
cd "$SHOP_ROOT"
bash scripts/git-sync.sh
bash scripts/server-update.sh
Или одной строкой (путь к скриптам в вашем клоне):
bash "$SHOP_ROOT/scripts/server-update.sh"
Скрипты в scripts/
| Скрипт | Назначение |
|---|---|
quick-deploy-ubuntu.sh |
Первая установка / полный цикл |
server-update.sh |
git pull, npm install, перезапуск shop |
git-sync.sh |
Исправить detached HEAD, синхронизация с main |
install-postgresql-ubuntu.sh |
PostgreSQL 17 через PGDG |
setup-postgres-ubuntu.sh |
Пользователь и БД shop |
install-shop-service.sh |
Установка systemd unit |
free-port-3000.sh |
Освободить порт (старый npm start) |
fix-db-connection.sh |
ECONNREFUSED :5432 |
diagnose-502.sh |
HTTP 502, Caddy |
diagnose-shop-service.sh |
Падение shop.service |
Все скрипты сами ищут SHOP_ROOT (каталог, откуда вызван scripts/, или переменная окружения).
Частые ошибки
Unable to locate package postgresql-17
В стандартном Ubuntu нет пакета 17. Не копируйте apt install postgresql-17 из старых заметок.
sudo bash "$SHOP_ROOT/scripts/install-postgresql-ubuntu.sh"
bash "$SHOP_ROOT/scripts/setup-postgres-ubuntu.sh"
URL_РЕПОЗИТОРИЯ: No such file или placeholder в команде
В документации иногда указан шаблон, а не команда. Клонируйте так:
git clone 'https://ВАШ-FORGE/shop.git' "$SHOP_ROOT"
package.json ENOENT в /opt/shop
Вы в родительской папке, а клон в подкаталоге (или наоборот).
find /opt -name package.json 2>/dev/null
export SHOP_ROOT=/путь/где/найден
cd "$SHOP_ROOT"
You are not currently on a branch
После git checkout v0.x.x репозиторий в detached HEAD.
cd "$SHOP_ROOT"
bash scripts/git-sync.sh
scripts/...: No such file or directory
Запуск не из клона. Используйте полный путь:
bash "$SHOP_ROOT/scripts/server-update.sh"
Служба shop не установлена / Unit shop.service could not be found
cd "$SHOP_ROOT"
sudo bash scripts/install-shop-service.sh
В /etc/systemd/system/shop.service поля WorkingDirectory и EnvironmentFile должны указывать на $SHOP_ROOT.
shop.service: status=1/FAILURE, activating (auto-restart)
- Порт 3000 занят (старый ручной Node) — health отвечает, systemd падает:
sudo bash "$SHOP_ROOT/scripts/free-port-3000.sh"
sudo systemctl restart shop
systemctl status shop
- PostgreSQL — смотрите лог:
journalctl -u shop -n 40 --no-pager
bash "$SHOP_ROOT/scripts/diagnose-shop-service.sh"
.envне вSHOP_ROOT— скопируйте с прежнего места:
cp /старый/путь/.env "$SHOP_ROOT/.env"
sudo bash "$SHOP_ROOT/scripts/install-shop-service.sh"
Изменения в git не видны на сайте
Обновление делали не в том каталоге или служба смотрит на другой путь:
cd "$SHOP_ROOT" && git log -1 --oneline
grep WorkingDirectory /etc/systemd/system/shop.service
bash scripts/server-update.sh
Проверка
systemctl status shop
curl -s http://127.0.0.1:3000/health
Ожидается: {"ok":true,"service":"shop","database":"postgresql"} и Active: active (running).
Caddy / HTTPS
Пока curl http://127.0.0.1:3000/health не OK, reverse proxy будет отдавать 502. Сначала backend, потом Caddy.
См. также: Решение проблем, Установка без Docker.