Большая часть этих двадцати минут уйдёт не на команды, а на ожидание: пока обновится DNS-запись и пока certbot выпустит сертификат. Самих действий немного: три отредактированные строки в .env, один запуск скрипта и пара команд в контейнере. Если у вас уже есть VPS и домен, к настройке Telegram-канала можно перейти в течение получаса.
Ниже расписан весь путь от чистого сервера до рабочего бота, принимающего сообщения в Telegram-топиках.
Что понадобится
- VPS на Ubuntu с уже установленными Docker и Docker Compose. Разработчики проекта советуют не меньше 1 ГБ оперативной памяти.
- Зарегистрированный домен, который вы можете направить на IP сервера.
- Доступ к серверу по SSH.
Если домена и VPS под рукой нет и вы просто хотите посмотреть, как работает бот, для этого есть отдельный вариант: поднять вебхук локально через Cloudflare Tunnel. Он не требует ни сервера, ни домена.
Шаг 1. Направьте домен на сервер
Зарегистрируйте домен и добавьте A-запись, указывающую на IP вашего VPS. Обновление DNS обычно занимает 15-20 минут, и это время можно провести не листая консоль, а параллельно создавая бота в Telegram (шаг 6 ниже).
Шаг 2. Склонируйте репозиторий и настройте .env
Подключитесь к серверу по SSH и создайте каталог проекта:
cd /home/
mkdir yourdomain.com && cd yourdomain.com
git clone https://github.com/prog-time/tg-support-bot.git .
Скопируйте шаблон конфигурации и откройте .env:
cp .env.example .env
В файле нужно поправить два блока: домен и данные для подключения к базе.
MAIN_DOMAIN=example.com
APP_URL=https://example.com
DB_CONNECTION=pgsql
DB_HOST=pgdb
DB_PORT=5432
DB_DATABASE=database_name
DB_USERNAME=username
DB_PASSWORD=password
Токены и ключи для Telegram, VK, AI и остальных интеграций сюда вписывать не нужно: они настраиваются позже прямо в админ-панели и хранятся в базе в зашифрованном виде.
Шаг 3. Запустите установочный скрипт
В корне проекта есть start.sh, который берёт на себя всю рутину: проверяет certbot, сверяет DNS-запись домена с реальным IP сервера, выпускает TLS-сертификат через Let’s Encrypt, подставляет домен в конфиг nginx, поднимает контейнеры и прогоняет миграции.
./start.sh
Внутри скрипт выполняет по порядку:
- Проверку и установку certbot, если его ещё нет.
- Сверку DNS-записи
MAIN_DOMAINс IP сервера. Если домен ещё не успел разрешиться, скрипт остановится с понятной ошибкой, тогда просто подождите ещё немного и запустите его снова. - Выпуск сертификата (
certbot certonly --standalone -d $MAIN_DOMAIN). - Сборку и запуск контейнеров:
app,pgdb,nginx,queue,scheduler. composer update,php artisan migrate,php artisan key:generate.
Первый запуск контейнера app занимает минуту-две: entrypoint ставит зависимости и собирает фронтенд. Прогресс видно через docker compose logs -f app.
Шаг 4. Проверьте, что всё поднялось
Откройте домен в браузере. Страница должна открыться по HTTPS без ошибок сертификата. Затем зайдите на https://ваш-домен/admin и убедитесь, что форма входа отображается корректно.
Шаг 5. Создайте первого администратора
Учётной записи для входа пока нет, она не создаётся автоматически. Зайдите в контейнер app и запустите интерактивную команду:
docker compose exec app bash
php artisan app:create-admin-user
Команда спросит имя, email, пароль и роль (администратор или менеджер). После этого можно входить в /admin/login.
Шаг 6. Подключите Telegram
Пока DNS обновлялся, у вас было время создать бота. Если ещё не создали, сделайте это через @BotFather: команда /newbot, имя, username, в ответ придёт токен.
Дальше:
- Создайте приватную Telegram-группу.
- Добавьте в неё бота и назначьте администратором.
- В настройках группы включите темы (топики), без этого бот не сможет создавать отдельный топик под каждого клиента.
- Узнайте ID группы, временно добавив в неё бота вроде @getMyId, затем удалите его.
- В админ-панели откройте Настройки → Интеграции → Telegram и вставьте туда токен бота, произвольный секретный ключ вебхука и ID группы.
С этого момента сообщения от пользователей бота будут приходить прямыми топиками в вашу группу.
Если что-то пошло не так
Из вещей, с которыми реально сталкиваются на этом шаге:
Certbot не может получить сертификат, потому что порт 80 занят системным nginx. Проверьте sudo netstat -ltnp | grep -w ':80' и, если порт держит системный nginx, остановите его: sudo systemctl stop nginx.
Контейнер падает с require(autoload.php): Failed to open stream. Значит зависимости Composer не установились, чаще всего из-за прерванного первого запуска. Выполните composer update внутри контейнера app.
Через пару дней после подключения вебхук перестаёт работать. Обычно это блокировка IP вашего VPS со стороны Telegram. Помогает пересоздать вебхук с явным указанием IP: setWebhook?...&ip_address=ваш_ip.
Что дальше
На этом Telegram-канал работает, а остальные (VK, Max, Avito, Email, виджет для сайта) подключаются в том же разделе Настройки → Интеграции, без пересборки контейнеров и без правки .env. Про Avito-интеграцию и её архитектуру расскажем отдельно: там есть нюансы, которые стоит понимать до подключения.