俺のUbuntu18.04 LTSの初期設定メモ(後編)

[俺のUbuntu18.04 LTSの初期設定メモ(前半)](https://qiita.com/dansuke@github/items/f6c92bcd9fbac8fcb007)
これの続編です。
##今回やること
- Nginxの導入と初期設定
- certbotの導入
- pyenvの導入とPythonのインストール

##Nginxの導入と初期設定
最新版(現時点)を入れます。
[公式](http://nginx.org/en/linux_packages.html#Ubuntu)にある通りにインストール

```terminal
$ sudo apt install curl gnupg2 ca-certificates lsb-release

$ echo "deb http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

$ curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

$ sudo apt-key fingerprint ABF5BD827BD9BF62


$ sudo apt update
$ sudo apt install nginx
```

###Nginxの初期設定

####起動

```terminal
$ sudo systemctl enable nginx   # エナブル

$ sudo systemctl start nginx   # 起動

$ sudo systemctl status nginx   # 起動確認
```

####WEBルート設定

```terminal
$ sudo mkdir -p /var/www/example.com/html   #WEBルート作成

$ sudo chown -R $USER:$USER /var/www/example.com/html   #オーナー変更

$ sudo chmod -R 755 /var/www/example.com   #パーミッション変更

$ echo hello > /var/www/example.com/html/index.html   # index.htmlを作成
```

####conf設定
初期設定では`/etc/nginx/conf.d/`の中にある`*.conf`ファイルを読み込む。
それぞれの運用方法にあった管理方法を選択すること。

今回は`/etc/nginx/sites-available`に作った設定ファイルを`/etc/nginx/sites-enabled`の中にシンボリックリンクとして貼り付け、その中を読み込む設定する。
そうすることでサイトを落とす時にリンクを削除するだけになるみたい。

**シンボリックリンク貼る時は絶対パス！(これでハマった)**

```terminal
$ cd /etc/nginx

$ sudo mkdir sites-available   #各サイト用conf置き場
$ sudo mkdir sites-enabled   #アクティブなサイトのショートカット置き場

$ sudo cp conf.d/default.conf sites-available/example.com   # confファイルをコピー
$ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
```
####example.com(.conf)の編集
```diff:/etc/nginx/sites-available/example.com

-  server_name  localhost;
+  server_name  example.com;

- root   /usr/share/nginx/html;
+ root   /var/www/example.com/html;
```

####nginx.confの編集

`/etc/nginx/sites-enabled`の中身を読み込むように変更

```diff:/etc/nginx/nginx.conf

- include /etc/nginx/conf.d/*.conf;
+ include /etc/nginx/sites-enabled/*;
```

####設定ファイルの読み込み

```terminal
$ sudo nginx -t   # シンタックスチェック
$ sudo nginx -s reload   # 設定ファイル読み込み
```

`example.com`またはサーバーIPにアクセスして表示されればOK。

##certbotの導入
簡単に無料SSL化できるツール。

[certbot](https://certbot.eff.org/)

こちらも公式通りにインストール

```terminal
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt update

$ sudo apt install certbot python-certbot-nginx
$ sudo certbot --nginx   # いろいろ聞かれるの答えていく。

$ sudo certbot renew --dry-run   #自動更新テスト

$ ls -la /etc/cron.d/   # certbotのcronがあるか確認
```

`https://example.com`にアクセスして、SSL化されていたらOK。


##pyenvの導入
[pyenv installer](https://github.com/pyenv/pyenv-installer)を使う。

```terminal
$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
```

`~/.profile`に以下を追記

```bash:~/.profile
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
```
```terminal
$ source ~/.profile   # 再読み込み
$ pyenv update        # pyenvアップデート
```

###使い方

```terminal
$ pyenv install --list   # インストールできるリスト
$ pyenv install x.x.x    # version指定してインストール

$ pyenv version          # 使用中のバージョン
$ pyenv versions         # インストール済みのリスト

$ pyenv global x.x.x     # グローバル指定
$ pyenv local x.x.x      # ローカル指定

$ pyenv uninstall x.x.x  # 削除

$ pyenv -v                # pyenvのバージョン
```

###pyenvのpythonインストールでコケる時
いろいろ足りないのが原因なので、一括インストール

```terminal
$ sudo apt install libffi-dev zlib1g-dev git gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev
```

以上。

##次回やること
- pipenvの導入
- responderの導入

参考：
[nginxでsites-availableとsites-enabledを用いたバーチャルホストの設定](https://yoshinorin.net/2018/04/01/nginx-virtualhost-usingby-sitesavailable/)
[どのバージョンのnginxを使うべきか？](https://bokko.hatenablog.com/entry/2014/05/24/220554)
[NGINX Versioning Explained](https://www.nginx.com/blog/nginx-1-16-1-17-released/)