読者です 読者をやめる 読者になる 読者になる

bz0のにっき

ログ置き場

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

Postfix SPF

サーバからメール送信したかったので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で開発環境を作る

開発環境 VirtualBox Vagrant

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

環境

Windows7

バージョン

バージョンが新しいものを使うとエラーになり、対処が手間だったので
少し古いバージョンのものを利用しています。
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

アクシデント

キャッシュが消えない

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

Gitの運用について

開発環境 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 bash

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のメモ