Files
shop10/README.md
T

193 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```