Поиск по сайту:

Установите Mattermost с PostgreSQL и Nginx на CentOS 7


Slack-альтернатива. Mattermost — это современная связь за вашим брандмауэром.

В качестве альтернативы проприетарному обмену сообщениями SaaS Mattermost объединяет все общение вашей команды в одном месте, делая его доступным для поиска и доступным в любом месте.

Mattermost совместим со Slack, а не ограничен Slack, поддерживает расширенный набор входящих и исходящих интеграций веб-перехватчиков Slack, включая совместимость с существующими интеграциями Slack. Из существующих команд Slack вы можете импортировать пользователей, общедоступную историю каналов и даже настройки темы. цвета в Mattermost.

Имена, переменные и учетные записи, используемые в этом руководстве

local IP of server                 : 192.168.2.100
FQDN of server : mattermost.example.com
Name of mattermost database : mattermost
User to access mattermost database : mmuser
Password for mmuser within database: DBAss47slX3

Предпосылки

В этом руководстве объясняется установка Mattermost на CentOS7 с использованием PostgreSQL в качестве серверной части базы данных. Для целей этого руководства мы предполагаем, что устанавливаем все на один сервер, но для опытных пользователей будет легко разобрать части и установить каждый компонент (например, сервер базы данных) на другой компьютер. Установка была выполнена с использованием пользователя root, но вы, конечно, также можете использовать пользователя с поддержкой sudo.

Мы также предполагаем, что сервер имеет IP-адрес 192.168.2.100 и DNS разрешается в mattermost.example.com. Поэтому везде в этом HowTo, где вы читаете 192.168.2.100 или mattermost.example.com, замените его IP-адресом вашего сервера.

Прежде чем вы сможете начать, вам нужна минимальная установка CentOS7. После установки убедитесь, что вы правильно настроили электронную почту (конфигурация postfix), чтобы ваша система могла отправлять электронные письма (например, через смарт-хост или подобное решение).

Пожалуйста, сделайте несколько небольших проверок, прежде чем продолжить:

Попробуйте отправить письмо с терминала на вашем сервере:

[

(замените [email  адресом электронной почты, на который должен отправляться ваш сервер). Убедитесь, что вы получили электронное письмо от системы!

Подтвердите разрешение имени для Mattermost.example.com

С другого компьютера (не с сервера, который мы пытаемся настроить) попробуйте пропинговать Mattermost.example.com. Вы должны получить положительный результат:

C:\>ping mattermost.example.com
Pinging mattermost.witron.com [192.168.2.100] with 32 bytes of data:
Reply from 192.168.2.100: bytes=32 time<1ms TTL=64
Reply from 192.168.2.100: bytes=32 time<1ms TTL=64
Reply from 192.168.2.100: bytes=32 time<1ms TTL=64
Reply from 192.168.2.100: bytes=32 time<1ms TTL=64

Ping statistics for 192.168.2.100:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

Проверьте подключение к Интернету

Теперь мы установим пакет wget (который нам понадобится позже).

[ ~] yum -y install wget

и использовать его для определения нашего публичного IP. Таким образом, мы можем проверить наше подключение к Интернету.

[ ~] wget http://ipinfo.io/ip -qO -
46.101.122.124

В результате должен получиться ваш общедоступный IP-адрес.

Проверьте состояние брандмауэра и временно отключите его

Пожалуйста, проверьте, включен ли в вашей установке CentOS7 firewalld. Вы можете убедиться в этом, набрав

[ ~] systemctl status firewalld

Если он показывает что-то вроде

Активный: активен (работает) с ...

пожалуйста, выключите его и отключите с помощью этих двух команд.

[ ~] systemctl disable firewalld

В конце этого руководства вы найдете инструкции, как повторно включить firewalld и как правильно настроить его для работы с Mattermost.

Если вы прошли все вышеуказанные проверки или знаете, что ваша система пригодна для использования в этом руководстве, вы можете продолжить.

Установить сервер базы данных PostgreSQL

Мы будем использовать PostgreSQL в качестве базы данных для Mattermost. Установите его с помощью следующей команды:

[ ~] yum -y install postgresql-server postgresql-contrib

После установки мы должны инициализировать базу данных.

[ ~] postgresql-setup initdb
Initializing database ... OK

Затем запустите PostgreSQL и включите для него автоматический запуск.

[ ~]# systemctl enable postgresql
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql.service to /usr/lib/systemd/system/postgresql.service.

Убедитесь, что PostgreSQL запущен, выполнив.

[ ~]# systemctl status postgresql

Он должен сообщить что-то похожее на это (убедитесь, что где-то в тексте есть Активно: активно (работает)).

? postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2016-03-04 11:37:50 CET; 44s ago
Main PID: 17660 (postgres)
CGroup: /system.slice/postgresql.service
??17660 /usr/bin/postgres -D /var/lib/pgsql/data -p 5432
??17661 postgres: logger process
??17663 postgres: checkpointer process
??17664 postgres: writer process
??17665 postgres: wal writer process
??17666 postgres: autovacuum launcher process
??17667 postgres: stats collector process

Mar 04 11:37:48 mattermost systemd[1]: Starting PostgreSQL database server...
Mar 04 11:37:50 mattermost systemd[1]: Started PostgreSQL database server.
Mar 04 11:37:59 mattermost systemd[1]: Started PostgreSQL database server.

Создать самую важную базу данных и пользователя базы данных

PostgreSQL автоматически создал пользователя и группу с именем postgres. Мы используем пользователя postgres для подключения к движку базы данных и настройки базы данных и пользователя, который может получить к ней доступ.

Запустите приглашение от имени пользователя postgres:

[ ~]# sudo -i -u postgres

Ваша подсказка теперь изменится на:

-bash-4.2$

Теперь давайте подключимся к серверу базы данных.

-bash-4.2$ psql
psql (9.2.15)
Type "help" for help.
postgres=#

Теперь в командной строке PostgreSQL мы создаем базу данных с именем Mattermost.

postgres=# CREATE DATABASE mattermost;
CREATE DATABASE

Теперь мы создаем пользователя mmuser с паролем DBAss47slX3.

postgres=# CREATE USER mmuser WITH PASSWORD 'DBAss47slX3';
CREATE ROLE

Предоставьте пользователю доступ к базе данных Mattermost, набрав:

postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;
GRANT
postgres=#

Затем мы можем выйти из подсказки PostgreSQL, набрав:

postgres=# \q
-bash-4.2$

А затем выйдите из оболочки, которую мы запускали как пользователь postgres.

-bash-4.2$ exit
logout
[ ~]#

Разрешить доступ к базе данных PostgreSQL с локального хоста через имя пользователя/пароль

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

vi /var/lib/pgsql/data/pg_hba.conf

с помощью редактора, такого как vi или nano, и измените строку:

host    all             all             127.0.0.1/32            ident

к:

host    all             all             127.0.0.1/32            md5

Сохраните файл и перезапустите Postgresql.

[ ~]# systemctl restart postgresql

Мы должны убедиться, что сделали это правильно, подключившись к серверу базы данных с нашим ранее созданным пользователем и паролем (используйте свой пароль, если вы использовали другой на своем сервере):

[ ~]#

Наш сервер и база данных PostgreSQL теперь готовы для Mattermost!

Скачайте и распакуйте Mattermost

Давайте загрузим копию сервера Mattermost напрямую из их репозитория Github (на момент создания этого руководства текущей версией была версия v2.0.0), используя wget.

[ ~]# wget -q "https://github.com/mattermost/platform/releases/download/v2.0.0/mattermost.tar.gz" -O mattermost.tar.gz

Теперь давайте распакуем архив и поместим извлеченные файлы в нужное место (в данном случае мы используем /opt/mattermost).

[ ~]# mv mattermost /opt

Установка Mattermost

Создайте пользователя, который запускает демон Mattermost.

Позже мы запустим Mattermost в качестве демона. Поэтому мы настраиваем нового пользователя в нашей системе с именем mattermost. Позже он запустит самый важный экземпляр. Выполните следующую команду, чтобы создать системного пользователя и группу самый важный:

[ ~]# useradd -r mattermost -U -s /sbin/nologin

Создайте папку для хранения данных для Mattermost

Mattermost хочет сохранить некоторые из своих данных, например. загруженные файлы и т. д. в папку. Итак, нам нужно создать эту папку. Он может находиться где угодно на жестком диске, но должен быть доступен пользователю важнее. Я решил использовать /opt/mattermost/data. Создайте папку с помощью следующей команды:

[ ~]# mkdir -p /opt/mattermost/data

Установить владельца самого важного каталога

Теперь мы устанавливаем группу и владельца самого важного каталога для нашего ранее созданного пользователя и группы:

[ ~]# chmod -R g+w /opt/mattermost

Настройте соединение с базой данных для наиболее важных

Чтобы указать Mattermost, как он должен подключаться к нашей базе данных PostgreSQL, нам нужно отредактировать его файл конфигурации:

/opt/mattermost/config/config.json

Найдите раздел SqlSettings и измените его в соответствии с нашими потребностями:

ДО

"SqlSettings": {
"DriverName": "mysql",
"DataSource": "mmuser:(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8",
"DataSourceReplicas": [],
"MaxIdleConns": 10,
"MaxOpenConns": 10,
"Trace": false,
"AtRestEncryptKey": "7rAh6iwQCkV4cA1Gsg3fgGOXJAQ43QVg"
},

ПОСЛЕ

"SqlSettings": {
"DriverName": "postgres",
"DataSource": "postgres://mmuser::5432/mattermost?sslmode=disable&connect_timeout=10",
"DataSourceReplicas": [],
"MaxIdleConns": 10,
"MaxOpenConns": 10,
"Trace": false,
"AtRestEncryptKey": "7rAh6iwQCkV4cA1Gsg3fgGOXJAQ43QVg"
},

Вы можете оставить AtRestEncryptKey как есть!

Настройте подключение к электронной почте для наиболее важных

Нам снова нужно отредактировать его файл конфигурации.

/opt/mattermost/config/config.json

Находим раздел EmailSettings и меняем его под наши нужды:

ДО

 "EmailSettings": {
"EnableSignUpWithEmail": true,
"EnableSignInWithEmail": true,
"EnableSignInWithUsername": false,
"SendEmailNotifications": false,
"RequireEmailVerification": false,
"FeedbackName": "",
"FeedbackEmail": "",
"SMTPUsername": "",
"SMTPPassword": "",
"SMTPServer": "",
"SMTPPort": "",
"ConnectionSecurity": "",
"InviteSalt": "bjlSR4QqkXFBr7TP4oDzlfZmcNuH9YoS",
"PasswordResetSalt": "vZ4DcKyVVRlKHHJpexcuXzojkE5PZ5eL",
"SendPushNotifications": false,
"PushNotificationServer":
},

ПОСЛЕ

 "EmailSettings": {
"EnableSignUpWithEmail": true,
"EnableSignInWithEmail": true,
"EnableSignInWithUsername": false,
"SendEmailNotifications": false,
"RequireEmailVerification": false,
"FeedbackName": "",
"FeedbackEmail": "",
"SMTPUsername": "",
"SMTPPassword": "",
"SMTPServer": "127.0.0.1",
"SMTPPort": "25",
"ConnectionSecurity": "",
"InviteSalt": "bjlSR4QqkXFBr7TP4oDzlfZmcNuH9YoS",
"PasswordResetSalt": "vZ4DcKyVVRlKHHJpexcuXzojkE5PZ5eL",
"SendPushNotifications": false,
"PushNotificationServer": ""
},

Мы используем 127.0.0.1 и порт 25, потому что мы используем нашу локальную установку постфикса, которая уже настроена для отправки электронной почты наружу. Если ваши настройки здесь отличаются, вы должны установить правильные значения!

Настройте Mattermost так, чтобы он прослушивал только внутренний интерфейс (127.0.0.1)

По умолчанию самый важный экземпляр сервера будет прослушивать все интерфейсы через порт 8065 (:8065). Поскольку мы хотим поместить Nginx-сервер перед самым важным, мы изменим это поведение, чтобы он прослушивал только локальный хост (127.0.0.1:8065).

Просто измените строку

        "ListenAddress": ":8065",

к

        "ListenAddress": "127.0.0.1:8065",

в файле config.json.

Протестируйте сервер Mattermost

Теперь мы можем проверить, запустится ли наш самый важный сервер, запустив его из командной строки. Пожалуйста, убедитесь, что вы делаете это как самый важный пользователь. Если вы случайно сделали это как root, вам придется снова исправить права доступа к самой важной папке!

[ ~]# su - mattermost -s /bin/bash

Last login: Fri Mar 4 12:47:52 CET 2016 on pts/0
su: warning: cannot change directory to /home/mattermost: No such file or directory
-bash-4.2$

Теперь перейдите в самый важный каталог установки:

-bash-4.2$ cd /opt/mattermost/bin/

И запустите Mattermost из командной строки:

-bash-4.2$ ./platform

Вывод должен выглядеть примерно так:

[2016/03/04 13:00:10 CET] [INFO] Loaded system translations for 'en' from '/opt/mattermost/i18n/en.json'
[2016/03/04 13:00:10 CET] [INFO] Current version is 2.0.0 (5950/Sat Feb 13 15:42:01 UTC 2016/c71c5cef632c7dc68072167c6fe091a60835fa02)
[2016/03/04 13:00:10 CET] [INFO] Enterprise Enabled: false
[2016/03/04 13:00:10 CET] [INFO] Current working directory is /opt/mattermost/bin
[2016/03/04 13:00:10 CET] [INFO] Loaded config file from /opt/mattermost/config/config.json
[2016/03/04 13:00:10 CET] [INFO] Server is initializing...
[2016/03/04 13:00:10 CET] [INFO] Pinging sql master database
[2016/03/04 13:00:10 CET] [INFO] Pinging sql replica-0 database
[2016/03/04 13:00:10 CET] [DEBG] Deleting any unused pre-release features
[2016/03/04 13:00:10 CET] [INFO] The database schema has been set to version 2.0.0
[2016/03/04 13:00:10 CET] [DEBG] Initializing user api routes
[2016/03/04 13:00:10 CET] [DEBG] Initializing team api routes
[2016/03/04 13:00:10 CET] [DEBG] Initializing channel api routes
[2016/03/04 13:00:10 CET] [DEBG] Initializing post api routes
[2016/03/04 13:00:10 CET] [DEBG] Initializing web socket api routes
[2016/03/04 13:00:10 CET] [DEBG] Initializing file api routes
[2016/03/04 13:00:10 CET] [DEBG] Initializing command api routes
[2016/03/04 13:00:10 CET] [DEBG] Initializing admin api routes
[2016/03/04 13:00:10 CET] [DEBG] Initializing oauth api routes
[2016/03/04 13:00:10 CET] [DEBG] Initializing webhook api routes
[2016/03/04 13:00:10 CET] [DEBG] Initializing preference api routes
[2016/03/04 13:00:10 CET] [DEBG] Initializing license api routes
[2016/03/04 13:00:10 CET] [DEBG] Parsing server templates at /opt/mattermost/api/templates/
[2016/03/04 13:00:10 CET] [DEBG] Initializing web routes
[2016/03/04 13:00:10 CET] [DEBG] Using static directory at /opt/mattermost/web/static/
[2016/03/04 13:00:10 CET] [DEBG] Parsing templates at /opt/mattermost/web/templates/
[2016/03/04 13:00:10 CET] [INFO] Starting Server...
[2016/03/04 13:00:10 CET] [INFO] Server is listening on 127.0.0.1:8065
[2016/03/04 13:00:10 CET] [INFO] RateLimiter is enabled
[2016/03/04 13:00:10 CET] [DEBG] Checking for security update from Mattermost
[2016/03/04 13:00:10 CET] [EROR] Failed to get security update information from Mattermost.

Остановить самый важный сервер с помощью Ctrl+C

а затем выйдите из оболочки, которую мы начали с самого важного пользователя:

-bash-4.2$ exit
logout
[ ~]#

Если ваш самый важный экземпляр не запускается, внимательно прочитайте вывод. У меня было много проблем, потому что я забыл простую запятую в config.json. Также убедитесь, что вы не используете специальные символы в своем пароле dbusers, особенно знак @. Это привело меня в странное начало!

Если вы случайно запустили приведенную выше команду от имени root, и это также может сработать, вам придется повторно исправить разрешения для самой важной папки. Используйте эту команду, если вы столкнулись с этой ошибкой:

[ ~]# chown -R mattermost:mattermost /opt/mattermost

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

Настройте Mattermost в качестве демона

Чтобы настроить Mattermost в качестве демона, создайте файл

/etc/systemd/system/mattermost.service

со следующим содержанием:

[Unit]
Description=Mattermost
After=syslog.target network.target

[Service]
Type=simple
WorkingDirectory=/opt/mattermost/bin
User=mattermost
ExecStart=/opt/mattermost/bin/platform
PIDFile=/var/spool/mattermost/pid/master.pid

[Install]
WantedBy=multi-user.target

Затем перезагрузите файлы демона с помощью:

[ ~]# systemctl daemon-reload

Теперь мы можем запускать/останавливать/включать/отключать эту службу, как обычно.

Итак, давайте запустим Mattermost, получим его статус, а затем включим его как сервис (автозапуск).

Запустить самый важный демон

[ ~]# systemctl start mattermost.service

Подтвердить самый важный статус

[ ~]# systemctl status mattermost.service
? mattermost.service - Mattermost
Loaded: loaded (/etc/systemd/system/mattermost.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2016-03-04 14:03:40 CET; 4s ago
Main PID: 18573 (platform)
CGroup: /system.slice/mattermost.service
??18573 /opt/mattermost/bin/platform
...
...

Убедитесь, что он активен (работает)!

Включить демон для автозапуска

[ ~]# systemctl enable mattermost.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mattermost.service to /etc/systemd/system/mattermost.service.

Теперь точно проверим, слушает ли Mattermost 127.0.0.1:8065, выполнив следующую команду:

[ config]# curl -s "http://127.0.0.1:8065" | grep -b "2015 Mattermost"

Мы должны получить одну строку, содержащую 2015 Mattermost.

11343:        <span class="pull-right footer-link copyright">© 2015 Mattermost, Inc.</span>

Если это так, мы можем быть уверены, что экземпляр сервера Mattermost запущен, и мы можем продолжить.


Исправить проблемы с разрешениями, связанные с SELinux

В CentOS7 SELinux включен по умолчанию. Мы могли бы отключить его полностью, но лучше перенастроить его и позволить нашему серверу Mattermost выполняться.

Просто введите следующие 2 команды, чтобы исправить разрешения SELinux:

[ config]# setsebool -P httpd_can_network_connect 1

Настроить сервер Nginx

Мы поместим сервер Nginx перед нашим экземпляром сервера Mattermost.

Основные преимущества:

  • Сопоставление портов: с 80 по 8065.
  • Стандартные журналы запросов
  • дополнительные параметры при последующем переходе на SSL

Включить epel-репозиторий

Nginx отсутствует в репозиториях CentOS по умолчанию. Поэтому нам нужно сначала включить репозиторий epel. Это простая задача, просто введите:

[ config]# yum -y install epel-release && yum update

Установить нгинкс

После того, как мы включили epel-релиз, мы можем просто установить nginx с помощью следующей команды:

[ config]# yum -y install nginx

Это установит nginx и все его зависимости.

Настроить nginx

Есть много способов настроить Nginx. В этом руководстве показано, как создать очень простую настройку для Nginx, которая просто размещает наш сервер Mattermost на порту 80.

Изменить файл конфигурации Nginx по умолчанию

Создайте резервную копию текущего nginx.conf, выполнив:

[ config]# cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

Затем замените /etc/nginx/nginx.conf следующим содержимым:

# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
worker_connections 1024;
}

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;

server {
server_name mattermost.example.com;
location / {
client_max_body_size 50M;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://127.0.0.1:8065;
}
}
}

Убедитесь, что вы используете правильное имя хоста, как указано ранее в этом документе.

Чтобы убедиться, что в наших файлах конфигурации нет синтаксических ошибок, выполните следующую команду для проверки синтаксиса:

[ config]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Запустите и включите Nginx в качестве демона

Запустите Nginx

[ config]# systemctl start nginx

Проверить статус

[ config]# systemctl status nginx

Убедитесь, что он выводит хотя бы строку, показывающую:

...
Active: active (running)...
...

Включить как демон

[ config]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

Если все прошло хорошо, теперь у вас должна быть работающая установка Mattermost, работающая за Nginx. Подтвердите это, открыв следующий URL-адрес в браузере:

Должен появиться экран входа в Mattermost!

Теперь вы можете продолжить настройку установки Mattermost, введя свой адрес электронной почты и создав учетную запись.

Брандмауэрd

Ранее в этом руководстве мы отключили firewalld. Если вы хотите снова включить его, но оставить порт 80 открытым (который мы в настоящее время используем для Mattermost через Nginx), просто сделайте следующее:

Запустите и снова включите Firewalld

[ config]# systemctl enable firewalld
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/basic.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.

Откройте порт 80 в брандмауэре

[ config]# firewall-cmd --reload
success

Теперь ваша установка Mattermost должна быть доступна, даже если запущен Firewalld!

Краткое содержание

Я надеюсь, что вы нашли это руководство полезным, и оно сработало. В производственной среде вам следует создать/использовать сертификаты для своего веб-сайта Mattermost и включить https через Nginx. Этого можно легко добиться, слегка изменив этот Howto.