Добавить Install-Native
+244
@@ -0,0 +1,244 @@
|
|||||||
|
# Установка без Docker (Ubuntu)
|
||||||
|
|
||||||
|
Production-развёртывание на **Ubuntu 22.04 / 24.04**: Node.js 20, PostgreSQL 17, systemd, опционально Caddy.
|
||||||
|
|
||||||
|
## 1. Требования
|
||||||
|
|
||||||
|
- Сервер Ubuntu 22.04 или 24.04 (root или sudo)
|
||||||
|
- Минимум 1 GB RAM, 10 GB диск
|
||||||
|
- Открыты порты **22**, **80**, **443** (если используете Caddy)
|
||||||
|
- Порт **3000** наружу не открывать — только localhost
|
||||||
|
|
||||||
|
## 2. Установка системных пакетов
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt update
|
||||||
|
apt install -y git curl ca-certificates
|
||||||
|
```
|
||||||
|
|
||||||
|
### Node.js 20 LTS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
|
||||||
|
apt install -y nodejs
|
||||||
|
node -v # v20.x
|
||||||
|
```
|
||||||
|
|
||||||
|
### PostgreSQL 17
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt install -y postgresql-17 postgresql-client-17
|
||||||
|
systemctl enable postgresql
|
||||||
|
systemctl start postgresql
|
||||||
|
pg_isready -h 127.0.0.1 -p 5432
|
||||||
|
```
|
||||||
|
|
||||||
|
Если пакет `postgresql-17` не найден — [репозиторий PGDG](https://www.postgresql.org/download/linux/ubuntu/):
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. Клонирование проекта
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt
|
||||||
|
git clone https://git.evilfox.cc/test/shop10.git shop
|
||||||
|
cd shop
|
||||||
|
git checkout v0.10.0
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. База данных PostgreSQL
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt/shop
|
||||||
|
bash scripts/setup-postgres-ubuntu.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Скрипт:
|
||||||
|
- запускает PostgreSQL;
|
||||||
|
- создаёт пользователя и БД `shop` (по умолчанию пароль `shop` — **смените в production**);
|
||||||
|
- выводит строку `DATABASE_URL`.
|
||||||
|
|
||||||
|
Проверка:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
psql "postgresql://shop:shop@127.0.0.1:5432/shop" -c "SELECT 1"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5. Файл окружения `.env`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
nano .env
|
||||||
|
```
|
||||||
|
|
||||||
|
Обязательные параметры:
|
||||||
|
|
||||||
|
```env
|
||||||
|
PORT=3000
|
||||||
|
HOST=127.0.0.1
|
||||||
|
NODE_ENV=production
|
||||||
|
TRUST_PROXY=1
|
||||||
|
SESSION_SECRET=сгенерируйте_длинную_строку
|
||||||
|
DATABASE_URL=postgresql://shop:ВАШ_ПАРОЛЬ@127.0.0.1:5432/shop
|
||||||
|
```
|
||||||
|
|
||||||
|
Секрет сессии:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
openssl rand -hex 32
|
||||||
|
```
|
||||||
|
|
||||||
|
`HOST=127.0.0.1` — приложение доступно только локально; снаружи — через Caddy.
|
||||||
|
|
||||||
|
## 6. Установка зависимостей Node.js
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt/shop
|
||||||
|
npm install --omit=dev
|
||||||
|
```
|
||||||
|
|
||||||
|
При первом запуске приложение создаст таблицы и демо-товары (если каталог пуст).
|
||||||
|
|
||||||
|
## 7. Служба systemd
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp /opt/shop/deploy/shop.service /etc/systemd/system/shop.service
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable shop
|
||||||
|
systemctl start shop
|
||||||
|
systemctl status shop
|
||||||
|
```
|
||||||
|
|
||||||
|
Unit ждёт PostgreSQL (`ExecStartPre` + `pg_isready`) и запускает Node от пользователя `www-data`.
|
||||||
|
|
||||||
|
**Важно:** не выполняйте `chown -R www-data /opt/shop` — это ломает `git pull`. Права на запись нужны только для каталога `data/` (если используется); с PostgreSQL каталог `data/` не обязателен.
|
||||||
|
|
||||||
|
Логи:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
journalctl -u shop -f
|
||||||
|
```
|
||||||
|
|
||||||
|
## 8. Проверка backend
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s http://127.0.0.1:3000/health
|
||||||
|
ss -tlnp | grep 3000
|
||||||
|
```
|
||||||
|
|
||||||
|
В логах должно быть: `Магазин: http://127.0.0.1:3000 (PostgreSQL)`
|
||||||
|
|
||||||
|
## 9. Caddy — HTTPS и reverse proxy
|
||||||
|
|
||||||
|
Установка Caddy:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt install -y debian-keyring debian-archive-keyring apt-transport-https
|
||||||
|
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
|
||||||
|
| gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
|
||||||
|
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
|
||||||
|
| tee /etc/apt/sources.list.d/caddy-stable.list
|
||||||
|
apt update && apt install -y caddy
|
||||||
|
```
|
||||||
|
|
||||||
|
Конфигурация:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp /opt/shop/caddy/Caddyfile.example /etc/caddy/Caddyfile
|
||||||
|
nano /etc/caddy/Caddyfile
|
||||||
|
```
|
||||||
|
|
||||||
|
Пример (замените домен и email):
|
||||||
|
|
||||||
|
```caddyfile
|
||||||
|
{
|
||||||
|
email admin@example.com
|
||||||
|
}
|
||||||
|
|
||||||
|
shop.example.com {
|
||||||
|
encode gzip zstd
|
||||||
|
reverse_proxy 127.0.0.1:3000
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
caddy validate --config /etc/caddy/Caddyfile
|
||||||
|
systemctl enable caddy
|
||||||
|
systemctl reload caddy
|
||||||
|
```
|
||||||
|
|
||||||
|
Файрвол:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ufw allow 22/tcp
|
||||||
|
ufw allow 80/tcp
|
||||||
|
ufw allow 443/tcp
|
||||||
|
ufw enable
|
||||||
|
```
|
||||||
|
|
||||||
|
Зависимость Caddy от shop (опционально):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p /etc/systemd/system/caddy.service.d
|
||||||
|
cp /opt/shop/deploy/caddy-after-shop.conf /etc/systemd/system/caddy.service.d/shop.conf
|
||||||
|
systemctl daemon-reload
|
||||||
|
```
|
||||||
|
|
||||||
|
## 10. Обновление
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt/shop
|
||||||
|
git config --global --add safe.directory /opt/shop
|
||||||
|
bash scripts/server-update.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Или вручную:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git pull
|
||||||
|
npm install --omit=dev
|
||||||
|
systemctl restart shop
|
||||||
|
curl -s http://127.0.0.1:3000/health
|
||||||
|
systemctl reload caddy
|
||||||
|
```
|
||||||
|
|
||||||
|
## 11. Переход с SQLite (старая версия)
|
||||||
|
|
||||||
|
1. Установите PostgreSQL (шаги 2–4)
|
||||||
|
2. Добавьте `DATABASE_URL` в `.env`
|
||||||
|
3. `git pull` → `npm install` → `systemctl restart shop`
|
||||||
|
4. Демо-товары появятся автоматически; пользователей нужно зарегистрировать заново
|
||||||
|
|
||||||
|
Быстрое исправление подключения к БД:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash /opt/shop/scripts/fix-db-connection.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## 12. Архитектура
|
||||||
|
|
||||||
|
```
|
||||||
|
Интернет → Caddy :443 → 127.0.0.1:3000 (Node.js shop)
|
||||||
|
↓
|
||||||
|
PostgreSQL 127.0.0.1:5432
|
||||||
|
```
|
||||||
|
|
||||||
|
## 13. Резервное копирование БД
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo -u postgres pg_dump shop > shop_backup_$(date +%F).sql
|
||||||
|
```
|
||||||
|
|
||||||
|
Восстановление:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo -u postgres psql shop < shop_backup_2026-05-17.sql
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user