f1d377684b
Co-authored-by: Cursor <cursoragent@cursor.com>
193 lines
4.8 KiB
Markdown
193 lines
4.8 KiB
Markdown
# Shop
|
||
|
||
Интернет-магазин на **Node.js** с локальной базой **SQLite**.
|
||
|
||
## Возможности
|
||
|
||
- Каталог товаров с категориями и поиском
|
||
- Корзина и оформление заказа
|
||
- Регистрация и вход пользователей
|
||
- История заказов в личном кабинете
|
||
|
||
## Требования
|
||
|
||
- 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
|
||
npm run dev
|
||
```
|
||
|
||
Сайт: [http://localhost:3000](http://localhost:3000)
|
||
|
||
## Переменные окружения
|
||
|
||
| Переменная | Описание | По умолчанию |
|
||
|------------------|---------------------------|----------------|
|
||
| `PORT` | Порт HTTP-сервера | `3000` |
|
||
| `SESSION_SECRET` | Секрет для сессий | dev-значение |
|
||
|
||
## Скрипты npm
|
||
|
||
| Команда | Описание |
|
||
|----------------|----------------------------------|
|
||
| `npm start` | Запуск сервера (production) |
|
||
| `npm run dev` | Запуск с автоперезагрузкой |
|
||
| `npm run seed` | Заполнение каталога, если пуст |
|
||
|
||
## База данных
|
||
|
||
Локально в каталоге `data/`:
|
||
|
||
- `shop.db` — товары, пользователи, заказы
|
||
- `sessions.db` — сессии
|
||
|
||
Каталог `data/` в git не попадает (см. `.gitignore`). Делайте резервные копии:
|
||
|
||
```bash
|
||
cp -a data/shop.db data/shop.db.bak
|
||
```
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
src/
|
||
server.js — точка входа
|
||
db.js — схема SQLite
|
||
seed.js — демо-данные
|
||
routes/ — маршруты
|
||
views/ — шаблоны EJS
|
||
public/css/ — стили
|
||
```
|
||
|
||
## Репозиторий
|
||
|
||
```bash
|
||
git clone https://git.evilfox.cc/test/shop10.git
|
||
```
|