docs: инструкция быстрого развёртывания на Ubuntu

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
shop
2026-05-16 20:56:37 +03:00
parent 323e0a2926
commit f1d377684b
+143 -20
View File
@@ -11,43 +11,167 @@
## Требования ## Требования
- [Node.js](https://nodejs.org/) 18 или новее (вместе с npm) - Node.js 18+
- npm
- На Linux для сборки `better-sqlite3`: `build-essential`, `python3`
## Установка и запуск ---
## Быстрый развёртывание на Ubuntu
Скопируйте блок целиком на чистый сервер Ubuntu 22.04 / 24.04 (от root или через `sudo`):
```bash
# 1. Зависимости системы
apt update
apt install -y git curl build-essential python3
# 2. Node.js 20 LTS
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
# 3. Клонирование (замените URL при необходимости)
cd /opt
git clone https://git.evilfox.cc/test/shop10.git shop
cd shop
# 4. Настройка окружения
cp .env.example .env
# Сгенерируйте секрет сессии:
sed -i "s/change-me-to-a-long-random-string/$(openssl rand -hex 32)/" .env
# 5. Установка и первый запуск
npm install --omit=dev
npm start
```
Сайт будет доступен на **http://IP_СЕРВЕРА:3000**.
Порт можно изменить в `.env`:
```env
PORT=3000
SESSION_SECRET=ваш-длинный-секрет
```
При первом запуске создаются `data/shop.db`, `data/sessions.db` и демо-товары.
---
## Запуск как служба (systemd)
Чтобы магазин работал после перезагрузки сервера:
```bash
cat > /etc/systemd/system/shop.service << 'EOF'
[Unit]
Description=Shop Node.js
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/shop
Environment=NODE_ENV=production
ExecStart=/usr/bin/node src/server.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# Права на каталог (если клонировали в /opt/shop)
chown -R www-data:www-data /opt/shop
systemctl daemon-reload
systemctl enable shop
systemctl start shop
systemctl status shop
```
Логи: `journalctl -u shop -f`
---
## Nginx (опционально, порт 80/443)
```bash
apt install -y nginx
cat > /etc/nginx/sites-available/shop << 'EOF'
server {
listen 80;
server_name shop.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
EOF
ln -sf /etc/nginx/sites-available/shop /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
```
Замените `shop.example.com` на ваш домен. HTTPS: `apt install certbot python3-certbot-nginx && certbot --nginx`.
---
## Обновление с Git
```bash
cd /opt/shop
systemctl stop shop
git pull
npm install --omit=dev
systemctl start shop
```
---
## Локальная разработка
```bash ```bash
npm install npm install
cp .env.example .env # Windows: copy .env.example .env cp .env.example .env
npm run dev npm run dev
``` ```
Сайт: [http://localhost:3000](http://localhost:3000) Сайт: [http://localhost:3000](http://localhost:3000)
При первом запуске создаётся база `data/shop.db` и загружаются демо-товары.
## Переменные окружения ## Переменные окружения
| Переменная | Описание | По умолчанию | | Переменная | Описание | По умолчанию |
|-------------------|-----------------------------------|--------------| |------------------|---------------------------|----------------|
| `PORT` | Порт HTTP-сервера | `3000` | | `PORT` | Порт HTTP-сервера | `3000` |
| `SESSION_SECRET` | Секрет для подписи сессий | dev-значение | | `SESSION_SECRET` | Секрет для сессий | dev-значение |
## Скрипты ## Скрипты npm
| Команда | Описание | | Команда | Описание |
|----------------|-----------------------------| |----------------|----------------------------------|
| `npm start` | Запуск сервера | | `npm start` | Запуск сервера (production) |
| `npm run dev` | Запуск с автоперезагрузкой | | `npm run dev` | Запуск с автоперезагрузкой |
| `npm run seed` | Заполнение каталога (если пуст) | | `npm run seed` | Заполнение каталога, если пуст |
## База данных ## База данных
Данные хранятся локально в каталоге `data/`: Локально в каталоге `data/`:
- `shop.db` — товары, пользователи, заказы - `shop.db` — товары, пользователи, заказы
- `sessions.db` — сессии - `sessions.db` — сессии
Каталог `data/` не попадает в git (см. `.gitignore`). Каталог `data/` в git не попадает (см. `.gitignore`). Делайте резервные копии:
```bash
cp -a data/shop.db data/shop.db.bak
```
## Структура проекта ## Структура проекта
@@ -61,9 +185,8 @@ src/
public/css/ — стили public/css/ — стили
``` ```
## Git remote ## Репозиторий
```bash ```bash
git remote add origin https://git.evilfox.cc/admin/shop.git git clone https://git.evilfox.cc/test/shop10.git
git push -u origin main
``` ```