docs: обновление сервера и миграция на PostgreSQL 17
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user