ローカルではゴリゴリに動いているDjangoアプリケーションをデプロイするときに,何度も何度も失敗して悲しい思いをしたので自分用にまとめます.お察しの通りあんまりLinuxサーバに詳しいわけではないので,間違ってオジャンにしても責任取れません.悪しからず.
さくらVPSを利用して環境構築していきましょう.
タイトルにもある通り,Ubuntu18.04をインストールしてあり,Windows10からTeraTermで接続します.
さくらVPSのダッシュボードからサーバーにOSをインストールする時のナンチャラ=カンチャラはデフォルトのままでOKだと思います.
結構長くなったので分けて書いていきます
その0 リモートの本番環境にSSHでアクセスする
その1 pythonの環境を整える(pyenv, pipenv)
###その2 のこり
というわけで行ってみよう.
いつもの
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のヘルプページの手順通りに設定しました.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のヘルプページにお世話になって変更作業を進めます.
ログイン周りの設定を行うためには一般ユーザ(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
もちろんubuntu
としてログインしたままのシェルがあるならそこからでも問題ないですが,この作業が終ってしまえばそれ以降はubuntu
として操作してしまうとややこしいことになる原因になりかねないです.そっとシェルを閉じておきましょう.
###ポート番号について
先にあげた手順に対して行いたい補足が少しあります."ポートの変更については任意"みたいな書き方してますが,僕は変更した方がいいと思っています.
以前僕そうだったように,ポートが何か分からない方は無難にPort22
のまま進めがちだと思うのですが,この機会にこちらのサイト様をご一読されてみてはいかがでしょうか.
基本的に使う番号は22以外なら何でもいいみたいなんですが,ベストなのは49152番~65535番から選ぶことみたいですね.もし万一かぶってしまっても,あとでまた変更できるのでとりあえずは適当に決めてしまいましょう!
####使いたい番号が"いま使われていない"ことを確認する
コマンドで確認できます.例えば1100の使用状況を確認するならこんな感じです.
ttimes@xxx-xxx-xxxxxx:~$ sudo lsof -i:1100
なにか帰ってきたら使用中のポートということですが,逆に何も帰ってこなかったら今は空いていることになります.
####使いたい番号が"将来的につかわれないこと"を確認する
先ほどの参考サイト様では,検索などでざっくり調べておくなど,念には念を入れておくことをおおすすめしていますね.
決まったポート番号は,下のコマンドから設定ファイルに書き込むことで有効化できます.
ubuntu@xxx-xxx-xxxxxx:~$ sudo nano /etc/ssh/sshd_config
ちなみに,ちょこっと定数変更したりするだけなら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
今日はここまで.その1へ続く予定