在CentOS 7上使用PostgreSQL和Nginx安装Mattermost

最重要的是一个开源的,自我主导的Slack -Alternative。 Mattermost是防火墙后面的现代通信。

作为专有SaaS消息传递的替代方案,Mattermost将您所有的团队沟通都集中在一个地方,使其可在任何地方进行搜索和访问。

Mattermost是“Slack兼容,而不是Slack限制”,支持Slack的传入和传出webhook集成的超集,包括与现有Slack集成的兼容性。 从现有的Slack团队,您可以将用户,公共频道历史,甚至主题设置颜色导入Mattermost。

此HowTo中使用的名称,变量和帐户

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

先决条件

该Howto解释了使用PostgreSQL作为数据库后端在CentOS7上安装Mattermost。 为了本指南的目的,我们将假设我们将所有内容安装在单个服务器上,但对于经验丰富的用户来说,拆卸部件并将其安装在不同的机器上(例如,数据库服务器)很容易。 安装已经完成了用户root,但是当然也可以使用sudo启用的用户

我们还假设服务器的IP地址为192.168.2.100 ,DNS解析为atmost.example.com 。 所以在这个HowTo中你可以看到192.168.2.100或者atmost.example.com的任何地方将其替换为服务器的IP地址。

在开始之前,您需要最少安装CentOS7。 安装后,请确保正确设置电子邮件(Postfix配置),以便您的系统能够发送电子邮件(例如通过智能主机或类似解决方案)。

在继续之前,请先做一些小小的检查:

尝试从服务器上的终端发送邮件:

[root@mattermost ~]echo -en "Subject: Testmail\n\nThis is a test\n" | sendmail [email protected]

(将your@email.tld替换为您的服务器应该能够发送的电子邮件地址)。 确保您收到系统中的电子邮件!

验证名称解析为thingmost.example.com

从不同的计算机(不是我们尝试设置的服务器)尝试ping thingmost.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(稍后我们将需要)。

[root@mattermost ~] yum -y install wget

并用它来确定我们的公共ip。 所以我们可以检查我们的互联网连接。

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

结果应该是你的公共IP地址。

检查防火墙状态,并禁用它

请检查您的CentOS7安装是否已启用防火墙 。 您可以通过输入验证

[root@mattermost ~] systemctl status firewalld

如果它显示类似的东西

活动:活动(正在运行)自...

请将其关闭,并使用此2个命令禁用它。

[root@mattermost ~] systemctl stop firewalld
[root@mattermost ~] systemctl disable firewalld

在本教程末尾,您将找到有关如何重新启用firewalld以及如何正确设置以使用Mattermost的说明。

如果您通过所有上述支票,或者您知道您有本教程的可用系统,您可以继续。

安装PostgreSQL数据库服务器

我们将使用PostgreSQL作为Mattermost的数据库后端。 使用以下命令安装它:

[root@mattermost ~] yum -y install postgresql-server postgresql-contrib

安装后,我们必须初始化数据库。

[root@mattermost ~] postgresql-setup initdb
Initializing database ... OK

然后启动PostgreSQL并使其自动启动。

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

请验证PostgreSQL是否正在运行。

[root@mattermost ~]# 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启动提示:

[root@mattermost ~]# sudo -i -u postgres

您的提示现在将更改为:

-bash-4.2$

现在让我们连接到数据库服务器。

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

在PostgreSQL提示符中,我们现在创建一个名称为“几何”的数据库。

postgres=# CREATE DATABASE mattermost;
CREATE DATABASE

现在我们创建一个用户' mmuser ',密码为' DBAss47slX 3'。

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 '开始的shell。

-bash-4.2$ exit
logout
[root@mattermost ~]#

允许通过用户名/密码从localhost访问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。

[root@mattermost ~]# systemctl restart postgresql

我们应该通过使用我们以前创建的用户和密码连接到数据库服务器来验证我们是否正确地进行了这一操作(如果您在服务器上使用不同的密码,请使用您的密码):

[root@mattermost ~]# psql --host=127.0.0.1 --dbname=mattermost --username=mmuser --password
Password for user mmuser:
psql (9.2.15)
Type "help" for help.

mattermost=> \q
[root@mattermost ~]#

我们的PostgreSQL服务器和数据库现在可以为Mattermost准备好了!

下载并提取Mattermost

让我们从他们的Github仓库(在创建本教程版本v2.0.0是当前版本)中使用wget下载Mattermost服务器极限的副本。

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

现在我们来解压缩档案并将提取的文件放到目标位置(在这种情况下我们使用/ opt / mattermost)。

[root@mattermost ~]# tar -xvzf mattermost.tar.gz
[root@mattermost ~]# mv mattermost /opt


安装Mattermost

创建一个运行Mattermost守护进程的用户

我们以后会运行Mattermost作为deamon。 因此,我们在系统上设置一个名称为“ 最重要 ”的新用户。 稍后会运行最重要的例子。 执行以下命令创建一个系统用户和组' mattermost ':

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

为Mattermost创建数据存储文件夹

Mattermost想存储一些数据,例如。 上传文件等在一个文件夹。 所以我们需要创建该文件夹。 它可以是硬盘驱动器上的任何地方,但必须由用户“ 最重要 ”访问。 我选择使用'/ opt / thingmost / data'。 使用以下命令创建文件夹:

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

设置最近目录的所有者

现在我们将最近的目录的组和所有者设置到我们以前创建的用户和组中:

[root@mattermost ~]# chown -R mattermost:mattermost /opt/mattermost
[root@mattermost ~]# chmod -R g+w /opt/mattermost

配置数据库连接是很重要的

要告诉Mattermost如何连接到我们的PostgreSQL数据库,我们需要编辑它的配置文件:

/opt/mattermost/config/config.json

请查找“ SqlSettings ”部分并将其更改为我们的需求:

之前

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

"SqlSettings": {
"DriverName": "postgres",
"DataSource": "postgres://mmuser:DBAss47slX3@127.0.0.1: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.125端口,因为我们使用我们的本地Postfix安装,已经配置为能够发送电子邮件到外面。 如果您的设置在此不同,您必须设置正确的值!

配置重要内容仅监听内部接口(127.0.0.1)

默认情况下,最重要的服务器实例将监听端口8065(:8065)上的所有接口。 因为我们想把一个Nginx-Server放在前面,所以我们改变这个行为,这样它只会在localhost(127.0.0.1:8065)上监听。

只是换行

        "ListenAddress": ":8065",

        "ListenAddress": "127.0.0.1:8065",

在config.json文件中。

测试Mattermost服务器

我们现在可以测试我们最重要的服务器是否可以从命令行运行。 请确保您以“用心”的方式做到这一点。 如果您不小心将其作为“root”,则必须再次修复最重要的文件夹的权限!

[root@mattermost ~]# 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/

并从命令行运行:

-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停止最重要的服务器

然后退出我们开始的shell,用户'mattermost'与:

-bash-4.2$ exit
logout
[root@mattermost ~]#

如果最重要的实例没有启动,请仔细阅读输出。 我有很多问题,因为我忘了一个简单的逗号在config.json。 还要确保不要在dbuser密码中使用特殊字符,特别是没有' @ '符号。 这开始让我很奇怪!

如果您不小心将上述命令作为“ root ”运行,并且也可能会起作用,则必须重新修复最重要的文件夹的权限。 如果遇到这个错误,请使用此命令:

[root@mattermost ~]# chown -R mattermost:mattermost /opt/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

然后重新加载守护程序文件:

[root@mattermost ~]# systemctl daemon-reload

我们现在可以按照惯例开始/停止/启用/禁用此服务。

所以让我们开始Mattermost,获取它的状态,然后启用它作为服务(自动启动)。

启动最重要的守护进程

[root@mattermost ~]# systemctl start mattermost.service

验证最重要的状态

[root@mattermost ~]# 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
...
...

确保它是活动的(运行)

启用自动启动守护程序

[root@mattermost ~]# 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:

[root@mattermost 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权限:

[root@mattermost config]# chcon -Rt httpd_sys_content_t /opt/mattermost/
[root@mattermost config]# setsebool -P httpd_can_network_connect 1

安装Nginx服务器

我们将在我们的Mattermost服务器实例的前面放置一个Nginx服务器。

主要优点是:

  • 端口映射:80到8065
  • 标准请求日志
  • 以后更换SSL的选项

启用epel-repository

Nginx不在CentOS的默认存储库中。 所以我们需要首先启用epel存储库。 这是一个容易的任务,只需输入:

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

安装nginx

在启用epel-release之后,我们可以使用以下命令简单的安装nginx:

[root@mattermost config]# yum -y install nginx

这将安装nginx和所有它的依赖。

配置nginx

有很多方法来配置Nginx。 本教程将只显示如何为Nginx创建一个非常简单的设置,只需在端口80上托管我们的Mattermost服务器。

更改Nginx默认配置文件

通过执行以下命令创建当前nginx.conf的备份:

[root@mattermost 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;
}
}
}

请确保您使用正确的主机名,如本文档前面所述。

要验证我们的配置文件中没有任何语法错误,请运行以下命令检查语法:

[root@mattermost 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

[root@mattermost config]# systemctl start nginx

检查状态

[root@mattermost config]# systemctl status nginx

确保它输出至少一行显示:

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

启用作为守护进程

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

如果一切顺利,您现在应该在Nginx之后运行一个Mattermost工作。 通过在浏览器中打开以下URL来验证它:

http://mattermost.example.com

Mattermost登录屏幕应该出现!

现在您可以通过输入您的电子邮件地址并创建一个帐户来继续设置您的Mattermost安装。

防火墙

在本教程前面,我们禁用了firewalld。 如果要重新启用它,但是要保持端口80打开(我们目前通过Nginx用于Mattermost)只需执行以下操作:

启动并重新启用Firewalld

[root@mattermost config]# systemctl start firewalld
[root@mattermost 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

[root@mattermost config]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
[root@mattermost config]# firewall-cmd --reload
success

现在您的Mattermost安装应该可以访问,即使Firewalld正在运行!

概要

我希望你发现这个教程有用,它的工作。 在生产环境中,您应该为您的Mattermost网站创建/使用证书,并通过Nginx启用https。 这可以通过稍微修改这个Howto来轻松实现。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏