前回までのあらすじ
▶ PythonでWebアプリを作ってみたくなった。勉強する過程をメモしていく。
こんな感じで、Webアプリを作るなら公開するところまで持っていきたいし、他の人にも使ってもらえるものを作りたい。
定額でVPSを使ってみることができそうな「さくらVPS」を契約してみた。
この記事は、初めてVPSを触る者がOSをインストールしたりファイアウォールの設定に手こずったりする話。
というのは建前で、自分がまたVPSを新しく借りたときのために、手順をメモしておく。
OSを入れて最小限のセキュリティとか設定
OSインストール
さくらVPSの会員メニューからやる。
このときrootのパスワードを作るのでメモとかする。
更新があれば更新もしておく。
RLoginをパソコンに入れる
Windows10ユーザーなので、こういうやつが要る。
さくらVPSの会員メニューからVNCコンソールも開けるけど、rootでログインできなくしたり、パスワードのみのログインをpermitしたりしたのを確認できるので、RLoginは入れて正解。
入れれたら、RLoginからrootでログイン。
さくらVPS上のパケットフィルタをオフ&ファイアウォールを有効に
・さくらVPSの画面でパケットフィルタをオフに
・ファイアウォールを有効に(systemctl start firewalld.service 。状態確認は systemctl status firewalld.service)
一般ユーザーの作成・sudoできるように
・一般ユーザーを作成 (useradd xxxx の後、passwd xxxxと打ってからパスワードを入力)
・sudoを使えるように(usermod -G wheel xxxx)
・一般ユーザーでログインしなおしておく
鍵を作ってSSHログインできるようにする
手順は ▶ 【ssh】公開鍵認証 設定~接続まで/はしくれSEめも が詳しい。
公開鍵を作る、秘密鍵をコピペしておく。
自分のメモ帳かなんかに秘密鍵をコピペしてrsa_idとか適当な名前をつけてPCに保存。
RLoginからSSH鍵を使ってログインしてみる。
今までのログインのところを編集してSSH鍵をクリックしてさっきのrsa_idを選択してからログインする。
sudo vi /etc/ssh/sshd_config で書き換えてパスワードログインやrootをpermit
sudo vi /etc/ssh/sshd_config でパスワードログインのとこをnoにする、rootログインを禁止にして再起動→ログインできるか確認
できたら、再びsudo viしてポート番号を変更して再起動→ログインできるか確認
さくらVPSのVNCコンソールから、ファイアウォールのポート番号を設定してファイアウォールをrestart
(ファイアウォールを事前に停めておいたらRLogin状態からポート番号変更できそう。
今回はそのままでやってしまったので、VNCからrootでログインしてファイアウォールのポート番号を設定した)
RLoginから新しいポート番号でログインできるか試した。
アップデートの設定とかを人さまのサイトを参考に丸パクりさせていただく
- OSの自動アップデート設定
- SELinuxの無効
- ロケールの変更
を、さくらVPSでDjangoアプリを公開する手順の備忘録 というnoteの5の最後をそのまま真似させていただいて設定しました。
Nginxを入れたりPython3.7入れたり
Nginxを入れる
適当にサイト参考にして入れた。yumです。
Apacheと迷ったけど、2019年の時点でNginxのほうがシェアが高いらしいのでNginxに。
さくらVPSを本契約に。
ほんとはNginx入れたあとSSL証明書とってhttpsにしたかったんだけど、独自ドメインを使うにはVPSの仮契約だとダメっぽい。
なのでVPSを本契約に。
待ち時間にPython3.7を入れる。
Python3.7を入れる
このページをそのまんま真似しました。
さくら VPS CentOS7 に Python3.7 をインストールしてみる
独自ドメイン取ってネームサーバ―の設定をする
独自ドメインを結局とる
「独自ドメイン取らなくてもいいよなーお試しだし」と思っていたけど、SSL証明書ともらう段になって色々ググってると、みんな独自ドメインを取ってるっぽいので、
一応独自ドメインを取った。
独自ドメインはたいてい1年目はめっちゃ安い(特にxyzとか)ので、取った。
ネームサーバの設定をする
このあたりで3日ほど、「ネームサーバって何?」「DNSサーバとどう違うの?」とぐちゃぐちゃ悩んだり調べたりした。
Xドメインで取ったドメインを、さくらVPSに移管せずに使うには、
- いつものさくらVPSのコントロールパネル(VNCコンソールとか出すとこ)の左側のメニューの「ネームサーバ―登録」を押す。(さくらインターネットの会員メニューが開かれる。これ。)
- 左のメニューの「ネームサーバ新規登録」を選び、一番下の空欄に取得したドメイン名を入れて「送信する」
- すると、同じく左メニューの一番上「ドメインリスト」に表示されるようになる
- 「ゾーン編集」をクリックして、遷移した画面の左側の「変更」をクリック
- NS(ネームサーバ)の欄に ns1.dns.ne.jp. とns2.dns.ne.jp. を入れる。A(ホストのIPアドレス)のとこには、さくらVPSで取ったサーバのIPアドレスを入れる
ということをまずやって、そのあと
- Xドメインの会員メニューにログイン
- トップページ下のほうの「ご契約一覧」から該当ドメインの「ドメインパネル」を選択
- 下にスクロールしていくと【 ネームサーバー情報 】というのがあるので、【設定変更】をクリック
- ネームサーバ―1とネームサーバ―2に ns1.dns.ne.jp. とns2.dns.ne.jp. を入れる。
って感じ。
これでURLにアクセスした人はさくらのネームサーバからIPアドレスを教えてもらえます。
確認
普通のブラウザで、URL欄にドメイン名を入れて、Welcome to CentOS~みたいなのが出れば、なんとなくネームサーバの設定はOK。
正しく確認するにはhostコマンドを使うといいっぽい。
参考▶ CentOS 7のNginxにLet’s Encryptを導入してサイトをHTTPS化する方法 > 1. ホスト名の正引き確認
Let’s EncryptにSSL証明書を発行してもらうあたり
ファイアウォールにhttp接続とhttps接続を許可
# firewall-cmd –add-service=http –permanent
# firewall-cmd –add-service=https –permanent
# firewall-cmd –reload
こんな感じ。
certbotをインストール
ここでepelをインストールしたんだったかな…。記憶が薄いけど、
# yum install epel-release
# yum install certbot
の2つでcertbotをインストールしました。確かコマンドは先ほども挙げたnoteに書いてあったのを真似した。
SSL証明書をもらう
sudo systemctl stop nginxでNginxを止めてから、
# certbot certonly –standalone -d (取ったドメイン名)
で、Acceptしたり、メールは要らないよってNoしたりして。無事もらえました。
CentOS 7のNginxにLet’s Encryptを導入してサイトをHTTPS化する方法 > 5. サーバー証明書の作成 を見ながらやりましたが、wwwを外したドメイン名のみ。
上記URLの 5.4のdhparam用ファイルの作成もそのまま真似してやりました。
NginxでSSL通信の設定
設定ファイルは色々探した結果、 /etc/nginx/nginx.conf に設定が書いてありました。
まずhttps接続のところにSSL証明書を参照してもらうように
server {
listen 443 ssl;
の下に
ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;
を追記。
# nginx -t
でokが出るのを確認して、Nginxを再起動。
https://ドメイン名 にアクセスしてURLのとこに鍵マークが出ればOK。
httpからhttpsに自動でリダイレクトされる設定
これもやりました。Nginxを再起動。
http://ドメイン名 にアクセスして、https://にリダイレクトされたらOK。
次の課題はindex.htmlやDjangoのview関数からhello worldすること
長くなってきたので記事を分けます。
このあとはindex.htmlに何か書いてみて表示させたり、
Djangoをインストールしてビュー関数からhello worldを表示させたりしたい。