docs: обновление сервера и миграция на PostgreSQL 17

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
shop
2026-05-17 09:34:03 +03:00
parent 7060b0566a
commit 20987ad793
2 changed files with 101 additions and 14 deletions
+89 -14
View File
@@ -31,15 +31,31 @@ docker compose up -d
```bash
apt update
apt install -y postgresql-17 postgresql-client-17
# Пользователь и база shop
cd /opt/shop
sudo bash scripts/setup-postgres-ubuntu.sh
systemctl enable postgresql
systemctl start postgresql
```
Схема таблиц: `postgres/init/01_schema.sql` (применяется при старте приложения и при первом запуске Docker).
Если пакета `postgresql-17` нет в репозитории Ubuntu, подключите [PGDG](https://www.postgresql.org/download/linux/ubuntu/):
Сессии хранятся в PostgreSQL (таблица `session`, создаётся автоматически).
```bash
apt install -y curl ca-certificates
install -d /usr/share/postgresql-common/pgdg
curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(. /etc/os-release && echo ${VERSION_CODENAME}-pgdg) main" > /etc/apt/sources.list.d/pgdg.list'
apt update
apt install -y postgresql-17 postgresql-client-17
```
Пользователь и база `shop`:
```bash
cd /opt/shop
bash scripts/setup-postgres-ubuntu.sh
```
Схема: `postgres/init/01_schema.sql` (применяется при старте приложения).
Сессии — таблица `session` в PostgreSQL (создаётся автоматически).
---
@@ -105,10 +121,12 @@ DATABASE_URL=postgresql://shop:shop@127.0.0.1:5432/shop
cp /opt/shop/deploy/shop.service /etc/systemd/system/shop.service
cd /opt/shop
git config --global --add safe.directory /opt/shop
cp .env.example .env # при первой установке
# Заполните SESSION_SECRET и DATABASE_URL
npm install --omit=dev
# Код — root, служба — www-data (только чтение кода достаточно)
# Не делайте chown -R www-data на весь /opt/shop (ломает git pull)
systemctl daemon-reload
systemctl enable shop
systemctl start shop
@@ -130,10 +148,71 @@ journalctl -u shop -n 5 --no-pager
# Магазин: http://127.0.0.1:3000 (PostgreSQL)
```
Обновление:
---
## Обновление на сервере (git pull)
```bash
bash /opt/shop/scripts/server-update.sh
cd /opt/shop
git config --global --add safe.directory /opt/shop
bash scripts/server-update.sh
```
Скрипт: `git pull``npm install` → проверка PostgreSQL → `restart shop``curl /health``reload caddy`.
Вручную:
```bash
cd /opt/shop
git pull
npm install --omit=dev
systemctl restart shop
curl -s http://127.0.0.1:3000/health
systemctl reload caddy
```
---
## Переход с SQLite на PostgreSQL 17
Если сервер уже работал на старой версии (файлы `data/*.db`):
```bash
# 1. PostgreSQL
apt install -y postgresql-17 postgresql-client-17
systemctl start postgresql
# 2. Код
cd /opt/shop
git config --global --add safe.directory /opt/shop
git pull
# 3. База shop
bash scripts/setup-postgres-ubuntu.sh
# 4. .env — обязательно DATABASE_URL
cp -n .env.example .env
nano .env
# DATABASE_URL=postgresql://shop:shop@127.0.0.1:5432/shop
# HOST=127.0.0.1
# NODE_ENV=production
# TRUST_PROXY=1
# 5. Зависимости и перезапуск
npm install --omit=dev
systemctl restart shop
# 6. Проверка
curl -s http://127.0.0.1:3000/health
systemctl reload caddy
```
Каталог `data/` больше не используется. Демо-товары появятся при пустой таблице `products`. Аккаунты и заказы из SQLite не переносятся — нужна повторная регистрация или ручной импорт.
Проверка PostgreSQL:
```bash
psql "postgresql://shop:shop@127.0.0.1:5432/shop" -c '\dt'
```
---
@@ -220,10 +299,6 @@ scripts/
src/
```
## Миграция с SQLite
Старая версия хранила данные в `data/*.db`. После перехода на PostgreSQL выполните `git pull`, настройте `DATABASE_URL`, `npm install` — при первом запуске создастся схема и демо-каталог (если таблица `products` пуста). Пользователей и заказы из SQLite нужно переносить вручную или заново зарегистрироваться.
## Репозиторий
```bash
+12
View File
@@ -9,6 +9,18 @@ git pull
npm install --omit=dev
if [ -f .env ] && ! grep -q '^DATABASE_URL=' .env; then
echo "ВНИМАНИЕ: добавьте DATABASE_URL в .env (см. .env.example)"
exit 1
fi
if command -v pg_isready >/dev/null; then
pg_isready -h 127.0.0.1 -p 5432 >/dev/null || {
echo "PostgreSQL не отвечает. Запустите: systemctl start postgresql"
exit 1
}
fi
if systemctl is-active --quiet shop 2>/dev/null; then
systemctl restart shop
sleep 1