LightsailでDjangoを始める【入門編1.1】

5月 10, 2020

この記事の前提条件

AWS Lightsailを使ってDjangoを使ったWebサイトの構築方法について書いていきます。そのため、次の知識があること、及び設定済みであることを前提にしています。
・独自ドメインを取得済み
・AWSを登録済み
・ローカルPCがMacでターミナル操作ができる
・パーミッションの意味がわかる
・Vimの操作ができる

Lightsailとは

Amazonが提供する格安VPSサービスです。 月額固定で$3.5なので格安な上に、簡単(サーバーのプロビジョニングのコストが低い)というメリットがあります。
AWSの利用を検討する場合、一番困るのが従量課金という点です。つまり、利用量によってAWSから何十万円のような金額をいきなり請求されてしまうのではないかという不安がどうしても出てきてしまいます。この点を解決したのがLightsailというサービスで毎月定額課金という点です。また、Lightsailは導入のための勉強が少なくて済む点でもAWSのデメリットを解決していると言えます。
Lightsailは今までの一般的なVPSに似たサービスです。そのため、一般的なVPSを触ったこともない人がLinuxのサーバ操作に慣れることができるという点で有効です。また、中小のIT会社が顧客の小さなWebサービスを提供する場合など、Lightsailの機能だけで正直十分とも言えます。インスタンスの上限はありますが。
このため初めてAWSを使う人にとって、Lightsailは最適な選択肢です。いきなりAWSのEC2に触れて挫折することを考えたら、Lightsailはとても魅力的です。
Lightsailの詳細については以下の公式FAQから確認してください。
よくある質問 – Amazon Lightsail | AWS

Djangoとは

Djangoとは、PythonによるWebサイトを作るためのフレームワークです。フレームワークがあることによって、コーディングの品質と効率が保証されます。
なお、この記事ではCentOSにDjangoをインストールするところからやります。

CentOSとは

Linuxのディストリビューションの一つで、サーバのOSです。CentOSかUbuntuかどっちかを選択すれば良いかと思いますが、この記事ではCentOSの上にDjangoのDockerコンテナを使って、Djangoフレームワークを利用したWebサイトを作成します。

LightsailでDjangoのインスタンスを作成する

ここでいう「インスタンスを作成する」とは、Djangoが予めインストールされた設定をサーバーに作成するということです。AWSにログインした後、以下の画面からLightsailにアクセスして下さい。

Lightsailの管理画面が表示されますので、「インスタンスの作成」ボタンを選択します。

プラットフォームの選択で「Linux/Unix」を選択し、切開図の選択で「OSのみ」を選択してから「CentOS」を選択して下さい。

料金プランを選択します。後で変更可能ですので、一番安いプランを選択するのが良いでしょう。2020年5月現在「512MBのRAM、1 vCPU、20GBのSSD」のプランが$3.5で利用できます。他の設定はそのままで、「インスタンスの作成」ボタンを押下します。

インスタンスが作成されると、Lightsailの管理画面が以下のように表示されます。最初は「保留中」ですが、数分で「実行中」に変わります。

以上で、LightsailでのCentOSのインスタンスの作成は完了です。このインスタンスにDjangoをインストールしていきます。

ローカルPCからssh接続をする

MacのターミナルからLightsailのインスタンスへssh接続する

作業を楽にするためにローカルのターミナルからssh接続できるようにします。以下のインスタンスの名前の部分をクリックして下さい。

「アカウントページ」をクリックします。

Macのターミナルを立ち上げます。ダウンロードした秘密鍵のファイル名が少し違うはずなので、それに注意して以下のターミナル操作をして下さい。

備考1・・・Unix系OS(Mac含む)では、ホームディレクトリを ~(チルダ)で表現します。
備考2・・・秘密鍵をダウンロードするのは、本来セキュリティ的にあまりよくありません。そのため、上級者はローカルで公開鍵・秘密鍵を生成して、その公開鍵をリモートにアップロードして下さい。

// Downloadsディレクトリに今ダウンロードした秘密鍵があることを確認する(タブ補完を使う)
$ ls -al ~/Downloads/LightsailDefaultKey-ap-northeast-1.pem

// ~(ホームディレクトリ)に.sshディレクトリがあることを確認する(初めての人は多分ないので作成する)
$ ls ~/.ssh

    // .sshディレクトリを作成する場合のコマンド(おまけ)
    $ mkdir -m 700 ~/.ssh

// .sshディレクトリに秘密鍵を移動する
$ mv ~/Downloads/LightsailDefaultKey-ap-northeast-1.pem ~/.ssh/

// 移動が出来たかの確認&パーミッションの確認をする
$ ls -l ~/.ssh/
-rw-r–r–@ 1 user staff 1679 5 6 11:25 LightsailDefaultKey-ap-northeast-1.pem


// パーミッションが644なので、600に変更する
$ chmod 400 ~/.ssh/LightsailDefaultKey-ap-northeast-1.pem

// パーミッションを確認する
$ ls -l ~/.ssh/

// ローカルのターミナルからsshでログインする
$ ssh -i ~/.ssh/LightsailDefaultKey-ap-northeast-1.pem -l centos [リモートのパブリックIPアドレス]
The authenticity of host '52.194.XXX.XX (52.194.XXX.XX)’ can’t be established.
ECDSA key fingerprint is SHA256:emVZMFMhqtmuYu3oppxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? (← yes と入力する)
Warning: Permanently added '52.194.XXX.XX’ (ECDSA) to the list of known hosts.

// ログアウトする
$ exit

sshコマンドのオプションと備考

ssh -i [秘密鍵のファイルパス] -l [loginname] [リモートのパブリックIPアドレス]
もしくは、
ssh -i [秘密鍵のファイルパス] loginname@リモートのパブリックIPアドレス
でもログインできます。

備考・・・LightsailでWordPressやDjangoなどがデフォルトでインストールされている場合、ログインネームがbitnamiになります。但し、今回はCentoOSのみのインスタンスを作成したのでログインネームがcentosになっていることに注意して下さい。

簡単にログインできるように設定をする

LightsailのCentOSをログアウトした状態で、以下のように入力します。

$ vim ~/.ssh/config

ファイルが新規作成されたら、以下のように入力して保存して下さい。Vimの操作で保存はescを押した後に「:wq」+ Enterです。オレンジ色の部分は、自分の設定に合わせて下さい。スペースに気をつけて下さい。

host lightsail
hostname 52.194.XXX.XX
user centos
IdentityFile ~/.ssh/LightsailDefaultKey-ap-northeast-1.pem

ターミナルから以下のように入力します。

$ ssh lightsail

lightsailのCentOSサーバにログイン出来ていれば成功です。

Macで公開鍵・秘密鍵を作成して、ssh接続をする方法

↓以下のリンク先を参照して下さい。
Macで公開鍵・秘密鍵を作成して、ssh接続をする方法
よりセキュアに秘密鍵を管理するためには、秘密鍵をダウンロードしないこと、させないことです。この場合、ローカルPCで秘密鍵・公開鍵を作成して、公開鍵の方をアップロードします。ここで、Lightsailを複数人で管理する場合、AWSのIAMのユーザ別にssh接続するのか、もしくはLigthsailのCentOSのユーザを追加して、CentOSのユーザ別にssh接続するのか気になります。実際の運用はしていませんが、CentOSのユーザ毎にssh接続すると思われます。

Windowsからsshする場合

OpenSSH等を利用して下さい。省略します。

以上で、ローカルPCからssh接続をする方法は完了です。

ついでに、LightsailのCentOSの色々なバージョンの確認をする

以下、2020年5月のLightsailのCentOSのデフォルトの状態です。参考にして下さい。

// CentOSのバージョンの確認
$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core) 

// Pythonのバージョンの確認
$ python -V
Python 2.7.5

// Dockerのバージョンの確認
$ docker version
-bash: docker: コマンドが見つかりません

// gitのバージョンの確認
git –version
-bash: git: コマンドが見つかりません

// vimのバージョンの確認 (初期状態でvimはインストールされていませんが、viが使えます)
vim –version
-bash: vim: コマンドが見つかりません

// ストレージ使用量の確認
$ df -m
ファイルシス   1M-ブロック  使用 使用可 使用% マウント位置
/dev/xvda1           20469   887  19583    5% /
devtmpfs               221     0    221    0% /dev
tmpfs                  243     0    243    0% /dev/shm
tmpfs                  243     9    235    4% /run
tmpfs                  243     0    243    0% /sys/fs/cgroup
tmpfs                   49     0     49    0% /run/user/1000

vimのインストール

// vimをインストールする
$ yum -y install vim-enhanced

// 確認する
$ vim -v

gitのインストール

新しく記事に書くにも短いので、ここでやってしまいます。

// gitがインストールされていないことを確認する
$ git –version
-bash: git: コマンドが見つかりません

// gitのインストール
$ sudo yum install git

// インストールできたことを確認する
$ git –version
git version 1.8.3.1

「LightsailとDjangoでサイト構築」の全体の流れ

・AWSに登録する(省略)
・LightsailでCentOSのインスタンスを作成する & ssh接続をする (このページ)
Lightsailに固定IP & 独自ドメインを設定する
Lightsailインスタンスの初期ログインのパスワードの取得
・(ロードバランサの作成 & SSL/TLS証明書の設定)
Let’s EncryptによるSSL/TLS証明書の設定
・LightsailのCentOSにDockerをインストールする
・DjangoでHelloWorldを表示する