概要
前回(Server Error 500 を表示)までで作った Django プロジェクトをデプロイする……のだけどまたサーバを借り直して資料を作るのはスゲー面倒なので当時のメモをまとめていく感じで書く。
いや、デプロイは初心者にはマジでキツイ。サイト公開に何が必要なのか、さっぱりわからんし。今回はそんな過去のぼくに宛てて書こう。 Django サイトをウェブで公開するということがどういうことなのか。軽く調べたらこんな感じみたい。
https://xxx/
で誰かがアクセスをする。そのアクセスは DNS というところへ届く。- DNS が
xxx
を実際の IP999.999...
に変換してルーティングする。 999.999...
にはぼくが借りたサーバがある。https
のアクセスには Apache 先輩が対応してくれて、 Django の内容を配信する。
よってぼくらが必要とするものは以下だ。
- Django を置くサーバ。(今回は さくらVPS というサービスで入手。)
- ドメイン。(今回は お名前.com というサービスで入手。)
- http を https にする処理。(サーバ内でコマンド打つだけでいい。)
個人的な感想としては、ドメインもさくらで借りたほうがいいぜ。というのもお名前.com へのぼくの心象が悪いからなんだが。さくらのほうがサービスや窓口が良心的だと感じるし、公式ウェブサイトもシンプルでユーザビリティが高い。それとだな、クレカ払い特典の「2週間お試し無料」は嬉しいね。月額もやっすい。一番小さいプランなら1,000円かからない。
お名前からは物凄い量の広告メールが届く。それに誤クリックを誘うあのゴチャゴチャなウェブサイトはナイよな。ドメインにお名前を利用しているのは、ただぼくが最初に見つけたドメイン業者で、よくわからないままに契約した情弱だったからだぜ。年額はさくらのほうが数百円高いけどね。だけどずっと使うサービスとしては、ぼくはさくらさんを選びたい。
デプロイに必要な料金
がんばってやり遂げた身としては、具体的な方法論を後進に残したくなる。ただ、思い出してみるとぼくがサーバとかよくわからんころ、まず気になったのは料金だったよ。この趣味はいくらくらいかかるんだろう?
ドメイン
お名前ドメインは初年度が1,000円ちょい(名前によるが)、更新が年ごとで、また1,000円ちょい。公式ページ を見てみるとわかるけど更新料が明示されていないのが悪印象だ。ただし価格としては最安値だそう。
サーバ
さくらVPS はストレージ20GBでメモリ512MBのが初期費用1,000円ちょい、月額700円くらいで借りれる。さらにクレカ払いの場合2週間のお試し期間が与えられる。ただその間はメール機能が使えないらしいけど。
公式ページ を見てのとおり、スペックが上がるごとに少しずつ値上げされる。参考までに述べておくと、みろりHPはもっとも低い512MBで動いているよ。
お名前のホームページを見たあとにさくらを見るとそのシンプルさゆえにファンになる。
linux サーバを借りたい場合、 VPS の他にクラウドという選択肢があった。今風だから最初は最有力候補だったんだけどとにかく高価。運用途中でスペックを変更することが容易なのがウリらしいけど、個人の趣味としてはちとな。
結論
というわけで、ドメインでアホみたいに高いやつを選ばず、サーバも最小構成でいいとなれば(ぼくが選んだように)
ドメイン年額1,000円ちょい + サーバ年額8,000円くらい = おおよそ年額10,000円くらい
ってことになるんじゃないか。半年くらい続けてみて不満がなければサーバは年額契約にして、ちょろっとお安くしよう。
ファイアウォールの設定を provision.sh に追加
と、実際の作業はここから。
「なるべく本番環境に近づけて」と作っていった開発環境だったけれど、ファイアウォールの設定を追加しないとダメだ。というのも Vagrant で作った CentOS はもともとファイアウォールが無効になっているので、これを設定する必要がなかったのだよ。
$ vagrant ssh
# このとおり、無効になっている。
$ firewall-cmd --list-services --zone=public --permanent
FirewallD is not running
provision.sh の以下のように書いてたところを……
#
# ファイアウォールの設定を書く予定。
#
こうする。
# ファイアウォールの設定。
systemctl restart firewalld
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-service=https --zone=public --permanent
systemctl restart firewalld
#
# MySQL の設定を追加予定。
#
さくら VPS
VPS を借りる
実はだな、ぼくがアレコレ書くよりよっぽど良いナビゲーション記事が公式に用意されている。
ちゃんとした内容だと感じる。このページの「VPSの利用申し込みをしよう」の項目をたどれば VPS を晴れてゲットできるはずだ。ゲットしたらこれまた記事に従って CentOS7 をゲットする。注意する点としては、各手続きにはすこし時間がかかるから、手続き中は座してメールを待つことだな。
「申し込みをしよう」の続きには yum
とかのナビゲーションがあるけれど、今回は Vagrant の CentOS を使って、 CentOS の初期状態からの全環境構築を抑えてあるからそこんとこは無視。他記事に Apache インストールとかもあるけど、自作した provision.sh に全部記述したから不要だ。
VPS に ssh 接続
これはネコでもわかる記事にあるとおり。
$ ssh root@借りたサーバのIP
VPS に SFTP 接続
ぼくは Cyberduck を使って SFTP 接続をする。 linux サーバの中身が Finder みたいに見れてとっても便利。接続設定は ssh 接続でも使った IP,User,Password をそのまま。
プロジェクトを設置
vagrant フォルダをルートに作り、その中にプロジェクトをコピー。必要なものだけ。
ssh 接続で provision.sh を実行。 sudo は必要だったかよく覚えてない。
$ sudo bash /vagrant/provision.sh
これでもう http://IPアドレス/
でアクセスできるはず。
お名前 ドメイン
こちらのページからドメイン検索してレンタル。レンタルの際にはWhois情報公開代行に必ずチェックを入れること。デフォルトで入ってた気もする。
借りたら下記手順で IP とドメインの紐付け。
- お名前.com Navi ドメイン設定 にアクセス。
- DNS 関連機能設定 へ。
- ドメインを選択して、次へ。
- DNS レコード設定を利用する へ。
- 下記設定でひとつ追加。
項目 | 値 |
---|---|
ホスト名 | www.xxx.com(例) |
TYPE | A |
VALUE | IP を書く |
30分も待てば http://www.xxx.com/
でアクセスできるはず。
https(というよりこれは SSL というものらしい)
Let's Encrypt という NPO が無償で https を使うことを可能にしてくれている。下記コマンドで https アクセスが有効化する。
# 必要なものの yum install。
$ yum -y install mod_ssl epel-release certbot python-certbot-apache certbot-apache
# www.xxx.com のところは自分のドメインにして実行。
$ certbot --authenticator standalone --installer apache -d www.xxx.com --pre-hook "apachectl stop" --post-hook "apachectl start"
# Apache 再起動。(これが必須かはわからん。)
$ apachectl restart
これで https://www.xxx.com
でアクセスできるはず。
ちなみにみろりHPも Let's Encrypt サンのお力で https 化しているぜこのとおり。
SSL の更新
上の画像でわかるとおり SSL には有効期限がある。 Let's Encrypt サンのやつは三ヶ月ごとに更新しないといけないらしいぜ。更新コマンドは以下。
$ apachectl stop
$ certbot renew --force-renewal --dry-run
# www.xxx.com のところは自分のドメインにして実行。
$ openssl x509 -in /etc/letsencrypt/live/www.xxx.com/fullchain.pem -noout -dates
$ certbot renew --force-renewal
$ apachectl start
次回予告
というわけで前回「本当のゴール」と称した本番環境での公開も完了だ。ウェブサイトの中身は何も作ってないけれどな! これで、ぼくが DjangoNote シリーズで書きたかったことはオシマイだ。
が、まあ provision.sh に記入待ちの箇所がいくつかあるから……
# あとでベーシック認証用の設定を追加予定。
# DB の初期データをロードするコマンドを書く予定。
# MySQL の設定を書く予定。
次回以降はそのへんを埋めてみるか。
# おつかれやんした git commit.
$ git add --all
$ git commit -m "VPS でデプロイするところまで"