Установка сервера telegram — различия между версиями
V.stogny (обсуждение | вклад) |
|||
(не показано 19 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
− | '''Установка на Ubuntu 16.04.3 и выше''' | + | '''Установка на Ubuntu 16.04.3 и выше'''<br> |
− | Установить на сервере-шлюзе Samba | + | Установить на сервере-шлюзе Samba<br> |
− | sudo apt-get install samba | + | sudo apt-get install samba<br> |
− | Разрешаем автостарт сервиса: | + | Разрешаем автостарт сервиса:<br> |
− | sudo systemctl enable smbd | + | sudo systemctl enable smbd<br> |
− | И проверим, что сервис запустился: | + | И проверим, что сервис запустился: <br> |
− | sudo systemctl status smbd | + | sudo systemctl status smbd<br> |
− | Создадим пользователя для доступа к папке | + | Создадим пользователя для доступа к папке<br> |
− | sudo useradd telegra | + | sudo useradd telegra<br> |
− | Назначим ему пароль | + | Назначим ему пароль<br> |
− | sudo passwd telegra | + | sudo passwd telegra<br> |
− | Дважды введем пароль | + | Дважды введем пароль<br> |
− | Создадим пользователя в самбе | + | Создадим пользователя в самбе<br> |
− | sudo smbpasswd -a telegra | + | sudo smbpasswd -a telegra<br> |
− | Теперь создадим папку, доступ к которой будут иметь ограниченное количество пользователей. | + | Теперь создадим папку, доступ к которой будут иметь ограниченное количество пользователей.<br> |
− | Открываем конфигурационный файл samba: | + | Открываем конфигурационный файл samba:<br> |
− | sudo nano /etc/samba/smb.conf | + | sudo nano /etc/samba/smb.conf<br> |
− | Добавляем настройку для новой папки в конец файла, комментим строчки с принтерами (если они не нужны): | + | Добавляем настройку для новой папки в конец файла, комментим строчки с принтерами (если они не нужны):<br> |
− | [telegram] | + | [telegram]<br> |
− | comment = Private Folder | + | comment = Private Folder<br> |
− | path = /var/www/telegram | + | path = /var/www/telegram<br> |
− | public = no | + | public = no<br> |
− | writable = no | + | writable = no<br> |
− | read only = yes | + | read only = yes<br> |
− | guest ok = no | + | guest ok = no<br> |
− | valid users = admin, telegra | + | valid users = admin, telegra<br> |
− | write list = admin, telegra | + | write list = admin, telegra<br> |
− | create mask = 0777 | + | create mask = 0777<br> |
− | directory mask = 0777 | + | directory mask = 0777<br> |
− | force create mode = 0777 | + | force create mode = 0777<br> |
− | force directory mode = 0777 | + | force directory mode = 0777<br> |
− | inherit owner = yes | + | inherit owner = yes<br> |
− | * стоит обратить внимание на следующие настройки: | + | * стоит обратить внимание на следующие настройки:<br> |
− | path = /data/private — используем новый путь до папки. | + | path = /data/private — используем новый путь до папки.<br> |
− | writable = no и read only = yes — в данном примере мы разрешим запись в каталог только некоторым пользователям. Поэтому общие настройки, разрешающие запись в папку, должны быть запрещены. | + | writable = no и read only = yes — в данном примере мы разрешим запись в каталог только некоторым пользователям. Поэтому общие настройки, разрешающие запись в папку, должны быть запрещены.<br> |
− | valid users — список пользователей, которым разрешено подключаться к каталогу. В данном примере разрешения работают для пользователей admin, telegra, а также для всех, кто входим в группу privateusers. | + | valid users — список пользователей, которым разрешено подключаться к каталогу. В данном примере разрешения работают для пользователей admin, telegra, а также для всех, кто входим в группу privateusers.<br> |
− | write list — список пользователей, которые имеют доступ к папке на чтение и запись. В данном примере мы разрешаем это только для пользователей admin и telegra. | + | write list — список пользователей, которые имеют доступ к папке на чтение и запись. В данном примере мы разрешаем это только для пользователей admin и telegra.<br> |
− | inherit owner — опция позволяем включить наследование владельца при создании папок и файлов. | + | inherit owner — опция позволяем включить наследование владельца при создании папок и файлов.<br> |
− | * если мы хотим, чтобы доступ к каталогу был полный у определенных пользователей (без разделения на тех, кто может только читать и тех, кто может также писать в папку), то опцию write list можно не указывать, а опции writable и read only оставить как в примерах выше. | + | * если мы хотим, чтобы доступ к каталогу был полный у определенных пользователей (без разделения на тех, кто может только читать и тех, кто может также писать в папку), то опцию write list можно не указывать, а опции writable и read only оставить как в примерах выше.<br> |
− | Создаем каталог для новой папки: | + | Создаем каталог для новой папки:<br> |
− | sudo mkdir /var/www/telegram | + | sudo mkdir /var/www/telegram<br> |
− | Задаем права на созданный каталог: | + | Задаем права на созданный каталог:<br> |
− | sudo chmod 777 /var/www/telegram | + | sudo chmod 777 /var/www/telegram<br> |
− | Для применения настроек перезапускаем samba: | + | Для применения настроек перезапускаем samba:<br> |
− | sudo systemctl restart smbd | + | sudo systemctl restart smbd<br> |
− | Проверяем возможность работы с новым каталогом. | + | Проверяем возможность работы с новым каталогом.<br> |
− | На сервере СЭД добавляем строку в конец файла fstab, меняя password на созданный пароль | + | На сервере СЭД ставим: sudo apt install cifs-utils -y<br> |
− | sudo nano /etc/fstab | + | добавляем строку в конец файла fstab, меняя password на созданный пароль<br> |
− | //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 nano /etc/fstab<br> |
− | Далее монтируем | + | //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<br> |
− | sudo mount -a | + | Далее монтируем<br> |
− | Если ошибка mount error(95): Operation not supported | + | sudo mount -a<br> |
− | То необходимо изменить строку | + | Если ошибка mount error(95): Operation not supported<br> |
− | sudo nano /etc/fstab | + | То необходимо изменить строку<br> |
− | //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 | + | sudo nano /etc/fstab<br> |
− | '''Создание сертификата''' | + | //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<br> |
− | Сайт, для которого вы хотите создать SSL сертификат должен уже быть доступен без HTTPS на порту 80. Поэтому его виртуальный хост Apache должен уже быть настроен. В этом примере я буду получать сертификат для edu.citis.ru. Для примера можно создать такой виртуальный хост: | + | '''Создание сертификата'''<br> |
− | sudo nano /etc/apache2/sites-available/edu-citis-ru.conf | + | Сайт, для которого вы хотите создать SSL сертификат должен уже быть доступен без HTTPS на порту 80. Поэтому его виртуальный хост Apache должен уже быть настроен. В этом примере я буду получать сертификат для edu.citis.ru. Для примера можно создать такой виртуальный хост:<br> |
− | <VirtualHost *:80> | + | sudo nano /etc/apache2/sites-available/edu-citis-ru.conf<br> |
− | ServerName edu.citis.ru | + | <VirtualHost *:80><br> |
− | ServerAlias www.edu.citis.ru | + | ServerName edu.citis.ru<br> |
− | ServerAdmin webmaster@localhost | + | ServerAlias www.edu.citis.ru<br> |
− | DocumentRoot /var/www/ | + | ServerAdmin webmaster@localhost<br> |
− | ErrorLog ${APACHE_LOG_DIR}/error.log | + | DocumentRoot /var/www/<br> |
− | CustomLog ${APACHE_LOG_DIR}/access.log combined | + | ErrorLog ${APACHE_LOG_DIR}/error.log<br> |
− | RewriteEngine on | + | CustomLog ${APACHE_LOG_DIR}/access.log combined<br> |
− | RewriteCond %{SERVER_NAME} =edu.citis.ru [OR] | + | RewriteEngine on<br> |
− | RewriteCond %{SERVER_NAME} =www.edu.citis.ru | + | RewriteCond %{SERVER_NAME} =edu.citis.ru [OR]<br> |
− | RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] | + | RewriteCond %{SERVER_NAME} =www.edu.citis.ru<br> |
− | </VirtualHost> | + | RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]<br> |
− | Выходим сохраняя изменения. | + | </VirtualHost><br> |
− | Клиент Lets Encrypt называется Certbot. Он доступен в официальных репозиториях. Для установки выполните такие команды: | + | Выходим сохраняя изменения.<br> |
− | sudo apt install certbot python-certbot-apache | + | Клиент Lets Encrypt называется Certbot. Он доступен в официальных репозиториях. Для установки выполните такие команды:<br> |
− | Если последний пакет не найдется надо ставить python3-certbot-apache | + | sudo apt install certbot python-certbot-apache<br> |
− | Далее генерируем сертификат | + | Если последний пакет не найдется надо ставить python3-certbot-apache<br> |
− | sudo certbot certonly --apache -d edu.citis.ru -d www.edu.citis.ru | + | Далее генерируем сертификат<br> |
− | При первом запуске утилита предложит вам указать ваш Email адрес, для того чтобы отправлять вам уведомления о необходимости обновить сертификат и новости, а также попросит принять лицензионное соглашение. | + | sudo certbot certonly --apache -d edu.citis.ru -d www.edu.citis.ru<br> |
− | А потом спросит можно ли передать ваш адрес их партнёрам. Ответить No. Только после этого начнётся генерация сертификата | + | При первом запуске утилита предложит вам указать ваш Email адрес, для того чтобы отправлять вам уведомления о необходимости обновить сертификат и новости, а также попросит принять лицензионное соглашение.<br> |
− | Программа сообщает, что сертификат сохранён в папке /etc/letsencrypt/live/edu.citis.ru/ и вы можете его использовать. | + | А потом спросит можно ли передать ваш адрес их партнёрам. Ответить No. Только после этого начнётся генерация сертификата<br> |
− | Если вы посмотрите в папку /etc/letsencrypt/live/edu.citis.ru, то увидите там четыре файла: | + | Программа сообщает, что сертификат сохранён в папке /etc/letsencrypt/live/edu.citis.ru/ и вы можете его использовать.<br> |
+ | Если вы посмотрите в папку /etc/letsencrypt/live/edu.citis.ru, то увидите там четыре файла:<br> | ||
− | cert.pem - файл сертификата, его необходимо прописать в параметре SSLCertificateFile; | + | cert.pem - файл сертификата, его необходимо прописать в параметре SSLCertificateFile;<br> |
− | chain.pem - файл цепочки сертификата, обычно прописывается в параметре SSLCertificateChainFile; | + | chain.pem - файл цепочки сертификата, обычно прописывается в параметре SSLCertificateChainFile;<br> |
− | privkey.pem - приватный ключ сертификата, должен быть прописан в SSLCertificateKeyFile; | + | privkey.pem - приватный ключ сертификата, должен быть прописан в SSLCertificateKeyFile;<br> |
− | fullchain.pem - в нём объединено содержимое cert.pem и chain.pem, можно использовать вместо этих обоих файлов. | + | fullchain.pem - в нём объединено содержимое cert.pem и chain.pem, можно использовать вместо этих обоих файлов.<br> |
− | Необходимо файлы сгенерированные перенести в другую папку (до текущей папки нет доступа у апача) | + | Необходимо файлы сгенерированные перенести в другую папку (до текущей папки нет доступа у апача)<br> |
− | sudo mkdir /etc/apache/ssl | + | sudo mkdir /etc/apache/ssl<br> |
− | sudo mv /etc/letsencrypt/live/edu.citis.ru/* /etc/apache/ssl/* | + | sudo mv /etc/letsencrypt/live/edu.citis.ru/* /etc/apache/ssl/*<br> |
− | Для обычного сайта у нас виртуальный хост существует. Осталось создать виртуальный хост для SSL версии. Тут кроме стандартных настроек надо добавить четыре параметра. | + | Для обычного сайта у нас виртуальный хост существует. Осталось создать виртуальный хост для SSL версии. Тут кроме стандартных настроек надо добавить четыре параметра.<br> |
− | SSLEngine on | + | SSLEngine on<br> |
− | SSLCertificateFile /путь/к/сертификату.pem | + | SSLCertificateFile /путь/к/сертификату.pem<br> |
− | SSLCertificateChainFile /путь/к/сертификату/цепочки.pem | + | SSLCertificateChainFile /путь/к/сертификату/цепочки.pem<br> |
− | SSLCertificateKeyFile /путь/к/приватному/ключу.pem | + | SSLCertificateKeyFile /путь/к/приватному/ключу.pem<br> |
− | Например: | + | Например:<br> |
− | sudo nano /etc/apache2/sites-available/edu-citis-ru-ssl.conf | + | sudo nano /etc/apache2/sites-available/edu-citis-ru-ssl.conf<br> |
− | <VirtualHost *:443> | + | <VirtualHost *:443><br> |
− | ServerName edu.citis.ru | + | ServerName edu.citis.ru<br> |
− | ServerAlias www.edu.citis.ru | + | ServerAlias www.edu.citis.ru<br> |
− | ServerAdmin webmaster@localhost | + | ServerAdmin webmaster@localhost<br> |
− | DocumentRoot /var/www/ | + | DocumentRoot /var/www/<br> |
− | ErrorLog ${APACHE_LOG_DIR}/error.log | + | ErrorLog ${APACHE_LOG_DIR}/error.log<br> |
− | CustomLog ${APACHE_LOG_DIR}/access.log combined | + | CustomLog ${APACHE_LOG_DIR}/access.log combined<br> |
− | SSLEngine on | + | SSLEngine on<br> |
− | SSLCertificateFile /etc/letsencrypt/live/edu.citis.ru/cert.pem | + | SSLCertificateFile /etc/letsencrypt/live/edu.citis.ru/cert.pem<br> |
− | SSLCertificateChainFile /etc/letsencrypt/live/edu.citis.ru/chain.pem | + | SSLCertificateChainFile /etc/letsencrypt/live/edu.citis.ru/chain.pem<br> |
− | SSLCertificateKeyFile /etc/letsencrypt/live/edu.citis.ru/privkey.pem | + | SSLCertificateKeyFile /etc/letsencrypt/live/edu.citis.ru/privkey.pem<br> |
− | </VirtualHost> | + | </VirtualHost><br> |
− | Этой конфигурации достаточно чтобы всё заработало. Затем активируйте этот виртуальный хост: | + | Этой конфигурации достаточно чтобы всё заработало. Затем активируйте этот виртуальный хост:<br> |
− | sudo a2ensite edu-citis-ru-ssl | + | sudo a2ensite edu-citis-ru-ssl<br> |
− | И не забудьте включить модуль для поддержки SSL: | + | И не забудьте включить модуль для поддержки SSL:<br> |
− | sudo a2enmod ssl | + | sudo a2enmod ssl<br> |
− | Проверьте работоспособность открыв домен в браузере. | + | Проверьте работоспособность открыв домен в браузере.<br> |
− | Чтобы добавить больше безопасности можно указать какие протоколы SSL следует использовать. Например, для того чтобы отключить SSLv2 и SSLv3, а также TLS ниже 1.2 добавьте: | + | Чтобы добавить больше безопасности можно указать какие протоколы SSL следует использовать. Например, для того чтобы отключить SSLv2 и SSLv3, а также TLS ниже 1.2 добавьте:<br> |
− | sudo nano /etc/apache2/sites-available/edu-citis-ru-ssl.conf | + | sudo nano /etc/apache2/sites-available/edu-citis-ru-ssl.conf<br> |
− | SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 | + | 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