Djangoチュートリアル体験記① ~OS構築~

プログラミング

インフラエンジニアのしずくです<(_ _)>

今回からpythonのWebフレームワークである「Django」を学習していきたいと思います。
学習の背景には、友人のホームページ作成の案件が舞い込む可能性が高いためです。

普段はインフラエンジニアとして活動しているためDjangoはおろか、
pythonすらろくに触れた経験はありません。
pythonに触れたい、Djangoに触れたいという方のための礎になれればと思っています♪

Djangoのチュートリアルとはこちらです♪
Djangoを扱ううえで、一通り実施した方がいいようなのでやってみようと思います!

環境構成

ザックリ、サーバ上の構成はこのような形です。

詳細なSG(AWSのセキュリティグループ)の設定などは、随時公開したいと思っています。
現在は、インバウンドがTCP22、3389ポート開いている状態で、アウトバウンドが制限なしで制御しています。
※インバウンド側は自分の端末のグローバルIPアドレスをソースに指定しています。

OSの設定

今回利用するAlmaLinuxというのは、RedHatEnterPriseLinux(以降は「RHEL」と表記)と互換性があるようなOSとなっています。
以前まではCentOSを利用していましたが、CentOSの開発方針が変わり扱いづらくなってしまったため、AlmaLinuxを利用します。

OSの初期設定

この章ではOSの簡単な設定を行います。
なお、TeraTermから「ec2-user」で対象のサーバへ接続できているかつ、「sudo – su」コマンドにてrootユーザへswitchしていることを前提で解説していきます。

①ホスト名変更

以下のコマンドを実行し、自分のホスト名(サーバの名)を好きなものへ変更します。

vi /etc/hostname

編集時は「i」で編集モードに入り、「esc」で編集モードを抜けます。
編集モードを抜けた後は「:wq」で上書き保存してエディタから抜けることができます。
なお、保存せずエディから抜けた場合は「:q!」で抜けることができます。

②パッケージ更新

以下のコマンドを実行し、現在インストールされているパッケージ(ソフトウェア)を最新のものへ更新します。

dnf -y update

少し時間はかかりますが、プロンプト(「 ~]#」の様なもの)が返ってくるまで待ちましょう!

③ユーザ作成

以下のコマンドを実行し、ssh接続用ユーザを作成します。

useradd defuser

ここでは「defuser」ユーザを作成していますが、こちらは好きな名前で問題ありません。

以下のコマンドを実行し、作成したユーザのパスワードを変更します。

passwd defuser

「defuser」ユーザのパスワードを変更するコマンドなので、「defuser」部分は違う名前のユーザを作成した場合はしっかり変更してコマンドを実施しましょう!

④visudo編集

こちらでは、「sudo」(管理者権限でコマンドを実行するコマンド)を利用できるように設定します。
以下のコマンドを実行し、ファイルの編集を行いましょう。

visudo
===
## Same thing without a password ←デフォルトで記載されている
# %wheel        ALL=(ALL)       NOPASSWD: ALL ←デフォルトで記載されている
%defuser       ALL=(ALL)       NOPASSWD: ALL ←今回追記する

操作方法は①のホスト名変更と同様です。

⑤SELinux無効化

RHEL8以上のOSでは、SELinuxの無効化の推奨手段が7系以前とは異なります。(参考資料)

以下のコマンドを実行すると、設定が確認できます。
次の設定変更コマンド実行前後に実施しましょう♪

grubby --info=ALL

以下のコマンドを実行し、設定変更を行います。

grubby --update-kernel ALL --args selinux=0

設定変更コマンドを実行すると、以下のパラメータが変更されます。

args="ro console=ttyS0,115200n8 console=tty0 no_timer_check nvme_core.io_timeout=4294967295 nvme_core.max_retries=10 net.ifnames=0 selinux=0"
→最後の「selinux=0」が追加されます。

この設定変更コマンドは、OSを再起動するまでは反映されませんので、ご注意ください。

⑥タイムゾーン変更

以下のコマンドでタイムゾーンの確認を行うことができます。

timedatectl
===
Time zone: Asia/Tokyo (JST, +0900)

上記はタイムゾーンが日本になっている場合ですが、日本になっていなかった場合は以下のコマンドを実行しましょう。

timedatectl set-timezone Asia/Tokyo

⑦ssh設定

基本的なEC2では起動直後は、キーペアを利用してサーバへ接続することしかできません。
セキュリティ的には正しいのですが、、、
以下の設定を行うとキーペアでの認証だけでなく、パスワードによる認証も可能です。

以下のコマンドを実行し、設定ファイル編集を始めます。

vi /etc/ssh/sshd_config
===一部抜粋===
PermitRootLogin no           #こちらはrootユーザでのログインの可否の設定です。
PermitEmptyPasswords no      #こちらは空のパスワードでのログインの可否の設定です。
PasswordAuthentication yes   #こちらはパスワード認証の可否の設定です。

sshのバージョンにもよりますが、「PermitRootLogin」の設定は少し離れたところにある場合があります。
また、設定値は「#」によりコメントアウトされていない場所以外は上から読み込まれますが、重複した設定項目がないように確認しましょう。

ひとまず、こちらでOSの設定自体は完了です。
最後にサーバOSの再起動しておくとよいでしょう。

shutdown -r now

pythonインストール

以下のコマンドを実行することで、pythonをインストールできます。

dnf -y install python3.8

pythonバージョン確認コマンドを実行してみましょう!

python -V

こちらのコマンドでは、バージョン確認できませんね。。。
それは、python3.8はpythonと紐づけされていないからです。(コマンド的に)
次のコマンドを実行して、pythonとpython3.8を紐づけましょう!

alternatives --config python
===
*  1           /usr/libexec/no-python
   2           /usr/bin/python3
 + 3           /usr/bin/python3.8

このような画面になったら、「/usr/bin/python3.8」を選択し、「Enter」で設定しましょう!
設定完了後、バージョン確認コマンドを実行してみてください。
pythonのバージョンが出力されます。

なお、python3.8とpythonの紐づけを行わない場合、以下のコマンドでバージョン確認できます。

python3 -V

pythonコマンドとpython3コマンドは別だよ!という状況のため、起こっていました。
pythonコマンドの紐づけを変更して利用できるようにしたのが「alternatives –config」コマンドです。

python仮想環境準備

以下のコマンドを実行し、python仮想環境を作成します。

python3 -m venv <作成する仮想環境名>

python仮想環境への入り方は以下の通りです。

cd <仮想環境名>
source bin/activate

逆にpython仮想環境から出る場合はこちらのコマンドで出ることができます。

deactivate

以後の作業は明記されていない限り、作成したpython仮想環境で実施します♪

Djangoインストール

以下のコマンドを実行し、pythonのモジュールやライブラリなどを確認します。

pip list

以下のコマンドを実行し、パッケージ管理ツールのアップデートを行います。

pip install --upgrade pip

最後にDjangoをインストールします。

pip install django

注意点ですが、Djangoはこの段階でインストールされましたが、あくまで作成したpython環境上の話ですので、OS上や他のpython仮想環境ではインストールされていませんので、各python仮想環境上でのインストールが必要です♪

おわりに

ひとまず、今回はDjango環境の準備まで進めました。
次回はDjangoで実際にプロジェクトを作成し、チュートリアルを進めていきます♪

Posted by shizuku-LH