f1d377684b
Co-authored-by: Cursor <cursoragent@cursor.com>
4.8 KiB
4.8 KiB
Shop
Интернет-магазин на Node.js с локальной базой SQLite.
Возможности
- Каталог товаров с категориями и поиском
- Корзина и оформление заказа
- Регистрация и вход пользователей
- История заказов в личном кабинете
Требования
- Node.js 18+
- npm
- На Linux для сборки
better-sqlite3:build-essential,python3
Быстрый развёртывание на Ubuntu
Скопируйте блок целиком на чистый сервер Ubuntu 22.04 / 24.04 (от root или через sudo):
# 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:
PORT=3000
SESSION_SECRET=ваш-длинный-секрет
При первом запуске создаются data/shop.db, data/sessions.db и демо-товары.
Запуск как служба (systemd)
Чтобы магазин работал после перезагрузки сервера:
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)
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
cd /opt/shop
systemctl stop shop
git pull
npm install --omit=dev
systemctl start shop
Локальная разработка
npm install
cp .env.example .env
npm run dev
Сайт: 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). Делайте резервные копии:
cp -a data/shop.db data/shop.db.bak
Структура проекта
src/
server.js — точка входа
db.js — схема SQLite
seed.js — демо-данные
routes/ — маршруты
views/ — шаблоны EJS
public/css/ — стили
Репозиторий
git clone https://git.evilfox.cc/test/shop10.git