GCE × CentOS 7 × nginx × Let's Encrypt(certbot) × Node.js × Git  備忘録


##やること

Google Cloud Platform の
Google Compute Engine に
CentOS 7 でインスタンスを構築して
freenom で無料ドメインを取得して
certbot で無料SSL証明書を発行して
nginx でWebサーバーを立ち上げて
Node.js を公開する（nginxのリバースプロキシ使用）


個人的備忘録のため、説明不足で申し訳ないです。。。
そのうち、もう少しわかりやすくまとめます。


##Google Compute Engine を作成

Google Cloud Platform にログインして
VMインスタンスを生成（ブートディスクは CentOS 7 を選択）

 - ファイアウォールは **HTTP/HTTPSともに許可する**
 - その他はご自由に

できるだけ安くするなら、

 - リージョン/ゾーンは **us-XXXX**
 - マシンタイプは **f1-micro**
 - ブートディスクのサイズは **30GB以下**


生成したら外部IPを確認

ただし、node.jsで運用するとなるとマシンタイプがf1-microだと厳しいと思われます。


##freenomで無料ドメイン取得

[freenom](https://www.freenom.com/)

ドメインを取得したらDNSの設定をGCEの外部IPに設定する

なお、VMインスタンスはマシンタイプを変更するなどした場合に、
外部IPアドレスが変更されることがありますので、
その場合は、改めてfreenomのDNS設定を変更する必要があります。


##GCEにSSH接続


##SELinuxを無効化（config）

*リバースプロキシがうまく作動しないため

移動

```
cd /etc/selinux/
```

念のためバックアップ

```
sudo cp config config_back_up
```

編集

```
sudo vi config
```


```config.
SELINUX=enforcing
```

↓

```config.
SELINUX=disabled
```

編集が終わったらインスタンスをリセット


##nginxのインストール

nginxのインストール

```
sudo yum install nginx
```

確認のためにnginxを起動

```
sudo service nginx start
```

起動後、外部IPにHTTPアクセスして確認


##Let's Encrypt（certbot）でSSL証明書取得
[参考](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-centos-7)

certbotのインストール

```
sudo yum install certbot-nginx
```

移動

```
cd /etc/nginx/
```

念のためバックアップ

```
sudo cp nginx.conf nginx_back_up.conf
```

nginxの設定を変更

```
sudo vi /etc/nginx/nginx.conf
```

```nginx.conf
server_name _;
```

↓

```nginx.conf
server_name example.com www.example.com;
```

設定チェック

```
sudo nginx -t
```


SSL証明書発行

```
sudo certbot --nginx -d example.com -d www.example.com
```

同意しますか？ → A
メール送りますか？ → N
HTTPをHTTPSにリダイレクトしますか？ → 2

dhparam.pemを作成

```
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
```

nginxの設定を変更

```
sudo vi /etc/nginx/nginx.conf
```

```nginx.conf
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
```

```nginx.conf
# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
```

設定チェック

```
sudo nginx -t
```

nginxを再起動

```
sudo systemctl reload nginx
```

再起動後、外部IPにHTTPSアクセスして確認


###クーロンで毎月1日の午前4時に自動更新

*有効期間が３ヶ月のため

```
sudo crontab -e
```

```
00 04 01 * * /usr/bin/certbot renew --quiet
```

##Gitのインストール


パッケージをインストール

```
sudo yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker autoconf
```

##Node.jsのインストール

nvmのインストール

```
sudo git clone git://github.com/creationix/nvm.git ~/.nvm
```

```
source ~/.nvm/nvm.sh
```

node.jsのインストール

```
nvm install vX.X.X
```

*お好きなバージョンをインストール

nvm確認

```
nvm --version
```

node.js確認

```
node -v
```

npm確認

```
npm -v
```


##Node.jsファイルをGitでクローン

ホームディレクトリ内にnode.jsファイルをクローン

```
cd ~
```

```
mkdir XXXX
```

```
cd XXXX
```

```
sudo git clone https://github.com/********/****.git ./
```

node実行（適当なポートで受付）

```例.設定による
npm start
```


##nginxのリバースプロキシを設定

```
sudo vi /etc/nginx/nginx.conf
```

```nginx.conf
location [node.jsに振りたいパス（ルートなら / ）] {
    proxy_pass http://localhost:[ポート番号]/;
    proxy_cookie_path /XXXX/ //;
    proxy_set_header X-Forwarded-For $remote_addr;
}
```

*https(443)で受けているserver{}内


##以上

お疲れさまでした。