Nginx・PHP – アップロードファイルの最大サイズの変更

参考:nginxで”client intended to send too large body”が発生した時の対策方法
参考:最大アップロード容量を変更する

Nginxは、/etc/nginx/nginx.confの、下記を変更する。なかったら、http, server, locationコンテキスト内に追加する。

client_max_body_size 4m;

あとは、php.iniの値も確認・修正する。
下記のようになってたので、それぞれ必要な容量に修正する。

memory_limit 128M
post_max_size 8M
upload_max_filesize 2M

Amazon Linux – PostgreSQL・Nginx・FuelPHP


インストール

参考:
Amazon Linux AMIにpostgresqlをインストールする
チュートリアル: Amazon Linux への LAMP ウェブサーバーのインストール

yumをアップデートして、phpとgitとvimとnginx入れた。アパッチとMySQLも入れた。

sudo yum update -y
$ sudo yum install -y httpd24 php56 mysql55-server php56-mysqlnd
$ sudo yum install -y git
$ sudo yum install -y vim
$ sudo yum install -y nginx

postgresql入れた。

$ sudo yum install -y postgresql
$ sudo yum install -y postgresql-server postgresql-libs php-pgsql

エラーでた

$ sudo yum install -y postgresql-server postgresql-libs php-pgsql                                                                   
読み込んだプラグイン:priorities, update-motd, upgrade-helper
パッケージ postgresql92-libs-9.2.15-1.57.amzn1.x86_64 はインストール済みか最新バージョンです
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php-pgsql.x86_64 0:5.3.29-1.8.amzn1 を インストール
--> 依存性の処理をしています: php-pdo(x86-64) = 5.3.29-1.8.amzn1 のパッケージ: php-pgsql-5.3.29-1.8.amzn1.x86_64
---> パッケージ postgresql92-server-compat.x86_64 0:9.2.15-1.57.amzn1 を インストール
--> 依存性の処理をしています: postgresql92-server(x86-64) = 9.2.15-1.57.amzn1 のパッケージ: postgresql92-server-compat-9.2.15-1.57.amzn1.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ php-pdo.x86_64 0:5.3.29-1.8.amzn1 を インストール
--> 依存性の処理をしています: php-common(x86-64) = 5.3.29-1.8.amzn1 のパッケージ: php-pdo-5.3.29-1.8.amzn1.x86_64
---> パッケージ postgresql92-server.x86_64 0:9.2.15-1.57.amzn1 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ php-common.x86_64 0:5.3.29-1.8.amzn1 を インストール
--> 衝突を処理しています: php56-common-5.6.19-1.123.amzn1.x86_64 は php-common < 5.5.22-1.98 と衝突しています
--> 衝突を処理しています: php56-pdo-5.6.19-1.123.amzn1.x86_64 は php-pdo < 5.5.22-1.98 と衝突しています
--> 依存性解決を終了しました。
エラー: php56-pdo conflicts with php-pdo-5.3.29-1.8.amzn1.x86_64
エラー: php56-common conflicts with php-common-5.3.29-1.8.amzn1.x86_64
 問題を回避するために --skip-broken を用いることができます。
 これらを試行できます: rpm -Va --nofiles --nodigest

php56と指定しないといけないっぽい。

$ sudo yum install -y postgresql-server postgresql-libs php56-pgsql

これで必要なの入った。

postgreSQLの設定する

postgresユーザにパスワード設定

$ sudo passwd postgres

postgresユーザに切り替える

$ su - postgres

基本データベース生成とサービス開始

$ initdb --encoding=UTF8 --no-locale
$ pg_ctl start
$ exit
$ chkconfig postgresql on

データベース作成する

$ psql -U posgres
postgres=# create database hoge;

NginxでPHP使えるようにする

参考:nginxでphpを使う(CentOS6.5)

php-fpmをインストールする

$ sudo yum install -y php56-fpm

php-fpmの設定をする

下記のwww.confのuserとかgroupがapacheになっているので、nginxに変更します。

$ sudo vim /etc/php-fpm.d/www.conf

NginxでFuelphpが動くようにする

下記、nginx.confを修正していく。

$ sudo vim /etc/nginx/nginx.conf

下記箇所を、/usr/share/nginx/hoge/publicとかにする。

root         /usr/share/nginx/html

参考:http://fuelphp.jp/docs/1.8/installation/instructions.html
下記のように変更する。

location / {
    index index.php;
    try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param FUEL_ENV "production";
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

nginxとphp-fpmを再起動する

$ sudo service php-fpm restart
$ sudo service nginx restart

FuelPHPをcloneする

FuelPHPはローカルで作ってるやつをcloneする。

$ cd /usr/share/nginx/
$ sudo git clone https://hogehoge.git

FuelPHPのcomposer installする

$ cd /usr/share/nginx/hoge
$ ./composer.phar install

phpPgAdminインストール

参考:phpPgAdminのインストール – CentOS6.5(Vagrant)

とりあえず、ローカルで上記サイトに記載のURLから、ダウンロードして、展開して、gitリポジトリに追加して、pullした。常時使える必要はなかったので、nginxのrootを変更してちょっとだけ使った。

ローカルのMySQLからAmazonRDSに移管する

EC2を使っていて、EC2のサーバに直接MySQLのDBを入れている状態から、AmazonRDSに移管します。自動でバックアップとかしてくれるので便利だからです。

Amazon RDSのインスタンスを作成する

まず、RDSのインスタンスを作成します。https://aws.amazon.com/jp/rds/getting-started/インスタンスを作る時に、データベースのID、パスワード、データベース名等を登録しました。エンジンはAurora 5.6.10aというやつです。

Amazon Aurora は、MySQL と互換性のあるリレーショナルデータベースエンジンで、高性能の商業用データベースの可用性およびスピードと、オープンソースデータベースのコスト効率性および簡素性を併せ持っています。Amazon Aurora は、MySQL の 5 倍の性能を持ち、同様の機能や可用性を提供している商用データベースの 10 分の 1 の価格です。

RDSにも、セキュリティグループがあります。このセキュリティグループの設定を変更して、EC2からアクセスできるようにします。

EC2のMySQLのデータを取り出す

sudo mysqldump --databases <database_name> --single-transaction 
--order-by-primary -r backup.sql -u <local_user> -p

RDSにデータをインポートする

参考:MySQL DB または MariaDB DB から Amazon RDS MySQL または MariaDB DB インスタンスへのデータのインポート

上記によると、下記コマンドで、取り出してインポートするが一緒にできるらしい。

sudo mysqldump -u <local_user> --databases world --single-transaction --compress --order-by-primary  -p<local_password> | mysql -u <RDS_user_name> --port=3306 --host=hostname -p<RDS_password>

できた。便利だ。

あとは、アプリケーションのデータベースの設定を変更すれば完了します。

AWS – Cron

CakePHPのShellをCronで自動実行したい。
OSは、AmazonLinuxです。

$ cd /etc/cron.d
$ touch hoge
$ sudo vim hoge

#!/bin/sh

*/1 * * * * root cd /var/www/html/app/; /usr/bin/php /var/www/html/app/Console/cake.php Hoge

・ 順番は、分 時 日 月 曜日。
・ */1で1分毎。ハイフンで期間指定もできる。

cronの動作チェック

cronが動いてるかチェックする。

$ service crond status

あと、cronの実行結果のログは、/var/log/cronにある。

参考:
cronで自動実行
【AWS】 Amazon Linuxでのcronジョブ設定
cakePHP2.3 cron (さくらサーバ)

AWS – postfixで受信したメールを解析する

参考:postfixで受信したメールをphpにわたしメールを解析する

上記のとおりやったら、phpに渡せた。権限の注意が必要。

phpでメール解析するための便利ツールが、Mail_MimeDecodeらしい。pearにある。
参考:stdinからのメール処理でメール情報を取得する

AWS – EC2でメールを受信する(Postfix)

参考:Postfix+Dovecotによるメールサーバ構築

とりあえず上記参考サイトのとおりに設定したら届いた。dovecotの設定もしたら、macのメーラーからも受信できるようになった。

ちなみに、mailコマンドでメールの確認ができるらしい。([mailコマンド]Linuxからメールを送る

$ sudo yum install mail
$ echo ‘testmail!’ | mail -s ‘hello!’ -r admin@hogehoge.com hoge@hoge.com

実際に送ることができた。ec2-user宛に送ったら、~/Maildirの中にメッセージが保存されていた。

SSL証明書の設定(AWS)

何をやるかちょっと忘れた。

参考:
http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/InstallCert.html#InstallSSL-managing-server-certs

sshでサーバに入ります。
opensslが入ってるか確認します。

sudo yum update openssl

プライベートキーを作成します。

openssl genrsa 2048 > private-key.pem

CSR(証明書署名要求)を作成する。

openssl req -new -key private-key.pem -out csr.pem
Country Nameは、日本の場合、JP
State or Province Nameは、都道府県なので、Tokyoとか。
Locality Name (eg, city)は、市区町村。Shibuya-kuとか。
Organization Nameは、会社名。Logicky Inc.など。
Organizational Unit Nameは、組織名(オプション)。
Common Nameは、ドメイン。logicky.comなど。(ワイルドカードを使ってサブドメインに対応させる場合は、*.logicky.comとする)
Email Addressは、メアド(オプション。空でいいらしい。)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: これは、空でいいらしい。
An optional company name []: これは、空でいいらしい。

これで完成。

netowl.jpというところでSSL証明書を買ったんだけど、CSR入力後にSSL証明書発行したら、承認メールが送られてくるようになっていて、SSL証明を使うドメインのメールアドレスに承認メールが送られてくるので、メール受信可能な状態にしないといけない。AWSでメール受信設定するのもめんどくさいので、google mailを使うことにした。

証明書を発行したら、AWSのiamというのにアップロードしたら便利らしい。iamとか使わなくてもこの前で来たけどやってみる。

aws iam upload-server-certificate --server-certificate-name certificate_object_name --certificate-body file://public_key_certificate_file --private-key file://privatekey.pem --certificate-chain file://certificate_chain_file

Unable to locate credentials. You can configure credentials by running “aws configure”.

おお、使えない。

sudo yum install python-pip
sudo pip install awscli

Unable to locate credentials. You can configure credentials by running “aws configure”.
まだ使えない。AccessKeyとSecretKeyが必要で、それを設定する必要があるらしい。このKeyはIAMから取得できるらしい。IAMってなんだ。まあ、今いらないからいいや。

単純にアップして、httpd.conf(ssl.conf)を設定したら反映された。
chromeは、キャッシュしているらしく、正常に反映した後でも、URLバーが赤い状態になっていたが、ブラウザを再起動したら緑になった。

vagrantでnginx使うためのuser変更

vagrantで、vagrantユーザをnginxに変更しようとしたらどうもできなかったので、nginxのユーザをvagrantにする。

vim /etc/nginx/nginx.conf
vim /etc/php-fpm.d/www.conf

上記2ファイルのuserをvagrantにします。
そして、再起動します。

service php-fpm restart
service nginx restart

エラー default cache was unable to write ‘hogehoge’ to Memcache cache

タイトルのエラーがでたりでなかったりする。あとそもそも認証のセッション保持期間が変。
capistranoでデプロイした後に、memcachedを再起動してるのですが、その後にhttpdも再起動しないとうまく動かなかった。

capistrano エラー currentディレクトリが削除できません

EC2のインスタンスをAMIから複製して、本番環境つくってcapistrano3で本番環境へのデプロイをつくっております。
でもエラーになりました。currentを削除できませんということです。

権限がおかしかった。
参考:http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-LAMP.html

sudo chown -R root:www /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} +
find /var/www -type f -exec sudo chmod 0664 {} +

EC2 – AMIをつくってサーバを複製する

AMIはAmazon Machine Imageです。インスタンスからAMIを作成して、そのAMIからインスタンスをつくることでサーバを複製できます。
AMIをつくるときにMySQLとかとまっちゃうと書いてあるので、サーバ停止せずに複製する場合は、インスタンスからSnapshotを作成して、SnapshotからAMIを作成するといいそうです。

参考:Amazon EC2(AWS) インスタンスをコピーしてサイトを複製

ちなみに今インスタンスからAMIつくったけど特になんにもとまってない気がする。

nginxでphpを使う(CentOS6.5)

参考:Nginx でPHPを動かす(php-fpmをインストールする) [PHP5.3以降の場合]

PHPをFastCGI化する必要があります。
php5.3がインストールされている場合、
yum php-fpmとやると、php-fpmがインストールできます。

vim /etc/php-fpm.d/www.conf
ここにuserとかgroupがapacheになっているので、nginxに変更します。
ちなみに、/etc/php-fpm.confがphp-fpmの基本設定ファイルになります。

vim /etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  localhost;

    charset utf-8;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }

    location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
        include        fastcgi_params;
    }
}

service php-fpm restart
service nginx restart

CentOS6.5 Nginxの最新版インストール

参考:CentOS-6へ最新版のnginxを3分でインストールする方法

sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
yum list nginx --disablerepo=* --enablerepo=nginx
sudo yum install nginx

nginx -v バージョン確認
nginx 起動

設定ファイルはこれっぽい。
/etc/nginx/nginx.conf
/etc/nginx/conf.d/default.conf

/etc/nginx/conf.d/default.confに、location / は、/usr/share/nginx/htmlだよと書いてある。
/var/wwwじゃないのか。

vagrantの場合下記のようにする。
ln -fs /vagrant/html /usr/share/nginx/html