Установка сервера telegram — различия между версиями

Материал из Справочная информация по работе с СЭД
Перейти к: навигация, поиск
 
(не показано 16 промежуточных версий этого же участника)
Строка 119: Строка 119:
 
sudo nano /etc/apache2/sites-available/edu-citis-ru-ssl.conf<br>
 
sudo nano /etc/apache2/sites-available/edu-citis-ru-ssl.conf<br>
 
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1<br>
 
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1<br>
 +
 +
'''-''' Правим конфигурацию apache2.conf, убираем indexes, None -> All:
 +
  sudo nano /etc/apache2/apache2.conf
 +
Меняем:
 +
<pre>
 +
  <Directory /var/www/>
 +
#      Options Indexes FollowSymLinks
 +
        Options FollowSymLinks
 +
        AllowOverride All
 +
        Require all granted
 +
  </Directory>
 +
</pre>
 +
 +
'''-''' меняем время записи лога на неделю.
 +
 +
В файле /etc/logrotate.d/apache2 ставим '''weekly''',
 +
время лога увеличиваем до года
 +
'''rotate 48'''     
 +
 +
 +
''' - ''' Правим конфигурации security.conf:
 +
  sudo nano /etc/apache2/conf-available/security.conf
 +
Правим константы:
 +
  ServerTokens Prod
 +
  ServerSignature Off
 +
 +
 +
 +
'''-''' Установка php:
 +
 +
Версия php может быть выше 7 версии
 +
<pre>
 +
  sudo apt install php libapache2-mod-php
 +
  sudo apt-get install php-curl php-pgsql
 +
</pre>
 +
 +
'''-''' Установка postgres:
 +
<pre>
 +
sudo apt-get install postgresql
 +
</pre>
 +
- меняем дефолтный пароль postgres
 +
 +
<pre>
 +
sudo -u postgres psql postgres
 +
\password postgres
 +
Ввести пароль
 +
Повторить пароль
 +
</pre>
 +
 +
- создаем БД
 +
<pre>
 +
CREATE DATABASE edfs OWNER "postgres";
 +
\q
 +
</pre>
 +
 +
 +
'''-''' создаем таблицу telegram_bot согласно sql в файле bdTg.sql
 +
 +
 +
'''-''' Создаем нового бота:
 +
 +
1. Откройте мессенджер Telegram, введите в поле поиска @BotFather и выберите бота.<br>
 +
У официального бота Telegram будет стоять синий подтверждающий знак возле имени в виде галочки.<br>
 +
2. Нажмите «Запустить» для активации бота BotFather.<br>
 +
3. Выберите или напечатайте и отправьте команду /newbot<br>
 +
4. Дайте имя боту — клиенты увидят это имя при общении с ботом.<br>
 +
5. Дайте никнейм бота — по нему можно будет найти бота в Telegram. Никнейм должен быть уникальным, не повторять существующие в базе и заканчиваться на слово «bot».<br>
 +
6. Скопируйте полученное значение токена
 +
 +
'''-''' Копируем папку telegramBot в корневую папку сайта
 +
 +
'''-''' Правим config.php
 +
 +
'''-''' Привязываем бот
 +
 +
В vendor/setWebhook.php указываем токен и url index.php (Файл который будет обрабатывать сообщения которые пользователи будут писать боту).<br>
 +
Вызываем файл url/vendor/setWebhook.php в браузере. Должен быть ответ, что нет ошибок и бот привязан к данному серверу.
 +
 +
'''-''' в crone сервера telegram прописуем отправку сообщений
 +
 +
*/1 * * * * /usr/bin/php /var/www/html/get_outbox.php >> /var/www/html/storage/log/telegram.log
 +
 +
где /var/www/html/storage/log/telegram.log адрес лога отправки
 +
 +
'''-''' в crone основного сервера прописуем очистку не отправленных сообщений
 +
 +
*/10 * * * * /usr/bin/php /var/www/sed-citis/cleanTelegram.php >> /var/www/sed-citis/storage/exchange/telegram/log/telegram.log

Текущая версия на 12:41, 5 ноября 2022

Установка на Ubuntu 16.04.3 и выше
Установить на сервере-шлюзе Samba
sudo apt-get install samba
Разрешаем автостарт сервиса:
sudo systemctl enable smbd
И проверим, что сервис запустился:
sudo systemctl status smbd
Создадим пользователя для доступа к папке
sudo useradd telegra
Назначим ему пароль
sudo passwd telegra
Дважды введем пароль
Создадим пользователя в самбе
sudo smbpasswd -a telegra
Теперь создадим папку, доступ к которой будут иметь ограниченное количество пользователей.
Открываем конфигурационный файл samba:
sudo nano /etc/samba/smb.conf
Добавляем настройку для новой папки в конец файла, комментим строчки с принтерами (если они не нужны):
[telegram]

   comment = Private Folder
path = /var/www/telegram
public = no
writable = no
read only = yes
guest ok = no
valid users = admin, telegra
write list = admin, telegra
create mask = 0777
directory mask = 0777
force create mode = 0777
force directory mode = 0777
inherit owner = yes
  • стоит обратить внимание на следующие настройки:

path = /data/private — используем новый путь до папки.
writable = no и read only = yes — в данном примере мы разрешим запись в каталог только некоторым пользователям. Поэтому общие настройки, разрешающие запись в папку, должны быть запрещены.
valid users — список пользователей, которым разрешено подключаться к каталогу. В данном примере разрешения работают для пользователей admin, telegra, а также для всех, кто входим в группу privateusers.
write list — список пользователей, которые имеют доступ к папке на чтение и запись. В данном примере мы разрешаем это только для пользователей admin и telegra.
inherit owner — опция позволяем включить наследование владельца при создании папок и файлов.

  • если мы хотим, чтобы доступ к каталогу был полный у определенных пользователей (без разделения на тех, кто может только читать и тех, кто может также писать в папку), то опцию write list можно не указывать, а опции writable и read only оставить как в примерах выше.

Создаем каталог для новой папки:
sudo mkdir /var/www/telegram
Задаем права на созданный каталог:
sudo chmod 777 /var/www/telegram
Для применения настроек перезапускаем samba:
sudo systemctl restart smbd
Проверяем возможность работы с новым каталогом.
На сервере СЭД ставим: sudo apt install cifs-utils -y
добавляем строку в конец файла fstab, меняя password на созданный пароль
sudo nano /etc/fstab
//192.168.123.103/telegram/storage/outbox /var/www/sed-citis/storage/exchange/telegram/outbox cifs user=telegra,pass=password,iocharset=utf8,noperm,uid=www-data,gid=www-data,dir_mode=0777,file_mode=0777,auto 0 0
Далее монтируем
sudo mount -a
Если ошибка mount error(95): Operation not supported
То необходимо изменить строку
sudo nano /etc/fstab
//192.168.123.103/telegram/storage/outbox /var/www/sed-citis/storage/exchange/telegram/outbox cifs user=telegra,pass=password,iocharset=utf8,vers=2.0,noperm,uid=www-data,gid=www-data,dir_mode=0777,file_mode=0777,auto 0 0
Создание сертификата
Сайт, для которого вы хотите создать SSL сертификат должен уже быть доступен без HTTPS на порту 80. Поэтому его виртуальный хост Apache должен уже быть настроен. В этом примере я буду получать сертификат для edu.citis.ru. Для примера можно создать такой виртуальный хост:
sudo nano /etc/apache2/sites-available/edu-citis-ru.conf
<VirtualHost *:80>
ServerName edu.citis.ru
ServerAlias www.edu.citis.ru
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =edu.citis.ru [OR]
RewriteCond %{SERVER_NAME} =www.edu.citis.ru
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Выходим сохраняя изменения.
Клиент Lets Encrypt называется Certbot. Он доступен в официальных репозиториях. Для установки выполните такие команды:
sudo apt install certbot python-certbot-apache
Если последний пакет не найдется надо ставить python3-certbot-apache
Далее генерируем сертификат
sudo certbot certonly --apache -d edu.citis.ru -d www.edu.citis.ru
При первом запуске утилита предложит вам указать ваш Email адрес, для того чтобы отправлять вам уведомления о необходимости обновить сертификат и новости, а также попросит принять лицензионное соглашение.
А потом спросит можно ли передать ваш адрес их партнёрам. Ответить No. Только после этого начнётся генерация сертификата
Программа сообщает, что сертификат сохранён в папке /etc/letsencrypt/live/edu.citis.ru/ и вы можете его использовать.
Если вы посмотрите в папку /etc/letsencrypt/live/edu.citis.ru, то увидите там четыре файла:

cert.pem - файл сертификата, его необходимо прописать в параметре SSLCertificateFile;
chain.pem - файл цепочки сертификата, обычно прописывается в параметре SSLCertificateChainFile;
privkey.pem - приватный ключ сертификата, должен быть прописан в SSLCertificateKeyFile;
fullchain.pem - в нём объединено содержимое cert.pem и chain.pem, можно использовать вместо этих обоих файлов.
Необходимо файлы сгенерированные перенести в другую папку (до текущей папки нет доступа у апача)
sudo mkdir /etc/apache/ssl
sudo mv /etc/letsencrypt/live/edu.citis.ru/* /etc/apache/ssl/*
Для обычного сайта у нас виртуальный хост существует. Осталось создать виртуальный хост для SSL версии. Тут кроме стандартных настроек надо добавить четыре параметра.

SSLEngine on
SSLCertificateFile /путь/к/сертификату.pem
SSLCertificateChainFile /путь/к/сертификату/цепочки.pem
SSLCertificateKeyFile /путь/к/приватному/ключу.pem

Например:

sudo nano /etc/apache2/sites-available/edu-citis-ru-ssl.conf

<VirtualHost *:443>
ServerName edu.citis.ru
ServerAlias www.edu.citis.ru
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/edu.citis.ru/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/edu.citis.ru/chain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/edu.citis.ru/privkey.pem
</VirtualHost>
Этой конфигурации достаточно чтобы всё заработало. Затем активируйте этот виртуальный хост:
sudo a2ensite edu-citis-ru-ssl
И не забудьте включить модуль для поддержки SSL:
sudo a2enmod ssl
Проверьте работоспособность открыв домен в браузере.
Чтобы добавить больше безопасности можно указать какие протоколы SSL следует использовать. Например, для того чтобы отключить SSLv2 и SSLv3, а также TLS ниже 1.2 добавьте:
sudo nano /etc/apache2/sites-available/edu-citis-ru-ssl.conf
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

- Правим конфигурацию apache2.conf, убираем indexes, None -> All:

  sudo nano /etc/apache2/apache2.conf

Меняем:

   <Directory /var/www/>
#       Options Indexes FollowSymLinks
        Options FollowSymLinks
        AllowOverride All
        Require all granted
   </Directory>

- меняем время записи лога на неделю.

В файле /etc/logrotate.d/apache2 ставим weekly, время лога увеличиваем до года rotate 48


- Правим конфигурации security.conf:

  sudo nano /etc/apache2/conf-available/security.conf

Правим константы:

  ServerTokens Prod
  ServerSignature Off


- Установка php:

Версия php может быть выше 7 версии

   sudo apt install php libapache2-mod-php
   sudo apt-get install php-curl php-pgsql 

- Установка postgres:

sudo apt-get install postgresql 

- меняем дефолтный пароль postgres

sudo -u postgres psql postgres
 \password postgres
 Ввести пароль 
 Повторить пароль

- создаем БД

CREATE DATABASE edfs OWNER "postgres";
\q


- создаем таблицу telegram_bot согласно sql в файле bdTg.sql


- Создаем нового бота:

1. Откройте мессенджер Telegram, введите в поле поиска @BotFather и выберите бота.
У официального бота Telegram будет стоять синий подтверждающий знак возле имени в виде галочки.
2. Нажмите «Запустить» для активации бота BotFather.
3. Выберите или напечатайте и отправьте команду /newbot
4. Дайте имя боту — клиенты увидят это имя при общении с ботом.
5. Дайте никнейм бота — по нему можно будет найти бота в Telegram. Никнейм должен быть уникальным, не повторять существующие в базе и заканчиваться на слово «bot».
6. Скопируйте полученное значение токена

- Копируем папку telegramBot в корневую папку сайта

- Правим config.php

- Привязываем бот

В vendor/setWebhook.php указываем токен и url index.php (Файл который будет обрабатывать сообщения которые пользователи будут писать боту).
Вызываем файл url/vendor/setWebhook.php в браузере. Должен быть ответ, что нет ошибок и бот привязан к данному серверу.

- в crone сервера telegram прописуем отправку сообщений

*/1 * * * * /usr/bin/php /var/www/html/get_outbox.php >> /var/www/html/storage/log/telegram.log

где /var/www/html/storage/log/telegram.log адрес лога отправки

- в crone основного сервера прописуем очистку не отправленных сообщений

*/10 * * * * /usr/bin/php /var/www/sed-citis/cleanTelegram.php >> /var/www/sed-citis/storage/exchange/telegram/log/telegram.log