Ubuntu18.04 + pyenv + pipenv + Django + Apache2 なデプロイ その０

ローカルではゴリゴリに動いているDjangoアプリケーションをデプロイするときに，何度も何度も失敗して悲しい思いをしたので自分用にまとめます．お察しの通りあんまりLinuxサーバに詳しいわけではないので，間違ってオジャンにしても責任取れません．悪しからず．
さくらVPSを利用して環境構築していきましょう．
タイトルにもある通り，Ubuntu18.04をインストールしてあり，Windows10からTeraTermで接続します．
さくらVPSのダッシュボードからサーバーにOSをインストールする時のナンチャラ=カンチャラはデフォルトのままでOKだと思います．

結構長くなったので分けて書いていきます
### [その０](https://qiita.com/_branch_/items/e9c22d9e51ed3ed8d0bb) リモートの本番環境にSSHでアクセスする
### [その１](https://qiita.com/_branch_/items/633055f69503aec96156) pythonの環境を整える（pyenv, pipenv）
###[その２](https://qiita.com/_branch_/items/7c225cbc277d53b71f0e) のこり

というわけで行ってみよう．

# いつもの
```
ubuntu@:~$ sudo apt update
ubuntu@:~$ sudo apt upgrade
```

# rootユーザーにプレインパスワードで接続し続けるのは絶対ダメ！
玄関のドア全開で，家の鍵を玄関のど真ん中に置いたまんまにしとくぐらい危ないです．知らんけど．

##というわけで，，，
###ログインユーザを作成し，sudoの実行権限を付与します
ユーザを作成していきましょう．今回はアプリケーション名にちなんでttimesというユーザを作成します．

そういえば僕は事前にラズパイとかでLinuxサーバを触ったことがあったので知ってたんですが，パスワード入力の場面で入力してても何も入ってるように見えないのなかなかびっくりしますよね．

```
ubuntu@:~$ sudo adduser ttimes

[sudo] password for ubuntu: （管理ユーザのパスワード入力）  # sudo実行のために必要　今後もたまに聞かれるよ．
Enter new UNIX password: （一般ユーザのパスワード設定）     # 作成するユーザにログインするときに必要．
Retype new UNIX password:
passwd: password updated successfully                    # パスワード設定成功！

Changing the user information for ttimes                 # 手帳の持ち主情報ページみたいなことを聞かれる
Enter the new value, or press ENTER for the default      # 基本的に全部空白でいいと思ってます
Full Name []:                                            # 設定しない場合はEnter
Room Number []:                                          # 設定しない場合はEnter
Work Phone []:                                           # 設定しない場合はEnter
Home Phone []:                                           # 設定しない場合はEnter
Other []:                                                # 設定しない場合はEnter
```
これでユーザーができました．
###次はsudoの実行権限付与です．

```
ubuntu@:~$ sudo gpasswd -a ttimes sudo

Adding user ttimes to group sudo
```

###次にSSH接続設定をします
SSH接続についてはWindows10ユーザの僕は[さくらVPSのヘルプページ](https://manual.sakura.ad.jp/vps/support/technical/ssh-ch.html)の手順通りに設定しました．`ttimes`でプレインパスワードを使ってログインしたうえで，参考ページの通りに設定を進めました．
使うコマンドとしては以下の通り．

```
ttimes@xxx-xxx-xxxxxx:~$ mkdir .ssh
ttimes@xxx-xxx-xxxxxx:~$ chmod 700 .ssh
ttimes@xxx-xxx-xxxxxx:~$ cat id_rsa.pub > .ssh/authorized_keys
ttimes@xxx-xxx-xxxxxx:~$ chmod 600 .ssh/authorized_keys
ttimes@xxx-xxx-xxxxxx:~$ rm -f id_rsa.pub
```

ここまで設定できたら，ついでにこのままセキュリティ面を強化していきましょう
##ポート変更・rootログインの禁止・パスワードログインの禁止
同じく[さくらVPSのヘルプページ](https://manual.sakura.ad.jp/vps/support/technical/ssh-ch.html#id5)にお世話になって変更作業を進めます．
ログイン周りの設定を行うためには一般ユーザ(ttimes)では権限不足なので，以下のコマンドで管理ユーザとして設定していきます．
さくらVPSのヘルプページでは`su -`を使っていますが，ubuntuではFailするので，以下のように`sudo -i`を使います．入力するパスワードは，`ttimes`のものではなく`root`のものです．

```
ttimes@xxx-xxx-xxxxxx:~$ su -
Password:
su: Authentication failure
ttimes@ik1-217-78942:~$ sudo -i
[sudo] password for ttimes:
root@xxx-xxx-xxxx:~# nano /etc/ssh/sshd_config

```

:::note
もちろん`ubuntu`としてログインしたままのシェルがあるならそこからでも問題ないですが，この作業が終ってしまえばそれ以降は`ubuntu`として操作してしまうとややこしいことになる原因になりかねないです．そっとシェルを閉じておきましょう．
:::

###ポート番号について
先にあげた手順に対して行いたい補足が少しあります．"ポートの変更については任意"みたいな書き方してますが，僕は変更した方がいいと思っています．
以前僕そうだったように，ポートが何か分からない方は無難に`Port22`のまま進めがちだと思うのですが，この機会に[こちらのサイト様](https://www.braveryk7.com/change-22-port/)をご一読されてみてはいかがでしょうか．

基本的に使う番号は22以外なら何でもいいみたいなんですが，ベストなのは49152番～65535番から選ぶことみたいですね．もし万一かぶってしまっても，あとでまた変更できるのでとりあえずは適当に決めてしまいましょう！
####使いたい番号が"いま使われていない"ことを確認する
コマンドで確認できます．例えば1100の使用状況を確認するならこんな感じです．

```
ttimes@xxx-xxx-xxxxxx:~$ sudo lsof -i:1100
```
なにか帰ってきたら使用中のポートということですが，逆に何も帰ってこなかったら今は空いていることになります．

####使いたい番号が"将来的につかわれないこと"を確認する
先ほどの参考サイト様では，検索などでざっくり調べておくなど，念には念を入れておくことをおおすすめしていますね．
決まったポート番号は，下のコマンドから設定ファイルに書き込むことで有効化できます．

```
ubuntu@xxx-xxx-xxxxxx:~$ sudo nano /etc/ssh/sshd_config
```

:::note
ちなみに，ちょこっと定数変更したりするだけなら`vi`とか`vim`とかは無駄に使いにくくてストレスフルではないですか？
僕的にはシェル上でゴリゴリとコードを書いて開発していくような方でもないなら，`nano`で簡単に進めるのがおすすめです．ほぼ普通のエディタとして，直感的に使用できます．
:::

設定が完了したら，設定を反映させるために再読み込みを掛けましょう．
先ほどと同じく，`/etc/rc.d/init.d/sshd reload`ではうまく動かないので`service ssh restart`を使います．多分`sudo systemctl restart ssh`でもいい．

```
root@xxx-xxx-xxxxx:~# /etc/rc.d/init.d/sshd reload
-bash: /etc/rc.d/init.d/sshd: No such file or directory
root@xxx-xxx-xxxxx:~# service ssh restart
```

最後は念のため再起動．TeraTermの接続は切れます．

```
ubuntu@xxx-xxx-xxxxxx:~$ sudo reboot
```

今日はここまで．[その１](https://qiita.com/drafts/633055f69503aec96156/)へ続く予定