Files
shop10/README.md
T

4.8 KiB
Raw Blame History

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