Настройка

Большая часть приведенных настроек автоматизированно выполняется на этапе установки. Здесь приведены примеры самостоятельной настройки приложения.

Настройка окружения

Перейдите в директорию приложения и откройте файл .env. Если его нет, то создайте копию файла .env.example и переименуйте его в .env.

Если в папке с приложением отсутствуют и файл .env, и файл .env.example, то создайте пустой файл .env и добавьте в него следующие базовые настройки:
APP_NAME=
APP_URL=
APP_KEY=
APP_ENV=production
APP_DEBUG=false

LOG_CHANNEL=stack
LOG_LEVEL=error

BROADCAST_DRIVER=redis
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=database
SESSION_LIFETIME=120

MEMCACHED_HOST=127.0.0.1

REDIS_CLIENT=predis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

COMPOSER_HOME="/tmp/composer"
  1. Создайте криптографический ключ:
php artisan key:generate
  1. Откройте файл .env.
  2. Настройте название приложения:
 APP_NAME="Личный кабинет"
 APP_ENV=production
 APP_KEY=base64:Z234567890900NEb1TmOzWC5673nM5zLHb6h30o4n90c=
 APP_DEBUG=FALSE
 APP_URL=http://lk.example.com
 APP_TIMEZONE=Europe/Moscow
  1. Настройте параметры соединения с БД:
 DB_CONNECTION=mysql
 DB_HOST=127.0.0.1
 DB_PORT=3306
 DB_DATABASE=dbname
 DB_USERNAME=dbuser
 DB_PASSWORD=password
  1. Настройте параметры электронной почты для рассылок:
 MAIL_MAILER=log
 MAIL_HOST=mail.example.ru
 MAIL_PORT=25
 MAIL_USERNAME=
 MAIL_PASSWORD=null
 MAIL_ENCRYPTION=null
 MAIL_FROM_ADDRESS=no-reply@example.ru
 MAIL_FROM_NAME="${APP_NAME}"
  1. Если используется LDAP введите для него настройки:
 LDAP_HOST=127.0.0.1
 LDAP_USERNAME='cn=admin,dc=example,dc=com'
 LDAP_PASSWORD=1
 LDAP_BASE_DN='dc=example,dc=com'
 LDAP_LOGGING=FALSE

Настройка электронной почты

Настройка параметров отправки почты осуществляется в файле .env, который находится в корне директории установки приложения ЛК. Настраиваемые параметры:

  • MAIL_MAILER — механизм отправки сообщений. Для отправки через почтовый сервер используется значение smtp.
  • MAIL_HOST — адрес почтового сервера.
  • MAIL_PORT — порт.
  • MAIL_USERNAME — имя пользователя.
  • MAIL_PASSWORD — пароль.
  • MAIL_ENCRYPTION — режим шифрования. Обычно указывается tls, если шифрование выключено необходимо обязательно указать null.
  • MAIL_FROM_ADDRESS — адрес электронной почты, который будет указан в качестве адреса отправителя.
  • MAIL_FROM_NAME — имя отправителя. Например Личный кабинет.

Устранение неполадок

В случае если почтовый сервер использует шифрование, но при этом используется самоподписанный сертификат будет возникать ошибка

 stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
 error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

Для ее устранения без изменения сертификата необходимо добавить в файл конфигурации config/mail.php следующие параметры:

 'stream' => [
    'ssl' => [
        'allow_self_signed' => true,
        'verify_peer' => false,
        'verify_peer_name' => false,
    ],
 ],

При использовании данных настроек полностью отключается верификация сервера отправки сообщений, и добавляется возможность использования самоподписанных сертификатов. Однако стоит отметить, что в таком случае невозможно гарантировать безопасность доставки сообщений.

 

Использование обратного прокси

Добавление в список доверенных серверов

Если между сервером, на котором установлено приложение ЛК, и внешней сетью настроен балансировщик нагрузки (обратный прокси/ reverse proxy), то его необходимо добавить в список доверенных серверов.

Перейдите в директорию установки приложения и затем перейдите в директорию app/Http/Middleware. Откройте файл TrustProxies.php и откройте его для редактирования. Найдите переменную $proxies (не создавайте новую, переменная уже должна существовать). Измените ее значение следующим образом:

 protected $proxies = [
     '192.168.1.1',
     '192.168.1.2',
 ];

Где вместо адресов 192.168.1.1 и 192.168.1.2 необходимо указать корректные значения адресов балансировщиков нагрузки.

Если адреса серверов неизвестны, то можно разрешить все адреса:

protected $proxies = '*';

Сохраните и закройте файл.

Проверка настроек в файле .env

Проверьте настройки в файле .env. В переменной APP_URL должен быть адрес приложения, включающий протокол https. Напоминаем, что если файл конфигурации был закэширован, то кэш необходимо очистить:

php artisan config:clear

Принудительное использование https

Откройте файл app/Providers/AppServiceProvider.php. В метод boot необходимо добавить следующую строку:

\URL::forceScheme('https');

Пример. Если не было ранее внесено других изменений, метод может выглядеть следующим образом:

 /**
  * Bootstrap any application services.
  *
  * @return void
  */
 public function boot()
 {
      \URL::forceScheme('https');
 }

Сохраните и закройте файл.

Проверка передаваемых заголовков

Проверьте, что балансировщик или обратный прокси передает заголовок x-forwarded-proto.

 

Настройка директории public

Для работы приложения необходимо настроить корневую папку, из которой будет запускаться приложение. В директории приложения находится папка public, а внутри папки находится файл index.php. Необходимо настроить виртуальный хост веб-сервера таким образом, чтобы он указывал на папку public.

 

Права доступа к директориям

Все вложенные папки и файлы в директориях storage и bootstrap/cache должны быть доступны для чтения и записи веб-сервером.

Настроить пользователя как владельца приложения.

Предполагается, что /var/www/html/laravel/root/directory — путь до директории приложения, имя вашего пользователя tandem, а имя пользователя для веб-сервера www-data.

Замените данные параметры на свои и выполните команды в терминале:

sudo usermod -a -G www-data tandem

sudo chown -R tandem:www-data /var/www/html/laravel/root/directory

И затем настройте права доступа:

sudo find /path/to/your/laravel/root/directory -type f -exec chmod 664 {} \;

sudo find /path/to/your/laravel/root/directory -type d -exec chmod 775 {} \;

 

Настройка Supervisor

В рамках платформы реализована возможность работы с заданиями jobs и очередями queue, которые могут обрабатываться в фоновом режиме (все трудоемкие задания перемещаются в очередь и выполняться в фоне, что позволяет быстрее обрабатывать веб-запросы и отвечать клиенту).

Для работы очередей требуется настроить Supervisor:

  • Если Supervisor не установлен, требуется выполнить его установку (пример для ОС Ubuntu и Debian - https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-supervisor-on-ubuntu-and-debian-vps).
  • В файле .env для переменной QUEUE_CONNECTION установить значение database:

    QUEUE_CONNECTION=database

  • Очистить кэш конфигурационного файла php {путь до корня проекта}/artisan config:cache.
  • Создать конфигурационный файл для запуска очереди: nano /etc/supervisor/conf.d/base.conf со следующим примерным содержимым:
[program:{НАЗВАНИЕ, например:lk-base}]
process_name=%(program_name)s_%(process_num)02d
command=php {ПУТЬ К ПРОЕТУ, например: /var/www/html}/artisan queue:work --queue=default,base --timeout=3600 --once --max-jobs=1
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user={ПОЛЬЗОВАТЕЛЬ КОТОРЫЙ БУДЕТ ВЫПОЛНЯТЬ ПРОЦЕСС, например: tandem}
numprocs=1
startsecs=0

redirect_stderr=true
environment=HOME="{ДОМАШНЯЯ ДИРЕКТОРИЯ ИСПОЛНЯЕМОГО ПОЛЬЗОВАТЕЛЯ, например: /home/tandem}",USER="{ПОЛЬЗОВАТЕЛЬ КОТОРЫЙ БУДЕТ ВЫПОЛНЯТЬ ПРОЦЕСС, например: tandem}"
stdout_logfile={ПУТЬ ДЛЯ ХРАНЕНИЯ ЛОГОВ, например: /home/tandem}/lk-base-worker.log
stopwaitsecs=3600
  • Сохранить файл base.conf
  • Создать конфигурационный файл для запуска системной очереди: nano /etc/supervisor/conf.d/system-base.conf со следующим примерным содержимым:
[program:{НАЗВАНИЕ, например:lk-system-base}]
process_name=%(program_name)s_%(process_num)02d
command=php {ПУТЬ К ПРОЕТУ, например: /var/www/html}/artisan queue:work --queue=system --force --timeout=3600 --once --max-jobs=1
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user={ПОЛЬЗОВАТЕЛЬ КОТОРЫЙ БУДЕТ ВЫПОЛНЯТЬ ПРОЦЕСС, например: tandem}
numprocs=1
startsecs=0

redirect_stderr=true
environment=HOME="{ДОМАШНЯЯ ДИРЕКТОРИЯ ИСПОЛНЯЕМОГО ПОЛЬЗОВАТЕЛЯ, например: /home/tandem}",USER="{ПОЛЬЗОВАТЕЛЬ КОТОРЫЙ БУДЕТ ВЫПОЛНЯТЬ ПРОЦЕСС, например: tandem}",PATH=/usr/local/bin:%(ENV_PATH)s
stdout_logfile={ПУТЬ ДЛЯ ХРАНЕНИЯ ЛОГОВ, например: /home/tandem}/lk-base-system-worker.log
stopwaitsecs=3600
  • Сохранить файл system-base.conf
  • Создать конфигурационный файл для запуска очереди уведомлений: nano /etc/supervisor/conf.d/event-notification-worker.conf со следующим примерным содержимым:
[program:{НАЗВАНИЕ, например:event-notification-worker}]
process_name=%(program_name)s_%(process_num)02d
command=php {ПУТЬ К ПРОЕТУ, например: /var/www/html}/artisan queue:work --queue=event_notification --once --max-jobs=1
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=1
startsecs=0

redirect_stderr=true
stdout_logfile={ПУТЬ ДЛЯ ХРАНЕНИЯ ЛОГОВ, например: /home/tandem}/event_notification.log
stopwaitsecs=3600
  • Сохранить файл event-notification-worker.conf
  • Создать 2-й конфигурационный файл для запуска очереди уведомлений: nano /etc/supervisor/conf.d/delivery-notification-worker.conf со следующим примерным содержимым:
[program:{НАЗВАНИЕ, например:delivery-notification-worker}]
process_name=%(program_name)s_%(process_num)02d
command=php {ПУТЬ К ПРОЕТУ, например: /var/www/html}/artisan queue:work --queue=delivery_notification --once --max-jobs=1
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=1
startsecs=0

redirect_stderr=true
stdout_logfile={ПУТЬ ДЛЯ ХРАНЕНИЯ ЛОГОВ, например: /home/tandem}/delivery_notification.log
stopwaitsecs=3600
  • Сохранить файл delivery-notification-worker.conf
  • Проверить файлы конфигураций supervisor:

sudo supervisorctl reread

  • Обновить процессы и запустить новый процесс:

sudo supervisorctl update && sudo supervisorctl start {НАЗВАНИЕ, например: lk-base}:* && sudo supervisorctl start {НАЗВАНИЕ, например: lk-system-base}:* && sudo supervisorctl start {НАЗВАНИЕ, например: event-notification-worker}:* && sudo supervisorctl start {НАЗВАНИЕ, например: delivery-notification-worker}:*

Пример: sudo supervisorctl update && sudo supervisorctl start lk-base:* && sudo supervisorctl start lk-system-base:* && sudo supervisorctl start event-notification-worker:* && sudo supervisorctl start delivery-notification-worker:*

  • Важно! Проверить, что функция exec в php включена.

На этом процесс донастройки модуля tandem/base завершен - очередь будет автоматически браться в обработку.

 

Настройка планировщика задач

Для выполнения команд получения, актуализации данных из интегрируемых систем и выполнения других системных действий по расписанию на сервере ЛК необходимо в планировщике задач (cron) прописать следующую команду:

* * * * * cd /{путь до корня проекта} && php artisan schedule:run >> /dev/null 2>&1

Например:   * * * * * cd /var/www/html/lk && php artisan schedule:run >> /dev/null 2>&1

Задача cron должна создаваться под тем пользователем, под которым работает приложение (не под root, например, tandem).

Добавить в crontab  задачу на очистку логов (по умолчанию очищаются все логи старше 30 дней):

php artisan tandem-notification:log-clear [--days=30] 

Настроить сброс неудавшихся очередей (например, более старые, чем 3 дня):

php artisan queue:prune-failed --hours=72

image_pdf