NW 4aea49811c feat: multi-architecture Docker setup (x86_64 + ARM64) with one-command install
- Multi-stage Dockerfile: builder compiles native modules (better-sqlite3,
  tiny-secp256k1) under target architecture, runtime is minimal Alpine
- install.sh: POSIX sh installer (Alpine ash compatible) with architecture
  detection, Docker install, .env validation, health-check retry loop
- docker-compose.yml: removed platform locks, .env read-only mount,
  127.0.0.1 port binding, 384m mem limit (Orange Pi Zero 2 safe)
- .dockerignore: excludes node_modules, secrets, tests, .kilo
- README.md: complete rewrite with deployment docs for any device
- Verified: POSIX sh syntax (dash), Dockerfile (docker build --check),
  docker-compose (docker compose config)
2026-06-24 02:06:07 +01:00
2024-11-15 07:31:46 +03:00

Telegram Shop Bot

Телеграм-бот для организации онлайн-продаж через Telegram с поддержкой криптовалют и WireGuard VPN.

Возможности

  • Каталог товаров с категориями и фильтрацией по локациям
  • Покупки с оплатой криптовалютами (BTC, ETH, LTC, USDT, USDC)
  • Управление криптокошельками (создание, пополнение, баланс)
  • История транзакций и покупок
  • SaaS-система с автоматическим расчётом комиссий
  • Админ-панель на порту 3001
  • WireGuard VPN для безопасных транзакций

Быстрый старт (одна команда)

Требования

  • Любое устройство с Docker: x86_64 (PC, сервер) или ARM64 (Orange Pi, Raspberry Pi)
  • 512 МБ RAM минимум (Orange Pi Zero 2 поддерживается)

Установка

git clone <repo-url> && cd telegram-shop
bash install.sh

Скрипт автоматически:

  1. Определит архитектуру (x86_64 / ARM64 / ARMv7)
  2. Установит Docker если не установлен
  3. Создаст .env из шаблона
  4. Проверит обязательные переменные
  5. Соберёт Docker-образ под текущую архитектуру
  6. Запустит контейнер и проверит health-check

Ручная установка

# 1. Клонировать
git clone <repo-url> && cd telegram-shop

# 2. Создать .env из шаблона
cp .env.example .env
nano .env  # заполнить BOT_TOKEN, ADMIN_IDS, ENCRYPTION_KEY

# 3. Собрать и запустить
docker compose up -d --build

# 4. Проверить статус
docker compose ps
curl http://localhost:3001/health

Настройка .env

Скопируйте .env.example в .env и заполните:

Переменная Обязательно Описание
BOT_TOKEN Токен Telegram бота (@BotFather)
ADMIN_IDS ID администраторов через запятую
ENCRYPTION_KEY Ключ шифрования (32 байта hex)
SUPER_ADMIN_IDS ID супер-админов
SUPPORT_LINK Ссылка на поддержку
WG_ENABLED true / false (по умолчанию false)
WG_PRIVATE_KEY Приватный ключ WireGuard
WG_PUBLIC_KEY Публичный ключ WireGuard
WG_PRESHARED_KEY Pre-shared ключ WireGuard
WG_ENDPOINT Адрес сервера WireGuard
WG_ADDRESS Адрес интерфейса WireGuard
WG_DNS DNS для WireGuard

Генерация ключа шифрования:

node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Поддерживаемые устройства

Устройство Архитектура RAM Статус
PC / Сервер x86_64 ≥ 512 МБ
Orange Pi Zero 2 ARM64 (H616) 512 МБ
Raspberry Pi 4 ARM64 ≥ 1 ГБ
Raspberry Pi 3 ARM64 1 ГБ
Raspberry Pi 2 ARMv7 1 ГБ

Docker автоматически собирает нативные модули (better-sqlite3, tiny-secp256k1) под архитектуру хоста.

Архитектура Docker

┌─────────────────────────────────────────────┐
│  telegram_shop_prod (node:22-alpine)        │
│  ┌──────────────┐  ┌─────────────────────┐ │
│  │ Builder      │  │ Runtime              │ │
│  │ python3, g++ │→ │ bash, curl,         │ │
│  │ make, gcc    │  │ wireguard-tools,    │ │
│  │ npm install  │  │ iptables, bind-tools │ │
│  └──────────────┘  └─────────────────────┘ │
│                     Port 3001 (localhost)     │
│                     Limit: 384MB RAM          │
└─────────────────────────────────────────────┘
     ↑ Volumes: db/, uploads/, .env

Файлы

Файл Назначение
Dockerfile Multi-stage сборка (builder + runtime)
docker-compose.yml Конфигурация контейнера
install.sh Автоматический установщик
.dockerignore Исключения из Docker-образа
.env.example Шаблон переменных окружения
wg/start.sh Скрипт запуска (WireGuard + Node.js)

Команды управления

# Запуск
docker compose up -d

# Пересборка после изменений
docker compose up -d --build

# Логи
docker compose logs -f

# Стоп
docker compose down

# Рестарт
docker compose restart

# Статус
docker compose ps

# Health-check
curl http://localhost:3001/health

WireGuard

WireGuard по умолчанию отключен (WG_ENABLED=false). Для включения:

  1. Установите WG_ENABLED=true в .env
  2. Заполните ключи WireGuard в .env
  3. Перезапустите: docker compose restart

Контейнер требует NET_ADMIN и sysctl net.ipv4.conf.all.src_valid_mark=1 для WireGuard. Эти привилегии заданы в docker-compose.yml.

Безопасность

  • .env монтируется только для чтения (:ro)
  • Порт 3001 привязан к 127.0.0.1 (доступен только с хоста)
  • Нативные модули компилируются в builder-стейдже (чистый runtime)
  • devDependencies не попадают в production-образ
  • Тестовые файлы исключены из Docker-образа (.dockerignore)
  • node_modules хоста не попадают в образ (.dockerignore)

Структура проекта

├── src/
│   ├── admin/          # Админ-панель (Express)
│   ├── config/         # Конфигурация (БД, крипто)
│   ├── context/         # Контекст и состояния бота
│   ├── handlers/        # Обработчики команд
│   ├── middleware/      # Промежуточные обработчики
│   ├── migrations/      # Миграции БД
│   ├── models/          # Модели данных (SQLite)
│   ├── router/          # Роутинг Express
│   ├── services/        # Бизнес-логика
│   ├── utils/           # Утилиты
│   └── index.js         # Точка входа
├── wg/                 # WireGuard конфигурация
│   └── start.sh         # Скрипт запуска контейнера
├── db/                 # SQLite база данных (volume)
├── uploads/            # Загруженные фото (volume)
├── Dockerfile          # Multi-stage сборка
├── docker-compose.yml  # Конфигурация контейнера
├── install.sh          # Установщик (POSIX sh)
├── .dockerignore       # Исключения из образа
├── .env.example        # Шаблон переменных
└── package.json

Разработка

# Установка зависимостей
npm install

# Запуск в режиме разработки
npm run dev

# Тесты
npm test

Лицензия

MIT

Description
No description provided
Readme 1,012 KiB
Languages
JavaScript 92.2%
Shell 4.4%
CSS 3.2%
Dockerfile 0.2%