zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

CentOS6+MySQL+NginxでMattermostインストール

【参考手順】
AmazonLinuxの例
qiita.com
すみません例によって上記ほぼそのまんまです。

SELINUX

vi /etc/sysconfig/selinux
SELINUX=disabled : 無効にしておく(AmazonLinuxは初期値でdisabledだがCentOSはenableなので。)

mysql5.7のインストール

※後述するポスト内容の部分一致検索にn-gramパーサを使用するため、MySQL5.7が必要

yum install -y http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm
yum install -y mysql-community-server.x86_64 mysql-community-devel.x86_64 mysql-community-client.x86_64

***起動
/etc/init.d/mysqld start

***MySQL初期設定
mysql_secure_installation
# Change the root password? [Y/n] Y
# New password:
rootのパスワードを設定しましょう。あとはすべてEnterで抜けます。

***自動起動設定
chkconfig --list mysqld
# mysqld         	0:off	1:off	2:off	3:off	4:off	5:off	6:off
chkconfig mysqld on
chkconfig --list mysqld
# mysqld         	0:off	1:off	2:on	3:on	4:on	5:on	6:off

nginxのインストール

rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
yum install nginx --disablerepo=* --enablerepo=nginx

***自動起動確認
chkconfig --list nginx
# nginx          	0:off	1:off	2:on	3:on	4:on	5:on	6:off

Mattermost用のユーザーとDBを作成。

ここではuser名:mmuser パスワード:mattermost DB名:mattermost で設定しています。

mysql -A -uroot -p

CREATE DATABASE mattermost;
GRANT ALL PRIVILEGES ON mattermost.* TO 'mmuser'@'localhost' IDENTIFIED BY 'mattermost' WITH GRANT OPTION;
exit

MatterMostのインストール

mattermost実行ユーザーを作成。

adduser mattermost

ダウンロード及び展開、配置。

http://www.mattermost.org/download/
上記サイトにアクセスすると、最新バージョンのwget文が表示されているので、これをそのまま利用する
→今回はv3.3.0だった

cd /usr/local/src/
wget https://releases.mattermost.com/3.3.0/mattermost-team-3.3.0-linux-amd64.tar.gz
tar zxvf mattermost-team-3.3.0-linux-amd64.tar.gz

mv mattermost /opt/mattermost
mkdir -p /opt/mattermost/data
chown -R mattermost:mattermost /opt/mattermost
chmod -R g+w /opt/mattermost
Mattermostの設定を変更

DataSourceをdocker→localhostに編集、ほか微調整

cp -p /opt/mattermost/config/config.json /opt/mattermost/config/config.json_org
vi /opt/mattermost/config/config.json

"DataSource": "ユーザ名:パスワード@tcp(localhost:3306)/DB名?charset=utf8mb4,utf8",
→今回の場合
"DataSource": "mmuser:mattermost@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8",
NginxのconfにMattermostの設定を追加。

vi /etc/nginx/conf.d/mattermost.conf

  server {
    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://localhost:8065;
    }
  }

==========
# ※nginx.confにserverの設定が記述されていたらコメントアウトしておく
mv default.conf default.conf_bak

Mattermost起動スクリプトを下記場所に作成。

vi /opt/mattermost/bin/mattermost.sh

#!/bin/sh
# chkconfig:   - 85 15
# description:  mattermost

SERVICE=mattermost
start() {
    cd /opt/mattermost
    sudo -u mattermost ./bin/platform > /dev/null &
    echo "service $SERVICE [start]"
}
stop() {
    pkill platform
    echo "service $SERVICE [stop]"
}
status() {
   PID=`pgrep platform | wc -l`
   if [ $PID -eq 0 ]; then
       echo "$SERVICE stop"
   else
       echo "running $SERVICE ..."
   fi
}

case $1 in
start)
       start
       ;;
stop)
       stop
       ;;
status)
       status
       ;;
restart)
       stop
       start
       ;;
*)
       echo "Usage: $SERVICE [start|stop|restart|status]"
       ;;
esac
exit 0
権限の修正及びシンボリックリンクの作成。
chmod 755 /opt/mattermost/bin/mattermost.sh
ln -s /opt/mattermost/bin/mattermost.sh /etc/init.d/mattermost
自動起動
chkconfig --add mattermost
chkconfig mattermost on
Mattermostの起動。

/etc/init.d/mattermost start

動作ログ

/opt/mattermost/logs

全文検索の部分一致対応

初期状態では「あいうえお」という発言について「うえ」がヒットしない状態。
Postsのインデックスをn-gramパースする
qiita.com

mysql> use mattermost
mysql> ALTER TABLE Posts DROP INDEX idx_posts_message_txt;
mysql> ALTER TABLE Posts ADD FULLTEXT INDEX idx_posts_message_txt (`Message`) WITH PARSER ngram COMMENT 'ngram index';


# 初期設定
http://ホスト名/ に接続して各種初期設定を行う

# 日本語化
[SETTING]-[GENERAL]
Localization
Default Server Language:日本語
Default Client Language:日本語

FWX120でPPTPパススルー設定

回線の乗り換えに伴い、CTUの配下でFWとして動作していたFWX120を
ルータとして直接PPPoEし始めたところ、それまでPPTPできていたVPN接続ができなくなった。


www.yondemite.com

詳細設定と情報→ポリシーフィルターの設定→IPv4 ポリシーフィルターの設定・状態表示
→グループとユーザー定義サービスの一覧・・・>「設定」ボタン
→サービスグループの設定・・・>Open Services・・・>「設定」ボタン→
メンバー (直接指定)で
TCP/ポート番号->(選択する) 1723(入力する)
GRE(選択する)
を選択・入力して「設定の確定」ボタン

先人の知恵に感謝しつつリブログしておく。

【AWS】ALB(Application Load Balancer)使ってみた

最初に
dev.classmethod.jp

にまとまっているのでこれを見たらよい。
もう付け加えることは何もないです。すみません。

※付け加えることができたら追記していきます。


とにかく言いたかったのは
qiita.com

> ALBが(現時点で)いけてないところ
> ・ホスト名でのルール分けには対応していない
これに尽きる。

実際にパスの部分に
adm.hogehoge.com/
api.hogehoge.com/
とか書いてみたけどダメ。

既存のサイトでサブドメインにより動作をadm.hogehoge.com/api.hogehoge.comなどに分離していた場合
ELBからの乗り換えは難しい。

最初からパスによるルール分け前提で設計しておけばOK

【AWS Certificate Manager】複数ドメインの証明書を同一ELBで処理できるか検証

前提知識

zuntan02.hateblo.jp

【疑問】

1台のEC2インスタンスに複数のバーチャルホストが動作している。
SSLACMで取得してELBにてSSLオフロードしている。
バーチャルホストそれぞれのルートドメインが異なるとき、ELBは1台で処理できるか?

【結果】

処理できた。
ACMで証明書のリクエストを行う際、ドメイン名のほかに「追加の名前」が記載できるが、こちらに
[hoge.aa.com][*.bbb.jp]などルートドメインの異なるドメインを追加できる。
この証明書を利用することで1台のELBで複数ドメインSSLオフロード処理が可能。

【具体的な作業イメージ】

[Certification Manager]-[証明書のリクエスト]
ドメイン名:hogehoge.com
[この証明書に別の名前を追加]

*.hogehoge.com
fugafuga.jp
*.fugafuga.jp

などを設定し、[確認とリクエスト]

→確認とリクエスト 画面で確認し、[確定とリクエスト]
→各ドメインの登録所有者に「Certificate approval for hogehoge.com」 E メールが送付されるので、メールのリンク(To approve this request, go to Amazon Certificate Approvals)を開いて[I Approve]で承認する。

【根拠】

https://aws.amazon.com/jp/certificate-manager/faqs/
Q: ACM により提供される証明書に複数のドメイン名を含めることはできますか?

はい。各証明書には少なくとも 1 つのドメイン名が含まれている必要がありますが、必要な場合はさらにドメイン名を追加できます。例えば、両方のドメイン名でサイトにアクセスできるならば、"www.example.com" の証明書に "www.example.net" というドメイン名を追加できます。証明書リクエストに含まれるドメイン名すべてを所有または制御している必要があります。

こういう証明書は「マルチドメイン証明書」というらしい。別名はSAN。知らんかった。
rms-digicert.ne.jp

【注意点1】

マルチドメイン証明書の場合、ブラウザでSSL証明書マークを右クリックした際に表示されるSSL証明書の発行先(CN)として表示されるのはACM証明書の本体名称なので、その辺を気にする人は気を付けましょう。
例)
ドメイン名:aaa.com
追加の名前:bbb.co.jp/*.ccc.com
とかでACMを登録してELBでSSLオフロードした場合、https://bbb.co.jp には正常に接続されるものの、証明書の「発行先」はaaa.comとして表示されます。

【注意点2】

こっちに書きましたけど、デフォルトではマルチドメイン10個までだそうです。
zuntan02.hateblo.jp
それ以上は上限緩和申請が必要。

Apple Developer更新時に不要端末を整理

また今年もApple Developerから

In 30 days, you will no longer have access to membership benefits. Renew your Apple Developer Program membership to keep your apps on the App Store and Mac App Store, submit new apps, utilize advanced app capabilities, and get personal technical support.

が届いた。毎回ぼんやりと更新していて手順化できていなかったので下記にメモを残しておきます。

1)Renew now: https://developer.apple.com/program/renew/index.action

のリンクからApple Developerサイトに[Sign in]する。

2)[Renew Membership]ボタンよりapple.comの支払いフローにて

 Apple Developer Program - Membership for one year
 の金額を確認の上カード情報を入力して更新を進めてください。
 
 例)
 バッグ小計 ¥11,800
 消費税 ¥944
 ご注文合計 ¥12,744

3)登録デバイスのうち不要デバイスを削除する。

なお、登録デバイスの変更はアカウント更新時のみ可能なため
このタイミングで不要デバイスを削除しておく必要があります。

■登録デバイスの台数制限について

https://developer.apple.com/support/account/jp/
>1つのメンバーシップで、1 年間にテスト用およびアドホック配布用に登録できる各デバイスは最大 100 台です。
>メンバーシップの新年度の最初に、チームエージェントまたはチームの管理者は
>「Certificates, Identifiers & Profiles (証明書、ID、プロファイル)」にサインインし、
>表示されているデバイスを削除して、使用できるデバイス数を 100 台に戻すことができます。

更新したのにリセットお知らせ(下のURLにあるようなの)が出ない場合は
www.sachostore.com

Membership DetailsのDevice Reset Dateを確認。
この日を超えたらリセットできるはず。

”Reset your device list before adding any new devices. [GetStarted]”
が表示されていれば、デバイスの整理が可能となる。

[GetStarted]
→Edit your list of devices.
→Select the devices you wish to carry over to this membership year or deselect the devices you want to remove.
 とあるので、削除したいものからチェックを外す。
※事前にdisableにしておいた場合、リストには表示されない(削除対象となる)

→Confirm your devices and reset.
Review and confirm the devices you have selected.
You have the following number of devices available for registration:

例)
Apple TV : 100
Apple Watch : 100
iPad : 90
iPhone : 60
iPod Touch : 90

※それぞれ100台まで登録できるようになったので無理やり減らさなくてもいいかも。

→Your list of registered devices has been updated.

gitlabを8.10.0にupdateしたらメールが飛ばなくなった。

【結論】
理由は不明だがキャッシュディレクトリの所有者がroot:rootになっており、メール送信ジョブを実行しているgitユーザに書き込み権がなかった。所有者をgit:gitにしてしまうことで解決を見た。
参照:https://gitlab.com/gitlab-org/gitlab-ce/issues/17072

chown -R git:git /opt/gitlab/embedded/service/gitlab-rails/tmp/cache/assets/sprockets

【結論に至るまでのログ調査】
cat /var/log/gitlab/gitlab-rails/production.log

Performed ActionMailer::DeliveryJob from Sidekiq(mailers)

→Sidekiqというのがメールを送っているもよう。

cat /var/log/gitlab/sidekiq/current

2016-07-26_11:07:05.38031 2016-07-26T11:07:05.380Z 16609 TID-2phxdk WARN: Errno::EACCES:
 Permission denied @ utime_internal - /opt/gitlab/embedded/service/gitlab-rails/tmp/cache/assets/sprockets/v3.0/B_/B_Ek-epoCB-(略).cache

→権限がない。

【問題が再現する環境について】
gitlab-ceを8.6.7あたりから yum update し続けてきた環境。初期のインストール自体は
https://about.gitlab.com/downloads/#centos6
に従ってそのまま。

※検証のためにまっさらの状態からインストールしたgitlab8.10.1はなぜかメール認証を省略する動作をしていた。これはこれで怪しいのだけど、忘れることにする。

さくらのクラウドの自動バックアップは対象サーバが2台/ゾーンまでしか選べない(2016/07/14現在)

自動バックアップ | さくらのクラウドニュース

2016/07/07から開始されたさくらのクラウドの自動バックアップ、今まで野良スクリプトでどうにかデイリーの1世代バックアップをとっていたので、やった!と思って早速試してみて気づいたのだけど、対象サーバが2台/ゾーンまでしか選べない。
f:id:zuntan02:20160714112125p:plain
これではだめだ……サーバ数多いのにこれは。さくらに問い合わせしたら案の定ベータ版ゆえの制限とのこと。早くバックアップジョブ数増やせるようにしてほしい。