(Docker 等は使わずに)CentOS7 に Mattermost をインストールする手順をメモしておきます。
MariaDB のインストール
Mattermost のバックエンドになる MariaDB をインストールします。 まず、GPG-KEY をインストールします。
rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
/etc/yum.repos.d/mariadb.repo
というファイルを以下の内容で新規作成します。
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.3.1/centos73-amd64/ gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
インストールします。
yum -y install MariaDB-client MariaDB-server
起動&自動起動の設定を行います。
systemctl enable mariadb.service systemctl start mariadb.service
MariaDB の初期設定
mysql_secure_installation で初期設定を行い、不要なデータベースや anonymous ユーザを削除しておきます。
mysql_secure_installation
MariaDB 上にデータベースやユーザを作成します。
mysql -u root CREATE DATABASE mattermost; CREATE USER 'mmuser'@'localhost' IDENTIFIED BY 'mmuser-password'; GRANT ALL PRIVILEGES ON mattermost.* TO 'mmuser'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; quit
Mattermost のインストール
ダウンロードページから Matttermost 最新版のソースコードをダウンロードします。 現時点の最新版は 4.2.0 でした。 ダウンロードが完了したら /opt
配下に展開します。 更に、データ用のディレクトリとして /opt/mattermost/data
も作成しておきます。
curl -L -O https://releases.mattermost.com/4.2.0/mattermost-4.2.0-linux-amd64.tar.gz tar zxvf mattermost-4.2.0-linux-amd64.tar.gz -C /opt mkdir /opt/mattermost/data
Mattermost 実行用のシステムアカウントを作成します。 作成したユーザに必要な権限も付与します。
useradd --system --user-group mattermost chown -R mattermost:mattermost /opt/mattermost chmod -R g+w /opt/mattermost
設定ファイルは /opt/mattermost/config/config.json
にあります。 SqlSettings
部分はデフォルトで以下のようになっているはずです。
"SqlSettings": { "DriverName": "mysql", "DataSource": "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s", "DataSourceReplicas": [], "DataSourceSearchReplicas": [], "MaxIdleConns": 20, "MaxOpenConns": 300, "Trace": false, "AtRestEncryptKey": "", "QueryTimeout": 30 },
DataSource
を MariaDB 上に作成したデータベース名・ユーザ名・パスワードに合わせて修正します。 今回は以下のようにしました。
"DataSource": "mmuser:mmuser-password@tcp(127.0.0.1:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s",
systemd に Mattermost を登録します。 以下の内容で /etc/systemd/system/mattermost.service
を新規作成します。
[Unit] Description=Mattermost After=syslog.target network.target postgresql-9.4.service [Service] Type=simple WorkingDirectory=/opt/mattermost/bin User=mattermost ExecStart=/opt/mattermost/bin/platform PIDFile=/var/spool/mattermost/pid/master.pid LimitNOFILE=49152 [Install] WantedBy=multi-user.target
Mattermost を起動します。
systemctl daemon-reload systemctl enable mattermost.service systemctl start mattermost.service
Mattermost はデフォルトで 8,065/TCP を Listen しますので、ブラウザで http://xxx.xxx.xxx.xxx:8065/
にアクセスします。
参考
/opt/mattermost/config/config.json
{ "ServiceSettings": { "SiteURL": "", "LicenseFileLocation": "", "ListenAddress": ":8065", "ConnectionSecurity": "", "TLSCertFile": "", "TLSKeyFile": "", "UseLetsEncrypt": false, "LetsEncryptCertificateCacheFile": "./config/letsencrypt.cache", "Forward80To443": false, "ReadTimeout": 300, "WriteTimeout": 300, "MaximumLoginAttempts": 10, "GoroutineHealthThreshold": -1, "GoogleDeveloperKey": "", "EnableOAuthServiceProvider": false, "EnableIncomingWebhooks": true, "EnableOutgoingWebhooks": true, "EnableCommands": true, "EnableOnlyAdminIntegrations": true, "EnablePostUsernameOverride": false, "EnablePostIconOverride": false, "EnableAPIv3": true, "EnableLinkPreviews": false, "EnableTesting": false, "EnableDeveloper": false, "EnableSecurityFixAlert": true, "EnableInsecureOutgoingConnections": false, "AllowedUntrustedInternalConnections": "", "EnableMultifactorAuthentication": false, "EnforceMultifactorAuthentication": false, "EnableUserAccessTokens": false, "AllowCorsFrom": "", "SessionLengthWebInDays": 30, "SessionLengthMobileInDays": 30, "SessionLengthSSOInDays": 30, "SessionCacheInMinutes": 10, "WebsocketSecurePort": 443, "WebsocketPort": 80, "WebserverMode": "gzip", "EnableCustomEmoji": false, "EnableEmojiPicker": true, "RestrictCustomEmojiCreation": "all", "RestrictPostDelete": "all", "AllowEditPost": "always", "PostEditTimeLimit": 300, "TimeBetweenUserTypingUpdatesMilliseconds": 5000, "EnablePostSearch": true, "EnableUserTypingMessages": true, "EnableChannelViewedMessages": true, "EnableUserStatuses": true, "ClusterLogTimeoutMilliseconds": 2000 }, "TeamSettings": { "SiteName": "Mattermost", "MaxUsersPerTeam": 50, "EnableTeamCreation": true, "EnableUserCreation": true, "EnableOpenServer": false, "RestrictCreationToDomains": "", "EnableCustomBrand": false, "CustomBrandText": "", "CustomDescriptionText": "", "RestrictDirectMessage": "any", "RestrictTeamInvite": "all", "RestrictPublicChannelManagement": "all", "RestrictPrivateChannelManagement": "all", "RestrictPublicChannelCreation": "all", "RestrictPrivateChannelCreation": "all", "RestrictPublicChannelDeletion": "all", "RestrictPrivateChannelDeletion": "all", "RestrictPrivateChannelManageMembers": "all", "EnableXToLeaveChannelsFromLHS": false, "UserStatusAwayTimeout": 300, "MaxChannelsPerTeam": 2000, "MaxNotificationsPerChannel": 1000, "TeammateNameDisplay": "username", "ExperimentalTownSquareIsReadOnly": false }, "ClientRequirements": { "AndroidLatestVersion": "", "AndroidMinVersion": "", "DesktopLatestVersion": "", "DesktopMinVersion": "", "IosLatestVersion": "", "IosMinVersion": "" }, "SqlSettings": { "DriverName": "mysql", "DataSource": "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s", "DataSourceReplicas": [], "DataSourceSearchReplicas": [], "MaxIdleConns": 20, "MaxOpenConns": 300, "Trace": false, "AtRestEncryptKey": "", "QueryTimeout": 30 }, "LogSettings": { "EnableConsole": true, "ConsoleLevel": "INFO", "EnableFile": true, "FileLevel": "INFO", "FileFormat": "", "FileLocation": "", "EnableWebhookDebugging": true, "EnableDiagnostics": true }, "PasswordSettings": { "MinimumLength": 5, "Lowercase": false, "Number": false, "Uppercase": false, "Symbol": false }, "FileSettings": { "EnableFileAttachments": true, "EnableMobileUpload": true, "EnableMobileDownload": true, "MaxFileSize": 52428800, "DriverName": "local", "Directory": "./data/", "EnablePublicLink": false, "PublicLinkSalt": "", "InitialFont": "luximbi.ttf", "AmazonS3AccessKeyId": "", "AmazonS3SecretAccessKey": "", "AmazonS3Bucket": "", "AmazonS3Region": "us-east-1", "AmazonS3Endpoint": "s3.amazonaws.com", "AmazonS3SSL": true, "AmazonS3SignV2": false, "AmazonS3SSE": false, "AmazonS3Trace": false }, "EmailSettings": { "EnableSignUpWithEmail": true, "EnableSignInWithEmail": true, "EnableSignInWithUsername": true, "SendEmailNotifications": false, "RequireEmailVerification": false, "FeedbackName": "", "FeedbackEmail": "", "FeedbackOrganization": "", "EnableSMTPAuth": false, "SMTPUsername": "", "SMTPPassword": "", "SMTPServer": "", "SMTPPort": "", "ConnectionSecurity": "", "InviteSalt": "", "SendPushNotifications": false, "PushNotificationServer": "", "PushNotificationContents": "generic", "EnableEmailBatching": false, "EmailBatchingBufferSize": 256, "EmailBatchingInterval": 30, "SkipServerCertificateVerification": false, "EmailNotificationContentsType": "full" }, "RateLimitSettings": { "Enable": false, "PerSec": 10, "MaxBurst": 100, "MemoryStoreSize": 10000, "VaryByRemoteAddr": true, "VaryByHeader": "" }, "PrivacySettings": { "ShowEmailAddress": true, "ShowFullName": true }, "SupportSettings": { "TermsOfServiceLink": "https://about.mattermost.com/default-terms/", "PrivacyPolicyLink": "https://about.mattermost.com/default-privacy-policy/", "AboutLink": "https://about.mattermost.com/default-about/", "HelpLink": "https://about.mattermost.com/default-help/", "ReportAProblemLink": "https://about.mattermost.com/default-report-a-problem/", "SupportEmail": "feedback@mattermost.com" }, "AnnouncementSettings": { "EnableBanner": false, "BannerText": "", "BannerColor": "#f2a93b", "BannerTextColor": "#333333", "AllowBannerDismissal": true }, "ThemeSettings": { "EnableThemeSelection": true, "DefaultTheme": "default", "AllowCustomThemes": true, "AllowedThemes": [] }, "GitLabSettings": { "Enable": false, "Secret": "", "Id": "", "Scope": "", "AuthEndpoint": "", "TokenEndpoint": "", "UserApiEndpoint": "" }, "GoogleSettings": { "Enable": false, "Secret": "", "Id": "", "Scope": "profile email", "AuthEndpoint": "https://accounts.google.com/o/oauth2/v2/auth", "TokenEndpoint": "https://www.googleapis.com/oauth2/v4/token", "UserApiEndpoint": "https://www.googleapis.com/plus/v1/people/me" }, "Office365Settings": { "Enable": false, "Secret": "", "Id": "", "Scope": "User.Read", "AuthEndpoint": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize", "TokenEndpoint": "https://login.microsoftonline.com/common/oauth2/v2.0/token", "UserApiEndpoint": "https://graph.microsoft.com/v1.0/me" }, "LdapSettings": { "Enable": false, "LdapServer": "", "LdapPort": 389, "ConnectionSecurity": "", "BaseDN": "", "BindUsername": "", "BindPassword": "", "UserFilter": "", "FirstNameAttribute": "", "LastNameAttribute": "", "EmailAttribute": "", "UsernameAttribute": "", "NicknameAttribute": "", "IdAttribute": "", "PositionAttribute": "", "SyncIntervalMinutes": 60, "SkipCertificateVerification": false, "QueryTimeout": 60, "MaxPageSize": 0, "LoginFieldName": "" }, "ComplianceSettings": { "Enable": false, "Directory": "./data/", "EnableDaily": false }, "LocalizationSettings": { "DefaultServerLocale": "en", "DefaultClientLocale": "en", "AvailableLocales": "" }, "SamlSettings": { "Enable": false, "Verify": true, "Encrypt": true, "IdpUrl": "", "IdpDescriptorUrl": "", "AssertionConsumerServiceURL": "", "IdpCertificateFile": "", "PublicCertificateFile": "", "PrivateKeyFile": "", "FirstNameAttribute": "", "LastNameAttribute": "", "EmailAttribute": "", "UsernameAttribute": "", "NicknameAttribute": "", "LocaleAttribute": "", "PositionAttribute": "", "LoginButtonText": "With SAML" }, "NativeAppSettings": { "AppDownloadLink": "https://about.mattermost.com/downloads/", "AndroidAppDownloadLink": "https://about.mattermost.com/mattermost-android-app/", "IosAppDownloadLink": "https://about.mattermost.com/mattermost-ios-app/" }, "ClusterSettings": { "Enable": false, "ClusterName": "", "OverrideHostname": "", "UseIpAddress": true, "UseExperimentalGossip": false, "ReadOnlyConfig": true, "GossipPort": 8074, "StreamingPort": 8075 }, "MetricsSettings": { "Enable": false, "BlockProfileRate": 0, "ListenAddress": ":8067" }, "AnalyticsSettings": { "MaxUsersForStatistics": 2500 }, "WebrtcSettings": { "Enable": false, "GatewayWebsocketUrl": "", "GatewayAdminUrl": "", "GatewayAdminSecret": "", "StunURI": "", "TurnURI": "", "TurnUsername": "", "TurnSharedKey": "" }, "ElasticsearchSettings": { "ConnectionUrl": "http://dockerhost:9200", "Username": "elastic", "Password": "changeme", "EnableIndexing": false, "EnableSearching": false, "Sniff": true, "PostIndexReplicas": 1, "PostIndexShards": 1, "AggregatePostsAfterDays": 365, "PostsAggregatorJobStartTime": "03:00" }, "DataRetentionSettings": { "Enable": false }, "JobSettings": { "RunJobs": true, "RunScheduler": true }, "PluginSettings": { "Enable": false, "Plugins": {} } }