# 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 ```