VScode使ってRemdmine APIを使用するのに少しだけ悩んだこと
Pythonを使えるようにした
なんとなく VScodeにPythonのプラグインをインストールしてRedmineのAPIを使ってみようと思った。
ご覧の通りPythonをインストールしてみた
Hello World で世の中に挨拶をして使用できることを確認できた。
Redmine APIを使用できるようにしよう
Python-Redmine というものがあるということなのでインストールをしてみる
pip3 install Python-Redmine
Installing collected packages: python-redmine Successfully installed python-redmine-2.3.0
どうやら成功したようです。ではチケットの登録をしてみよう。ということで実行してみた(コードは適当に探してください)
from redminelib import Redmine ImportError: No module named redminelib
と、出力される。あれ?さっきインストールしたのに。。。
原因
原因はとてもともて簡単なことで実行した時に出てきた文字を読めばすぐに分かりました。(ちゃんとみておらず気がつくに時間がかかった)
/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/***(ユーザ名)/Documents/python/redmine.py
python 2.7って書いてありますね。はい。 さっきのpipコマンドで分かるとおりPython3系を使用しているはずなのに2系で実行しているわけです。それはないと言われます。 なので設定ファイルを修正します。
"python.pythonPath": "python3",
こんな感じに修正して再度実行しました。無事にチケットがAPI経由で作成されました。
やった気にならずちゃんとバージョンとかを確認しましょうね。という反省でした。 以上
CentOS8にmattermostを構築してみた
目的
Slackとか色々あるけどオンプレで構築ができるSlackライクなチャットを構築できるようにしておこうかと思った。後はチャットと他の製品連携させるための環境を作ってみたかった
環境
・VirtualBOXにcentos環境を用意
・Centos8.2を建てる
mattermost構築
基本的にmattermostの公式インストールガイドの通りインストールするだけ
Centos8系の手順はないがCentos7の手順で基本的に問題ない(正確にはRHEL7の手順)
Postgresqlのインストール
MySQLもあるがなんとかくPostgresを選択する
mattermostの手順では9.4 だが、12.3(構築時に最新のバージョン)を使用するためPostgresqlの公式ページでスクリプトをコピーする
バージョンと O Sを選択するとインストールして起動までしてくれるスクリプトを用意してくれる
一応コマンドも載せておく
※コマンド実行するとき使用しているユーザによってはrootのパスワード求められるのでそこは適宜 sudoコマンドをつけてください
dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
dnf -qy module disable postgresql
dnf install postgresql12-server
/usr/pgsql-12/bin/postgresql-12-setup initdb
systemctl enable postgresql-12
systemctl start postgresql-12
上記コマンドを実行するとPostgresの準備を進めるためにmattermostのインストールガイドに沿って、DBの作成とユーザ作成、権限の付与を行う
使用するコマンドはインストールガイドに書いてある通りなのでそちらを参照してください
今回は以下のようにDBとユーザを準備(インストールガイドのままですね)
DB:mattermost
ユーザ:mmuser
次に、Postgresqlにmattermostサーバが接続できるようにpg_hba.confファイルを編集する
インストールガイドに基本的には従いつつ、リモート接続はDBとユーザを限定し、md5認証するようにしました。ちなみにデータベースは外だししないのでローカル に限定するようにしてます(あくまで検証環境なので)
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host mattermost mmuser 127.0.0.1/32 md5
mattermostのインストール
こちらもインストールガイドに従って進めれば問題ないです
Postgresと接続するためにconfig.jsonファイルを編集する必要があります
書いてある通りですね。デフォルトだとmysqlになっているので要修正です。sslmodeをdisableにしておかないと起動時にSSLエラーが発生します。SSLの設定をちゃんとすればならないのかは確かめていないです。まあインストールガイドに従ってやれば問題ないでしょう
- If you are using PostgreSQL:
- Set
"DriverName"
to"postgres"
- Set
"DataSource"
to the following value, replacing<mmuser-password>
and<host-name-or-IP>
with the appropriate values:"postgres://mmuser:<mmuser-password>@<host-name-or-IP>:5432/mattermost?sslmode=disable&connect_timeout=10"
あとはmattermostの起動試験を行う(インストールディレクトリ配下にある/bin/mattermostを実行する)
正しく起動できたらサービス化しておくと後で便利です。これもインストールガイドに書いてありますね。
Nginxでリバースプロキシを設定する
いろいろなサービスを実行するときはリバースプロキシを設定しておくと便利ということで今回試しに設定をしました
nginxのインストール
repoファイルを作成する
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/8/$basearch/
gpgcheck=0
enabled=1
今回はcentos8なのでurlもそのように指定
そのままyumでインストールしてもバンドルされているものがインストールされるのでrepoをちゃんと指定してやる(ここはインストールガイド通りではない)
sudo yum --disablerepo=AppStream --enablerepo=nginx install nginx
このコマンドで1.18.0がインストールできた。
リバースプロキシの設定
upstream backend {
server 10.10.10.2:8065;
keepalive 32;
}proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;
server {
listen 80;
server_name mattermost.example.com;location ~ /api/v[0-9]+/(users/)?websocket$ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 50M;
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_buffers 256 16k;
proxy_buffer_size 16k;
client_body_timeout 60;
send_timeout 300;
lingering_timeout 5;
proxy_connect_timeout 90;
proxy_send_timeout 300;
proxy_read_timeout 90s;
proxy_pass http://backend;
}location / {
client_max_body_size 50M;
proxy_set_header Connection "";
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_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_cache mattermost_cache;
proxy_cache_revalidate on;
proxy_cache_min_uses 2;
proxy_cache_use_stale timeout;
proxy_cache_lock on;
proxy_http_version 1.1;
proxy_pass http://backend;
}
}
作成したファイルをデフォルトにするようにリンクを作成する
sudo ln -s /etc/nginx/conf.d/mattermost /etc/nginx/conf.d/default.conf
そして、nginxのサービスを再起動する。
しかし、ちゃんと再起動できませんでした。
エラーを確認すると権限がだめとのこと
nginx: [emerg] chown("/var/cache/nginx", 972) failed (13: Permission denied)
権限を確認すると今はrootがオーナーになっていました。
なのでnginxをオーナーにしてリトライするとサービスの再起動ができました。(モード変更でも良かったかな?試してませんが)
これで準備ができました。curl localhost をしてみます。
<html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>
どうやらどこかで止まっているようです。
調べてみるとどうやらSElinuxで止められていることがあるらしいとのこと。なので通るように設定します
sudo setsebool httpd_can_network_connect on -P
改めて確認するとmattermostの初期画面が出てきました。
どうやらリバースプロキシの設定が正しくできたようです。
以上で、mattermostの構築からnginxを用いたリバースプロキシの設定までが完了しました。
初めてCentos8を使用したりリバースプロキシの設定を行いましたが、mattermostのインストールガイドの丁寧さには大変助けられました(自分で考える必要がほとんどないですね)
久しぶりにSElinuxの罠に嵌まりましたが、安易に無効にせずセキュリティも考えながら構築したいですね。
今後mattermostと何かを連携させて遊んでみようと思うので気が向いたら何かしら書きたいと思います。
以上