docs: обновление сервера и миграция на PostgreSQL 17
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -31,15 +31,31 @@ docker compose up -d
|
|||||||
```bash
|
```bash
|
||||||
apt update
|
apt update
|
||||||
apt install -y postgresql-17 postgresql-client-17
|
apt install -y postgresql-17 postgresql-client-17
|
||||||
|
systemctl enable postgresql
|
||||||
# Пользователь и база shop
|
systemctl start postgresql
|
||||||
cd /opt/shop
|
|
||||||
sudo bash scripts/setup-postgres-ubuntu.sh
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Схема таблиц: `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
|
cp /opt/shop/deploy/shop.service /etc/systemd/system/shop.service
|
||||||
|
|
||||||
cd /opt/shop
|
cd /opt/shop
|
||||||
git config --global --add safe.directory /opt/shop
|
cp .env.example .env # при первой установке
|
||||||
|
# Заполните SESSION_SECRET и DATABASE_URL
|
||||||
|
|
||||||
npm install --omit=dev
|
npm install --omit=dev
|
||||||
|
|
||||||
# Код — root, служба — www-data (только чтение кода достаточно)
|
# Не делайте chown -R www-data на весь /opt/shop (ломает git pull)
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl enable shop
|
systemctl enable shop
|
||||||
systemctl start shop
|
systemctl start shop
|
||||||
@@ -130,10 +148,71 @@ journalctl -u shop -n 5 --no-pager
|
|||||||
# Магазин: http://127.0.0.1:3000 (PostgreSQL)
|
# Магазин: http://127.0.0.1:3000 (PostgreSQL)
|
||||||
```
|
```
|
||||||
|
|
||||||
Обновление:
|
---
|
||||||
|
|
||||||
|
## Обновление на сервере (git pull)
|
||||||
|
|
||||||
```bash
|
```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/
|
src/
|
||||||
```
|
```
|
||||||
|
|
||||||
## Миграция с SQLite
|
|
||||||
|
|
||||||
Старая версия хранила данные в `data/*.db`. После перехода на PostgreSQL выполните `git pull`, настройте `DATABASE_URL`, `npm install` — при первом запуске создастся схема и демо-каталог (если таблица `products` пуста). Пользователей и заказы из SQLite нужно переносить вручную или заново зарегистрироваться.
|
|
||||||
|
|
||||||
## Репозиторий
|
## Репозиторий
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -9,6 +9,18 @@ git pull
|
|||||||
|
|
||||||
npm install --omit=dev
|
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
|
if systemctl is-active --quiet shop 2>/dev/null; then
|
||||||
systemctl restart shop
|
systemctl restart shop
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|||||||
Reference in New Issue
Block a user