Files
shop10/wiki/Server-Operations.md
T

6.2 KiB
Raw Blame History

Сервер: установка и обновление

Инструкция без привязки к конкретному домену или хостингу. Подставьте свои значения:

Переменная Что это Пример
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):

export SHOP_ROOT=/opt/shop/shop10
bash "$SHOP_ROOT/scripts/server-update.sh"

Подставьте свой путь к клону (где лежит package.json). Часто это /opt/shop или /opt/shop/shop10.

Почему так надёжнее, чем cd /opt/shop && git pull:

  • явно задан каталог репозитория (SHOP_ROOT);
  • внутри выполняются git-sync (ветка main), npm install, перезапуск shop, проверка /health;
  • не перепутаете родительскую папку без package.json и скриптов.

Проверка после обновления:

systemctl status shop
curl -s http://127.0.0.1:3000/health

Если git в detached HEAD отдельно:

cd "$SHOP_ROOT"
bash scripts/git-sync.sh
bash 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)

  1. Порт 3000 занят (старый ручной Node) — health отвечает, systemd падает:
sudo bash "$SHOP_ROOT/scripts/free-port-3000.sh"
sudo systemctl restart shop
systemctl status shop
  1. PostgreSQL — смотрите лог:
journalctl -u shop -n 40 --no-pager
bash "$SHOP_ROOT/scripts/diagnose-shop-service.sh"
  1. .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.