feat: PostgreSQL 17 вместо SQLite

pg + connect-pg-simple, async routes, docker-compose, скрипт setup-postgres.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
shop
2026-05-17 09:32:41 +03:00
parent cb3b8bc49f
commit 7060b0566a
18 changed files with 808 additions and 768 deletions
+23 -24
View File
@@ -1,53 +1,52 @@
#!/bin/bash
# Диагностика HTTP 502 (Caddy не достучался до Node)
# Диагностика HTTP 502 (Caddy не достучался до Node / БД)
set -e
echo "=== Shop / Caddy 502 diagnostic ==="
echo
echo "1. Служба shop"
systemctl is-active shop 2>/dev/null || echo " shop: не установлена или не active"
systemctl status shop --no-pager -l 2>/dev/null | head -20 || true
echo "1. PostgreSQL"
if command -v pg_isready >/dev/null; then
pg_isready -h 127.0.0.1 -p 5432 && echo " pg_isready: OK" || echo " pg_isready: FAIL"
else
echo " pg_isready не найден"
fi
echo
echo "2. Служба caddy"
echo "2. Служба shop"
systemctl is-active shop 2>/dev/null || echo " shop: не active"
systemctl status shop --no-pager -l 2>/dev/null | head -15 || true
echo
echo "3. Служба caddy"
systemctl is-active caddy 2>/dev/null || true
echo
echo "3. Порт 3000"
echo "4. Порт 3000"
if command -v ss >/dev/null; then
ss -tlnp | grep ':3000' || echo " Ничего не слушает порт 3000 — запустите shop"
ss -tlnp | grep ':3000' || echo " Ничего не слушает порт 3000"
else
netstat -tlnp 2>/dev/null | grep ':3000' || echo " Порт 3000 не слушается"
netstat -tlnp 2>/dev/null | grep ':3000' || true
fi
echo
echo "4. curl backend"
echo "5. curl backend"
if curl -sf --max-time 3 http://127.0.0.1:3000/health; then
echo
echo " OK — Node отвечает, проблема скорее в Caddyfile"
echo " OK"
else
echo " FAIL — Node не отвечает на 127.0.0.1:3000"
echo " Проверьте: journalctl -u shop -n 50 --no-pager"
echo " FAIL — проверьте DATABASE_URL и journalctl -u shop"
fi
echo
echo "5. .env (HOST, PORT)"
echo "6. .env"
if [ -f /opt/shop/.env ]; then
grep -E '^(HOST|PORT|NODE_ENV)=' /opt/shop/.env || true
grep -E '^(DATABASE_URL|HOST|PORT)=' /opt/shop/.env 2>/dev/null | sed 's/=.*/=***/' || true
grep -E '^DATABASE_URL=' /opt/shop/.env || echo " DATABASE_URL не задан"
else
echo " /opt/shop/.env не найден"
fi
echo
echo "6. Права data/"
if [ -d /opt/shop/data ]; then
ls -la /opt/shop/data
else
echo " Каталог data/ отсутствует — создайте: mkdir -p /opt/shop/data && chown www-data:www-data /opt/shop/data"
fi
echo
echo "7. Node"
which node || which nodejs || echo " node не найден в PATH"
node -v 2>/dev/null || nodejs -v 2>/dev/null || true
which node && node -v
-3
View File
@@ -9,9 +9,6 @@ git pull
npm install --omit=dev
mkdir -p data
chown -R www-data:www-data data
if systemctl is-active --quiet shop 2>/dev/null; then
systemctl restart shop
sleep 1
+32
View File
@@ -0,0 +1,32 @@
#!/bin/bash
# PostgreSQL 17 на Ubuntu — пользователь и БД для магазина
# Запуск: sudo bash scripts/setup-postgres-ubuntu.sh
set -euo pipefail
DB_USER="${DB_USER:-shop}"
DB_PASS="${DB_PASS:-shop}"
DB_NAME="${DB_NAME:-shop}"
if ! command -v psql >/dev/null; then
echo "Установите PostgreSQL 17:"
echo " apt install -y postgresql-17 postgresql-client-17"
exit 1
fi
sudo -u postgres psql -v ON_ERROR_STOP=1 <<EOF
DO \$\$
BEGIN
IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${DB_USER}') THEN
CREATE ROLE ${DB_USER} LOGIN PASSWORD '${DB_PASS}';
END IF;
END
\$\$;
SELECT 'CREATE DATABASE ${DB_NAME} OWNER ${DB_USER}'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '${DB_NAME}')\gexec
GRANT ALL PRIVILEGES ON DATABASE ${DB_NAME} TO ${DB_USER};
EOF
echo ""
echo "DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@127.0.0.1:5432/${DB_NAME}"