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)
This commit is contained in:
302
README.md
302
README.md
@@ -1,175 +1,205 @@
|
||||
# Универсальный Телеграмм Магазин
|
||||
# Telegram Shop Bot
|
||||
|
||||
**Описание проекта**:
|
||||
"Универсальный Телеграмм Магазин" — это телеграмм-бот для организации онлайн-продаж через Telegram. Проект предоставляет полный цикл управления магазином, включая работу с криптовалютами, управление товарами и пользователями, а также интеграцию с VPN через WireGuard для безопасных транзакций.
|
||||
Телеграм-бот для организации онлайн-продаж через Telegram с поддержкой криптовалют и WireGuard VPN.
|
||||
|
||||
**Основные технологии**:
|
||||
- Node.js + Telegraf для работы с Telegram API
|
||||
- SQLite для хранения данных
|
||||
- Docker для контейнеризации
|
||||
- WireGuard для защищенных соединений
|
||||
- Поддержка криптокошельков (Bitcoin, Ethereum, Litecoin)
|
||||
## Возможности
|
||||
|
||||
Проект включает несколько ключевых разделов для удобной работы пользователей и администраторов, а также позволяет интегрировать систему криптокошельков для расчетов, управления товарами и отслеживания покупок.
|
||||
- Каталог товаров с категориями и фильтрацией по локациям
|
||||
- Покупки с оплатой криптовалютами (BTC, ETH, LTC, USDT, USDC)
|
||||
- Управление криптокошельками (создание, пополнение, баланс)
|
||||
- История транзакций и покупок
|
||||
- SaaS-система с автоматическим расчётом комиссий
|
||||
- Админ-панель на порту 3001
|
||||
- WireGuard VPN для безопасных транзакций
|
||||
|
||||
### Основной функционал
|
||||
## Быстрый старт (одна команда)
|
||||
|
||||
#### Для пользователей:
|
||||
- Просмотр товаров по категориям с фильтрацией по локациям
|
||||
- Совершение покупок с использованием криптовалют
|
||||
- Управление криптокошельками (создание, пополнение, просмотр баланса)
|
||||
- Просмотр истории транзакций и покупок
|
||||
- Настройка профиля (локация, контактные данные)
|
||||
- Подключение к защищенному VPN через WireGuard для безопасных транзакций
|
||||
### Требования
|
||||
|
||||
#### Для администраторов:
|
||||
- Полное управление товарами и категориями
|
||||
- Управление пользователями (блокировка, редактирование балансов)
|
||||
- Контроль транзакций и комиссий
|
||||
- Создание дампов базы данных с автоматическим списанием комиссии (% от балансов кошельков)
|
||||
- Управление локациями и настройками VPN
|
||||
- Мониторинг активности пользователей
|
||||
- SaaS система с автоматическим расчетом комиссий:
|
||||
- Комиссия за оборот по магазину перед выгрузкой кошельков
|
||||
- Любое устройство с Docker: x86_64 (PC, сервер) или ARM64 (Orange Pi, Raspberry Pi)
|
||||
- 512 МБ RAM минимум (Orange Pi Zero 2 поддерживается)
|
||||
|
||||
---
|
||||
### Установка
|
||||
|
||||
### Установка и запуск
|
||||
|
||||
#### Требования:
|
||||
- Node.js 18+
|
||||
- Docker и Docker Compose
|
||||
- Telegram Bot Token
|
||||
- SQLite connection string
|
||||
- WireGuard конфигурация
|
||||
|
||||
#### 1. Установка зависимостей:
|
||||
```bash
|
||||
npm install
|
||||
git clone <repo-url> && cd telegram-shop
|
||||
bash install.sh
|
||||
```
|
||||
|
||||
#### 2. Настройка конфигурации:
|
||||
Создайте файл `.env` в корне проекта со следующим содержимым:
|
||||
```env
|
||||
TELEGRAM_BOT_TOKEN=your_bot_token
|
||||
MONGO_URI=mongodb://localhost:27017/telegram_shop
|
||||
WIREGUARD_CONFIG_PATH=./wg/config/wg0.conf
|
||||
```
|
||||
Скрипт автоматически:
|
||||
1. Определит архитектуру (x86_64 / ARM64 / ARMv7)
|
||||
2. Установит Docker если не установлен
|
||||
3. Создаст `.env` из шаблона
|
||||
4. Проверит обязательные переменные
|
||||
5. Соберёт Docker-образ под текущую архитектуру
|
||||
6. Запустит контейнер и проверит health-check
|
||||
|
||||
### Ручная установка
|
||||
|
||||
#### 3. Запуск через Docker:
|
||||
```bash
|
||||
docker-compose up -d
|
||||
# 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
|
||||
```
|
||||
|
||||
#### 4. Настройка WireGuard:
|
||||
1. Сгенерируйте ключи:
|
||||
## Настройка .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 |
|
||||
|
||||
Генерация ключа шифрования:
|
||||
```bash
|
||||
wg genkey | tee privatekey | wg pubkey > publickey
|
||||
```
|
||||
2. Настройте wg0.conf:
|
||||
```ini
|
||||
[Interface]
|
||||
PrivateKey = <your_private_key>
|
||||
Address = 10.0.0.1/24
|
||||
ListenPort = 51820
|
||||
|
||||
[Peer]
|
||||
PublicKey = <client_public_key>
|
||||
AllowedIPs = 10.0.0.2/32
|
||||
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
|
||||
```
|
||||
|
||||
#### 5. Запуск бота:
|
||||
## Поддерживаемые устройства
|
||||
|
||||
| Устройство | Архитектура | 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) |
|
||||
|
||||
## Команды управления
|
||||
|
||||
```bash
|
||||
npm start
|
||||
# Запуск
|
||||
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/
|
||||
│ ├── config/ # Конфигурация приложения
|
||||
│ ├── admin/ # Админ-панель (Express)
|
||||
│ ├── config/ # Конфигурация (БД, крипто)
|
||||
│ ├── context/ # Контекст и состояния бота
|
||||
│ ├── handlers/ # Обработчики команд
|
||||
│ ├── models/ # Модели данных
|
||||
│ ├── middleware/ # Промежуточные обработчики
|
||||
│ ├── migrations/ # Миграции БД
|
||||
│ ├── models/ # Модели данных (SQLite)
|
||||
│ ├── router/ # Роутинг Express
|
||||
│ ├── services/ # Бизнес-логика
|
||||
│ ├── utils/ # Вспомогательные утилиты
|
||||
│ ├── utils/ # Утилиты
|
||||
│ └── index.js # Точка входа
|
||||
├── wg/ # Конфигурация WireGuard
|
||||
├── docker-compose.yml # Docker конфигурация
|
||||
└── Dockerfile # Docker образ
|
||||
├── wg/ # WireGuard конфигурация
|
||||
│ └── start.sh # Скрипт запуска контейнера
|
||||
├── db/ # SQLite база данных (volume)
|
||||
├── uploads/ # Загруженные фото (volume)
|
||||
├── Dockerfile # Multi-stage сборка
|
||||
├── docker-compose.yml # Конфигурация контейнера
|
||||
├── install.sh # Установщик (POSIX sh)
|
||||
├── .dockerignore # Исключения из образа
|
||||
├── .env.example # Шаблон переменных
|
||||
└── package.json
|
||||
```
|
||||
|
||||
---
|
||||
## Разработка
|
||||
|
||||
### Разработка
|
||||
|
||||
#### Запуск в режиме разработки:
|
||||
```bash
|
||||
# Установка зависимостей
|
||||
npm install
|
||||
|
||||
# Запуск в режиме разработки
|
||||
npm run dev
|
||||
```
|
||||
|
||||
#### Линтинг и форматирование:
|
||||
```bash
|
||||
npm run lint
|
||||
npm run format
|
||||
```
|
||||
|
||||
#### Тестирование:
|
||||
```bash
|
||||
# Тесты
|
||||
npm test
|
||||
```
|
||||
|
||||
---
|
||||
## Лицензия
|
||||
|
||||
### Лицензия
|
||||
|
||||
Проект распространяется под лицензией MIT. Подробнее см. в файле LICENSE.
|
||||
|
||||
---
|
||||
|
||||
### Контакты
|
||||
|
||||
По вопросам сотрудничества и поддержки:
|
||||
- Email: support@telegram-shop.com
|
||||
- Telegram: @telegram_shop_support
|
||||
|
||||
---
|
||||
|
||||
### Требования к системе:
|
||||
1. **Интерфейс пользователя**:
|
||||
- Интуитивно понятный и удобный интерфейс для покупок.
|
||||
- Легкость в управлении профилем и кошельками.
|
||||
- Информация о товарах и статусах покупок должна быть легко доступна.
|
||||
|
||||
2. **Интерфейс администратора**:
|
||||
- Возможность редактировать товары, категории и управлять локациями.
|
||||
- Инструменты для контроля баланса и управления пользователями.
|
||||
- Функционал для создания и загрузки дампов данных.
|
||||
|
||||
3. **Безопасность**:
|
||||
- Защищенные транзакции.
|
||||
- Надежная система для хранения данных пользователей и кошельков.
|
||||
- Механизмы для предотвращения мошенничества и атак.
|
||||
|
||||
4. **Производительность**:
|
||||
- Система должна быть способна обрабатывать большое количество пользователей и транзакций одновременно.
|
||||
- Пагинация данных, чтобы обеспечить быструю загрузку и обработку.
|
||||
|
||||
---
|
||||
|
||||
### Риски и возможные проблемы:
|
||||
1. **Зависимость от сторонних сервисов**:
|
||||
- Интеграция с криптокошельками и сторонними сервисами для проверки баланса может быть подвержена сбоям, если эти сервисы не работают корректно.
|
||||
|
||||
2. **Поддержка разных криптовалют**:
|
||||
- Необходимо следить за изменениями в протоколах криптовалют и своевременно обновлять систему.
|
||||
|
||||
3. **Безопасность и защита данных**:
|
||||
- Важно следить за актуальностью средств защиты данных и предотвратить утечку информации о пользователях и их балансе.
|
||||
|
||||
---
|
||||
|
||||
### Заключение:
|
||||
**Универсальный Телеграмм Магазин** предоставляет эффективное решение для организации торговых процессов в Telegram, с возможностью работы с криптовалютами и традиционными средствами. Проект ориентирован на пользователей, которые ценят удобство, безопасность и скорость совершения покупок. Для администраторов — это мощный инструмент для управления товаром, пользователями и финансовыми потоками магазина.
|
||||
MIT
|
||||
Reference in New Issue
Block a user