b44419aebd
Co-authored-by: Cursor <cursoragent@cursor.com>
77 lines
2.5 KiB
Bash
77 lines
2.5 KiB
Bash
#!/bin/bash
|
|
# Установка systemd-службы shop (после git clone и .env)
|
|
# sudo bash scripts/install-shop-service.sh
|
|
set -euo pipefail
|
|
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo "Запустите от root: sudo bash scripts/install-shop-service.sh"
|
|
exit 1
|
|
fi
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "$SCRIPT_DIR/shop-root.sh"
|
|
|
|
echo "=== Установка службы shop ==="
|
|
echo "Каталог: $SHOP_ROOT"
|
|
|
|
if [ ! -f "$SHOP_ROOT/package.json" ]; then
|
|
echo "Ошибка: нет package.json в $SHOP_ROOT"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "$SHOP_ROOT/.env" ]; then
|
|
if [ -f "$SHOP_ROOT/.env.example" ]; then
|
|
cp "$SHOP_ROOT/.env.example" "$SHOP_ROOT/.env"
|
|
echo "Создан .env из .env.example — отредактируйте SESSION_SECRET и DATABASE_URL"
|
|
else
|
|
echo "Ошибка: нет .env — создайте из .env.example"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if ! grep -q '^DATABASE_URL=' "$SHOP_ROOT/.env"; then
|
|
echo "ВНИМАНИЕ: в .env нет DATABASE_URL"
|
|
fi
|
|
|
|
if ! command -v node >/dev/null; then
|
|
echo "Ошибка: node не найден"
|
|
exit 1
|
|
fi
|
|
|
|
NODE_BIN=$(command -v node)
|
|
echo "Node: $NODE_BIN ($($NODE_BIN -v))"
|
|
|
|
npm install --omit=dev --prefix "$SHOP_ROOT"
|
|
|
|
cp -f "$SHOP_ROOT/deploy/shop.service" /etc/systemd/system/shop.service
|
|
sed -i "s|WorkingDirectory=.*|WorkingDirectory=${SHOP_ROOT}|" /etc/systemd/system/shop.service
|
|
sed -i "s|EnvironmentFile=.*|EnvironmentFile=${SHOP_ROOT}/.env|" /etc/systemd/system/shop.service
|
|
sed -i "s|ExecStart=.*|ExecStart=${NODE_BIN} src/server.js|" /etc/systemd/system/shop.service
|
|
|
|
# www-data должен читать код (не меняем владельца всего дерева — только доступ на чтение)
|
|
chmod -R a+rX "$SHOP_ROOT" 2>/dev/null || true
|
|
if ! sudo -u www-data test -r "$SHOP_ROOT/package.json"; then
|
|
echo "Предупреждение: www-data не читает $SHOP_ROOT — проверьте права каталога"
|
|
fi
|
|
|
|
if command -v pg_isready >/dev/null; then
|
|
systemctl enable postgresql 2>/dev/null || true
|
|
systemctl start postgresql 2>/dev/null || true
|
|
fi
|
|
|
|
systemctl daemon-reload
|
|
systemctl enable shop
|
|
systemctl restart shop
|
|
|
|
sleep 2
|
|
if curl -sf http://127.0.0.1:3000/health; then
|
|
echo ""
|
|
echo "OK — служба shop запущена"
|
|
systemctl status shop --no-pager -l | head -12
|
|
systemctl reload caddy 2>/dev/null || true
|
|
else
|
|
echo "shop не отвечает на :3000"
|
|
journalctl -u shop -n 25 --no-pager
|
|
exit 1
|
|
fi
|