edo1z blog

プログラミングなどに関するブログです

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&amp;$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