cakePHP SessionをDB+memcachedにしてみる

セッションをmemcached+DBというコンボセッションにしたいと思います。コンボセッションというのはここに書いてあるからそういう風にいうのかなと思いました。
http://book.cakephp.org/2.0/ja/development/sessions.html

上記ではAPCが使われていますが、APCの変わりにmemcachedを使ってみようと思います。APCはmemcachedより速いけどapache再起動したら消えてしまうとどこかに書いてありました。memcachedもmemcached再起動したら消えるし、速い方がいいのかなとも思いますが、まあどっちでもいいかと思いました。

今キャッシュのdefaultもmemcachedになっております。

まず、core.phpでセッションのdefaultをdatabaseにします。engineをComboSessionというのにしておいて、cacheはdefaultにします。

次に、ComboSessionをつくります。上記のcakePHPのcookbookに書いてあるコードをコピペします。

次に、データベースにsession用のテーブルをつくります。app/Config/Schema/sessions.sqlを使って、sessionsテーブルをつくってSessionモデルをつくったらできました。

EC2 cakePHPでMemcachedつかう

AmazonLinuxにMemcachedを設定します。

インストールと設定

インストールします。
参考:さくらの VPS 設定覚書(4)PHP

設定します。

Memcached を起動します。

自動起動の設定をします。

“0:off 1:off 2:on 3:on 4:on 5:on 6:off”と出れば、設定成功です。

memcache.iniを設定します。
http://php.net/manual/ja/memcache.ini.php

Apacheを再起動します。
service httpd restart

php -R ‘ phpinfo(); exit(); ‘ | grep “memcache”
で、反映してるか確認できます。

EC2でポートをあける

Custom TCP Rule, tcp, 11211, セキュリティグループ

cakePHPでつかえるようにする

core.phpで下記がコメントアウトされてるので、コメントを外します。

あとは、キャッシュを使いたいところで、App::uses(‘Cache’, ‘Cache’);を書いて、Cache::read(‘hoge’);とか、Cache::write(‘hoge’, 123);とかやります。

memcachedは、apacheを再起動しても消えないけど、memcachedを再起動したら消えます。あとcakePHPのCacheは、モデルが追加、編集、削除されたときにモデルに関するキャッシュを消すそうです。でもroutes.phpでURL変えてると消えない場合があるようです。

APC

APCはPHPアクセレーターというやつです。

PHPアクセレーターとは、PHPのスクリプトを最適化してコンパイルされた状態でデータをキャッシュし、以後同じデータにアクセスがあった際、そのキャッシュを利用することでスクリプトの実行速度を高速化させるためのものです。(APCでPHPの処理を高速化

APCをインストールします。
yum install php-pecl-apc

php-pecl-apc.x86_64 0:3.1.15-0.3.svn329913.10.amzn1がインストールされました。
/etc/php.d/apc.iniに設定ファイルがあります。(CentOSです。AmazonLinuxです。)
自動的に設定ファイルをつくってくれていますので、apacheを再起動したら反映されます。
APCコンソールは別にみなくてもいいので使いません。

apc.iniの設定項目の説明は、ここにあります。
http://php.net/manual/ja/apc.configuration.php

apc.ttl = 3600
apc.user_ttl = 3600
apc.max_file_size=5M

を設定してみた。

php -R ‘ phpinfo(); exit(); ‘ | grep “apc”

で反映されてるか確認できます。

PHPのセッションでエラーでた apache

cakePHPでFileBinderで画像アップできないと思ったら、capistranoのshared内にディレクトリ作ってなかったり、app/tmpのパーミッションがおかしかったり、セッション保存するディレクトリのパーミッションが変だったりしたから直した。

セッション関連でこんなエラーでた。

session_start(): open(/var/lib/php/session/sess_uub68oeicgasdfahogehoge, O_RDWR) failed: Permission denied (13) [CORE/Cake/Model/Datasource/CakeSession.php, line 612]

セッション書き込めないよということでありまして、/var/lib/php/session内に書き込もうとして権限がなかったということであります。httpd.confでapacheのグループを変えたらエラーになりました。

php.iniの1277行目くらいにある、session.save_path = “/var/lib/php/session”というのを変えれば、セッション保存ディレクトリを変えられるみたい。

PHPから自動でサブドメインつくる (cakePHP)

よくあるアカウント登録してサブドメイン名登録すると、ユーザ専用のサイトを作成できるようにしたいがやったことがない。

サーバはEC2のAmazonLinuxを使っています。ドメインはRoute53で管理してます。
Route 53のRecord Setsで、*.hoge.comとやれば、どんなサブドメインでもhoge.comと同じように扱うことができます。
後はcakePHPのルーティングでうまく処理できれば終了なんじゃないかと思います。

AppControllerとかでサブドメインの文字列を取得して、その文字列内容に応じて処理を切り替えれば、route.phpの設定なども必要ないんじゃないでしょうか。

最初のドットまでを取得しているので、サブドメインなしとか、IPアドレスでアクセスとか、wwwアクセスとかも、最初のドットまでを取得してしまう。それを省けば大丈夫っぽい。あとは$this->subdomainの内容に応じて表示内容を変えればoKじゃないでしょうか?

EC2にChefでwwwグループ作成する

EC2にChefでPHP、MySQL、Apacheなどを入れてみる

chefでresourceというのはchefが用意している命令のことらしい。OSの種類に応じて処理を実行してくれたり、エラーの場合の処理も内部でやってくれるので、Recipeに数行のresourceを書くだけでOKになっている。

packageもResourceですよね??packageを使って、php、mysql、httpdがインストールできそうなコードを試してみる。

とりあえずこれで実行してみたらエラーでなくてインストールされたっぽい。

vimとかphpmyadminもインストールさせてみようと思ったらエラーになった。
phpmyadminのインストールは下記に書いてあった。
AWS EC2にPHPMyAdminをインストールする

まあこれだけできても特段有り難いものではない。
かといって全てを可能にする為の勉強工数もあまり有り難いものではないなあ。

追記:
phpmyadminは、上記実行後に、sudo yum updateして、再度上記を実行したらエラーになった。残念だった。

EC2にcapistrano3でデプロイ

EC2はサクラレンタルサーバと違ってデフォルトですんなりいけた。

EC2の/var/wwwにデプロイする。
/var/www/htmlに/var/www/currentのシンボリックリンクをはっておく。

capistranoサーバで下記設定する。
任意のディレクトリhogeに移動する。

config/deploy.rb

config/deploy/staging.rb

CentOS6.5 apache httpd: apr_sockaddr_info_get()というエラーが出る

apacheを起動するときにhttpd: apr_sockaddr_info_get()というエラーがでる。

Apache の httpd: apr_sockaddr_info_get() failed for エラー

これやったらエラーが出なくなった。まだ下記のエラーがでる。

httpd: Could not reliably determine the server’s fully qualified domain name, using vagrant-centos65.vagrantup.com for ServerName

Apache で apr_sockaddr_info_get() failed for が発生する

ここに書いてある原因だと、/etc/hosts/の設定と、/etc/sysconfig/networkの設定は一応見たから、service network restart の実行忘れというのを確認してみよう。
service network restartでエラーになった。でもよくわからん。
とりあえず、httpd.confにServerNameにvagrant-centos65.vagrantup.comを設定したらエラーは消えた。

cakePHP – httpsとhttpの接続強制処理

参考:CakePHP2.xでSSL接続(https://)を強制させる
参考:CakePHP 2.xのSecurityコンポーネントを使う際の注意点

Secutiryコンポーネントを使用すると、POST時に下記のような挙動をするため、Ajaxとか使ってるとエラーになるので注意が必要。

・Formヘルパーによって動的に生成されたTokenがhidden要素としてフォームに自動追加される。
・POSTされたフォームのTokenを確認して、問題があるとThe request has been black-holedとして処理され、$this->request->dataは空になる。

上記の動作を無効にするには、コントローラのbeforeFilter()に
$this->Security->validatePost = false;

Apache – apr_sockaddr_info_get() failedエラー

Starting httpd: httpd: apr_sockaddr_info_get() failedというエラーでapacheが起動しません。

参考;Apache で apr_sockaddr_info_get() failed for が発生する

/etc/httpd/conf/httpd.conf の ServerName の設定忘れ。これからやってみる。

と思ったらrootになったらできたからいいや。

VagrantでEC2にアクセスする

ベイグラントと読むらしい。Vagrantで AWS EC2インスタンス(RHEL5.5)を作成するだけが頼りです。

Vagrant のAWS-Provider インストールというのをしてみる。

結構時間かかる。時間かかるなー。まだ終わらないので、Vagrantfileに記述する情報を調べる。

参考サイトから引用。こういうVagrantfileを作る必要があるらしいけど、アクセスキーとかシークレットキーとかもらってないので調べる。

と思ってたらインストールが完了した。

AWS EC2 用のDummyBox 取得&初期化というのをしてみる。

vagrant init
そして、上記のVagrantfileを作成する。なのでAPIのキーみたいの調べる。
ここにあるっぽい。

スクリーンショット 2014-02-26 4.08.41

Access Keys (Access Key ID and Secret Access Key)のCreate New Access Keyを押してみる。作成できた。rootkey.csvというのももらった。別にsecret access keyが書いてあるだけなのでしっかり保存しとけよっていうことらしい。

ではいざVagrantfileをつくってupしてみる。
amiがなかったから作ってみた。

vagrant 起動(= 仮想サーバ作成)をしてみる。

悲しいです。エラーでまくり。

Nokogiriってなんだよ。。

unfっていうのをインストールしてみる。

あんま関係ないかも。。エラー変わらず。

vagrantでawsのインスタンスを起動しようとしたときに、getaddrinfo: nodename nor servname provided, or not known (SocketError)と出る件

aws.region = “ap-northeast-1a”を、aws.region = “ap-northeast-1″したらいいらしい。

おおいい感じと思ったら別のエラーが出た。

あーなんかAMIつくったときにもう1個インスタンスが出来てたらしくて一個止めたらなんか入れた。入れたけどこれって単純に接続してるだけじゃん。なんだこれ。

Vagrant 1.1 で EC2 を vagrant upなるほどー。おらが思ってたのとちゃう。。
単にVagrantつかってEC2にアクセスできるだけか。。

[AWS][Vagrant]vagrant-awsを利用したイイカンジ(?)のAWS開発フロー

なんかすごいけどまだよくわからない。
さくらにしても、AWSにしても俺はローカルと開発サーバと本番サーバを同じ環境にしたくて、しかもローカルの代わりにAWSは使いたくない。お金かかるし。だから本番サーバのAWSに合わせたVagrantのBOXを自分でつくりたい。

Packerっていうのでつくれそう。
https://speakerdeck.com/ryuzee/vagrant-plus-amazon-ec2これに下記があった。
スクリーンショット 2014-02-26 7.48.48

Packerというのをインストールしてみる。
PackerでVagrant用のBoxを作成したときのメモ

インストールできない。
http://www.packer.io/downloads.htmlここにあった。

OSXでpackerでCentOS6.4のVirtualBox VMを作成する
インストールできた。
でどう使うんでしょうか?

今日全部覚えるのは無理だな。色々なツールがあるし、そもそもよくわかってないし。
どうしたらいいのじゃ!まいった!時間がないのに!

ただし「このLinuxをAmazonクラウド以外で使えますか?」という問いには「いいえ、Amazon EC2以外で利用可能ではありません」と記されています。

とどこかに書いてあった。まあそうなのか。じゃあローカルに仮想環境つくるもくそもないのか。全くおんなじじゃないと意味ないっすからねえ。でもamazon linuxはec2でしか使えないならローカルで実現できるわけないし。

VagrantとChefでチームの開発環境を共通化する

とりあえず便利そうなやつだけインストールしておこう。

で、一旦amazon linuxという呪縛から離れて、CentOS release 6.5の仮想マシンを立ち上げてみよう。ということはboxをhttp://www.vagrantbox.es/で探してみよう。CentOS 6.5 x86_64かな??
ってことは、こんな感じでやるのかな?

エラーがいっぱいでてるけど、vagrant sshしたらとりあえず入れる。

ここに、Apache 2.2.15、Mysql 5.5.33、PHP 5.3.3これをchefで構築できるようにしたい。
でも時間かかるから、とりあえず普通にインストールしちゃって次のことするか。
次のことっていうのは、AMIを落として別のアカウントのEC2に適用するっていうのをしたいです。
あるいは、scpでソースコード移管して、DBに関しても移動させるか。システムログを消しても大丈夫かどうかだけど一般的にログは消しても大丈夫だからな。

さっきの、sudo yum groupinstall -y “Web Server” “MySQL Database” “PHP Support”をやってみたらmysqlがインストールできなかった。

http://qiita.com/srockstyle/items/8bed9550be75bf2e5e14これのとおりにやってみる。

## EpelとRemiを入れる
sudo -i
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

## MySQLの5.5をremiから
yum –enablerepo=remi install mysql-server mysql mysql-libs mysql-devel

できた。でも5.5.33がよかったんだけど、5.5.36だった。どうでもいいか。いいのかな?

AWSで色々やってみる

サインインします。
https://portal.aws.amazon.com/gp/aws/developer/registration/
サインインできました!

AWS Management Consoleを開きます。
スクリーンショット 2014-02-26 1.07.00

EC2に入ってサーバをつくります。Launch Instanceというボタンを押してみます。Amazon Linux AMI 2013.09.2を選んでみます。64bitにしてみます。正直64bitって高機能っぽいって感じにしか分かりませんが。Step 2: Choose an Instance Typeにやってまいりました。最初はMicro instancesでいいです。これはサーバのスペックを色々選べるようです。

スクリーンショット 2014-02-26 1.13.19

Review and Launchというボタンを押してみます。いきなりStep 7: Review Instance Launchにやってまいりました。さすが俺。仕事はやい。 Click Launch to assign a key pair to your instance and complete the launch process.と書いてありますので、Launchを押すと、晴れてインスタンス作成が完了するようです。

スクリーンショット 2014-02-26 1.17.08

Improve your instance’s security. Your security group, launch-wizard-1, is open to the world.と書いてありますので、launch-wizard-1というグループにipアドレスの制限とか使えるアプリの制限とかをかけないと危ないよということらしいです。設定しましょう。

Step 6: Configure Security Groupに戻ってきました。
スクリーンショット 2014-02-26 1.20.26

sshは自宅からしかできないようにしてみます。sourceをMy IPにしたら自分のIPを自動で設定してくれました。Step7に戻って、Launchを押してみます。すると謎のウインドウが表示されました。

スクリーンショット 2014-02-26 1.25.09

SSH接続用のやつらしいです。create new keypair といった感じのやつを選んでcreateしてdownloadしたらpemファイルが貰えました。

Launch instanceボタンを押してみます。インスタンスの作成が完了しました。
スクリーンショット 2014-02-26 1.29.53

つくったサーバはどのリージョンで動いているのかよくわからない。
とりあえずサーバにssh接続してみます。

入りました。
スクリーンショット 2014-02-26 1.46.50

sudo yum updateしました。

phpとかmysqlとかは入っていません。perlとpythonは入ってますが。

これからやりたいのは、phpとかmysql、apacheとか入れて設定して、同じ環境をローカルにvagrantつかって作りたいと思います。あとはS3に画像を格納するようにしたり、ロードバランサーとかいうを使ってみたりしたいです。
ということで、一旦下記の本をずっと昔に買っていたので斜め読みします。

スーパー斜め読みが完了しました。いい感じですねえ。色々できるんですね。心配なのはお金です。。必要のないときはサーバを停止しないとお金かかりますし、停止してもお金かかるので本当に不要なときはインスタンスを削除しないといけないようです。

ところでリージョンがどこになってるのか確認したいです。選択した記憶がありません。
シンガポールになってました。右上のやつで変えたら変わるんですかね。まあいいや。

チュートリアル: LAMP ウェブサーバーのインストール

phpとかをインストールします。

インストールされました。
スクリーンショット 2014-02-26 2.37.33

apacheの設定をします。
セキュリティグループで80portをあける必要があります。
www グループをインスタンスに追加し、そのグループに /var/www ディレクトリの所有権を与え、グループの書き込み許可を追加します。

パスワードでログインはできないらしい。

mysqlの設定をします。
$ sudo service mysqld start
$ mysql_secure_installation