Эта статья — полноценное руководство по развёртыванию нашего Telegram-бота “LL weekend bot” на VPS/выделенном сервере. Ниже — что умеет бот, какие задачи закрывает в команде, пошаговая установка под Ubuntu/Debian, автозапуск через systemd, обновления без простоя, бэкапы и типичные ошибки. В конце вы сможете скачать архив с ботом и развернуть его за 10–15 минут.

- Кому нужен бот для управления отпусками?
- Функционал бота: краткий обзор
- Требования к серверу
- Что внутри архива
- Установка бота: пошагово
- 1) Подготовить сервер и пользователя
- 2) Залить архив и развернуть
- 3) Виртуальное окружение и зависимости
- 4) Пробный запуск из консоли
- Автозапуск через systemd (бот всегда онлайн)
- Первичная настройка бота
- Как обновлять телеграм бота без простоя
- Бэкапы базы (SQLite)
- Безопасность и надёжность
- Частые ошибки и решения
- Почему именно этот бот
- FAQ
- Что мы имеем
- Ну а кому лень заниматься установкой и настройкой, вы можете просто заюзать уже установленного бота для планирования отпусков и выходных дней в компании: https://t.me/LLweekend_bot
Кому нужен бот для управления отпусками?
Команды любого размера постоянно сталкиваются с рутиной: заявки на отпуск, согласование, кто когда отсутствует, ограничения по пересечениям, лимиты по дням, CSV-выгрузки для бухгалтерии и т. д. Бот автоматизирует всё это прямо в Telegram, без внешних платных сервисов и лишних интеграций.
Ключевые выгоды:
- Без абонплат и внешних API: локальная SQLite-БД, всё хранится на вашем сервере.
- Прозрачность: статусы заявок, история, напоминания, выгрузки.
- Ускорение процессов: админы утверждают/отклоняют в один клик, сотрудники подают заявки за секунды.
- Изоляция по командам: каждый workspace — отдельная команда с собственными типами отпусков, политиками и лимитами.
- Лёгкая поддержка: Python +
python-telegram-bot, без сложных брокеров и монструозных стэков.
Функционал бота: краткий обзор
Роли и команды
- Роли: админские (CEO, OWNER, TIMLID, TECH) и пользовательские (BAER, DESIGNER, FARMER, MANAGER, BUHGALTER).
- Привязка пользователей к командам, полная изоляция данных по
team_id.
Заявки на отпуска
- Быстрые диапазоны (например, 7/14 дней от ближайшего понедельника) или ручной выбор дат через встроенный календарь.
- Комментарий сотрудника к заявке (опционально).
- Проверки: запрещённые даты, пересечения с учётом политики, лимит дней за раз и лимит за год.
- Статусы: На рассмотрении → Подтверждена/Отклонена.
Админка
- Добавление/удаление сотрудников, назначение ролей.
- Управление типами отпусков (название, описание, лимит дней/год).
- Настройка политики пересечений: разрешить всем / запретить всем / запретить одинаковым ролям.
- Запреты дат (дни/диапазоны) с примечаниями, список актуальных запретов.
- Лимиты: дней в год и за один отпуск.
- Список сотрудников и остатки по годовым лимитам.
- Заявки на рассмотрении: утверждение/отклонение в один клик + комментарий.
- Экспорт CSV за год — для бухгалтерии/аналитики.
- Лёгкая анализ-сводка по месяцам и ролям.
Напоминания
- Автоматические напоминания сотрудникам за 3 дня и за 1 день до начала отпуска.

Требования к серверу
- ОС: Ubuntu 22.04/24.04 LTS (подойдёт любой Debian/Ubuntu).
- Ресурсы: 1 vCPU, 512–1024 МБ RAM, 5+ ГБ диска.
- ПО: Python 3.10+ (желательно 3.11/3.12),
systemd. - Доступ: SSH и открытый исходящий HTTPS (бот общается с Telegram API).
- Сервер можно купить со скидкой в 60% для моих читателей по ссылке: adminvps (промокод BoostClicks)
Что внутри архива
В корне проекта будут файлы:
telegram_vacation_bot.py— основной код бота.requirements.txt— зависимости Python.config.py— тонкие настройки (если нужны)..env— переменные окружения (в том числеTELEGRAM_TOKEN).
Перед запуском отредактируйте
.envи вставьте ваш токен Telegram Bot.Так же замените токен в файле telegram_vacation_bot.py и в файле config.py
Пример .env:
TELEGRAM_TOKEN=1234567890:ABCDEF-ваш-настоящий-токен VACATION_BOT_DB=/home/bot/app/vacation_bot.db
Если параметр
VACATION_BOT_DBне указать, бот создаст БДvacation_bot.dbв текущей папке.
Установка бота: пошагово
1) Подготовить сервер и пользователя
# Обновления sudo apt update && sudo apt -y upgrade # Установить Python и pip sudo apt -y install python3 python3-venv python3-pip # Создать системного пользователя (без shell) или обычного: sudo useradd -m -d /home/bot -s /bin/bash bot sudo passwd bot # задайте пароль или используйте SSH-ключи # Дать права на каталог приложения sudo mkdir -p /home/bot/app sudo chown -R bot:bot /home/bot
2) Залить архив и развернуть
С локального ПК (Windows PowerShell):
scp .\telegram_vacation_bot.zip bot@IP_СЕРВЕРА:/home/bot/
На сервере:
sudo -u bot -H bash -lc ' cd /home/bot unzip -o telegram_vacation_bot.zip -d app cd app ls -la '
Скопируйте и отредактируйте .env:
sudo -u bot -H bash -lc ' cd /home/bot/app cp .env.example .env 2>/dev/null || true nano .env '
3) Виртуальное окружение и зависимости
sudo -u bot -H bash -lc ' cd /home/bot/app python3 -m venv venv source venv/bin/activate pip install --upgrade pip # ВАЖНО: для напоминаний используем extras job-queue pip install -r requirements.txt pip install "python-telegram-bot[job-queue]" '
4) Пробный запуск из консоли
sudo -u bot -H bash -lc ' cd /home/bot/app source venv/bin/activate python telegram_vacation_bot.py '
Если бот стартовал (в логе что-то вроде Application started), остановите Ctrl+C.
Автозапуск через systemd (бот всегда онлайн)
Создайте юнит:
sudo tee /etc/systemd/system/telegram-vacation-bot.service > /dev/null <<'EOF' [Unit] Description=Telegram Vacation Bot After=network-online.target Wants=network-online.target [Service] User=bot WorkingDirectory=/home/bot/app Environment="PYTHONUNBUFFERED=1" EnvironmentFile=-/home/bot/app/.env ExecStart=/home/bot/app/venv/bin/python /home/bot/app/telegram_vacation_bot.py Restart=always RestartSec=5 [Install] WantedBy=multi-user.target EOF
Запустить и включить автозапуск:
sudo systemctl daemon-reload sudo systemctl enable --now telegram-vacation-bot sudo systemctl status telegram-vacation-bot
Открыть логи:
journalctl -u telegram-vacation-bot -f -n 200
Если видите предупреждение вида JobQueue не инициализирован, убедитесь, что установлен пакетpython-telegram-bot[job-queue] и перезапустите сервис:
sudo systemctl restart telegram-vacation-bot
Первичная настройка бота
- Откройте Telegram и напишите вашему боту.
- Команда
/start— регистрация:- Название команды (workspace).
- Выбор роли (админская роль — чтобы настроить всё остальное).
- Добавьте типы отпусков, задайте лимиты и политику пересечений.
- Добавьте сотрудников через админку:
- «👤 Добавить сотрудника» → отправьте
@username→ выберите роль.
- «👤 Добавить сотрудника» → отправьте
- Проверьте «📬 Заявки на рассмотрении», «👥 Сотрудники и остатки» и экспорт CSV — всё готово.
Как обновлять телеграм бота без простоя
Вариант A — заливкой архива:
# загрузили новый zip → распаковали поверх sudo -u bot -H bash -lc ' cd /home/bot unzip -o telegram_vacation_bota_new.zip -d app cd app source venv/bin/activate pip install -r requirements.txt --upgrade ' sudo systemctl restart telegram-vacation-bot
Вариант B — Git (если подключите репозиторий):
sudo -u bot -H bash -lc ' cd /home/bot/app git pull source venv/bin/activate pip install -r requirements.txt --upgrade ' sudo systemctl restart telegram-vacation-bot
База
vacation_bot.dbостанется на месте. На всякий случай делайте бэкап перед релизами.
Бэкапы базы (SQLite)
База по умолчанию: /home/bot/app/vacation_bot.db (или путь из .env).
Снимок бэкапа:
sudo -u bot -H bash -lc ' cd /home/bot/app cp vacation_bot.db vacation_bot.db.$(date +%F_%H-%M-%S).bak ls -lh vacation_bot.db* '
Автобэкап через cron (ежедневно в 02:15):
sudo -u bot crontab -e # добавьте строку: 15 2 * * * cp /home/bot/app/vacation_bot.db /home/bot/app/vacation_bot.db.$(date +\%F_\%H-\%M-\%S).bak
Безопасность и надёжность
- Храните токен бота только в
.envи не коммитьте его в публичные репозитории. - Права на каталог:
sudo chown -R bot:bot /home/bot chmod 600 /home/bot/app/.env
UFW/Firewall: вход по SSH, остальное — по необходимости:
sudo apt -y install ufw sudo ufw allow OpenSSH sudo ufw enable sudo ufw status
Автосоздание БД — без миграций вы не останетесь: скрипт включает защиту и «докидывает» недостающие колонки при апдейтах.
Частые ошибки и решения
1) JobQueue не инициализирован
Не установлены extras. Решение:
source /home/bot/app/venv/bin/activate pip install "python-telegram-bot[job-queue]" sudo systemctl restart telegram-vacation-bot
2) Message is not modified в логах
Это warning от Telegram, когда вы пытаетесь «редактировать» сообщение тем же текстом/клавиатурой. В боте уже предусмотрено безопасное подавление этой ошибки — можно игнорировать.
3) Forbidden: bot was blocked by the user
Пользователь заблокировал бота — нормальная ситуация при рассылке уведомлений. Это не авария.
4) database is locked
Редко для SQLite. Если возникнет под нагрузкой:
— убедитесь, что бота не запускают дважды;
— проверьте диск и права;
— при росте команды можно перейти на PostgreSQL (бот легко адаптируется).
5) Не запускается сервис после обновления
Проверьте права и пути:
sudo -u bot -H bash -lc 'ls -la /home/bot/app' sudo systemctl status telegram-vacation-bot journalctl -u telegram-vacation-bot -n 200 --no-pager
Почему именно этот бот
- Простая архитектура: Python +
python-telegram-bot+aiosqlite. - Гибкая админка: всё конфигурируется в чате — без отдельных кабинетов.
- Сильные проверки: запреты дат, пересечения, лимиты в год/за раз.
- Экспорт и аналитика: CSV для бухгалтерии; сводки по месяцам и ролям.
- Скорость внедрения: один файл сервиса в
systemd, и он уже «живёт» на сервере.
FAQ
Как перенести бота на другой сервер?
Скопируйте папку /home/bot/app целиком (особенно vacation_bot.db и .env), поднимите окружение и сервис на новом сервере — готово.
Можно ли развернуть на Docker?
Да. Создайте Dockerfile, монтируйте .env и каталог с БД в volume. Но для простоты в статье описан systemd-подход.
Как сменить токен?
Правьте .env → sudo systemctl restart telegram-vacation-bot.
Что мы имеем
А имеем мы пошаговую схему: от чистого сервера до полностью рабочего Telegram-бота для отпусков с админкой, политиками пересечений, напоминаниями и экспортом. Такой подход снимает хаос в календарях и табличках, ускоряет согласование и делает процесс предсказуемым.
Скачайте архив ниже, разверните на своём сервере по инструкции.




