- 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)
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
Скрипт автоматически:
- Определит архитектуру (x86_64 / ARM64 / ARMv7)
- Установит Docker если не установлен
- Создаст
.envиз шаблона - Проверит обязательные переменные
- Соберёт Docker-образ под текущую архитектуру
- Запустит контейнер и проверит 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). Для включения:
- Установите
WG_ENABLED=trueв.env - Заполните ключи WireGuard в
.env - Перезапустите:
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
Languages
JavaScript
92.2%
Shell
4.4%
CSS
3.2%
Dockerfile
0.2%