docs: инструкция быстрого развёртывания на Ubuntu
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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
|
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user