WordPress 3

キーワード
この記事は、さくらの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 とでもして、コピペでファイル書き出し)

      $ 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
      
  4. 不要なサービス等を止める
    • gettyを止める
      Ubuntu 10.04 Beta 版で不要なサービスを停止してみる。

      $ 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
      
  5. 環境についてと2台目の仮想ドライブ
    • ルートのパスワードを設定など
      $ 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ではないけど、あれば便利
      
    • 2台目の仮想ドライブをマウント
      OSを再インストールしても仮想ディスクの中身までフォーマットされるわけじゃない。
      sdbはそのまま残ってるので注意。(失敗したと思って何回もやり直さないこと)

      # 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
      
  6. インストールプログラム
    • apache2 + php5 + mysql
      $ 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
      
  7. ドメインの設定
    • DNSレコードの変更
      ドメインをレジストラ(お名前.com、ムームードメイン等)で管理しているのであれば、DNSのAレコードを変更する。
    • DNS逆引きレコードを設定
      さくらのVPSコントロール画面で、ホスト名を変更する。
  8. rsync
    • 旧サーバから新サーバへのお引越しには rsyncを使う。
      新サーバに余計な設定を残さないよう、旧サーバ側をクライアントにしてアクセス。
      ※ 以下、c# はクライアント側ルート、s# はサーバ側ルート。

      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/
      
  9. apache2
    • apache2のテスト・・・デフォルト
      なにも設定せずに、/var/www/index.htmlが表示できたらOK。

      $ 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]
      
    • apache2のテスト・・・example.com
      $ 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
      
  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アドレスを制限するなどの対応をしてください。

      $ 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.
      
  11. phpMyAdmin
    • 定番のphpMyAdminのインストール
      危ないので、接続元を制限する。

      $ 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
      
  12. WordPress
    • WordPress 3.1 日本語版をインストール
      $ 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’ );
      
      
      
  13. postfix & dovecot
    • 順番が違うようだが、メール環境を整備
      $ 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
      
  14. 旧IPへのアクセスを新IPへ振り替える
    • リバースプロキシの設定
      $ 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
      
  15. ドメイン引越しまとめ
    • 旧サーバから新サーバへの引越し
      いろいろ面倒なのでルート権限で操作。以下 o# は旧サーバ、n# は新サーバ

      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
      
  16. 続き
    • 続き
      
      
  17. 続き
    • 続き
      
      
  18. 続き
    • 続き
      
      
wordpress

 
WordPress3にデフォルトでついてくる「Twenty One」テンプレートでカスタムメニューというやつが使えます。
あの例のグローバル・ナビゲーションというやつです。
メニュー階層があるとドロップダウンメニューにしてくれて憂い奴なんですが、どうやって階層にすればいいの、と迷ったので、画面を貼っときます。

カスタムリンクをドラッグ&ドロップするときに、少し右の方へずらせばいいんです。

 
ブラウザのタブが溜まりまくりなので、さっさと整理するためにここで一度吐き出しておきます。
といいつつ、書く前に閉じちゃったものがたくさんあって、残っているのは Twitter Tools という大物だけなんですけどね。

 
いままで、WordPress-mu 2.7 でサイトを構築していたので、WordPress 3.0.1 にしたら、テーマ関係がガラッと変わっていてびっくり。DB回りは大して変わってないのに。
というわけで、『ええー、こんなことも知らないの?』ということを中心にメモっていきます。

  • 子テーマ
    WP3には子テーマというやつができたらしい。いままで使いたいテーマをコピーして、それをシコシコ直していたんだけど、それはお行儀悪いから『親は誰それで、自分は誰それの子供です』と宣言して使うようになったらしい。なるほど、PHPerにも倫…(以下自主規制)
    詳しくは、子テーマを見てもらうことにして、簡単にいうと、/wp-content/themes の下に子テーマのディレクトリを作って、その中に style.css を入れればいいと。
    そんでもって、style.css の頭にこう書いておくと。

    /*
    Theme Name:  kid
    Template:        twentyten
    */
    @import url('../twentyten/style.css');
    

    これで、WP3デフォルトの twentytenの子供ですよということです。うんじゃ、テンプレート自体直したいときはどうすんのというのはまた別で。もちろんできます。

  • 子テーマの function.php
    これは、親テーマの前に読み込まれるようになっています。同じ名前があった場合、親テーマの関数が、こういうのをちゃんとやってくれてると二重定義になりません。

    
    

    子テーマに出ていたサンプルはまさにいつもいつも使うやつなので、助かりました。こうやってやればスマートなんだ。

    &lt;?php
    function favicon_link() {
        echo &#039;' . "\n";
    }
    add_action('wp_head', 'favicon_link');
    ?&gt;
    

    サンプルの favicon.ico はルートでしたが、通常は子テーマの中に置くので(マルチサイトなので)、ディレクトリを付けておきました。
    従来の ’template_url’ だと親テーマ(この場合、twentyten)のディレクトリをもってくるのでNGです。

重い腰を上げて、WordPress 3.0.1をインストールしました。インストール自体はいつにも増して簡単です。
ただ、2.9 by PostgreSQL はコアに手を入れすぎているので、アップデードはできそうになく、エクスポートを試みましたが一瞬でエラーになったので、やらなくてよかったなぁと。
2.7.1 by MySQL は、以前 2.9 にアップデートしようとして失敗した覚えがあるので、これも無理っぽいかなと。こちらはエクスポートできるので、地道に1つずつ移していけばいいかな。
 
ということで、普通に WordPress 3.0.1を新規インストールしたので、それをマルチドメイン対応にしていきたいと思います。

  1. WordPress3のダウンロード
    WordPress 日本語ローカルサイトからダウンロード。パーミッションとかをすごく気にしないといけないわけではないので、.zipで解凍したものをサーバに持っていってもいいと思います。もちろん、.tar.gz を wgetするのが正統派ですが。


  2. データベースの作成
    MySQLに新しいDBをクリエイトしておきます。

    $ mysql -u root -p
    mysql&gt; create database wordpress3;
    mysql&gt; grant all on wordpress3.* to 'wpadmin'@'localhost' identified by 'password';
    

  3. 設定ファイル(wp-config.php)
    ダウンロードしたファイルを解凍すると、ルート・ディレクトリに wp-config-sample.php があります。これをエディットして、以下のところを修正して、wp-config.php として保存します。(他のところはデフォルトのままでOK)

    define('DB_NAME', 'wordpress3');
    define('DB_USER', 'wpadmin');
    define('DB_PASSWORD', 'password');
    

    認証用ユニークキー(’AUTH_KEY’ ~ ‘NONCE_SALT’)は、WordPress.org の秘密鍵サービスを使って変えておきましょう。


  4. Apacheの設定
    WordPressをインストールするためには、/wp-admin/install.php をブラウザで開かないといけないので、WordPressのファイルを置いたサーバのディレクトリを DocumentRoot にする Apacheのエントリ(ドメイン)を作らないといけません。

    
      ServerName hoge.jp
      ServerAlias *.hoge.jp
      DocumentRoot /home/www/wordpress3/
    
    

    ここでは、hoge.jp でアクセスにいくと、/home/www/wordpress3/ を見に行くようにしました。Apacheの再起動は忘れずに。(restartでなくて reloadでいいと思うけど)


  5. WordPress3のインストール
    http://hoge.jp/wp-admin/install.php でOKです。


  6. マルチドメイン化
    WordPress3ではネットワークと呼んでる機能です。ざっと見たところ、WordPress-muと変わりありませんね。WordPress本体にマージされたということが重要なんでしょうね。
    さて、ネットワーク機能を使用するためには、wp-config.php に以下の記述を追加します。

    define ('WP_ALLOW_MULTISITE', true);
    

    そうすると、ダッシュボードの「ツール」に「ネットワーク」が追加されます。


  7. ネットワークの設定
    ・「サブドメイン」にするか「サブディレクトリ」にするか ・・・ うちはいつも「サブドメイン」です。(好き好きですが)
    ・「ネットワークのタイトル」 ・・・ あとで変えられます。
    ・「管理者のメールアドレス」 ・・・ あとで変えられます。
    これだけ設定して「インストール」を押すと、次のステップが表示されます。

    • wp-content ディレクトリに blogs.dir ディレクトリを作成。Apacheの書き込み権限を追加。
      # cd /home/www/wordpress3/wp-content
      # mkdir blogs.dir
      # chown www-data:www-data blogs.dir
      
    • wp-config.php に以下のコードを追加。
      define( 'MULTISITE', true );
      define( 'SUBDOMAIN_INSTALL', true );
      $base = '/';
      define( 'DOMAIN_CURRENT_SITE', 'hoge.jp' );
      define( 'PATH_CURRENT_SITE', '/' );
      define( 'SITE_ID_CURRENT_SITE', 1 );
      define( 'BLOG_ID_CURRENT_SITE', 1 );
      
    • /home/www/wordpress3/ ディレクトリに .htaccess を作成する。
      RewriteEngine On
      RewriteBase /
      RewriteRule ^index.php$ - [L]
      
      # uploaded files
      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]
      

    これでネットワーク関係はOKです。


  8. WordPress MU Domain Mapping のインストール
    ネットワークを入れただけだと、http://hoge.jp や http://ore.hoge.jp 、http://dare.hoge.jp など、複数のブログを管理することができるようになりますが、マルチドメインになったわけではありません。
    そこで、WordPress-muの文字通りのドン、donnchaさん作のプラグインを導入します。プラグインは新規追加で「WordPress MU Domain Mapping」を検索すれば出てきますから、いつもの手順通りにどうぞ。
    インストールしただけだと有効化しないので、以下2点を忘れずに。
    1.プラグインディレクトリの wordpress-mu-domain-mapping/sunrise.php を wp-content ディレクトリにコピー
    2.define( ‘SUNRISE’, ‘on’ ); を wp-config.php に追加


  9. サイトの追加
    時間切れなので、あとは注意点のみ。
    ・サイトを追加するときは、「サイトのアドレス」として、サブドメインを指定するが、独自ドメインにMappingしたあとは、使わなくなってしまうので、あまり名前付けに神経質にならなくてもよい。
    ・WordPress MU Domain Mapping の Domains で実際に割り当てる独自ドメインを指定する。
    ・Apacheの設定はもちろん必要。