GCPでUbuntu16・Nginx・PHP7・cakePHP3環境をつくる

Google Cloud Platform(GCP)はAWSのgoogle版です。ここにサービスの説明があります。

Compute Engine

まずプロジェクトを作成する。次に、Compute Engineのコンソールで、VMインスタンスを作成する。ゾーンを日本、マシンタイプをf1-micro、OSをUbuntu16.10で作成してみた。数十秒程度でインスタンスが作成完了し、ブラウザ上でssh接続、ターミナル操作がすぐ可能になった。

マシンタイプの変更方法

参考:vm instanceのMachine type変更方法
IPをスタティックにして、ディスクを削除しないようにしながら、VMインスタンスを削除して、新しくインスタンスをつくるらしい。この間サーバは止まってしまう。でもいずれにしても結構簡単に切替は可能。

ローカル環境でssh接続できるようにする

google cloud SDKをインストールする。インストール完了したら初期設定が動き出すので、ログインしたりゾーン選択したりする。
Compute EngineのVMインスタンスの画面にある、ssh接続用のgcloudコマンドを実行する。これでssh接続できた。

PHPとかNginxとかをインストールする

$ sudo apt-get update
$ sudo apt-get install php
$ php -v
PHP 7.0.15-0ubuntu0.16.10.4 (cli) ( NTS )
$ sudo apt-get install nginx
$ nginx -v
nginx version: nginx/1.10.1 (Ubuntu)
$ sudo apt-get install git vim composer

デフォルトでapache2が入っていて起動されているようだ。
$ sudo systemctl stop apache2
$ sudo systemctl start nginx

Cloud DNS

https://cloud.google.com/dns/quickstart
上記に従って、DNS APIを有効にして、DNSコンソールからドメインを追加する。記載されているネームサーバに合わせて、ドメインのネームサーバを変更して、必要な設定をすると反映される。

Cloud SQL

Google Cloud SQL ドキュメント
Cloud DNSと同様にAPIを有効にしてインスタンスを作成する。Compute Engineから接続するには、ネットワークの承認が必要。下記にやり方が書いてあった。
MySQL クライアントを Compute Engine から接続する

Compute Engineを設定してCakephp3を動かす

$ sudo vim /etc/nginx/sites-available/default

server {
    listen 80;
    server_name hoge.com;
    root /var/www/html/hoge.com/webroot;
    index index.php;
    location / {
        try_files $uri $uri?$args $uri/ /index.php?$uri&$args /index.php?$args;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}

$ sudo systemctl restart nginx
$ cd /var/www/html
$ sudo apt-get install php-fpm php-intl php-mbstring php-zip
$ sudo composer create-project –prefer-dist cakephp/app hoge.com

Compute EngineをCloud SQLにつなぐ

phpmyadminを使う

$ sudo apt-get install mysql-client
$ sudo apt-get install phpmyadmin
$ sudo vim /etc/phpmyadmin/config-db.php

config-db.php

$dbname='hoge';
$dbserver='<Cloud SQLのIPアドレス>';
$dbport='3306';
$dbtype='mysql';

$dbnameがないとエラーになるけど、内容は適当でも大丈夫だった。

$ sudo echo “hoge:$(openssl passwd -apr1 hogepassword)” > /path/to/hogepath
$ sudo chmod 604 /path/to/hogepath
$ sudo vim /etc/nginx/sites-available/default

#Phpmyadmin
server {
    listen 80;
    server_name hogehoge.com;
    auth_basic 'input';
    auth_basic_user_file /path/to/hogepath;
    root /usr/share/phpmyadmin;
    location / {
        index index.php;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}

コマンドラインでmysqlにつなぐ

$ mysql –host=[INSTANCE_IP_ADDR] –user=root -p

cakephp3でmysqlにつなぐ

$ sudo vim /var/www/html/hoge.com/config/app.php
hostをCloud SQLにする。

Let’s EncryptでSSL取得・設定

hoge.comとphpmyadminをhttps接続のみ可能にする。hoge.comにhttpアクセスした場合はhttpsにリダイレクトさせる。

$ sudo apt-get install letsencrypt
$ sudo systemctl stop nginx
$ sudo letsencrypt certonly –standalone -d hoge.com
$ sudo letsencrypt certonly –standalone -d hogehoge.com
$ sudo systemctl start nginx
$ sudo vim /etc/nginx/sites-available/default

#hoge.com cakephp3
server {
    listen 80;
    server_name hoge.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/hoge.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hoge.com/privkey.pem;
    server_name hoge.com;
    root /var/www/html/hoge.com/webroot;
    index index.php;
    location / {
        try_files $uri $uri?$args $uri/ /index.php?$uri&$args /index.php?$args;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}
#Phpmyadmin
server {
    listen 443;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/hogehoge.com/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/hogehoge.com/privkey.pem;
    server_name hogehoge.com;
    auth_basic 'input';
    auth_basic_user_file /path/to/hogepath;
    root /usr/share/phpmyadmin;
    location / {
        index index.php;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}

$ sudo systemctl restart nginx

さくらVPSでcakephp3を動かす

環境

Ubuntu 16.04
PHP 7.0
Nginx 1.10

composerインストール+git clone

$ apt-get install composer
$ php -v
PHP 7.0.8-0ubuntu0.16.04.3 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.8-0ubuntu0.16.04.3, Copyright (c) 1999-2016, by Zend Technologies
$ apt-get update
$ apt-get install php7.0-intl
$ cd hoge.com
$ git clone hoge.git .
$ composer install

Nginx設定

$ vim /etc/nginx/sites-available/default

server {
        listen 443;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/hoge.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/hoge.com/privkey.pem;
        server_name ~^c(?<no>\d+?)\.hoge\.com$;
        root /var/www/c/$no/webroot;
        index index.php;
        location / {
                try_files $uri $uri?$args $uri/ /index.php?$uri&$args /index.php?$args;
        }
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }
}

NginxでBasic認証

Ubuntuです。

Basic認証のパスワードファイルの作成

opensslを使います。下記のhogeは、Basic認証のIDを入れます。hogepasswordがパスワードです。

$ sudo echo "hoge:$(openssl passwd -apr1 hogepassword)" > /path/to/hogepath
$ sudo chmod 604 /path/to/hogepath

Nginxの設定

serverブロックの中に下記を追加します。

auth_basic 'input';
auth_basic_user_file /path/to/hogepath;

mac – El CapitanでcakePHP3を使う

Macの状態

  • macは、El Capitan 11.10.5です。
  • すでに、PHP7、MySQL、Nginxが入っています。composerもインストール済みです。
  • Nginxのドキュメントルートは、/usr/local/var/wwwです。

cakephp3のプロジェクトを作成する

ドキュメントルートに移動して、hogeプロジェクトを作成します。

$ cd /usr/local/var/www
$ composer self-update && composer create-project --prefer-dist cakephp/app hoge

php-fpmが変だったので直した

cakePHP3は、php5.5.9以上が必要で、php7もOKということで、php7をインストールしました。しかしphp-fpmのバージョンを確認すると、以前インストールされていたphp5.3のものでした。

php7のインストールは、 mac – phpを7.0にバージョンアップに記載の方法でやりました。php7のパスは、/usr/local/php5/binです。これに対応するphp-fpmは、/usr/local/php5/sbin/php-fpmです。なので、/usr/local/php5/sbinもパスに加えたらOKになりました。

.bash_profileを開く

$ vim ~/.bash_profile

下記を最後に追加する

#php7
PATH=/usr/local/php5/bin:$PATH
PATH=/usr/local/php5/sbin:$PATH

.bash_profileを読み込む

$ source ~/.bash_profile

php-fpmを起動

$ php-fpm

php-fpmのバージョン確認

$ php-fpm -v
PHP 7.0.6 (fpm-fcgi) (built: May 24 2016 23:07:56)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
    with Xdebug v2.4.0RC3, Copyright (c) 2002-2015, by Derick Rethans

Nginxの設定をcakephpに合わせて変更する

nginx.confを修正する

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen   8080;
        server_name www.localhost;
        rewrite ^(.*) http://localhost$1 permanent;
    }

    server {
        listen   8080;
        server_name localhost;

        # root directive should be global
        root   /usr/local/var/www/hoge/webroot/;
        index  index.php;

        access_log /usr/local/var/log/access.log;
        error_log /usr/local/var/log/error.log;

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

        location ~ \.php$ {
            try_files $uri =404;
            include /usr/local/etc/nginx/fastcgi_params;
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
}

Nginxを再起動する

$ nginx -s reload

mac El CapitanにNginxをインストール

macは、El Capitan 10.11.5です。

Nginxインストール

$ brew install nginx

インストールできた。

Nginxのバージョン確認

$ nginx -v
nginx version: nginx/1.10.0

Nginxの設定を確認

下記に設定ファイルがあります。

$ vim /usr/local/etc/nginx/nginx.conf

rootには、htmlと書いてあるだけですが、ドキュメントルートは、/usr/local/var/wwwでした。

NginxでPHPが動くようにする

上記nginx.confの65行目〜71行目付近を下記のようにコメントを外して、編集します。

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

Nginxを再起動する

$ nginx -s reload

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を変更してちょっとだけ使った。

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

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