tsukarooohi's diary

CakePHP,CentOS,AWSなど勉強中の技術的記録として利用中。

KUSANAGI for さくらへPostfix+Dovecotの導入方法

環境

Postfixの導入

# postfixのインストール(既にインストール済みなら必要ありません)
yum install postfix

# バージョン確認
postconf mail_version
mail_version = 2.10.1

# デフォルトMTAの切り替え
alternatives --config mta

1 プログラムがあり 'mta' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix # postfixが選択されているか確認

Postfixの設定をする

# ディレクトリ移動
cd /etc/postfix

# コピー作成
cp main.cf main.cf.org

# 編集
vim main.cf

myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP unknown

# ページ下部に追加
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtp_tls_security_level = may
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_destination
# postfixの設定確認
postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = example.com
myhostname = mail.example.com
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtp_tls_security_level = may
smtpd_banner = $myhostname ESMTP unknown
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
unknown_local_recipient_reject_code = 550

master.cfの編集

# コピー
cp master.cf master.cf.org

# 変更
vim master.cf

submission inet n       -       n       -       -       smtpd
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_unauth_destination

SMTP-Auth設定

yum install cyrus-sasl

# 起動
systemctl start saslauthd

# 自動起動設定
systemctl enable saslauthd

--

Dovecotの導入

# dovecotのインストール(既にインストール済みなら必要ありません)
yum install dovecot

# バージョン確認
dovecot --version
2.2.10

10-mail.confの設定

# ディレクトリ移動
cd /etc/dovecot/conf.d

# コピー作成
cp 10-mail.conf 10-mail.conf.org

# 設定変更
vim 10-mail.conf

- #mail_location =
+ mail_location = maildir:~/Maildir

10-auth.confの設定

# コピー作成
cp 10-auth.conf 10-auth.conf.org

# 設定変更
vim 10-auth.conf

- #disable_plaintext_auth = yes
+ disable_plaintext_auth = no

10-ssl.confの設定

# コピー作成
cp 10-ssl.conf 10-ssl.conf.org

# 設定変更
vim 10-ssl.conf

- ssl = required
+ ssl = no

Dovocotの起動+自動起動設定

# Dovecotの起動
systemctl start dovecot

# Dovecotの自動起動設定
systemctl enable dovecot

メールアカウント用システムユーザーの作成

# 自動でMaildir形式のメールボックスが作成されるように
mkdir -p /etc/skel/Maildir/{new,cur,tmp}

# パーミッション変更
chmod -R 700 /etc/skel/Maildir/

# ユーザー作成(メールアカウント用なのでSSH接続はさせない)
useradd -s /sbin/nologin info

# パスワード設定
passwd info
ユーザー info のパスワードを変更。
新しいパスワード: #パスワードを入力してエンター
新しいパスワードを再入力してください: #パスワードを入力してエンター
passwd: すべての認証トークンが正しく更新できました。

ポートの開放

# 現在利用可能なサービス(ポート)を確認します。
firewall-cmd --list-services

# 現在利用可能なポートを確認します。
firewall-cmd --list-ports

firewall-cmd --zone=public --add-service=smtp --permanent
firewall-cmd --zone=public --add-port=25/tcp --permanent
firewall-cmd --zone=public --add-port=587/tcp --permanent
firewall-cmd --zone=public --add-port=110/tcp --permanent
firewall-cmd --zone=public --add-port=143/tcp --permanent

レコードの設定

# `mail.example.com`にAレコードでIPアドレスを登録
mail.example.com. A 000.00.000.000 # サーバーのIPアドレス

# `example.com`にMXレコードで`10 mail.example.com.`を設定
example.com. MX 10 mail.example.com.

# `example.com`にTXTレコードで`"v=spf1 ip4:000.00.000.000 -all"`を設定
example.com. IN TXT "v=spf1 ip4:000.00.000.000 -all"

以上でメールの送受信の設定は完了です。 後はメールアカウントの追加などを行ってください。

KUSANAGI for さくらへのphpMyAdmin導入方法

環境
  • CentOS 7
  • KUSANAGI Version 8.0.1-2
  • nginx version: nginx/1.11.6
  • php7-fpm
用語解説
  • DL:ダウンロード

phpMyAdminインストールと設定

f:id:tsukarooohi:20161223151144p:plain

コマンド処理

今回はrootアカウントで行っていますが、それ以外の作業アカウントの場合はsudoコマンドを付与して行ってください。

# ディレクトリ移動
cd /usr/local/src

# 最新ソースをDL
wget https://files.phpmyadmin.net/phpMyAdmin/4.6.5.2/phpMyAdmin-4.6.5.2-all-languages.tar.gz

# `phpMyAdmin-4.6.5.2-all-languages.tar.gz`がDLされたか確認
ls
phpMyAdmin-4.6.5.2-all-languages.tar.gz

# 解凍処理
tar xvzf phpMyAdmin-4.6.5.2-all-languages.tar.gz

# 解凍されているか確認
ls -l
drwxr-xr-x 12 root root     4096 12月  6 07:36 phpMyAdmin-4.6.5.2-all-languages
-rw-r--r--  1 root root 10372131 12月  6 08:40 phpMyAdmin-4.6.5.2-all-languages.tar.gz

# 解凍したphpMyAdminを移動(移動先はどこでもいいと思いますがドキュメントルートより上の階層がいいと思います)
mv phpMyAdmin-4.6.5.2-all-languages /usr/share/phpMyAdmin

# 元ファイルの削除(しなくてもいいと思います)
rm -fr phpMyAdmin-4.6.5.2-all-languages.tar.gz

上記でphpMyAdminのDL+配置作業は完了です。

次はphpMyAdminをブラウザから利用するための設定に進みます。

ですがNginxのバーチャル設定の前にphp-fpmの設定を少し変更します

Nginxとphp-fpmとの接続に UNIX socket を指定できるようにします。

socket 通信を使うとTCPで接続するので127.0.0.1:9000でアクセスするより早いようです。

# ディレクトリ移動(移動しなくてもいいです)
cd /etc/php7-fpm.d

# ファイルの確認
ls -l
-rw-r--r-- 1 root root  4580 11月 11 10:17 php7-fpm.conf.kusanagi
-rw-r--r-- 1 root root 19021 11月 11 10:17 www.conf
-rw-r--r-- 1 root root 18513 11月 11 10:17 www.conf.default
-rw-r--r-- 1 root root 19021 11月 11 10:17 www.conf.kusanagi

# .kusanagi はKUSANAGI for さくらのオリジナル設定がされているようなので触りません
vim www.conf
- listen = 127.0.0.1:9000
+ listen = /var/run/php7-fpm/php-fpm.sock #こちらに変更

# `/var/run/php7-fpm/`を確認
ls /var/run/php7-fpm/
php7-fpm.pid
#まだ`php-fpm.sock`はありません

# ミドルウェアの再起動
kusanagi restart

# `/var/run/php7-fpm/`を確認
ls -l /var/run/php7-fpm/
srw-rw---- 1 httpd www  0 12月 22 20:41 php-fpm.sock # 出来てますね!
-rw-r--r-- 1 root  root 5 12月 22 20:41 php7-fpm.pid

php-fpm.sockのユーザー、グループが上記にと同じになっていない場合は同じになっている事を確認してください。

rootになっている場合もありますが、その場合は下記ページなどを参考に上記と同じユーザー、グループになるよう行ってください。

それではphpMyAdminを使えるように設定します

# `phpMyAdmin`用のnginx設定ファイル作成
vim /etc/nginx/conf.d/phpmyadmin.conf

phpmyadmin.confの中身

server {
    listen       80;
    server_name  phpmyadmin.example.com; # ドメイン部分はご自分の環境に合わせてください

    root   /usr/share/phpMyAdmin;
    index  index.php;

    allow 000.00.00.00; # アクセスを解除するIPを設定してください
    deny all; # 基本アクセスは不可にしておきます

    location / {
        try_files $uri $uri?$args $uri/ /index.php?$uri&$args /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass   unix:/var/run/php7-fpm/php-fpm.sock; # 先程作成した`.sock`ファイル
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #include         fastcgi_params;
    }
}
# 上記の設定が出来たらミドルウェアの再起動
kusanagi restart

phpMyAdminサブドメインの設定

Nginx側の設定は上記で終わってるので、後はDNSの設定でサーバーまで繋げるだけです。 私の場合AWSのRoute53を利用しているので下記のように設定しました。

f:id:tsukarooohi:20161223151240p:plain

DNSの設定が反映されたか確認

MacBook-Pro:~$ nslookup phpmyadmin.example.com

Non-authoritative answer:
Name:   phpmyadmin.example.com
Address: 123.45.678.910 # ご自分のサーバーのIP

ブラウザでアクセス

phpMyAdminの画面が表示されれば完了になります。

フック処理を使った自動デプロイ

環境+設定内容は過去の記事を読んで頂ければと思います。
取り敢えずの目標
ローカルからmasterブランチにpushすればサーバの本番環境(www.example.com)
その他ブランチにpushすればサーバのテスト環境(debug.example.com)
それぞれにデプロイされる。


【作業ツリー】
サーバー
www.example.com
debug.example.com

ローカル
www.example.com

フック設定

vim ~/repos/www.example.com/httpdocs.git/hooks/post-update
# push されたブランチ名が BRANCH に入る
BRANCH=$(git rev-parse --symbolic --abbrev-ref $1)
#BRANCH="test"
if [ "${BRANCH}"="master" ]; then
	(
	cd /var/www/vhosts/www.example.com/httpdocs
	git --git-dir=.git fetch
	git --git-dir=.git reset --hard origin/master
	git --git-dir=.git clean -fdx
	)
else
	(
	cd ~/tmp
	git --git-dir=.git fetch
	git --git-dir=.git reset --hard origin/${BRANCH}
	git --git-dir=.git clean -fdx
	rsync -avr --delete --stats ./ /var/www/vhosts/debug.example.com/httpdocs
	)
fi

以上で完了。

社内での共同開発環境について

【作業者】
プログラマー数人
デザイナー数人

【やりたい事】
自動デプロイ

【作業ツリー】
サーバー
www.example.com
debug.example.com

ローカル
www.example.com


【案1】
サーバー側もGit管理

[リモートリポジトリ]
example.com.git

ローカル -> push -> サーバー
masterブランチ -> push -> www.example.com
その他ブランチ -> push -> debug.example.com

リモートリポジトリのフック処理で振り分ける。

[問題点]
案件によってはプログラマー、デザイナー間での作業引き継ぎの為のpushもある為push毎にデプロイはよろしくない。


【案2】
社内共有サーバーにリモートリポジトリ

ブランチ単位で作業開始 -> サーバーに反映させて動作確認に至るまでcommit,pushを各作業者が行う。
サーバーでの動作確認を行えるタイミングでのpushのみ社内共有サーバーのリモートリポジトリのフック処理(rsync)でデプロイ

[問題点]
複数案件が同時進行する為、結果複数ブランチがデプロイ対象になる。
先にデプロイしたブランチの確認時には別ブランチがデプロイされてる可能性が高い。


だめだ。
解決策が見つからない為まとめただけで終わろう。

自動デプロイまでの道のり(Gitolite編)

前々回書いた記事
自動デプロイまでの道のり(VirtualBox+Vagrant編)

前回書いた記事
自動デプロイまでの道のり(Apache環境用意編)

やっと本目的に近づいて来ました。
今回はGitoliteのインストール。

仮想環境にGitolite用のユーザーを作成する

vagrant ssh
sudo useradd git


一旦ローカルで作業

cd ~/.ssh
ssh-keygen -t rsa -f git-admin
scp -P 2222 ~/.ssh/git-admin.pub vagrant@127.0.0.1:~/


仮想環境へログイン

vagrant ssh
sudo mv ~/git-admin.pub /home/git/git-admin.pub
sudo chown git:git /home/git/git-admin.pub
sudo yum install perl-Time-HiRes


gitユーザーで作業

sudo su - git
mkdir ~/tmp;cd ~/tmp

他の方の記事を参考にさせて頂きながらの作業なのでGit自体のインストールがまだでしたw
取り敢えずyumで簡単インストール(gitユーザーではないです)

sudo yum install git
git --version
git version 1.7.1


では作業の続き

sudo su - git
git clone git://github.com/sitaramc/gitolite
mkdir -p ~/bin
gitolite/install -to ~/bin
~/bin/gitolite setup -pk ~/git-admin.pub

不要なファイルを削除

rm -rf ~/tmp
rm -rf ~/git-admin.pub

authorized_keysの確認

ls -l ~/.ssh

参照させてもらってた記事には

gitolite start
gitolite end

とかあるけど何やらだめなのでそのままログアウト


ローカルで

vim ~/.ssh/config
Host 127.0.0.1
    HostName 127.0.0.1
    User git
    Port 2222
    IdentityFile ~/.ssh/git-admin

これで好きな場所に管理用gitolite-adminをクローン

git clone 127.0.0.1:gitolite-admin


・・・ふとここで自分のやりたい事は自動デプロイでGitだけで事足りそうなのでこれ以上の検証はおあずけw

タイトルがステマっぽくなり申し訳ないです。