bz0のにっき

quick and dirty prototype

Postfixでメール送信の為の設定

サーバからメール送信したかったのでpostfixの設定からやってみました。

ゴールとしては、下記です。

  • SPFが「PASS」になる
  • DKIMが「pass」になる

環境

Postfix設定

下記設定を参考にしました。

メールサーバー構築(Postfix+Dovecot) - CentOSで自宅サーバー構築
[Postfix]SPFレコードを設定して携帯へメールを送信できるようにする | 本日も乙
Postfixをインストールしてメール送信してみる | 本日も乙

mx.kzz.bzをmyhostnameに設定する理由は、下記です。

1つのサーバで複数のサーバー(ウェブサーバー、メールサーバーなど)を運用する場合には、メールサーバー用に独自のホスト名を割り当てるようにします。

Postfix のインストールと設定 〜 CentOS6 | EasyRamble

myhostnameにメールサーバ用に独自のホスト名を割り当てた場合は
下記追記を忘れずに行います。

でないと、SPF認証ができずに「none」になってしまいます。

# sudo vim /etc/postfix/main.cf
sender_canonical_classes = envelope_sender
sender_canonical_maps = hash:/etc/postfix/sender_canonical
# sudo vim /etc/postfix/sender_canonical 
@mx.kzz.bz @kzz.bz
 
# sudo postmap /etc/postfix/sender_canonical

# sudo service postfix restart

DNS設定

DNSの解説 for ビギナー

最終的に下記のようにしました。

ホスト名 TYPE TTL VALUE
kzz.bz A 60 133.242.184.146
mx.kzz.bz A 60 133.242.184.146
kzz.bz MX 60 mx.kzz.bz /10
kzz.bz TXT 60 v=spf1 +ip4:133.242.184.146 -all
_adsp._domainkey.kzz.bz TXT 60 dkim=unknown
kzz_20170108._domainkey.kzz.bz TXT 60 v=DKIM1; k=rsa; p=[公開鍵]

・メールサーバ用のドメイン(mx.kzz.bz)をIPと紐づける

ホスト名 TYPE TTL VALUE
mx.kzz.bz A 60 133.242.184.146


・@kzz.bzのメールを送受信するメールサーバのホストは「mx.example.com」だと
 メールクライアント(メール送信時)やメールサーバ(メール受信時)に教えてあげるための設定

ホスト名 TYPE TTL VALUE
kzz.bz MX 60 mx.kzz.bz /10


・kzz.bzが送り主のメールは、「133.242.184.146」から送られてきたものでなければ拒否してよいという設定

ホスト名 TYPE TTL VALUE
kzz.bz TXT 60 v=spf1 +ip4:133.242.184.146 -all


SPFが「pass」になりました。

Received-SPF: pass (mx.kzz.bz: domain of root@kzz.bz designates 133.242.184.146 as permitted sender)

逆引き設定

「pass」にはなりましたが、逆引き設定してないので、対応します。
送信したメールが受信側でsoftfail となる場合の対処メモ - The Second Longest Day in My Life...

サーバは、さくらVPSの為コンソール画面から逆引き設定を変更します。
DNS逆引きレコードを変更する – さくらのサポート情報

DKIM設定

DKIMとは何か、利点については下記がわかりやすかったです。
FAQ | dkim.jp


設定は、下記を参考に行いました。
Postfix DKIM 認証 設定メモ(CentOS6.5+OpenDKIM) | あぱーブログ

設定前のメールヘッダ:

domainkeys=neutral (no sig); dkim=neutral (no sig); header.i=@kzz.bz

設定後のメールヘッダ:

domainkeys=neutral (no sig); dkim=pass (ok); header.i=@kzz.bz

Virtualbox+Vagrantで開発環境を作る

ローカルの開発環境にする為に利用します。

環境

Windows7

バージョン

現在

※2017/10/1現在

Windows10にアップグレードしてから、OS固有のエラーが出るようになった為
バージョンアップしてみました。やってみた感じ、下記バージョンであれば動きました。

VirtualBox 5.1.28
Vagrant 1.9.5

参考:
現在のVagrantとVirtualBoxのバージョン相性(Windows) - Anything Ota

旧版

バージョンが新しいものを使うとエラーになり、対処が手間だったので
少し古いバージョンのものを利用しています。
VirtualBoxをVagrantで動かすエラーになる件 - Qiita

Download_Old_Builds_5_0 – Oracle VM VirtualBox

※5.0.30でも試してみましたが大丈夫でした。

Vagrant Versions | HashiCorp Releases

windows環境では、下記を選択します。
vagrant_1.8.4.msi


参考:Windows10 64bitにVagrant/VirtualBoxを導入する方法(2016年8月版まとめ) - MOERUZE Blog

A list of base boxes for Vagrant - Vagrantbox.es

設定

sshログイン

vagrant sshすることで、sshでログインするときに
必要なIPやユーザID・パスワードを確認できます。

vagrant ssh

Vagrantで共有フォルダを設定してみる - Qiita

ディレクトリの共有

vagrantの共有フォルダ設定 - Qiita


config.vm.synced_folder "../html", "/var/www/html/"

ローカルディレクト

・vagrantfile C:\centos6
・htmlディレクトリ C:\html

スタートアップ設定

windowsの起動後、コマンドプロンプトを立ち上げて
vagrant up」するのも手間です。

自動で、「vagrant up」してくれるbatファイルを作成して
スタートアップ設定を行います。

cd "[vagrantfileのディレクトリを指定]"
vagrant up

スタートアップ設定(windows10の場合):


アクシデント

キャッシュが消えない

jsやcssなどが、修正してもそれが反映されないということがありました。
httpd.confを修正すると直りました。
静的ファイルがキャッシュされる(ブラウザキャッシュじゃない場合) - Qiita

rootになれない

http://highshow.hateblo.jp/entry/2016/04/29/220040

$ su -
Password:
su: incorrect password

エラーになる。

# sudo su

vagrant addで失敗する

実行したコマンドは下記でした。

vagrant box add centos6.7 https://github.com/CommanderK5/packer-centos-template/releases/download/0.6.7/vagrant-centos-6.7.box
C:\xxx>vagrant box add centos6.7 https://github.com/CommanderK5/pack
er-centos-template/releases/download/0.6.7/vagrant-centos-6.7.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos6.7' (v0) for provider:
    box: Downloading: https://github.com/CommanderK5/packer-centos-template/rele
ases/download/0.6.7/vagrant-centos-6.7.box
    box:
An error occurred while downloading the remote file. The error
message, if any, is reproduced below. Please fix this error and try
again.

windowsの場合の対処
http://qiita.com/okamoto0/items/a140f3705366486fbefc

Microsoft Visual C++ 2010 再頒布可能パッケージ
が足りないらしい。2010に拘る必要ないと思うが

下記をインストールして解決しました。
https://www.microsoft.com/ja-jp/download/details.aspx?id=14632

PHP等でのリクエストが重い

APIのリクエスト等が異常に重い場合は下記を試してみる。
Vagrantのネットワーク処理が異常に遅い場合の解決策 - Qiita

windows10で嵌ったこ

vagrant up」するとエラーになる。
windows10特有のエラーのようです。下記リンクを参考に対処します。(暫定対処)

上記暫定対処だと、「vagrant up」するときに配布されているexe実行が必要になるようです。
根本対処したい場合は、バージョンアップした方がいいです。

C:\vagrant\test>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set network interfaces...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["hostonlyif", "create"]

Stderr: 0%...
Progress state: E_FAIL
VBoxManage.exe: error: Failed to create the host-only adapter
VBoxManage.exe: error: Querying NetCfgInstanceId failed (0x00000002)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component HostNetworkInterfaceWrap, interface IHostNetworkInterface
VBoxManage.exe: error: Context: "enum RTEXITCODE __cdecl handleCreate(struct HandlerArg *)" at line 71 of file VBoxManageHostonly.cpp

Windows8.1 から Windows10 にUpgrade して発生したvagrantのエラー - Qiita

Gitの運用について

Gitの運用に関して

やったことのメモなので、まとまりなくてごちゃごちゃしてます。。。

ブランチごとの役割

通常の開発
  • featureブランチ→(マージ)developブランチ→(マージ)releaseブランチ→(マージ)master
  • メリット
    • 開発者のローカルで、featureブランチ作成して開発を進めることができる
    • releaseブランチで、開発とリリースの時差によるズレに対応できる(コンフリクトを解消する)
不具合が起きたら
  • hot-fixブランチ→(マージ)master
  • メリット
    • すぐにmasterにマージできるので素早く対処できる

Gitを最大限に活用できる「Git flow」で、効率よく開発を進めよう! | Git編:一歩踏み出すフロントエンド入門

ローカルでの開発

source-tree

ローカルでは、コマンド使わずGUIで。
git-flowの運用もボタン押すだけでブランチ生成してマージしてと
ほぼ自動でやってくれるので楽です。

sourcetree で Git Flow を使ってみる - 新しい日記

[エラー解決]hotfixのブランチを切ろうとしたときに出たエラー
fatal: Working tree contains unstaged changes. Aborting.

コミットし忘れが残っていると上記のようなエラーが出ます。


.gitignore

gitignoreの運用
.gitignoreについて - Qiita


gitignoreの自動生成
https://www.gitignore.io/

netbeans(PHP用のIDEとして利用してます):
netbeansメタデータリポジトリ対象から除外する
private ディレクトリには、システムにインストールされている IDE 専用の情報が含まれているため
NetBeansのbuild.xmlとnbprojectはSCMに突っ込んでヨロシ - marsのメモ

giboで自動生成:
http://qiita.com/tmknom/items/c4bcebe17d25381fa45d

.git

.gitディレクトリをサーバで公開されないようにします。
.htaccessをルートディレクトリに生成します。

RewriteEngine on
RewriteRule "(^|/)(CVS|\.svn|\.git)/" - [F]

リモートリポジトリ

BitBucket

リモートリポジトリに利用してます。

プライベートリポジトリが作れて容量無制限で5ユーザまでなら
無料で利用できる点がよいです。

※2GB以上はプッシュできないですが。

Bitbucket - プロフェッショナルチーム用 Git ソリューション | Atlassian
GithubとBitbucketのストレージ周りのお話 - Qiita

webhook

webhookを利用して、プッシュされたらサーバへ自動プルされるようにしています。

Bitbucket や GitHub で自動デプロイするためのサンプル PHP スクリプトを拾って改造してみた - アルケミスタの住人

git clone

webhookのリクエストを受け取ったphpファイルが、git pull実行するシェルファイルを実行するという
仕組みになるので、phpを動かす「apache」ユーザで「git clone」します。

※他のユーザで実行してしまうと、ファイル権限がなくて更新できない事がある為

# su -s /bin/bash apache
# git clone git@bitbucket.org:xxxx.git
git cloneでエラー
fatal: could not create work tree dir 'xxxxxxxx'.: ????????

ディレクトリの書き込み権限がなかったことが原因でした。
参考:http://d.hatena.ne.jp/oggata/20120601/1338509023

linuxでのファイルバックアップ関連

Linuxでのファイルバックアップ関連についてメモしておく

環境

CentOS 6.5

圧縮

1.どの圧縮方法を選択すべきか

gzip: 一般的な圧縮率。
bzip2: より強力な圧縮。時間がかかる。バックアップとしてはこれが一般的とのこと。
xz: LZMA2 アルゴリズムを使用する。7z の親戚。 Linuxカーネルソースとか巨大なソース等の圧縮に採用されている。最近のディストリならたいてい標準で入っている。圧縮率は bzip2 よりも優位だがより CPU、メモリリソースを消費する。
正直時間がかかる割に bzip2 よりサイズがでかくなるパターンがたまにあるので注意。
最近流行にのって単発の圧縮ならこれをよく使ってる。
zip: あんまり使わないなあ。。。

圧縮展開系のコマンドのまとめ - Qiita

2.コマンド実行

bzip2で圧縮

一般的にはバックアップはbzip2を使うようなので、これでやってみる。

tar cvjf [output.tar.bz2] [input]

例)
tar cvjf /var/www/html/output.tar.bz2 /var/www/input

  • 「/var/www/html/output.tar.bz2」のところは圧縮ファイル名(パス)を指定
  • 「/var/www/input」は圧縮したいディレクトリ・ファイルのパスを指定

bzip2がない場合は、インストールする。
yumで入れられるので簡単。

CentOSでbzip2が解凍できないエラー · 1000g

〇日前に作成したファイルを削除

サーバの容量にも限りがある為、〇日分だけ残してそれ以前のファイルを
削除したい場合は、下記のようなコマンドが使えます。

find /var/www/xxx/ -mtime 7 -exec rm -f {} \;

圧縮と7日以前に作られたファイルを削除するbashです。

#!/bin/sh
DATESTR=`date +%Y%m%d`

#圧縮
tar cvjf /var/www/test/${DATESTR}.tar.bz2 /var/www/html/a1

#7日以前のものは削除
find /var/www/test/ -mtime 7 -exec rm -f {} \;

参考)リモートサーバへのコマンド実行

rsyncコマンドで他サーバへバックアップした後に、バックアップ先の
ファイルを圧縮したい場合にリモートサーバへのコマンド実行を行うことがありそうなのでメモ。

sshコマンド

ssh コマンド | コマンドの使い方(Linux) | hydroculのメモ

大きいファイルを圧縮していると、レスポンスがかえってこずに
処理途中で接続が切れてしまう事があるようなので、下記を設定してなるべく切れないようにする。

クライアント側(接続元)の ~/.ssh/config に以下を記述する。

Host *
ServerAliveInterval 60

ssh コマンド | コマンドの使い方(Linux) | hydroculのメモ

moshコマンド

接続が切れても自動で繋ぎなおしてくれるmoshというコマンドもあるよう。
mosh コマンド | コマンドの使い方(Linux) | hydroculのメモ