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
|
||||
npm install
|
||||
cp .env.example .env # Windows: copy .env.example .env
|
||||
cp .env.example .env
|
||||
npm run dev
|
||||
```
|
||||
|
||||
Сайт: [http://localhost:3000](http://localhost:3000)
|
||||
|
||||
При первом запуске создаётся база `data/shop.db` и загружаются демо-товары.
|
||||
|
||||
## Переменные окружения
|
||||
|
||||
| Переменная | Описание | По умолчанию |
|
||||
|-------------------|-----------------------------------|--------------|
|
||||
|------------------|---------------------------|----------------|
|
||||
| `PORT` | Порт HTTP-сервера | `3000` |
|
||||
| `SESSION_SECRET` | Секрет для подписи сессий | dev-значение |
|
||||
| `SESSION_SECRET` | Секрет для сессий | dev-значение |
|
||||
|
||||
## Скрипты
|
||||
## Скрипты npm
|
||||
|
||||
| Команда | Описание |
|
||||
|----------------|-----------------------------|
|
||||
| `npm start` | Запуск сервера |
|
||||
|----------------|----------------------------------|
|
||||
| `npm start` | Запуск сервера (production) |
|
||||
| `npm run dev` | Запуск с автоперезагрузкой |
|
||||
| `npm run seed` | Заполнение каталога (если пуст) |
|
||||
| `npm run seed` | Заполнение каталога, если пуст |
|
||||
|
||||
## База данных
|
||||
|
||||
Данные хранятся локально в каталоге `data/`:
|
||||
Локально в каталоге `data/`:
|
||||
|
||||
- `shop.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/ — стили
|
||||
```
|
||||
|
||||
## Git remote
|
||||
## Репозиторий
|
||||
|
||||
```bash
|
||||
git remote add origin https://git.evilfox.cc/admin/shop.git
|
||||
git push -u origin main
|
||||
git clone https://git.evilfox.cc/test/shop10.git
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user