初心にかえってWordPressの設定

  1. 前提
    • AWS / EC2, Certificate Manager, Route 53
    • Amimoto
  2. さらに読む

PHP 5.6 を PHP 7.3 にバージョンアップ

1.環境
  AWS Linux、nginx、php-frm、WP

2.インスタンスをコピー
  イメージの作成でAMIを作ってそこから起動
  セキュリティグループに 22を追加して後で塞いでおく

3.PHP バージョンアップ

yum -y remove php-*
yum -y remove httpd-tools
yum clean all
yum install php73 php73-cli php73-common php73-fpm php73-imap php73-json php73-mbstring
yum install php73-mysqlnd php73-opcache php73-pdo php73-process php73-xml php73-gd
e /etc/php-fpm-7.3.conf
service php-fpm restart
service nginx restart

gdをインストールし忘れて後からインストールするとき、libwebpを1回削除してからいれること
(curlのバージョンも上げておく)

yum remove libwebp
yum –disablerepo=epel –enablerepo=amzn-updates install libwebp
yum install php73-gd
yum install curl

php-frm の設定ファイル(/etc/php-fpm.d/www.conf)の内容をコピー
listen.owner = nginx
listen.group = nginx
ここはエラー(WARNING: [pool www] ACL set, listen.owner = ‘nginx’ is ignored)になるので、
コメントアウトすること。

WordPressを管理画面で立ち上げるとエラーになるときは、ログを確認
tail /var/log/nginx/error.log

Slider Revolutionのバージョンが古く、立ち上がらなかったので、FTPでプラグインフォルダを削除して
公式サイトから最新版をダウンロードして入れ替えたら動いた

続く・・・かも

XserverにEC-CUBE2.13系をインストール編

サーバーパネル>SSH設定>ONにする

SSHでの接続ポートは【10022】
サーバーパネル>SSH設定>公開鍵認証用鍵ペアの生成
パスフレーズを設定
keyファイルができる

さらに読む

Amazon LinuxにSERPOSCOPEを入れる

1.Javaのバージョンを確認する

# java -version

java version "1.7.0_151"
OpenJDK Runtime Environment (amzn-2.6.11.0.74.amzn1-x86_64 u151-b00)
OpenJDK 64-Bit Server VM (build 24.151-b00, mixed mode)

2.yumを更新する(yumリポジトリの更新)

# sudo yum update -y

3.Java8をインストールする

# sudo yum install -y java-1.8.0-openjdk-devel.x86_64

4.Javaコマンドのバージョンを切り替える

# alternatives –config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
   2           /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java

Enter to keep the current selection[+], or type selection number: 2

5.Javaのバージョンを確認する

# java -version

openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

# javac -version

javac 1.8.0_151

6.AWS(EC2)のセキュリティグループ(インバウンド)で 7134ポートを開く

カスタム TCP ルール TCP 7134 0.0.0.0/0
カスタム TCP ルール TCP 7134 ::/0

7.SERPOSCOPEをダウンロードして動作させる

# mkdir /var/www/serposcope
# cd /var/www/serposcope
# wget https://serposcope.serphacker.com/download/2.9.0/serposcope-2.9.0.jar
# java -jar /var/www/serposcope/serposcope-2.9.0.jar

8.起動時に自動実行させる

# cd /etc/init.d/
# nano application-starter

#!/bin/sh
# chkconfig: 345 99 10
# description: start shell
case "$1" in
  start)
    sudo java -jar /var/www/serposcope/serposcope-2.9.0.jar
       ;;
  stop)
       echo "stop!"
       ;;
  *) break ;;
esac

# chmod +r application-starter
# chkconfig –add application-starter
# chkconfig application-starter on
# chkconfig –list

WordPressのサイトを丸ごと引っ越し

いろいろ訳あって、WordPressのサイトを丸ごと別のサーバーへ移すことになりました。
また訳あって、現在のサーバーには、http(80)はアクセスできますが、その他ポートがすべて塞がれています。
SSH(22)も FTP(21)も https(443)も全部です。

そういう環境で、まずは WordPressの環境を丸ごとバックアップしなければなりません。
WordPressには、Duplicatorという優秀なプラグインがあります。
Duplicator – WordPress Migration Plugin(作成者: Snap Creek)

これをまず入れます。
有効化したら、すべてそのままで実行します。
大抵1か所くらいは Noticeが出ると思いますが、そのまま使うわけではないので、詳細はパスです。
Duplicator > Create New > Next > Yes. Continue with the build process! > Build

もしファイルが大きくてエラーになる場合は、まず、Databaseのみバックアップします。
Duplicator > Create New > Files > Archive Only the Database >・・・> Build

次に画像ファイル以外を取ります。
Duplicator > Create New > Files > Enable File Filters > [wp-uploads] >・・・> Build

画像ファイルは、Website Explorer(WordPressのプラグインではない)でバックアップします。
Website Explorer > ツール > フォルダ・ダウンロード

すべてのバックアップが終わったら、Archiveファイルをダウンロードします。
この中に大切なものが全部入っています。

新しい方のサーバーに WordPressを入れておきます。
Amimotoを使っている場合は、wp-setup hogehoge.com でいいでしょう。
入れ物だけが必要です。(すでに入っている場合は消しておきましょう)

# rm /opt/local/hogehoge.com.json
# rm /opt/local/createdb-hogehoge.com.sql
# mysql -u root -p
drop database hogehoge_com;
# wp-setup hogehoge.com

ACM(Amazon Certificate Manager)で、*.hogehoge.com(別名で hogehoge.comも登録しておくこと)を取ってる場合は、ロードバランサーのリスナー(証明書)に追加しておきます。
また、テスト段階では、hostsに ロードバランサー(の片方)の URLを登録しておきましょう。(下の例では 1.1.1.55)
# vim C:\Windows\System32\drivers\etc\hosts
1.1.1.55 hogehoge.com
1.1.1.55 www.hogehoge.com

http://hogehoge.com にアクセスすると、WordPressインストールが始まるはずなので、EC2のインスタンスコードを入れて進めます。
WordPressシステムの更新やプラグイン、テーマなどを最新にします。
それから先ほど取ったバックアップファイルから手動で必要なファイルを FTPでコピーします。

/wp-content/themes/
/wp-content/plugins/ (標準でインストールされなかったものだけ)
/wp-content/uploads/

Website Explorerで画像のバックアップを取った場合は、PC環境で使われているファイルのみ保存されていますので、スマホは小さいサイズの画像を使うようなテンプレートの場合は、Regenerate Thumbnails などのプラグインでサムネイル画像の再構成をしておいた方がいいでしょう。

念のため、mysqldump でこの時点のバックアップを取っておきます。
# mysqldump -u root -p -h localhost hogehoge_com > hogehoge_com.sql;

さて、Archiveファイルの database.sql を書き換えます。
必ず修正するところは2か所だけ。(ここを書き換えないとリダイレクト地獄になります)

INSERT INTO `wp_options` VALUES (1,’siteurl’,’https://www.hogehoge.com’,’yes’);
INSERT INTO `wp_options` VALUES (2,’home’,’https://www.hogehoge.com’,’yes’);

あとは、httpを取るか、httpsに書き換えます。
http://hogehoge.com/wp-content/uploads/ ⇒ /wp-content/uploads/
http://hogehoge.com/ ⇒ https://hogehoge.com/

保存したファイルを FTPでアップして(とりあえず db1.sqlに保存)、mysqlで実行します。
# mysql -u root -p
use hogehoge_com;
source /var/www/vhosts/hogehoge.com/db1.sql;

で、新しいサーバーにまったく同じサイトが構築できました。
Route 53 の Alias Targetを書き換えて完了です。
テストで書き換えた hostsも戻すのを忘れずに。

STLS/STARTTLSの導入

Ubuntu(10.04)の postfix(2.7.0)に STLS/STARTTLSを導入する手順。
※ Ubuntuのバージョンは「cat /etc/lsb-release」で取得できる。
  postfixのバージョンは「/usr/sbin/postconf | grep mail_version」で取得。

  1. postfixのSASLは設定済み(とする)
    [code]$ sudo nano /etc/postfix/main.cf[/code]
    [code]
    # SMTP-Auth setting
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth-dovecot
    smtpd_sasl_authenticated_header = yes
    smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
    broken_sasl_auth_clients = yes
    [/code]
  2. dovecot側のSASLも同様(設定済みとする)
    [code]$ sudo nano /etc/dovecot/dovecot.conf[/code]
    [code]
    socket listen {
    client {
    path = /var/spool/postfix/private/auth-dovecot
    mode = 0660
    user = postfix
    group = postfix
    }
    }
    [/code]
  3. TLS の設定。認証局を作成してくれるスクリプトの保存先を demoCAから postfixCAへ変更。
    [code]
    $ cd /usr/lib/ssl/misc
    $ sudo nano CA.pl
    [/code]
    [code]
    #$CATOP="./demoCA";
    $CATOP="./postfixCA";
    [/code]
    [code]
    $ sudo nano /usr/lib/ssl/openssl.cnf
    [/code]
    [code]
    #dir = ./demoCA # Where everything is kept
    dir = ./postfixCA # Where everything is kept
    [/code]
  4. private keyを作る。(一部伏字)
    [code]$ sudo ./CA.pl -newca[/code]
    [code]
    CA certificate filename (or enter to create) # 空Enterキー

    Making CA certificate …
    Generating a 1024 bit RSA private key
    ……………………….++++++
    …………………….++++++
    writing new private key to ‘./postfixCA/private/cakey.pem’
    Enter PEM pass phrase: # パスワードを入れる
    Verifying – Enter PEM pass phrase: # もう1回パスワード
    —–
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter ‘.’, the field will be left blank.
    —–
    Country Name (2 letter code) [AU]:JP
    State or Province Name (full name) [Some-State]:Kanagawa-ken
    Locality Name (eg, city) []:Yokosuka-shi
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Satake Studio,LPC.
    Organizational Unit Name (eg, section) []:
    Common Name (eg, YOUR name) []:Mamoru Satake
    Email Address []:mam@x-xx.jp

    Please enter the following ‘extra’ attributes
    to be sent with your certificate request
    A challenge password []: # 入れなくてよい
    An optional company name []:
    Using configuration from /usr/lib/ssl/openssl.cnf
    Enter pass phrase for ./postfixCA/private/cakey.pem: # パスワードを入れる
    Check that the request matches the signature
    Signature ok
    Certificate Details:
    Serial Number:
    xx:ee:33:xx:6b:xx:59:xx
    Validity
    Not Before: Jul 11 21:43:17 2011 GMT
    Not After : Jul 10 21:43:17 2014 GMT
    Subject:
    countryName = JP
    stateOrProvinceName = Kanagawa-ken
    organizationName = Satake Studio,LPC.
    commonName = Mamoru Satake
    emailAddress = mam@x-xx.jp
    X509v3 extensions:
    X509v3 Subject Key Identifier:
    xx:20:xx:93:xx:86:xx:55:xx:9C:xx:6F:xx:2C:xx:C7:xx:E3:xx:15
    X509v3 Authority Key Identifier:
    keyid:xx:20:xx:93:xx:86:xx:55:xx:9C:xx:6F:xx:2C:xx:C7:xx:E3:xx:15
    DirName:/C=JP/ST=Kanagawa-ken/O=Satake Studio,LPC./CN=Mamoru Satake/emailAddress=mam@x-xx.jp
    serial:xx:EE:xx:AE:xx:F8:xx:F1

    X509v3 Basic Constraints:
    CA:TRUE
    Certificate is to be certified until Jul 10 21:43:17 2014 GMT (1095 days)

    Write out database with 1 new entries
    Data Base Updated
    [/code]

  5. もう1回 private keyを作る。(なんでだ?)
    [code]
    $ cd postfixCA/
    $ sudo openssl req -new -nodes -keyout postfix-key.pem -out postfix-req.pem -days 365
    [/code]
    [code]
    Generating a 1024 bit RSA private key
    ……….++++++
    …………..++++++
    writing new private key to ‘postfix-key.pem’
    —–
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter ‘.’, the field will be left blank.
    —–
    Country Name (2 letter code) [AU]:JP
    State or Province Name (full name) [Some-State]:Kanagawa-ken
    Locality Name (eg, city) []:Yokosuka-shi
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Satake Studio,LPC.
    Organizational Unit Name (eg, section) []:
    Common Name (eg, YOUR name) []:Mamoru Satake
    Email Address []:mam@x-xx.jp

    Please enter the following ‘extra’ attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    [/code]

  6. CSR に認証局の証明書で署名。
    [code]
    $ sudo sh -c "echo ’00’ > serial"
    $ cd /usr/lib/ssl/misc
    $ sudo rm postfixCA/index.txt* # 「TXT_DB error number 2」エラー対策
    $ sudo touch postfixCA/index.txt
    $ sudo openssl ca -out postfix-cert.pem -infiles postfixCA/postfix-req.pem
    [/code]
    [code]
    Using configuration from /usr/lib/ssl/openssl.cnf
    Enter pass phrase for ./postfixCA/private/cakey.pem: # パスワードを入れる
    Check that the request matches the signature
    Signature ok
    Certificate Details:
    Serial Number: 0 (0x0)
    Validity
    Not Before: Jul 12 00:02:50 2011 GMT
    Not After : Jul 11 00:02:50 2012 GMT
    Subject:
    countryName = JP
    stateOrProvinceName = Kanagawa-ken
    organizationName = Satake Studio,LPC.
    commonName = Mamoru Satake
    emailAddress = mam@x-xx.jp
    X509v3 extensions:
    X509v3 Basic Constraints:
    CA:FALSE
    Netscape Comment:
    OpenSSL Generated Certificate
    X509v3 Subject Key Identifier:
    xx:E3:xx:32:xx:D4:xx:EF:xx:2A:xx:35:xx:4C:xx:DC:xx:AD:xx:D5
    X509v3 Authority Key Identifier:
    keyid:xx:B2:xx:88:xx:4E:xx:B4:xx:73:xx:DF:xx:5A:xx:72:xx:55:xx:33

    Certificate is to be certified until Jul 11 00:02:50 2012 GMT (365 days)
    Sign the certificate? [y/n]:y

    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated
    [/code]

  7. ファイルの配置&postfixリスタート
    [code]
    $ sudo cp postfix-cert.pem /etc/ssl/certs/
    $ sudo cp postfixCA/postfix-key.pem /etc/ssl/private/
    $ sudo chmod 644 /etc/ssl/certs/postfix-cert.pem
    $ sudo chmod 400 /etc/ssl/private/postfix-key.pem
    $ sudo service postfix restart
    [/code]
    [code]
    * Stopping Postfix Mail Transport Agent postfix
    …done.
    * Starting Postfix Mail Transport Agent postfix
    …done.
    [/code]
  8. これでOK(のはず)

さくらのVPS引越し手順完全版

キーワード
この記事は、さくらのVPS、Ubuntu 10.04、引越し、Apache+PHP+MySQL+WordPress+EC-CUBEなどのキーワードで参照されます。

ここ1週間にあったこと
・2011/3/11 14:46 東北関東大震災が起きる。日時を忘れてしまわないように記録。犠牲になられた方に合掌。
・3/11発生当日は深夜1時まで停電。情報は手回し充電ラジオで。
・電気がついたところで飛び起き、まずサーバの確認。大丈夫だ。それから情報収集。大惨事。
・起動スクリプトに漏れがあったところなど、次に停電になったとき、アタフタしないようにチェック。
・こんなときに限ってUPSのバッテリー切れ(故障)でシャットダウンできなかったので、すかさず新しいUPSを注文。
・計画停電が始まる。1日のうち、6:20~22:00までを5つに区切ってブロックごとに停電させるシステム。
・うちは第3ブロックで初日(3/14)こそ停電しなかったものの、2日目以降は毎回停電。
・一日3時間、午前開始のときは6時間停電するのは、サーバを公開している体制としてはあり得ない。
・しかも4月以降も続くらしいので、ここ(横須賀)で自家発電なしにサーバを公開するのは限界。
・さくらのVPSはデータセンターが大阪(堂島)にあって、そのうち、北海道(石狩)と東京にもできるらしい。
・将来的には3か所借りておけば、負荷分散+耐障害性としてもいいだろうということで、さくらのVPSに決定。

やること
・いまのサーバ(Ubuntu 9.04 i386)をVPSサーバ(1.5GB、Ubuntu 10.04 amd64)へ移す。
・EC-CUBEを使っているお客様のみ、単独サーバ(1.0GB、Ubuntu 10.04 amd64)へ移す。
・この際だから、Apache+PHP を nginx+PHP(FastCGI)にしたかったんだけど、最後の方の挙動がおかしくて断念。
・とりあえず、枯れた構成でいくことにした。

以下、不親切な作業記録(あとで自分が見るためだけのものともいう)

  1. さくらのVPS申込み等
    • 『さくらのVPS』アフィリエイト
       時間に余裕があるときは、A8.netでアフィリエイトを申し込んでおく。本人可。ただし審査あり。
    • Java Runtime Environmentのインストール
       VPSコントロールパネルからのインストールに必要。先にやっておくこと。
    • さくらインターネット会員メニュー
       https://secure.sakura.ad.jp/menu/top/
       契約情報 > 契約サービスの確認 > さくらのVPS 1.5G > サーバ設定
    • VPSコントロールパネル
       https://secure.sakura.ad.jp/vpscontrol/main/
       OS再インストール > カスタムOSインストールへ > OS選択 > Ubuntu10.04 amd64
       ※ VPSコントロールパネルログインのパスワードとサーバ・ログインのパスワードは違う。
         VPSコントロールパネル上部にパスワード変更ボタンあり。
  2. Ubuntu10.04インストール&基本設定
    • Ubuntu10.04 amd64 インストール
       ここを見ればほぼOK。さくらのVPSにUbuntu 10.04をインストール
       ※1 ネットマスクの入力ミスに注意 ⇒ 255.255.254.0
       ※2 1.0GB以上は仮想ディスクが2つですが『Guided – use entire disk』にします。sdbは別マウント。
       終わったら、1分弱待ってから、VPSコントロールパネルから起動でOK
  3. sshログイン
    • 最初は TeraTerm等でプレーンパスワード・ログイン(ポート22番)
    • パスワードログインできなくしておく
       ※ サーバ側で公開鍵と秘密鍵を作って、秘密鍵(id_rsa)はクライアントのTeraTermのところに保存しておく。(cat .ssh/id_rsa とでもして、コピペでファイル書き出し)
      [code]
      $ cd # ログインルートへ。
      $ ssh-keygen # id_rsaがクライアント秘密鍵、id_rsa.pubはサーバへ置く
      $ mv .ssh/id_rsa.pub .ssh/authorized_keys

      $ sudo nano /etc/ssh/sshd_config
      Port 22xx #ポート番号変更
      PasswordAuthentication no #パスワードでログインしない

      $ sudo nano /etc/services
      ssh 22xx/tcp
      ssh 22xx/udp

      $ sudo service ssh restart
      [/code]

  4. 不要なサービス等を止める
    • gettyを止める
      Ubuntu 10.04 Beta 版で不要なサービスを停止してみる。
      [code]
      $ sudo nano /etc/default/console-setup
      ACTIVE_CONSOLES="/dev/tty[1-2]"

      $ sudo nano /etc/init/tty3.conf
      $ sudo nano /etc/init/tty4.conf
      $ sudo nano /etc/init/tty5.conf
      $ sudo nano /etc/init/tty6.conf
      # なかをすべてコメントアウトして実行されないようにする

      $ sudo aptitude install sysv-rc-conf
      $ sudo sysv-rc-conf dns-clean off
      $ sudo sysv-rc-conf pppd-dns off
      [/code]

  5. 環境についてと2台目の仮想ドライブ
    • ルートのパスワードを設定など
      [code]
      $ sudo su –
      [sudo] password for user: PASSWORD

      # passwd
      Enter new UNIX password: PASSWORD
      Retype new UNIX password: PASSWORD

      # aptitude install ntp
      # nano /etc/ntp.conf
      server ntp.jst.mfeed.ad.jp # 負荷分散のため ntpサーバは変える

      # service ntp restart
      # ntpq -p

      # aptitude install screen # MUSTではないけど、あれば便利
      [/code]

    • 2台目の仮想ドライブをマウント
      OSを再インストールしても仮想ディスクの中身までフォーマットされるわけじゃない。
      sdbはそのまま残ってるので注意。(失敗したと思って何回もやり直さないこと)
      [code]
      # blkid /dev/sdb1 # UUIDの確認
      # mkdir /www # マウント・ポイントの作成
      # nano /etc/fstab
      UUID=73d3fdb7-750d-44bb-aec9-d018092a3de1 /www ext3 defaults 0 0

      # mount -a # fstabによるマウントで確認
      # df -ah
      Filesystem Size Used Avail Use% Mounted on
      /dev/sda1 19G 836M 18G 5% /
      proc 0 0 0 – /proc
      none 0 0 0 – /sys
      none 0 0 0 – /sys/fs/fuse/connections
      none 0 0 0 – /sys/kernel/debug
      none 0 0 0 – /sys/kernel/security
      none 748M 172K 748M 1% /dev
      none 0 0 0 – /dev/pts
      none 752M 0 752M 0% /dev/shm
      none 752M 40K 752M 1% /var/run
      none 752M 0 752M 0% /var/lock
      none 752M 0 752M 0% /lib/init/rw
      none 19G 836M 18G 5% /var/lib/ureadahead/debugfs
      /dev/sdb1 30G 185M 28G 1% /www
      [/code]

  6. インストールプログラム
    • apache2 + php5 + mysql
      [code]
      $ sudo aptitude install apache2 php5 libapache2-mod-php5 mysql-server php-pear php5-{mysql,curl,dev,gd,imap,ldap,mcrypt,snmp,xmlrpc} # 必要最低限ではありません

      $ dpkg -l | grep apache
      ii apache2 Apache HTTP Server metapackage
      ii apache2-mpm-prefork Apache HTTP Server – traditional non-threade
      ii apache2-utils utility programs for webservers
      ii apache2.2-bin Apache HTTP Server common binary files
      ii apache2.2-common Apache HTTP Server common files
      ii libapache2-mod-php5 server-side, HTML-embedded scripting languag

      $ dpkg -l | grep php
      ii libapache2-mod-php5 server-side, HTML-embedded scripting languag
      ii php-pear PEAR – PHP Extension and Application Reposit
      ii php5 server-side, HTML-embedded scripting languag
      ii php5-cli command-line interpreter for the php5 script
      ii php5-common Common files for packages built from the php
      ii php5-curl CURL module for php5
      ii php5-dev Files for PHP5 module development
      ii php5-gd GD module for php5
      ii php5-imap IMAP module for php5
      ii php5-ldap LDAP module for php5
      ii php5-mcrypt MCrypt module for php5
      ii php5-mysql MySQL module for ph 5
      ii php5-snmp SNMP module for php5
      ii php5-xmlrpc XML-RPC module for php5

      $ sudo nano /etc/mysql/my.cnf
      [client]
      default-character-set=utf8 #追加
      [mysqld]
      default-character-set=utf8 #追加
      character-set-server=utf8 #追加

      $ sudo a2enmod rewrite #mod_rewriteを有効にする
      $ sudo service apache2 restart

      $ sudo aptitude install language-pack-ja # ロケールを ja_JP.UTF-8 にする
      $ sudo locale-gen ja_JP.UTF-8
      $ sudo update-locale LANG=ja_JP.UTF-8
      $ export LANG=ja_JP.UTF-8
      [/code]

  7. ドメインの設定
    • DNSレコードの変更
      ドメインをレジストラ(お名前.com、ムームードメイン等)で管理しているのであれば、DNSのAレコードを変更する。
    • DNS逆引きレコードを設定
      さくらのVPSコントロール画面で、ホスト名を変更する。
  8. rsync
    • 旧サーバから新サーバへのお引越しには rsyncを使う。
      新サーバに余計な設定を残さないよう、旧サーバ側をクライアントにしてアクセス。
      ※ 以下、c# はクライアント側ルート、s# はサーバ側ルート。
      [code]
      s# ssh-keygen
      s# mv .ssh/id_rsa.pub .ssh/authorized_keys
      s# cat .ssh/id_rsa # このファイルをクライアント側へ持っていく

      c# cd
      c# nano .ssh/id_rsa_sakura.1.5_root # このファイルに秘密鍵を入れる
      c# cat .ssh/config # 接続先ごとの設定ファイル(Hostを繰り返す)
      Host sakura.1.5
      HostName 49.xxx.xxx.xxx
      IdentityFile ~/.ssh/id_rsa_sakura.1.5_root
      User root
      Port 22xx

      c# chmod 600 .ssh/config # 他のユーザが書き込めると怒られる
      c# chmod 600 .ssh/id_rsa_sakura.1.5_root
      c# ssh sakura.1.5 # sshで繋がるかテスト(root@49.xxx.xxx.xxx)
      c# rsync -avz /home/www/example.com/ sakura.1.5:/www/example.com/
      [/code]

  9. apache2
    • apache2のテスト・・・デフォルト
      なにも設定せずに、/var/www/index.htmlが表示できたらOK。
      [code]
      $ wget http://example.com -O – # 標準出力に吐き出すオプション
      長さ: 177 [text/html]
      `STDOUT’ に保存中
      <html><body><h1>It works!</h1>
      <p>This is the default web page for this server.</p>
      <p>The web server software is running but no content has been added, yet.</p>
      </body></html>
      stdout へ出力完了 [177/177]
      [/code]
    • apache2のテスト・・・example.com
      [code]
      $ sudo nano /etc/apache2/site-available/my_site
      #NameVirtualHost *:80 # ドメインが1つしかないときはいらない
      <VirtualHost *:80>
      ServerName example.com
      ServerAlias *.example.com
      DocumentRoot /www/example.com/
      </VirtualHost>

      $ sudo a2ensite my_site
      Enabling site my_site.

      $ sudo service apache2 restart
      [/code]

  10. proftpd
    • proftpdのインストールと設定
      うまくいかないときは、/var/log/proftpd/proftpd.log にエラーがあるはず。
      ※ Ubuntu 10.04でインストールされる proftpdは 1.3.2c で、脆弱性(Telnet IAC stack overflow vulnerability (ZDI-CAN-925))があります。最新版(1.3.3d)をインストールするのがベストですが、自分でできない場合は Ubuntu用パッケージが出回るまで接続元IPアドレスを制限するなどの対応をしてください。
      [code]
      $ sudo aptitude install proftpd
      from inetd # 常駐しない設定

      $ export TZ="JST-9" # これがないとFTPでファイルを書くときの時間がずれる
      $ sudo nano /etc/environment
      export TZ="JST-9" # 起動時もセットしておく

      $ sudo nano /etc/proftpd/proftpd.conf
      AuthUserFile /etc/proftpd/ftpd.passwd
      AuthGroupFile /etc/proftpd/ftpd.group
      AuthOrder mod_auth_file.c mod_auth_unix.c
      <Limit LOGIN>
      Order allow, deny
      Allow from 127.0.0.1, IP-ADDRESS # 許可するIPアドレス
      Deny from all # 自サーバのグローバルIPはwordpressのプラグイン・インストールで必要
      </Limit LOGIN>
      DefaultRoot /www/USER_DIR USER
      DefaultRoot !ADMIN_USER
      <Directory /www/USER_DIR/*>
      AllowOverwrite on
      Umask 000
      <Limit WRITE >
      AllowAll
      </Limit>
      </Directory>

      $ sudo ftpasswd -passwd -file=/etc/proftpd/ftpd.passwd -name=USER -uid=USER_ID -gid=GROUP_ID -home=/www/USER_DIR -shell=/bin/bash

      $ sudo nano /etc/proftpd/ftpd.group
      USER:x:USER_GROUP:

      $ sudo chown -R USER_ID:GROUP_ID /www/USER_DIR/

      $ sudo service proftpd restart
      ProFTPd is started from inetd/xinetd.
      [/code]

  11. phpMyAdmin
    • 定番のphpMyAdminのインストール
      危ないので、接続元を制限する。
      [code]
      $ sudo aptitude install phpmyadmin
      $ sudo nano /etc/phpmyadmin/apache.conf
      <Directory /usr/share/phpmyadmin>
      Order deny,allow # この3行を追加する
      deny from All
      Allow from IP-ADDRESS # 許可するIPアドレス

      $ sudo service apache2 restart
      [/code]

  12. WordPress
    • WordPress 3.1 日本語版をインストール
      [code]
      $ wget http://ja.wordpress.org/wordpress-3.1-ja.tar.gz
      $ tar zxf wordpress-3.1-ja.tar.gz
      $ mysql -u root -pPASSWORD-ROOT
      mysql> create database DATABASE-NAME;
      mysql> create user USER-NAME@localhost identified by ‘PASSWORD-USER’;
      mysql> grant all on DATABASE-NAME.* to USER-NAME@localhost;
      mysql> quit

      $ cp -av /www/wordpress/wp-config-sample.php /www/wordpress/wp-config.php
      $ nano /www/wordpress/wp-config.php
      define(‘DB_NAME’, ‘DATABASE-NAME’);
      define(‘DB_USER’, ‘USER-NAME’);
      define(‘DB_PASSWORD’, ‘PASSWORD-USER’);
      define(‘AUTH_KEY’, …); # https://api.wordpress.org/secret-key/1.1/salt/
      define(‘SECURE_AUTH_KEY’, …); # このURLからダウンロードしたキーに差替え

      $ sudo mkdir /etc/apache2/sites-available/include
      $ sudo nano /etc/apache2/sites-available/include/wordpress # ログを取らない設定
      SetEnvIf Request_URI "\.(gif)|(jpg)|(jpeg)|(JPG)|(png)|(bmp)|(ico)|(css)|(swf)$" nolog
      SetEnvIf User-Agent "Gigabot" nolog
      SetEnvIf User-Agent "Googlebot" nolog
      SetEnvIf User-Agent "MJ12bot" nolog
      SetEnvIf User-Agent "msnbot" nolog
      SetEnvIf User-Agent "psbot" nolog
      SetEnvIf User-Agent "TurnitinBot" nolog
      SetEnvIf User-Agent "Yahoo! Slurp" nolog
      SetEnvIf User-Agent "Zealbot" nolog
      SetEnvIf User-Agent "Baiduspider" nolog
      SetEnvIf Request_URI "\.(ida|IDA|exe|printer|asp|dll)" nolog
      SetEnvIf Request_URI "^/_mem_bin/" worm nolog
      SetEnvIf Request_URI "^/_vti_bin/" worm nolog
      SetEnvIf Request_URI "^/c/" worm nolog
      SetEnvIf Request_URI "^/d/" worm nolog
      SetEnvIf Request_URI "^/msadc/" worm nolog
      SetEnvIf Request_URI "^/MSADC/" worm nolog
      SetEnvIf Request_URI "^/scripts/" worm nolog
      SetEnvIf Request_URI "^/default.ida" worm nolog
      SetEnvIf Request_URI "root\.exe" worm nolog
      SetEnvIf Request_URI "cmd\.exe" worm nolog
      SetEnvIf Request_URI "NULL\.IDA" worm nolog
      SetEnvIf Request_URI "^/cgi-bin/" nolog
      SetEnvIf Request_URI "robots\.txt" nolog
      SetEnvIf Request_Method "(GET)|(POST)|(PUT)|(DELETE)|(HEAD)" log
      SetEnvIf Request_Method "(OPTIONS)" nolog

      $ sudo nano /etc/apache2/sites-available/my_site
      <VirtualHost *:80>
      ServerName example.com
      ServerAlias *.example.com
      DocumentRoot /www/wordpress/
      Include ./sites-available/include/wordpress
      </VirtualHost>

      $ sudo a2dissite default # defaultを無効化
      $ sudo a2ensite my_site # これはすでにやっているけど
      $ sudo service apache2 restart

      $ sudo nano /www/wordpress/wp-config.php # マルチサイト化
      define (‘WP_ALLOW_MULTISITE’, true);

      $ sudo mkdir /www/wordpress/wp-content/blogs.dir
      $ sudo chown www-data:www-data /www/wordpress/wp-content/blogs.dir

      $ sudo nano /www/wordpress/wp-config.php
      define( ‘MULTISITE’, true );
      define( ‘SUBDOMAIN_INSTALL’, true );
      $base = ‘/’;
      define( ‘DOMAIN_CURRENT_SITE’, ‘satake7.jp’ );
      define( ‘PATH_CURRENT_SITE’, ‘/’ );
      define( ‘SITE_ID_CURRENT_SITE’, 1 );
      define( ‘BLOG_ID_CURRENT_SITE’, 1 );

      $ sudo nano /www/wordpress/wp-config.php
      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.php$ – [L]
      RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]
      RewriteCond %{REQUEST_FILENAME} -f [OR]
      RewriteCond %{REQUEST_FILENAME} -d
      RewriteRule ^ – [L]
      RewriteRule . index.php [L]

      # WordPress MU Domain Mapping プラグインをインストールする
      $ cp -av /www/wordpress/wp-content/pluginswordpress-mu-domain-mapping/sunrise.php /www/wordpress/wp-content/
      $ sudo nano /www/wordpress/wp-config.php
      define( ‘SUNRISE’, ‘on’ );

      [/code]

  13. postfix & dovecot
    • 順番が違うようだが、メール環境を整備
      [code]
      $ sudo aptitude install postfix # システムメールのドメインを聞かれるので要準備
      $ sudo aptitude install dovecot dovecot-common dovecot-imapd dovecot-pop3d
      $ sudo nano /etc/postfix/master.cf
      submission inet n – – – – smtpd # 587対応・コメントを外す
      docomo-smtp unix – – n – 1 smtp # docomoだけリレーするため
      -o smtp_destination_concurrency_limit=1
      -o smtp_destination_recipient_limit=1

      $ sudo nano /etc/postfix/main.cf # 標準と違うところのみ
      delay_warning_time = 12h
      # TLS parameters # 全部コメント。後ろでセット
      #smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
      #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
      #smtpd_use_tls=yes
      #smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
      #smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
      myhostname = mail.example.com
      myorigin = example.com
      mydestination = $myhostname, localhost.$myorigin, localhost, $myorigin
      mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 IP-ADDRESS/32 # 許可IPアドレス
      home_mailbox = Maildir/
      message_size_limit = 30485760
      unknown_local_recipient_reject_code = 550
      # SMTP-Auth setting
      smtpd_sasl_auth_enable = yes
      smtpd_sasl_type = dovecot
      smtpd_sasl_path = private/auth-dovecot
      smtpd_sasl_authenticated_header = yes
      smtpd_recipient_restrictions =
      permit_mynetworks,
      permit_sasl_authenticated,
      reject_unauth_destination
      broken_sasl_auth_clients = yes
      # Virtual Mailbox
      virtual_mailbox_domains = example.com.local
      virtual_mailbox_base = /home/vmailbox
      virtual_mailbox_maps = hash:/etc/postfix/vmailbox
      virtual_minimum_uid = 100
      virtual_uid_maps = static:VMAILBOX-USER-ID
      virtual_gid_maps = static:VMAILBOX-GROUP-ID
      virtual_alias_maps = hash:/etc/postfix/virtual
      transport_maps = hash:/etc/postfix/transport
      smtp_sasl_auth_enable = yes
      smtp_sasl_password_maps = hash:/etc/postfix/saslpass
      smtp_sasl_security_options =

      $ sudo nano /etc/postfix/saslpass # 転送に使うためのプロバイダ設定
      email.mail.plala.or.jp USER-PLALA:PASSWORD-PLALA

      $ sudo postmap /etc/postfix/saslpass
      $ sudo nano /etc/postfix/transport # 転送設定(docomoだけ)
      docomo.ne.jp docomo-smtp:[email.mail.plala.or.jp]:587 # docomoはゆっくり送る
      .docomo.ne.jp docomo-smtp:[email.mail.plala.or.jp]:587

      $ sudo postmap /etc/postfix/transport
      $ sudo nano /etc/postfix/virtual
      info@example.com info@example.com.local

      $ sudo postmap /etc/postfix/virtual
      $ sudo nano /etc/postfix/vmailbox
      info@example.com.local example.com.local/info/

      $ sudo postmap /etc/postfix/vmailbox
      $ sudo nano /etc/dovecot/passwd
      USER-NAME@smtp:{HMAC-MD5}3d272806034dd7c43f1643c4ab60731e3d1051ff9433afe14b056f3d34fe6ab1:1000:1000:/home/USER-NAME::userdb_mail=maildir:/home/USER-NAME/Maildir

      $ sudo nano /etc/dovecot/dovecot.conf # 標準と違うところだけ
      mail_location = maildir:~/Maildir
      mechanisms = plain login digest-md5 cram-md5 apop
      passdb passwd-file {
      args = /etc/dovecot/passwd
      }
      userdb passwd-file {
      args = /etc/dovecot/passwd
      }
      socket listen {
      client {
      path = /var/spool/postfix/private/auth-dovecot
      mode = 0660
      user = postfix
      group = postfix
      }
      }

      $ sudo service postfix restart
      $ sudo service dovecot restart

      $ sudo mkdir -p /etc/skel/Maildir/new # ユーザが作られたときにMaildirも作られるように
      $ sudo mkdir -p /etc/skel/Maildir/cur
      $ sudo mkdir -p /etc/skel/Maildir/tmp
      $ sudo chmod -R 700 /etc/skel/Maildir/

      $ sudo nano /etc/aliases # ドメイン共通のアドレス
      $ sudo newaliases

      $ sudo adduser vmailbox # postfix, dovecot用ユーザ
      $ sudo cp -av /home/vmailbox/ /www/ # メールを/www に置きたいので
      $ sudo nano /etc/passwd # サーバ移転をしている関係でユーザIDと/wwwを変更
      $ sudo nano /etc/group # 同上の理由でグループIDを変更
      $ sudo chown -R vmailbox:vmailbox /www/vmailbox/
      $ sudo nano /etc/dovecot/passwd # /home/vmailbox ⇒ /www/vmailbox
      $ sudo nano /etc/postfix/main.cf
      $ sudo service postfix restart
      $ sudo service dovecot restart

      $ sudo nano /etc/postfix/virtual # 移転先ドメインは、main.cf の mydestination から外しただけじゃダメ
      $ sudo nano /etc/postfix/vmailbox # virtual と vmailbox も見てるみたい
      $ sudo postmap /etc/postfix/virtual
      $ sudo postmap /etc/postfix/vmailbox

      $ sudo service postfix restart
      $ sudo service dovecot restart
      [/code]

  14. 旧IPへのアクセスを新IPへ振り替える
    • リバースプロキシの設定
      [code]
      $ sudo a2enmod proxy # すでに入っているはず
      $ sudo a2enmod proxy_http # httpsは対象外
      $ sudo nano /etc/hosts # これすごく重要!!!
      xx.xxx.xx.xxx example.com # 新しいサーバのIPアドレスを書く

      $ sudo nano /etc/apache2/sites-available/my_site
      <VirtualHost *:80>
      ServerName example.com
      ProxyPass / http://example.com/
      </VirtualHost>

      $ sudo service apache2 restart

      $ sudo nano /etc/postfix/transport # メールがあるときは忘れずに!!
      example.com :[xx.xxx.xx.xxx]:587 # 新しいサーバのIPアドレス

      $ sudo postmap /etc/postfix/transport
      $ sudo nano /etc/postfix/virtual # 転送するドメインをコメントにする
      $ sudo nano /etc/postfix/vmailbox # 同上
      $ sudo nano /etc/postfix/main.cf # ディスティネーションから外す
      $ sudo postmap /etc/postfix/virtual
      $ sudo postmap /etc/postfix/vmailbox
      $ sudo service postfix restart
      [/code]

  15. ドメイン引越しまとめ
    • 旧サーバから新サーバへの引越し
      いろいろ面倒なのでルート権限で操作。以下 o# は旧サーバ、n# は新サーバ
      [code]
      o# rsync -avz /home/www/example.com/ sakura.1.5:/www/example.com/ # ファイル全部コピー
      o# rsync -avz /home/vmailbox/example.com.local/ sakura.1.5:/www/vmailbox/example.com.local/ # メールコピー

      n# nano /etc/postfix/virtual # メール関係の設定
      n# nano /etc/postfix/vmailbox
      n# postmap /etc/postfix/virtual
      n# postmap /etc/postfix/vmailbox
      n# nano /etc/postfix/main.cf

      o# nano /etc/hosts # 新しいサーバのIPアドレス
      o# nano /etc/postfix/virtual # 移転させるものはコメントに
      o# nano /etc/postfix/vmailbox # 同上
      o# nano /etc/postfix/main.cf # 同上
      o# nano /etc/postfix/transport
      example.com :[xx.xxx.xx.xxx]:587 # 新しいサーバのIPアドレス

      o# postmap /etc/postfix/virtual
      o# postmap /etc/postfix/vmailbox
      o# postmap /etc/postfix/transport
      o# service postfix restart

      n# nano /etc/apache2/sites-available/my_site # apacheの設定
      <VirtualHost *:80>
      ServerName example.com
      ServerAlias *.example.com
      DocumentRoot /www/example.com/
      </VirtualHost>

      n# service apache2 restart # ここまでやってからDNSレコードを書き変える

      o# nano /etc/hosts
      xx.xxx.xx.xxx example.com # 新しいサーバのIPアドレスを書く

      o# nano /etc/apache2/sites-available/my_site
      <VirtualHost *:80>
      ServerName example.com
      ProxyPass / http://example.com/
      </VirtualHost>

      o# service apache2 restart

      o# nano /etc/postfix/transport
      [/code]

  16. 続き
    • 続き
      [code]
      [/code]
  17. 続き
    • 続き
      [code]
      [/code]
  18. 続き
    • 続き
      [code]
      [/code]

phpMyAdminのインストール

phpmyadmin

今更ながら、phpMyAdmin をインストールしてみました。
いままで敬遠していたのは、PHPダサいなぁと思っていたことと、phpMyAdminを入り口にしてセキュリティが甘くなったら嫌だなぁということだったんですが、WordPressにこれだけお世話になっておいて、PHPダサいはないだろうと。あと、セキュリティについては、ルーターの外から入れないようにしとけばいいんじゃね、ということで手順と若干の注意点です。

  1. phpMyAdmin本体のダウンロードは、ここから
    現時点の最新安定版は、phpMyAdmin-3.3.5.1-all-languages.tar.gz でした。
  2. 落っことしたら、/home/www/ 配下にインストールすることにします。(もちろん、どこでもいいのですが)
    [code]
    $ cd /home/www
    $ tar -xzvf phpMyAdmin-3.3.5.1-all-languages.tar.gz
    $ mv phpMyAdmin-3.3.5.1-all-languages phpMyAdmin
    $ s chown -R www-data:www-data phpMyAdmin
    [/code]
    tarで解凍するとバージョンも含んだ長い名前のディレクトリができちゃったので、リネームしました。
    あと、Apacheのユーザが実際の読み書きをするので、ディレクトリごとオナ―を変えちゃいました。
  3. phpMyAdminディレクトリの中に、config.sample.inc.php があるので、これを編集して、config.inc.php という名前で保存しておきます。変更点はこちら(↓)
    [code]
    $cfg[‘blowfish_secret’] = ‘xsafsdfsggdfgdvffdegrge’; // クッキー認証用の暗証文字列なので、適当な長さのものをセット。特殊記号とか大文字は混ぜない方がいいのかな。(未確認)
    $cfg[‘Lang’] = ‘ja-utf-8’; // 日本語指定
    $cfg[‘PmaNoRelation_DisableWarning’] = true; // リンクテーブルがありませんエラーを出さなくする指定
    [/code]
    あとは標準のままでいけます。
  4. 基本的にこれでOKなんですが、ブラウザからアクセスするために、Apacheの設定をやっておきます。
    [code]

    ServerName phpmyadmin.192.com
    DocumentRoot /home/www/phpMyAdmin

    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from 192.168.1

    [/code]
    192.comは自分ででっち上げたドメインです。(本物の192.comはどこか別のところを指すはず)
    お気軽にこのドメインを hostsファイルに登録して自サーバに振り向けておきます。(そうはいっても万が一、外から入ってこられたときのために内部LANだけ allowしておくと)

  5. あとやったことは、mcryptというライブラリが PHPに入っていなかったので、これを入れて Apacheを再起動しました。
    [code]
    # apt-get install php5-mcrypt
    # /etc/init.d/apache2 restart
    [/code]
  6. 『リンクテーブルを処理するための追加機能が無効になっています』エラーについて
    $cfg[‘PmaNoRelation_DisableWarning’] = true; の設定でエラーはでなくなりますが、拡張機能らしいのでちょっと使いたくなって、いろいろとやってみたのですが、最初の項目(pmadb)はOKになるんですが、それ以降はすべて NGで一向に進展がないため、あきらめました。忘れたことにやってみるかも。⇒ 参考サイト:phpMyAdminのインストール

こちら(↓)はインストールとは関係ありませんが、参考まで。
MySQL + phpMyAdmin によるバックアップ

HyperDB

hyperdb

 
なぜかあまり日本語での情報が少ない『HyperDB』ですが、負荷分散だったり、フェイル・オーバーだったりは、大切なことだと思うのです。
WordPress3.0にアップグレードするときには、HyperDBもセットで入れます!という決意表明です。

RT-200NEのバカぁ

rt-200ne

 
タイトルは、もちろん親しみをこめて書いてますよ。
うちのルータは、NTTの RT-200NEというやつなんですけど、これがなかなか曲者なんです。
やりたいことは『WANに 2IP用意して、どっちのIPで入ってきても、同じサーバが応対する』ということなんですけど、ボクがバカなのか、RT-200NEがバカなのか、わかりませんが、うまくいきません。

  • 2回線の接続はOK。でもそのうち1本を『優先』にしなくちゃいけない。
  • 優先IPに外部からアクセスするのはOK。ちゃんと応答を返してくれる。
  • 優先じゃないIPに外部からアクセスするのはNG。RT-200NEでエラーになる。こんな(↓)エラー。
    [code]
    RX-ERROR List Create Error : TCP 219.117.219.210 : 62853 > 192.168.1.200 : 80 (IP-PORT=ZOOT)
    [/code]
  • 静的ルーティング設定で、送信元(192.168.1.200)を優先じゃないIPに割り振ると、優先じゃないIPへ返答してくれるようになるので、OKなんだけど、今度は優先IPの方へ応答できなくなる。(当たり前)
  • 静的ルーティング設定を2つ登録しても、最初のエントリの方が優先されるっぽい。(そりゃ無理筋)
  • あきらめる。← いまここ。

 
言いたいことがうまく書けませんが、つまり、『外部からアクセスに来たIPに対して、その経路で応答を返す』ことを期待してるんですけど、静的ルーティングを書かないと、『どこからきたアクセスであろうと、常に』優先IPに対して応答を返しているようなんです。なんで、こんな仕様になってるのか。(ほんとか、ほんとか、俺が知らないだけじゃないのか?)
 
こんなこと、するやついないから、こうなってるのかなぁ。
 
参考:
RT-200NE 機能詳細ガイド
DNSラウンドロビン
DNS でラウンドロビンは当てにならない。