サイト構築の手順を以下にメモ。
OS
今までは、Ubuntuを使っていたが、今回からは、なんとなくDebian。
https://www.debian.org/distrib/netinst からネットワークインストール用のメディアをダウンロード。母艦のMacでCDを作成して、サーバを起動。最初、64Bit版で起動しようとしたら、このサーバ、32ビットしか起動しないやんの。
ロケールは日本語でセットアップ。rootのパスワードを空で設定すると、rootアカウントがdisableとなり、最初のユーザーがsudoを使えるようになるので、そのように。
今までのパーティションは、bootパーティションが分かれてて、アップデートを繰り返していくうちにbootパーティションがあふれるということがあったので、今回からは、ひとつのパーティションで。
LVMを使うと、bootパーティションが分かれてしまうので、LVMじゃないやつで。
ネットワークは、ドライバがNon-Gnuのドライバを必要とするので、ぐぐってダウンロード。
パッケージは全部チェックを外して最小構成から。あとで、ちまちまインストールする。
起動したらすぐに、
# apt-get update
# apt-get upgrade
なんもアップデートされないのを確認。
lessとemacs
# apt-get less
# apt-get emacs
最小構成でセットアップすると、lessってインストールされないのね。僕は、emacsないと生きていけない派なので、なにはともあれインストール。
エディタが使えるようになったところで、.bash_aliasを追加。
Network
/etc/network/interfaces にIPアドレスの設定
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).# The loopback network interface
auto lo
iface lo inet loopback# The primary network interface
#allow-hotplug eth0
#iface eth0 inet dhcp# for external interface
auto eth0 # 外向きインターフェースの定義
iface eth0 inet static # 外向きインターフェースは固定IPaddress XXX.XXX.XXX.217 # 外向きIPアドレス
network XXX.XXX.XXX.216 # 外向きネットワークアドレス
netmask 255.255.255.248 # 外向きネットマスク
broadcast XXX.XXX.XXX.223 # 外向きブロードキャスト
gateway XXX.XXX.XXX.222 # 外向きデフォルトゲートウェイ# for internal interface
auto eth0:0 # 内向きインターフェースの定義
iface eth0:0 inet static # 内向きインターフェースは固定IPaddress 192.168.XXX.201 # 内向きIPアドレス
network 192.168.XXX.0 # 内向きネットワークアドレス
netmask 255.255.255.0 # 内向きネットマスク
broadcast 192.168.XXX.255 # 内向きブロードキャスト
gateway 192.168.XXX.254 # 内向きデフォルトゲートウェイ
eth0は外向き、eth0:0は内向き
/etc/sysctl.conf の最後に
net.ipv6.conf.all.disable_ipv6=1
を足して、IPv6を無効にする。
リブートするなり、ifdown eth0, ifup eth0でネットワークを再起動
IPアドレスをXXXで伏せ字にする意味あんのかな。
DNS
# apt-get install bind9
で、インストール。
外向きのDNSは外に出しちゃっているので、内向きだけの設定。serverとかprinterとかbackupサーバとかね。ルーターでもできそうなもんだけど、わざわざDNSで。
sshd
# apt-get install ssh
で、sshをインストール。
/etc/ssh/sshd_configで
PermitRootLogin no
にして、
/etc/init.d/ssh restart
これで、sshdが使えるようになった。ここから先は、サーバの前から離れて、机の上から、sshでログイン。離れる前に、DHCPで取得されているip addressをifconfigで調べておく。デフォルトロケールを日本語にしているが日本語ターミナルを入れていないので、ifconfigの文字がボケる。sshでログインすれば、日本語がちゃんと表示されて幸せ。
web server
毎度のapache2
# apt-get install apache2
でインストール
/etc/apache2/conf.d/security から
ServerTokens Prod
で、HTTPヘッダに添付する情報を最小に。
ServerSignature Off
でサーババージョンも内緒。
今まで、/etc/apache2/sites-available/defaultで全部設定してたのだが、今後ドメインを増やすことも考慮に入れて、バーチャルホストの設定をする。
参考文献 妄想コバンザメ Debian(Wheezy)でのApacheバーチャルホスト設定 サブドメインの作り方
# a2dissite 000-default
で、デフォルトを停止
# a2ensite ファイル名
でバーチャルホストをenableする。設定ファイルは、ServerNameでドメインをちゃんと設定すればそのドメインになる。ErrorLogとCustomLogを設定しておくとドメインごとにログが取れる。ディレクトリは勝手には作成されないので、作成して、chmodかchownしておく。
WordPress では、rewriteモジュールを使うので、
# a2enmod rewrite
でrewriteモジュールを有効化
# /etc/init.d/apache2 restart
で設定を反映
PHP
WordPressをインストールするので
# apt-get install php5
でphpのインストール。
ついでに、
# apt-get install libapache2-mod-php5 php5-musql php5-gd php5-curl
でwordpressで使うライブラリもインストール。
php5-curlはWordpressのGoogleAnalyticatorプラグインで必要。
mysql
WordPressをインストールするので
# apt-get install mysql-server
でmysqlのサーバーのインストール。
インストール中にmysqlサーバーのrootのパスワードを聞かれるのでちゃんと覚えておく
# mysql -u root -p
でmysqlのコンソールの起動。mysqlサーバーのrootのパスワードで接続
mysql> create database データベース名;
mysql> grant all on データベース名.* to ‘ユーザー名’@’localhost’ identified by ‘パスワード’;
でデータベースを作成し、ユーザーとパスワードをそのデータベースに割り当てる。これらの情報はWordpressのセットアップでwp-config.phpに書き込むやつ
WordPress
# wget http://ja.wordpress.org/wordpress-3.9-ja.tar.gz
でファイルを取得
# tar zxvf wordpress-3.9-ja.tar.gz
で、ファイルを展開。
# chown -R www-data:www-data *
でファイルの所有者をwww-data に変更。
あとは、webブラウザでアクセスしてセットアップを進める。
Git
今回の反省として、ファイルが更新されていたことに気が付かなかったこと。いや気がついたんだけど。。。
ということで、webのディレクトリに対してGitを導入してすぐに差分に気がつくようにしてみた
# apt-get install git
あとは、webのディレクトリをaddしてcommitしておく。
cifs
# apt-get install cifs-utils
バックアップ用にcifsのクライアントをインストール
# mkdir /mnt/backup
マウントポイントを作成
/etc/fstabに
//backup/Public/backup /mnt/backup cifs guest,iocharset=utf8 0 0
を記載
# mount -a
で、ちゃんとマウントされることを確認
/etc/cron.weekly/backupを作成して、バックアップのスクリプトを書く
WordPressの記事を戻す
DBのバックアップも取っているので、そいつを書き戻せば一発なんだけど、この際だから、ひとつひとつ確認しながらやろうってことで、インポート経由で戻してみた。
まず、メディアを戻す。Wordpressに投稿した画像関係は、wp-content/uploadsの中に展開されるのでそいつを書き戻す。インポートでメディアもxmlから一気に戻す方法もあって、それだと、WordpressのDBとも連携が取れて都合がいいんだけど、一方で、いらんサムネイルを大量に作成されてしまうので、それが嫌。ということで、ディレクトリに一気にコピー。
今までは、過去のMovableTypeのときの画像や、昔のWordpressにWindows Live Writerで投稿した画像などは、urlのリンクをいじるのが面倒だったので、別ディレクトリに置いていたけど、この際だから、全部、uploadsの中に入れるとする。といってもwp-content/uploads/MovableType.oldとかwp-content/uploads/WindowsLiveWriter.oldとかになってるんだけどね。
# chmod -R www-data:www-data *
# find . -type f -print | xargs chmod a-x
書き戻したファイルの所有者をwww-dataにする。また、FATから書き戻したjpgに実行権がついちゃうので、そいつをはずす。
今まで、このファイルの実行権を外すのに、chmod -r a-x * とかやって、ディレクトリの実行権まで外れちゃって頭を抱えていたのだが、findとxargsをつかったらうまくいくということを、tec-q noteのファイル又はディレクトリのみへのchmodコマンドという記事で教えてもらった。
WordPressに作成された、サムネイルは、ファイル名450×300.jpgみたいな感じになっているので、
# find . -regex .*[0-9][0-9][0-9]x[0-9][0-9][0-9] -print
なんてして、引っ掛けて確認した後、
# find . -regex .*[0-9][0-9][0-9]x[0-9][0-9][0-9] -print | xargs rm
って削除。xargs便利だぞ
次に、書き戻す記事のxmlの編集。画像のリンク先が変わってるからね。
適当なファイルに、
s/\http:\/\/www\.cagylogic\.com\/images\/old\.1\/\(*\)/http:\/\/www.cagylogic.com\/wordpress\/wp-content\/uploads\/MovableType\.old\/\1/g
みたいに書いておいて、
# sed -f ファイル名 インポートするxmlのファイル名.xml | less
みたいにして、ちゃんと置き換わってるのを確認
# sed -f ファイル名 インポートするxmlのファイル名.xml > 適当なファイル.xml
みたいにして、ファイルの更新、diffを取ってちゃんと出来てるか確認。
もちろんこの作業は一発ではうまくいかなくて、いろんな正規表現を何度もなんども繰り返して最終形にしていく。一発で全部変換する正規表現なんて考えてられない。。。
できあがったらインポート。もちろん、メディアファイルはインポートしないようにチェックを外しておく
以上で、大体のサーバーの復旧は終了。あとはWordpressの見てくれだけだな。実はこのWordpressのテーマがセキュリティホールになってたりして。。。
実は以上のことを、VMWare上で一度予行演習やってから、実機で実行してたんで、余計に時間がかかってたりして。。。