Для разработчиков
=================

.. _run:
Сборка и запуск
---------------
Вы можете развернуть Olgram на своём сервере. Вам потребуется собственный VPS или любой хост со статическим адресом
или доменом.

1. Создайте файл .env и заполните его по образцу `example.env <https://github.com/civsocit/olgram/blob/main/example.env>`_
Вам нужно заполнить переменные:

* ``BOT_TOKEN`` - токен нового бота, получить у `@botfather <https://t.me/botfather>`_
* ``POSTGRES_PASSWORD`` - любой случайный пароль
* ``TOKEN_ENCRYPTION_KEY`` - любой случайный пароль, отличный от POSTGRES_PASSWORD
* ``WEBHOOK_HOST`` - IP адрес или доменное имя сервера, на котором запускается проект

2. Рядом с файлом .env сохраните файл
`docker-compose.yaml <https://github.com/civsocit/olgram/blob/main/docker-compose.yaml>`_ и соберите его:

.. code-block:: console

    (bash) $ sudo docker-compose up -d

Готово, ваш собственный Olgram запущен!

.. warning::

   Не потеряйте TOKEN_ENCRYPTION_KEY! Его нельзя восстановить. В случае утери TOKEN_ENCRYPTION_KEY вы потеряете
   токены всех ботов, которые пользователи зарегистрировали в вашем боте.

Возможно, вы захотите внести изменения в проект и запустить бот с этими изменениями. Тогда:

1. Склонируйте репозиторий

.. code-block:: console

    (bash) $ git clone https://github.com/civsocit/olgram

2. Внесите в код все изменения, которые хотите внести

3. В каталоге с репозиторием (рядом с файлами .yaml) создайте файл .env и заполните его, как в инструкции выше

4. Соберите и запустите сервер:

.. code-block:: console

    (bash) $ sudo docker-compose -f docker-compose-src.yaml up -d

Дополнительно
-------------

В docker-compose.yaml приведена минимальная конфигурация. Для использования в серьёзных проектах мы советуем:

* Приобрести домен и настроить его на свой хост
* Наладить реверс-прокси и автоматическое обновление сертификатов - например, с помощью `Traefik <https://github.com/traefik/traefik>`_
* Скрыть IP сервера с помощью `Cloudflare <https://www.cloudflare.com>`_, чтобы пользователи ботов не могли найти IP адрес хоста по Webhook бота.

Пример более сложной конфигурации есть в файле `docker-compose-full.yaml <https://github.com/civsocit/olgram/blob/main/docker-compose-full.yaml>`_


Как ограничить доступ к своему боту
-----------------------------------

По-умолчанию все пользователи Telegram могут писать в ваш Olgram и регистрировать там своих ботов. Чтобы ограничить
доступ к боту, укажите в переменных окружения (файл .env):

   ``ADMIN_ID=<идентификатор чата>``

Идентификатор чата это либо ваш Telegram ID, либо ID группового чата Telegram. Идентификатор можно посмотреть
командой /chatid.