3. Инструкция по установке почтового Web-интерфейса¶
Собственно, почтовый сервер у вас уже работает, вы можете пользоваться им с помощью потовых программ.
Установка веб-интерфейса, рассматриваемая в данном разделе, необходима вам для того, чтобы:
- Реализовать веб-интерфейс для работы с почтой
- Установить сервер календарей
- Установить сервер адресных книг
- Установить сервер WebDAV для хранения файлов
Веб-интерфейс предоставляется на базе открытого ПО NextCloud. Получить дистрибутив мы можете с нашего репозитория https://git.mbk-lab.ru/MBK-Lab/nextcloud
3.1. Необходимые компоненты¶
- Nginx
- PHP modules
- certbot
- PostgreSQL
- unzip
Устанавливаем Nginx.
sudo apt install nginx
Устанавливаем модули PHP.
sudo apt install php7.4 php7.4-fpm php7.4-common php7.4-pgsql php7.4-cli php7.4-gd php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-bcmath php7.4-gmp php-imagick php7.4-opcache php7.4-readline
Устанавливаем certbot
sudo apt install certbot python3-certbot-nginx
Устанавливаем PostgreSQL
sudo apt install postgresql postgresql-contrib
После завершения установки вы можете убедиться, что служба PostgreSQL активна. Для чего в командной строке наберите:
sudo systemctl is-active postgresql
Также, посмотрите, включена ли служба:
sudo systemctl is-enabled postgresql
Проверка запуска PostgreSQL - как установить PostgreSQL и pgAdmin4 в Ubuntu 20.04
И наконец, вы можете увидеть статус службы PostgreSQL:
sudo systemctl status postgresql
Проверка статуса PostgreSQL
После чего, убедитесь, что PostgreSQL-сервер готов принимать подключения от клиентов:
sudo pg_isready
Проверка готовности PostgreSQL - как установить PostgreSQL и pgAdmin4 в Ubuntu 20.04
Устанавливаем unzip
sudo apt install unzip
Скачиваем архив с стабильной версией Nexcloud с репозитория МБК Лаб https://git.mbk-lab.ru
wget https://cloud.mbk-lab.ru/index.php/s/TinYxyHsq3zLL64/download/nextcloud-22.1.1.zip
3.2. Конфигурируем компоненты¶
Конфигурируем PostgreSQL
Подключаемся к PostgreSQL
sudo -u postgres psql
Создаем пользователя и базу для NextCloud
CREATE USER nextcloud WITH PASSWORD 'your_password'; CREATE DATABASE nextcloud TEMPLATE template0 ENCODING 'UNICODE'; ALTER DATABASE nextcloud OWNER TO nextcloud; GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud; \q
Распаковываем архив с NextCloud
sudo unzip nextcloud-22.1.1.zip -d /usr/share/nginx/
Меняем владельца для каталога NextCLoud
sudo chown www-data:www-data /usr/share/nginx/nextcloud/ -R
Создаем папку для NextCloud data
sudo mkdir /usr/share/nginx/nextcloud-data
Меняем владельца на папку nextcloud-data
sudo chown www-data:www-data /usr/share/nginx/nextcloud-data -R
Удаляем дефолтный сайт Nginx по умолчанию.
sudo mv /etc/nginx/sites-enabled/default /home/$USER
Создаем новый конфиг Nginx для Nextcloud
sudo nano /etc/nginx/conf.d/nextcloud.conf
Добавляем конфиг со следующим содержанием:
# You need to change domain and PHP version server { listen 80; listen [::]:80; server_name nextcloud.your-domain.com; # Add headers to serve security related headers add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; add_header Referrer-Policy no-referrer; add_header X-Frame-Options "SAMEORIGIN"; # Path to the root of Nextcloud installation root /usr/share/nginx/nextcloud/; access_log /var/log/nginx/nextcloud.access; error_log /var/log/nginx/nextcloud.error; location = /robots.txt { allow all; log_not_found off; access_log off; } # The following 2 rules are only needed for the user_webfinger app. # Uncomment it if you're planning to use this app. #rewrite ^/.well-known/host-meta /public.php?service=host-meta last; #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json # last; location = /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; } location = /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; } location ~ /.well-known/acme-challenge { allow all; } # set max upload size client_max_body_size 512M; fastcgi_buffers 64 4K; # Disable gzip to avoid the removal of the ETag header gzip off; # Uncomment if your server is build with the ngx_pagespeed module # This module is currently not supported. #pagespeed off; error_page 403 /core/templates/403.php; error_page 404 /core/templates/404.php; location / { rewrite ^ /index.php; } location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ { deny all; } location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { deny all; } location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) { include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(/.*)$; try_files $fastcgi_script_name =404; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; #Avoid sending the security headers twice fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_intercept_errors on; fastcgi_request_buffering off; } location ~ ^/(?:updater|ocs-provider)(?:$|/) { try_files $uri/ =404; index index.php; } # Adding the cache control header for js and css files # Make sure it is BELOW the PHP block location ~* \.(?:css|js)$ { try_files $uri /index.php$uri$is_args$args; add_header Cache-Control "public, max-age=7200"; # Add headers to serve security related headers (It is intended to # have those duplicated to the ones above) add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; add_header Referrer-Policy no-referrer; # Optional: Don't log access to assets access_log off; } location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ { try_files $uri /index.php$uri$is_args$args; # Optional: Don't log access to other assets access_log off; } }
Проверяем конфигурацию Nginx на наличие ошибок.
sudo nginx -t
Включаем и запускаем Nginx
sudo systemctl enable --now nginx
Включаем и запускаем php-fpm
sudo systemctl enable --now php7.4-fpm
Генерируем для сайта сертификат SSL
sudo certbot --nginx --agree-tos --redirect --staple-ocsp --email your-email-address -d nextcloud.your-domain.com
Добавляем в конфиг /etc/nginx/conf.d/nextcloud.conf следующие параметры:
add_header Strict-Transport-Security "max-age=31536000" always; listen 443 ssl http2; # managed by Certbot
Завершаем настройку непосредственно перейдя на nextcloud.your-domain.com
3.3. Расширенные настройки¶
Внимание, расширенные настройки производятся только после первичной инициализации NextCloud
Увеличение лимита памяти для PHP /etc/php/7.4/fpm/php.ini
memory_limit = 512M
Увеличение время выполнения
max execution time 256
Для применения внесенных изменений необходимо перезапустить PHP
sudo systemctl reload php7.4-fpm
Конфигурирование PHP для правильных запросов переменных /etc/php/7.4/fpm/pool.d/www.conf
clear_env = no
Увеличение ограничения размера загружаемых файлов /etc/nginx/conf.d/nextcloud.conf
client_max_body_size 1024M;
Изменение параметра upload_max_filesize до 1024M /etc/php/7.4/fpm/php.ini
Перезапуск Nginx и php-fpm:
sudo systemctl reload nginx sudo systemctl reload php7.4-fpm
Конфигурирование Redis.
sudo apt install redis-server php-redis
Необходимо добавить код указанный ниже в конфиг /usr/share/nginx/nextcloud/config/config.php перед строкой );
'memcache.distributed' => '\OC\Memcache\Redis', 'memcache.local' => '\OC\Memcache\Redis', 'memcache.locking' => '\OC\Memcache\Redis', 'redis' => array( 'host' => 'localhost', 'port' => 6379, ),
Перезапуск Nginx and php-fpm
sudo systemctl restart nginx php7.4-fpm
Использование Cron вместо ajax
Открыть crontab файл
sudo crontab -u www-data -e
Добавить задание и сохранить файл.
*/5 * * * * php -f /usr/share/nginx/nextcloud/cron.php
Не отображать использованную версию Nginx с вледующем конфиге: /etc/nginx/nginx.conf
server_tokens off;
Скрыть “отображение получения свободного аккаунта в Nextcloud”
'simpleSignUpLink.shown' => false,
3.4. Интеграция с LDAP / AD¶
Для настройки необходимо перейти в: Настройки -> параметры сервера -> Интеграция LDAP / AD
3.5. Настройка почтового сервера в Nexcloud¶
Для настройки необходимо перейти в: Настройки -> параметры сервера -> основные настройки.
Переходим на вкладку “пользователи” и вписываем запрос LDAP
(&(objectclass=user)(mail=*))
На вкладке “Учетные данные” вписать следующий запрос LDAP:
(mail=%uid)
На вкладке “Группы” вписываем запрос:
(objectclass=group)
Настройка почтового сервера в Nexcloud.
Для настройки необходимо перейти в: Настройки -> параметры сервера -> основные настройки.
Настройка Rainloop – веб-интерфейс для работы с почтой.
Необходимо в дополнительных параметрах выбрать автоматический вход пользователей.
Далее необходимо в этом же окне перейти по ссылке:
Go to RainLoop Webmail admin panel
Добавить домен и прописать соответствующие настройки почтового сервера:
Настройка завершена.