【Python】EC2(Amazon Linux2)上にDjangoアプリをデプロイする手順をまとめてみた

Python

EC2(Amazon Linux2) + Apache + MySQLの環境下にDjangoアプリをデプロイしたので、その手順をまとめてみました。

以下が前提となりますのでご了承ください。

  • Djangoアプリは事前に作成してあり、GitHubにプッシュしていること
  • AWSの基本操作(EC2インスタンスの作成方法)を理解していること
スポンサーリンク

構成

  • Amazon Linux 2 (64bit)
  • Apache 2.4.43
  • MySQL 8.0.21
  • Python 3.7.8
  • Django 3.1

EC2インスタンスの作成

AWSでEC2インスタンスを起動し、AMIにAmazon Linux2 (64bit版)を選択します。

インバウンドルールは以下のように設定してください。

f:id:canos:20200901195511p:plain
ポート8000は、開発用サーバ起動時の確認用なので不要な場合は外してOKです。

pemファイルを任意の場所に置いたら、ターミナル等でサーバにSSH接続しましょう。

Apacheのインストール

まずWebサーバであるApacheをインストールします。

# Linuxのパッケージ管理システムyumのアップデート(-y はすべての確認に対してyesというオプション)
sudo yum update -y

# Apacheのインストール
sudo yum install -y httpd httpd-devel

# Apacheのバージョン確認
httpd -v

# Apacheの起動
sudo systemctl start httpd.service

# Apacheの状態確認 => active(running)となっていれば起動成功
sudo systemctl status httpd.service

# サーバー起動時にApacheを自動起動するよう設定
sudo systemctl enable httpd.service

# Apache自動起動設定の確認 => enabledなら自動起動設定
sudo systemctl is-enabled httpd.service

EC2インスタンスのパブリックIPアドレスにブラウザからアクセスすると、Apacheのページが表示されるはずです。

Python3・Django・mod_wsgiのインストール

次にPython3やDjangoをインストールします。

mod_wsgiとは、DjangoとApacheの橋渡しを行うモジュールです。

# Python3に必要なモジュールをインストール(ついでにgitも)
sudo yum install -y python3-devel gcc gcc-c++ git

# Python3のインストール
sudo yum install -y python3

# Python3のバージョン確認
python3 --version

# Djangoとmod_wsgiのインストール
sudo pip3 install django mod_wsgi

# インストール確認 => djangoとmod_wsgiが表示されればインストール成功
pip3 list

MySQLのインストール

今回はMySQLを使用します。

# MySQL yumリポジトリからMySQL8.0のRPMパッケージをダウンロード
sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm 

# MySQLのインストール
sudo yum install --enablerepo=mysql80-community mysql-community-server -y

# MySQLバージョン確認
mysql --version

# MySQLの起動
sudo systemctl start mysqld.service

# 起動確認
systemctl status mysqld.service

# サーバー起動時にMySQLを自動起動するよう設定
sudo systemctl enable mysqld.service

インストールできたら、MySQLの初期設定を以下を参考に行ってください。

初期パスワードがわからない場合は、以下の記事が参考になります。

また、DjangoからMySQLを操作するためのドライバであるmysqlclientをインストールしておきます。

# mysql-develをインストール(mysqlclientに必要)
sudo yum install -y mysql-devel
 
# Djangoプロジェクトディレクトリ内のsettings.pyの編集
sudo pip3 install mysqlclient

MySQLの設定

今回はMySQLを使用します。

# MySQLへ接続する(上記で設定したパスワードを入力する)
mysql -u root -p

# ユーザーを作成する(ユーザ名とパスワードは自由に設定してください)
CREATE USER 'myapp'@'%' IDENTIFIED BY 'password';

# 作成したユーザーにすべての操作権限を付与
GRANT ALL ON myapp.* TO 'myapp'@'%';

# 設定の反映
FLUSH PRIVILEGES;

# ユーザーが作成されたか確認
SELECT user, host FROM mysql.user;

# MySQL切断
quit

Djangoプロジェクトのgit cloneとsettings.pyの編集

ここまでできたら、いよいよDjangoプロジェクトをgithubからcloneします。また、本番用にsettings.pyの中身を書き換えます。

# home/ec2-userに移動して、Djangoプロジェクトをgit cloneする
git clone <リポジトリ名> 

# Apacheがプロジェクトにアクセスするためにディレクトリの権限を変更
sudo chmod 755 /home/ec2-user/

# Djangoプロジェクトディレクトリ内のsettings.pyの編集
sudo vi settings.py

settings.py
---------------------
DEBUG = True
# DEBUG = False

ALLOWED_HOSTS = ['EC2のパブリックIPアドレス']

DATABASES = {
    'default':{
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'myapp', #
        'USER': 'myappuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")] 
------------------------

# staticファイルをプロジェクト直下に集約する
python3 manage.py collectstatic

# makemigrations
python3 manage.py makemigrations

# migrate
python3 manage.py migrate

Apache設定ファイルの編集

Apacheにmod_wsgiファイルの場所を認識させるために設定ファイルを編集します。

# Python3のインストール場所を確認
which python3

# mod_wsgiのインストール場所を確認
sudo pip3 show mod_wsgi

# /etc/httpd/conf.d/配下にDjangoプロジェクトの設定ファイルを作成
sudo vi /etc/httpd/conf.d/myproject.conf

myproject.conf
---------------------
LoadModule wsgi_module /usr/local/lib64/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so

ServerName <EC2のパブリックIPアドレスを記載>

WSGIScriptAlias / /home/ec2-user/myproject/myproject/wsgi.py
WSGIPythonPath /home/ec2-user/myproject:/usr/bin/python3

Alias /static/ /home/ec2-user/myproject/static/
<Directory /home/ec2-user/myproject/static>
Require all granted
</Directory>

<Directory /home/ec2-user/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
------------------------

# Apacheのリスタート
sudo service httpd restart

なお、viコマンドについては以下を参照してください。

以上で設定は完了です。お疲れ様でした。

EC2のパブリックIPアドレスにアクセスするとDjangoアプリが表示されるはずです。

参考にさせていただいたサイト・講座

tsukasa-blog.com

www.udemy.com

コメント

タイトルとURLをコピーしました