og:typeを restaurantにしてデバッガーでエラーがでるときの対処

お客様のサイトのFacebook対策をしているときに遭遇した件。

レストランのFacebookページなので、素直にこうしたわけですが、Facebookデバッガーで確認するとエラーがでます。
「meta property=”og:type” content=”restaurant”」

食べログなども出るので、まだ一般的に対処していないのかも。

修正する必要があるエラー

Object Missing a Required Value: Object at URL ‘http://tabelog.com/kanagawa/A1404/A140402/14007431/’ of type ‘place’ is invalid because a required property ‘place:location’ of type ‘geo_point’ was not provided.

このエラーは、お店の緯度・経度を設定するとでなくなります。
緯度・経度はこちらで調べられます。

「meta property=”og:latitude” content=”35.320265″」
「meta property=”og:longitude” content=”139.550999″」

Facebookロゴは使用禁止!

https://www.facebook.com/brandpermissions/logos.php
ここによると、Facebookのロゴは使ってはいけないそうです。
いいね!とか、Fだけのものを使ってねということ。

でもそれだとわかりづらいので、こちらを参考に自分で作ってみました。

Tahoma, Bold, シャープ、横106%、縦100%、→あ←100%、←AV→10 です。

似てるでしょうか?

imap_open()のエラー(phpバージョン違い)

詳しく原因まで追究できていないんだけど、誰かの役に立てばと思いアップ。


PHP 5.2.6 で動作していた imap_open() が、PHP 5.3.2 になると動かなくなった。

#!/usr/bin/php -q
#PHP 5.2.6 のサンプルコード
<?php
$mailserver = "example.com";
$mbox = imap_open("{".$mailserver.":110/pop3/notls}INBOX", "user@".$mailserver, "password", "OP_READONLY");
var_dump($mbox);
if ($mbox) {
  imap_close($mbox);
}
?>

PHP 5.2.6では、このコードはエラーなく動く。

PHP 5.3.2では、以下のエラーになる。

PHP Warning:  imap_open() expects parameter 4 to be long, string given in ...

文字列(”OP_READONLY”)が整数(OP_READONLY)に変わったようだ。
ここを修正してもエラーになる。

PHP Warning:  imap_open(): Couldn't open stream {mail.example.com:110/pop3/notls}INBOX in ...
bool(false)
PHP Notice:  Unknown: Read-only POP3 access not available (errflg=2) in Unknown on line 0

POP3のリードオンリーはダメみたいだ。

しかたがないので、pop3は使わず、imapにしたらうまくいった。

#!/usr/bin/php -q
#PHP 5.3.2 のサンプルコード
<?php
$mailserver = "example.com";
$mbox = imap_open("{".$mailserver.":143/imap/notls}INBOX", "user@".$mailserver, "password", OP_READONLY);
var_dump($mbox);
if ($mbox) {
  imap_close($mbox);
}
?>

pop3もimapもサポートしてるメールサーバじゃないとダメだけど、一応解決ということで。

個人輸入代行比較


重さ約1kg(2LB)・大きさ小さめ・価格$50程度の商品を個人輸入する場合の手数料・送料比較

ALICE HOUSE ¥2,782($34.78) 手数料$10+配送料$24.78
mailtail ¥2,784($34.80) 転送手数料$10+配送料+燃料費
goopping ¥4,170($52.13) 基本料金1,280円+送料

※ 換算レートは 1$=80円で計算。
※ いろいろあるけど、あとのところはパッとしない。

Windows7 Home PremiumでXpモードを使う

やりたいことはタイトル通りです。

お客様用に ThinkPad Edge E420を買ったのはいいのですが、このOSが「Windows 7 Home Premium 64」一択で他の選択肢はナシときた。
Office付きを買ったし、別にいいかと思っていたのですが、お客様がどうしても使いたい「文籍(MonJack)」というフリーのソフトが Delphiの32ビット環境で作られており、これがどうやっても動かない。
じゃあ、XPモードでとなるわけですが、Home Premium には XPモードがないよーというわけです。
手順はこんな感じです。

  1. Windows XP Mode のダウンロード
    エディションは「Professional 64ビット版」とかを選んでおくこと。Homeだと選択肢がでない。
    2番目にインストールの「Virtual PC Download」をクリック。
    インストールは「更新プログラムのインストール」みたいになるので、一瞬アレっとなるけど、終わってスタートメニューを見るとちゃんと入っている。
  2. 仮想マシンの作成
    ここでちゃんとしたXPが必要になります。(うちには使わなくなったXPがごろごろしているので問題ありませんが)
    メモリー容量はあとで変えられます。
    CDドライブにXPのインストールCDをセットして、作成した仮想マシーンをダブルクリックし、通常通りXPをインストール。
    一番の問題はパーテションを切るとき、ケチって 10GBとかにしないこと。SP3までアップグレードしたらだいたい10GBがいっぱいになります。20~30GBくらいは切っておきましょう。
  3. 統合機能
    仮想マシーンの「ツール」メニューから「統合機能を有効にする」をクリックする。
    あとは、仮想マシーンの「設定」メニューでドライブ割り当てなどを適宜行う。
  4. パーテションを拡大したいとき
    ケチって10GBとかにした場合のパーテション拡大方法は、仮想ハードディスクのサイズを拡大する に書いてある通り。
    注意点としては、VHD Resizerで拡大するとき、Fixed(容量固定)を選択すること。Dynamic(容量可変)だとうまくいかなかった。
    また、できあがった「.VHDファイル」を仮想マシーンの「設定」メニューで 2台目のハードディスクとしてマウントすること。
    そしてパーテション拡張が終わったら、1台目のハードディスクとしてマウントすればOK。

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は設定済み(とする)
    $ sudo nano /etc/postfix/main.cf
    # 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
    
  2. dovecot側のSASLも同様(設定済みとする)
    $ sudo nano /etc/dovecot/dovecot.conf
      socket listen {
        client {
          path = /var/spool/postfix/private/auth-dovecot
          mode = 0660
          user = postfix
          group = postfix
        }
      }
    
  3. TLS の設定。認証局を作成してくれるスクリプトの保存先を demoCAから postfixCAへ変更。
    $ cd /usr/lib/ssl/misc
    $ sudo nano CA.pl
    
    #$CATOP="./demoCA";
    $CATOP="./postfixCA";
    
    $ sudo nano /usr/lib/ssl/openssl.cnf
    
    #dir            = ./demoCA              # Where everything is kept
    dir             = ./postfixCA           # Where everything is kept
    
  4. private keyを作る。(一部伏字)
    $ sudo ./CA.pl -newca
    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
    
  5. もう1回 private keyを作る。(なんでだ?)
    $ cd postfixCA/
    $ sudo openssl req -new -nodes -keyout postfix-key.pem -out postfix-req.pem -days 365
    
    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 []:
    
  6. CSR に認証局の証明書で署名。
    $ 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
    
    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
    
  7. ファイルの配置&postfixリスタート
    $ 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
    
     * Stopping Postfix Mail Transport Agent postfix
       ...done.
     * Starting Postfix Mail Transport Agent postfix
       ...done.
    
  8. これでOK(のはず)

IE7互換モード

IE8とIE7互換モードで1ピクセルくらいずれることがよくあって、いちいち IEハック入れるの、面倒臭いなぁと思っている貴方!
もうそんな人はいないと思いますが、もしいたら騙されたと思ってコレを headerに入れてみてください。

<meta http-equiv="X-UA-Compatible" content="IE=8" />



IE8から互換モードの切替えボタンが消えるので、IE7互換モード対応はしなくてよくなります。
やったねパパ。 もちろん、IE7、IE6、・・・はガン無視ということで。
“IE=Edge” という手もありますが、IE9がメジャーになったときズレズレだったらヤだしね。
 
※ ちゃんとした知識が欲しい人は、こちら ⇒ WordPressテーマ “iNove” とIEの互換表示モード をどうぞ。

さくらの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 とでもして、コピペでファイル書き出し)

      $ 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 1
      `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. 続き
    • 続き
      
      

EC-CUBE:本番用決済モジュール

eccubelogo

ここで、EC-CUBEに決済モジュールを組み込むときの手順を書いたんだけど、当然のことながら、テスト環境でのお話。
さて、テストはうまくいったから、さぁ本番というとき、決済会社からは以下のような書類が送られてきます。

  1. README.txt
  2. 本番環境登録情報
  3. モジュール用クライアント証明書(*.pem)
  4. 本番環境接続用モジュールのプロパティファイル(サンプル)

README.txtにはどういうことが書いてあるかというと、「本番用は試験環境と同じだからそれを使ってね」、「プロパティファイルだけは差替えてね」、「本番環境登録情報は各電文の共通ヘッダに設定すべき情報ですよ」、「説明書を見てね」、「わからなかったら問い合わせてね」ということです。
 

  1. まず、プロパティファイルを差替えます。
    試験環境と決済URL等が違うだけなので、試験環境用の決済URLを本番用に書き換えて、クライアント証明書ファイルパス(*.pem)も書き換えておきます。(ファイルももちろんコピーしておきます)
  2. このまま、クレジット決済をやってみるとエラーになります。
    「P002:認証情報が不正です。」というエラーです。なぜでしょうか。本番環境登録情報というやつをどこにも登録していないからですね。
  3. オーナーズストアで決済モジュールの設定を行います。
    kessai

    みんな、この辺のこと、スパッと気づくんでしょうかね。頭いいんですね。

ちゃんと共通ヘッダに情報がセットされたら、P002はでなくなると思います。

Memo:タブの吐き出し・・・9/10

cleanuptheworld

 
最近は記録するのが面倒臭くなって、「また、いるときググればいいでしょ。ぼんやりと記憶に残ってるし」と、さっさとタブを閉じてしまっていたので、反省!
ちゃんと記録しておかねば、イパネバの娘。
(結構書いたので、今日のところはこのくらいで勘弁しといたろ!)

  1. PHPで末尾の削除
    $s = "aaa,bb,cccc,";
    $s = rtrim($s, ",");
    
  2. jQuery Slider plugin (Safari style)
    
    $(function() {
      $("#id名").slider({ ... });
    });
    
    

    読み込み時に動かしておくことが重要!($(function() なしで書いても何もおこらないよ)

  3. EC-CUBEのフッターが fotter になっていたところを footer に修正してくれた。(2.5から適用)
  4. ブラウザの右端にペロッと表示されて、スクロールしても動かない画像
    position:fixed;
    right:0px;
    bottom:20px;
    

    bottomを指定すると下の方に張り付いて Good!

  5. uupaa.js
    latest logのひとが開発している jQueryに代わるライブラリ。機能はよさげなんだけど「導入実績なし」というところがちょっと。
  6. 使えるHTMLエンティティ文字 – raquo,laquo
    FireBugでエラーになる。もちろん使えるけど。
  7. isset()とempty()のまとめ
    ここを見るといいよ。
  8. mb_ereg_replace
    正規表現による置換のマルチバイト文字列版。それより、いまだに str_replaceのマルチバイト版が標準に入っていない方が不思議。
  9. メールループ(循環メール)はどうやって防がれているか?
    postfixが「Delivered-To:にあるメッセージを”mail forwarding loop”としてbounce」するということ。自分が送ったメールには、Delivered-To:を付けておいて、「Deliverd-To」フィールドの内容と送付先が同じ場合は NGにするということのようです。ここ参照。
  10. Smartyの中で isset()を使うとき
    <!--{ if isset($tpl_previous_page|smarty:nodefaults) }-->
    

    nodefaultsをかけておかないと、エラーになります。その理由は、こちらで。

« 前ページへ次ページへ »