NetBeans + VirtualBox で LAMP開発環境
VirtualBoxにLAMP構成の仮想サーバを作成して、PHPソースの編集はNetBeansで行う開発環境の設定メモ。MAMPやXAMPPを使うのに比べて、仮想サーバにLAMPをインストールする手間がありますが、メリットも色々あります。
●ミドルウェアのバージョンや設定を本番サーバと同一にできる
●チームで仮想マシンのイメージを共有すれば、設定の手間がなくなり、開発環境のばらつきもなくなる
●新しいミドルウェアを気軽に試せる
本番サーバと設定を同じにできるため、本番リリースしたら動かない(^^;) といった事態を防げることが大きなメリットではないでしょうか。
========== LAMP仮想サーバの設定 ==========
まずは VirtualBoxにLAMP構成の仮想サーバを作成します。
○仮想サーバの設定(ご自身の環境に書換えてください)
ホスト名:lamp-sv
IPアドレス:192.168.56.201
Apacheドキュメントルート:/var/www/nbtest
・ホスト名でアクセスできるように、ホストOSの hostsファイルを設定しておきます
sudo vi /etc/hosts
---(下記を追加)---------------------------
192.168.56.201 lamp-sv
------------------------------
・NetBeansからの接続用ユーザを作成します
adduser netbeans
passwd netbeans
------------------------------
New password:<パスワード>
Retype new password: <パスワード>
------------------------------
・ドキュメントルートの設定
mkdir /var/www/nbtest
※ファイルが何も無いとNetBeansでエラーになるため、なにかしらファイルを作成しておきます
touch /var/www/nbtest/index.php
chown -R netbeans /var/www/nbtest
・Apacheの設定
---(設定サンプル)---------------------------
<VirtualHost *:80>
ServerName lanp-sv
DocumentRoot "/var/www/nbtest"
<Directory "/var/www/nbtest">
Options MultiViews
AllowOverride None
</Directory>
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)|(js)$" nolog
ErrorLog logs/error_log
CustomLog logs/access_log combined env=!nolog
</VirtualHost>
------------------------------
========== NetBeansの設定 ==========
[ファイル]→[新規プロジェクト]
「PHP」→「リモート・サーバからのPHPアプリケーション」を選択し、「次へ」をクリックします
環境にあわせて下記を設定し、「次へ」をクリックします
[管理]をクリックします

接続名「lamp-sv」(任意)、接続型「SFTP」を選択して、[OK]をクリックします

LAMPサーバに作成した netbeansユーザの接続設定と、初期ディレクトリ(ドキュメントルートの一つ上)を入力し、[接続をテスト]をクリックします

接続に問題がなければ、以下が表示されますので、[OK]→[OK]と進みます

下記を入力し、[次へ]をクリックします

リモートのファイル(/var/www/nbtest 以下)をソースフォルダにダウンロードしますので、「全てを選択」にチェックを入れ、[終了]をクリックします ※この時「nbtest」ディレクトリにファイルが無いとエラーになります

「nbtest」プロジェクトが登録されました

========== 動作確認 ==========
空の index.php を編集してみます

プログラムを入力しセーブすると、すぐさま VirtualBox上のLAMPサーバにアップロードされます

NetBeansの編集が LAMPサーバに反映されていることがわかります

以上です。
●ミドルウェアのバージョンや設定を本番サーバと同一にできる
●チームで仮想マシンのイメージを共有すれば、設定の手間がなくなり、開発環境のばらつきもなくなる
●新しいミドルウェアを気軽に試せる
本番サーバと設定を同じにできるため、本番リリースしたら動かない(^^;) といった事態を防げることが大きなメリットではないでしょうか。
========== LAMP仮想サーバの設定 ==========
まずは VirtualBoxにLAMP構成の仮想サーバを作成します。
○仮想サーバの設定(ご自身の環境に書換えてください)
ホスト名:lamp-sv
IPアドレス:192.168.56.201
Apacheドキュメントルート:/var/www/nbtest
・ホスト名でアクセスできるように、ホストOSの hostsファイルを設定しておきます
sudo vi /etc/hosts
---(下記を追加)---------------------------
192.168.56.201 lamp-sv
------------------------------
・NetBeansからの接続用ユーザを作成します
adduser netbeans
passwd netbeans
------------------------------
New password:<パスワード>
Retype new password: <パスワード>
------------------------------
・ドキュメントルートの設定
mkdir /var/www/nbtest
※ファイルが何も無いとNetBeansでエラーになるため、なにかしらファイルを作成しておきます
touch /var/www/nbtest/index.php
chown -R netbeans /var/www/nbtest
・Apacheの設定
---(設定サンプル)---------------------------
ServerName lanp-sv
DocumentRoot "/var/www/nbtest"
<Directory "/var/www/nbtest">
Options MultiViews
AllowOverride None
</Directory>
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)|(js)$" nolog
ErrorLog logs/error_log
CustomLog logs/access_log combined env=!nolog
</VirtualHost>
------------------------------
========== NetBeansの設定 ==========
[ファイル]→[新規プロジェクト]
「PHP」→「リモート・サーバからのPHPアプリケーション」を選択し、「次へ」をクリックします

環境にあわせて下記を設定し、「次へ」をクリックします

[管理]をクリックします

接続名「lamp-sv」(任意)、接続型「SFTP」を選択して、[OK]をクリックします

LAMPサーバに作成した netbeansユーザの接続設定と、初期ディレクトリ(ドキュメントルートの一つ上)を入力し、[接続をテスト]をクリックします

接続に問題がなければ、以下が表示されますので、[OK]→[OK]と進みます

下記を入力し、[次へ]をクリックします

リモートのファイル(/var/www/nbtest 以下)をソースフォルダにダウンロードしますので、「全てを選択」にチェックを入れ、[終了]をクリックします ※この時「nbtest」ディレクトリにファイルが無いとエラーになります

「nbtest」プロジェクトが登録されました

========== 動作確認 ==========
空の index.php を編集してみます

プログラムを入力しセーブすると、すぐさま VirtualBox上のLAMPサーバにアップロードされます

NetBeansの編集が LAMPサーバに反映されていることがわかります

以上です。
26
PHP PaaS「cloudControl」の使い方メモ
PHPの実行環境「cloudControl」(いわゆるPaaSです)の使い方メモ、無料で使えます。

cloudControlを使うには gitコマンドが必要なので、あらかじめインストールしておきます。
========== 基本設定 ==========
・まずは cloudControl のアカウントを作成します([TRY IT FREE]をクリック)
・管理ツールのインストール
sudo easy_install pip
sudo pip install cctrl
・公開鍵の登録(作成した cloudControl のアカウントを入力します)
cctrluser key.add
----------
Email : <メールアドレス>
Password: <パスワード>
----------
========== アプリの公開 ==========
※今回アプリ名は「sample130704」としました。ご自身のアプリ名に書換えてください。
・アプリ名を登録(PHP)
※名前は cloudControlで一意かつ英数小文字のみ利用可能(数字を先頭にはできない)
cctrlapp sample130704 create php
・ローカルにアプリ用の gitリポジトリを作成
mkdir sample20130704
cd sample130704/
git init
vi index.php
---(下記を追記)---------------------------
$mesg = 'This is a sample App.';
echo $mesg;
------------------------------
git add index.php
git commit -m "サンプルコードの作成"
・アプリ用のリポジトリを cloudControlへpush
cctrlapp sample130704 push
(下記コマンドでリポジトリをクローンすることもできます)
git clone ssh://sample130704@cloudcontrolled.com/repository.git sample130704
・アプリの公開
cctrlapp sample130704 deploy
・下記URLで確認できます
https://sample130704.cloudcontrolled.com/
アドオンを追加すれば MySQLやPostgres、MongoDBなんかも使えるようです。ミドルウェアをちょっと試したい時などに便利ではないでしょうか
https://www.cloudcontrol.com/add-ons

cloudControlを使うには gitコマンドが必要なので、あらかじめインストールしておきます。
========== 基本設定 ==========
・まずは cloudControl のアカウントを作成します([TRY IT FREE]をクリック)
・管理ツールのインストール
sudo easy_install pip
sudo pip install cctrl
・公開鍵の登録(作成した cloudControl のアカウントを入力します)
cctrluser key.add
----------
Email : <メールアドレス>
Password: <パスワード>
----------
========== アプリの公開 ==========
※今回アプリ名は「sample130704」としました。ご自身のアプリ名に書換えてください。
・アプリ名を登録(PHP)
※名前は cloudControlで一意かつ英数小文字のみ利用可能(数字を先頭にはできない)
cctrlapp sample130704 create php
・ローカルにアプリ用の gitリポジトリを作成
mkdir sample20130704
cd sample130704/
git init
vi index.php
---(下記を追記)---------------------------
$mesg = 'This is a sample App.';
echo $mesg;
------------------------------
git add index.php
git commit -m "サンプルコードの作成"
・アプリ用のリポジトリを cloudControlへpush
cctrlapp sample130704 push
(下記コマンドでリポジトリをクローンすることもできます)
git clone ssh://sample130704@cloudcontrolled.com/repository.git sample130704
・アプリの公開
cctrlapp sample130704 deploy
・下記URLで確認できます
https://sample130704.cloudcontrolled.com/
アドオンを追加すれば MySQLやPostgres、MongoDBなんかも使えるようです。ミドルウェアをちょっと試したい時などに便利ではないでしょうか
https://www.cloudcontrol.com/add-ons
15
GitHubの使い方メモ
最近ちょくちょく使うことがあるのでメモ
まずはGitHubのアカウントを作成しておきます。
========== gitの初期設定 ==========
・自分の名前とメールアドレスの設定
git config --global user.name "your_name"
git config --global user.email "your_email@example.com"
・カラー表示の設定(お好みで)
git config --global color.ui "auto"
・設定の確認
git config --list
------------------------------
user.name=your_name
user.email=your_email@example.com
color.ui=auto
------------------------------
========== GitHubにSSH公開鍵を登録 ==========
・SSH鍵を作成 ※既にSSH鍵がある場合はこの手順は不要です
(色々聞かれますが全て空エンターでOKです)
ssh-keygen -t rsa -C "your_email@example.com"
・SSH鍵をクリップボードにコピーします
pbcopy < ~/.ssh/id_rsa.pub
・作成したSSH公開鍵をGitHubに登録します
マイページ右上の工具マーク「Account settings」をクリック
ページ左メニューの「SSH Keys」→「Add SSH key」
下記を入力して「Add key」を押します
----------
Title:PC名など
Key:<SSH鍵をペースト>
----------
========== GitHubにリポジトリを作成 ==========
・GitHubのマイページでリポジトリを作成する「New repository」をクリック
Repository name:sample
Description (optional):<空欄>
Public を選択
Initialize this repository with a README のチェックは無し
・ローカルにリポジトリを作成する
mkdir sample
cd sample/
git init
touch README.md
git add README.md
git commit -m "first commit"
・GitHubのリポジトリにアップする
git remote add origin git@github.com:<ユーザー名>/sample.git
git push -u origin master
========== 運用編 ==========
・ファイルを編集する
echo "test" >> README.md
・ローカルリポジトリにコミット
git add README.md
git commit -m "文字列 test を追加"
・GitHubリポジトリにpush
git push
========== 他のPCから編集 ==========
※あらかじめGitHubにSSH公開鍵の登録が必要です
・GitHubリポジトリをクローンする
git clone git@github.com:<ユーザー名>/sample.git
・ファイルを編集する
echo "hoge" >> README.md
・ローカルリポジトリにコミット
git add README.md
git commit -m "文字列 hoge を追加"
・GitHubリポジトリにpush
git push
・他のユーザーの更新を反映
git pull
○参考にさせて頂いたサイト
・README.mdファイル。マークダウン記法まとめ
http://codechord.com/2012/01/readme-markdown/
・Gitを使いこなすための20のコマンド
http://sourceforge.jp/magazine/09/03/16/0831212
・GitHub Help(SSH鍵関連)
https://help.github.com/articles/generating-ssh-keys
まずはGitHubのアカウントを作成しておきます。
========== gitの初期設定 ==========
・自分の名前とメールアドレスの設定
git config --global user.name "your_name"
git config --global user.email "your_email@example.com"
・カラー表示の設定(お好みで)
git config --global color.ui "auto"
・設定の確認
git config --list
------------------------------
user.name=your_name
user.email=your_email@example.com
color.ui=auto
------------------------------
========== GitHubにSSH公開鍵を登録 ==========
・SSH鍵を作成 ※既にSSH鍵がある場合はこの手順は不要です
(色々聞かれますが全て空エンターでOKです)
ssh-keygen -t rsa -C "your_email@example.com"
・SSH鍵をクリップボードにコピーします
pbcopy < ~/.ssh/id_rsa.pub
・作成したSSH公開鍵をGitHubに登録します
マイページ右上の工具マーク「Account settings」をクリック
ページ左メニューの「SSH Keys」→「Add SSH key」
下記を入力して「Add key」を押します
----------
Title:PC名など
Key:<SSH鍵をペースト>
----------
========== GitHubにリポジトリを作成 ==========
・GitHubのマイページでリポジトリを作成する「New repository」をクリック
Repository name:sample
Description (optional):<空欄>
Public を選択
Initialize this repository with a README のチェックは無し
・ローカルにリポジトリを作成する
mkdir sample
cd sample/
git init
touch README.md
git add README.md
git commit -m "first commit"
・GitHubのリポジトリにアップする
git remote add origin git@github.com:<ユーザー名>/sample.git
git push -u origin master
========== 運用編 ==========
・ファイルを編集する
echo "test" >> README.md
・ローカルリポジトリにコミット
git add README.md
git commit -m "文字列 test を追加"
・GitHubリポジトリにpush
git push
========== 他のPCから編集 ==========
※あらかじめGitHubにSSH公開鍵の登録が必要です
・GitHubリポジトリをクローンする
git clone git@github.com:<ユーザー名>/sample.git
・ファイルを編集する
echo "hoge" >> README.md
・ローカルリポジトリにコミット
git add README.md
git commit -m "文字列 hoge を追加"
・GitHubリポジトリにpush
git push
・他のユーザーの更新を反映
git pull
○参考にさせて頂いたサイト
・README.mdファイル。マークダウン記法まとめ
http://codechord.com/2012/01/readme-markdown/
・Gitを使いこなすための20のコマンド
http://sourceforge.jp/magazine/09/03/16/0831212
・GitHub Help(SSH鍵関連)
https://help.github.com/articles/generating-ssh-keys
08
PHP Yubikey で Yubico OTP認証
最近ちらほら見かけるようになった、セキュリティトークンの YubiKeyを試してみました。今回は開発元のYubico社の(ユビカと読むらしい)認証サーバ(YubicoOTP)を使ってみます。米カリフォルニアの企業だけどやっぱり「指」にかけてるのかな?指キーに指子さん(^^)
なにはともあれ Yubikeyが無いと始まらないので、Yubico社のサイトで購入します。とりあえずスタンダードモデルを購入、エアメールで1週間くらいで届きました。

まず Yubikeyの設定をするため管理ソフト(YubiKey Personalization Tool)をインストールします。Yubico社のサイトでもダウンロードできますが、Macの場合は AppStoreからインストールできるのでそちらを利用しました。

YubikeyをMacにさしたら管理ソフトを起動して「Yubikey is inserted」と表示され、認識していることを確認します。

[Yubico OTP]→[Quick] を押します。

「Slot1」を選択して[Regenerate]を何回か押します。「Public Identity」の12文字がYubiKeyを特定するためのIDです。このYubikeyのIDをユーザー情報と紐づけて認証することになります。最後に[Write Configuration]を押して設定をYubiKeyに書込みます。

OTPを生成すると、先頭の12文字が固定になっていることが分かります。
次に設定したYubiKeyを、Yubico認証サーバに登録します。
[Upload to Yubico]を押します。

Yubico社の登録用サイトが開きますので、メールアドレスと Yubikeyで生成したOTPを入力して[Upload AES key]を押します。(他の項目は自動で入力されています)

「Success!」と表示されていれば登録完了です。

設定が反映する15分ほど経過したら、デモサイトで認証できることを確認します。

以上で Yubikeyの登録は完了です。続けてYubico社の認証サーバ(YubicoOTP)を使うためのAPIキーを取得します。
・Yubico Get API Keyサイト
https://upgrade.yubico.com/getapikey/
メールアドレスと YubiKeyのOTPを入力します。

表示された「Client ID」と「Secret key」をこのあと作成するPHPプログラム内で使います。

認証用のPHPを作るにあたって「Auth_Yubico」モジュールをインストールしておきます。
YubiKey OTPをYubica認証サーバで検証した結果が $authに入ってくるので、後はエラー判定するのみ。簡単です(^^)
○サンプルコード
https://github.com/sizaki30/YubiKey
○動作サンプル
https://yubikey130709.cloudcontrolled.com/sample.php
以上です。
なにはともあれ Yubikeyが無いと始まらないので、Yubico社のサイトで購入します。とりあえずスタンダードモデルを購入、エアメールで1週間くらいで届きました。

まず Yubikeyの設定をするため管理ソフト(YubiKey Personalization Tool)をインストールします。Yubico社のサイトでもダウンロードできますが、Macの場合は AppStoreからインストールできるのでそちらを利用しました。

YubikeyをMacにさしたら管理ソフトを起動して「Yubikey is inserted」と表示され、認識していることを確認します。

[Yubico OTP]→[Quick] を押します。

「Slot1」を選択して[Regenerate]を何回か押します。「Public Identity」の12文字がYubiKeyを特定するためのIDです。このYubikeyのIDをユーザー情報と紐づけて認証することになります。最後に[Write Configuration]を押して設定をYubiKeyに書込みます。

OTPを生成すると、先頭の12文字が固定になっていることが分かります。
vvjvdnvcgvgikrterjitthnubdkcvgfkcebbthkfbjhc
vvjvdnvcgvginnilbdhdutcuflriuhufhuifrlgnndnj
vvjvdnvcgvgiicckkvbregikrujtdekeuehfibdbruff
vvjvdnvcgvgirfcvuujtnucejjifncibbvjrtchdtifu
vvjvdnvcgvgihrvtrikfiujeibbdlgdunlkfujkttite
vvjvdnvcgvginnilbdhdutcuflriuhufhuifrlgnndnj
vvjvdnvcgvgiicckkvbregikrujtdekeuehfibdbruff
vvjvdnvcgvgirfcvuujtnucejjifncibbvjrtchdtifu
vvjvdnvcgvgihrvtrikfiujeibbdlgdunlkfujkttite
次に設定したYubiKeyを、Yubico認証サーバに登録します。
[Upload to Yubico]を押します。

Yubico社の登録用サイトが開きますので、メールアドレスと Yubikeyで生成したOTPを入力して[Upload AES key]を押します。(他の項目は自動で入力されています)

「Success!」と表示されていれば登録完了です。

設定が反映する15分ほど経過したら、デモサイトで認証できることを確認します。

以上で Yubikeyの登録は完了です。続けてYubico社の認証サーバ(YubicoOTP)を使うためのAPIキーを取得します。
・Yubico Get API Keyサイト
https://upgrade.yubico.com/getapikey/
メールアドレスと YubiKeyのOTPを入力します。

表示された「Client ID」と「Secret key」をこのあと作成するPHPプログラム内で使います。

認証用のPHPを作るにあたって「Auth_Yubico」モジュールをインストールしておきます。
curl -O http://php-yubico.googlecode.com/files/Auth_Yubico-2.4.tgz
pear install Auth_Yubico-2.4.tgz
pear install Auth_Yubico-2.4.tgz
YubiKey OTPをYubica認証サーバで検証した結果が $authに入ってくるので、後はエラー判定するのみ。簡単です(^^)
require_once "Auth/Yubico.php";
// APIキーのセット
$yubi = new Auth_Yubico("<Client ID>", "<Secret key>", true);
// 認証処理実行
$auth = $yubi->verify("<YubiKey OTP>");
if (PEAR::isError($auth)) {
echo '認証NG';
} else {
echo '認証OK';
}
// APIキーのセット
$yubi = new Auth_Yubico("<Client ID>", "<Secret key>", true);
// 認証処理実行
$auth = $yubi->verify("<YubiKey OTP>");
if (PEAR::isError($auth)) {
echo '認証NG';
} else {
echo '認証OK';
}
○サンプルコード
https://github.com/sizaki30/YubiKey
○動作サンプル
https://yubikey130709.cloudcontrolled.com/sample.php
以上です。
02
PHP PDO PostgreSQL クライアントエンコーディングの指定方法
DBホストのアドレスに「options='--client_encoding=<エンコーディング>'」を追加すればOK
pg_connect と同じ指定方法でいけるとは知らなかった。今まで mb_convert_encodingでいちいち変換していました。(^^;)
$host = "localhost options='--client_encoding=UTF8'";
$dbname = "sampledb";
$user = "foo";
$pass = "password";
$dbh = new PDO("pgsql:host={$host}; dbname={$dbname}", $user, $pass);
$dbname = "sampledb";
$user = "foo";
$pass = "password";
$dbh = new PDO("pgsql:host={$host}; dbname={$dbname}", $user, $pass);
pg_connect と同じ指定方法でいけるとは知らなかった。今まで mb_convert_encodingでいちいち変換していました。(^^;)
20