アリババクラウドにDjangoアプリケーションをデプロイする方法

この記事では、Alibaba Cloud上で**Django**アプリケーションを起動してデプロイする方法を説明します。

本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/deploy-django-application-on-alibaba-cloud_595833)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。

#前提条件
最初の前提条件として、Python ベースのアプリケーションに [virtualenv](https://virtualenv.pypa.io/en/latest/?spm=a2c65.11461447.0.0.28a16cabOLprE3) と [virtualenv wrapper](https://virtualenvwrapper.readthedocs.io/en/latest/?spm=a2c65.11461447.0.0.28a16cabOLprE3)をインストールして、Python プロジェクトに分離された環境を作成する必要があります。そのためには、以下の手順で行うことができます。

- `pip`をインストールする

```
sudo apt-get install python-pip
```

- `virtualenv`のインストール

```
sudo pip install virtualenv
```

- virtualenvs を格納する`dir`を作成します。

```
mkdir ~/.virtualenvs
```

- `virtualenvwrapper` のインストール

```
sudo pip install virtualenvwrapper
```

- virtualenv のディレクトリに `WORKON_HOME`を設置する


```
export WORKON_HOME=~/.virtualenvs
```

- `virtualenvwrapper.sh` を `.bashrc` に追加します。
この行を `~/.bashrc` の最後に追加し、`virtualenvwrapper` コマンドが読み込まれるようにします。

```
/usr/local/bin/virtualenvwrapper.sh
```

シェルを終了して再度開くか、`.bashrc` または `source ~/.bashrc` コマンドで `.bashrc` をリロードすれば準備は完了です。

1.  gitをインストールします。

```
apt-get install git
```

2.  ウェブサーバとしてNginxをインストールし、その背後でアプリケーションを実行できるようにします。

```
Sudo apt-get install nginx
```

#手順
それでは、Alibaba Cloud ECSインスタンスのセットアップと起動に取り掛かりましょう。

####最初のLinuxインスタンスの起動
Alibaba Cloud Management Consoleを使用してECSインスタンスを実行する手順を簡単に見てみましょう。

1.  アカウントにログインし、**Product & Services**セクションの[Elastic Compute Service](https://account.alibabacloud.com/login/login.htm?oauth_callback=https%3A%2F%2Fecs.console.aliyun.com%2F%3Fspm%3Da2c65.11461447.0.0.28a16cabOLprE3&lang=ja)に移動します。サイドバーメニューの**[概要]**をクリックします。すでに実行中のインスタンスのリストが表示されます。**Buy Instance**をクリックして、任意のリージョンからインスタンスを購入するか、次のステップに進んで新しいインスタンスを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/13b7c5e0-2c9e-0157-1891-4dbd12e49806.png)

2.サイドバーメニューの**［Instances］**をクリックします。インスタンス一覧で必要なリージョンを選択し、右上のバーで[Create Instance](https://www.alibabacloud.com/help/ja/doc-detail/92990.html)をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/c5a1ff03-6dec-7ebf-3fa2-df0b714c95fa.png)

3.**製品購入**コンソールにリダイレクトされますので、ご希望のパッケージを選択する必要がありますが、**クイック起動**オプション（ECSインスタンスとデータ転送の特別価格を提供しています）、または**カスタム起動**オプション（2つの異なる価格モデルを備えています）のいずれかを選択することができます。具体的には、月額または年単位で支払うサブスクリプション課金、またはニーズに応じて従量課金のいずれかを選択することができます。このチュートリアルでは、課金方法として**Pay-As-You-Go**を選択しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/5f744c17-2a9e-b08d-c95f-c5889fc1568a.png)

4.このウィンドウで、ECS インスタンスを起動する **Datacenter Region** と **Zone** を選択します。**Region** を選択して **Zone** を選択しない場合は、ランダムゾーンにインスタンスが配置されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/a1d69d68-5f36-79bf-fd00-07e80c307fa1.png)

5.ここで、作成する**インスタンスの種類**を選択する必要があります。要件に基づいて、**Generation**タブからインスタンスのジェネレーションのタイプを選択します。ジェネレーション タイプは、使用する構成と計算能力に基づいて異なるインスタンスの種類を表します。

6.次に、**Network Type** を選択して ECS インスタンスを起動します。ニーズに応じて、**Classic Network** または [VPC](https://www.alibabacloud.com/ja/product/vpc) のいずれかにすることができます。**Classic Network**では、アリババクラウドがIPアドレスを分散的に割り当てます。シンプルで高速な[ECS](https://www.alibabacloud.com/ja/product/ecs)の利用を必要とするユーザーに適しています。**VPC**は、論理的に分離されたプライベートネットワークで、専用の接続に対応しています。より複雑なネットワーク管理プロセスに慣れているユーザーに適しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/86864630-b629-0832-8016-1f1001a86f46.png)

7.ここで、**Operating System**を選択する必要があります。各オプションの下には、異なるOSのバージョンのリストが用意されています。**Ubuntu**オプションを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/fa5c4926-16eb-0b59-220e-4aae74147486.png)

8.必要に応じてドロップダウンメニューから**システムディスク**の種類を選択します。また、**[Add a disk]** をクリックして、このリストにディスクを追加することもできます。

9.セキュリティ設定セクションでは、セキュリティを強化するためのパスワードを作成することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/5366d4d0-fbb8-a412-6535-02aa91b099ed.png)

10.**Purchase Plan** セクションで、インスタンスの名前を入力し、起動するインスタンスの数を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/538d8100-252e-ed10-707f-98456fa9aa86.png)

11.**Overview**セクションで構成の詳細と合計価格を確認し、**Buy Now**をクリックします。

12.**Activate**をクリックして注文を確定し、インスタンスを起動します。

13.インスタンスが起動したら、コンソールの**Instances**タブで確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/2ca2fc2e-85e2-5a07-314d-3b28714370c1.png)

####Djangoアプリケーションのインストールとデプロイ
[Alibaba Cloud Management Console](https://account.alibabacloud.com/login/login.htm?oauth_callback=https%3A%2F%2Fhome-intl.console.aliyun.com%2F%3Fspm%3Da2c65.11461447.0.0.28a16cabOLprE3&lang=ja)を使用してECSインスタンスを作成して起動したので、Djangoアプリケーションをインストールしてデプロイする方法を見てみましょう。

1.SSHコマンドを使ってサーバーにログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f8727a8a-62bf-aae6-7695-a2f876cf3ccb.png)

2.パスワードを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/0fd8a42a-106c-f4fa-ab3e-979e459325aa.png)

3.新しい virtualenv を作成して、Django アプリケーションをデプロイするための環境を設定します。

```
mkvirtualenv DjangoApp 
```

新しい virtualenv を終了するには、deactivate を使用します。これで、workon で環境を切り替えることができるようになりました。virtualenv をロードしたり切り替えたりするには workon コマンドを使用します。

```
workon DjangoApp 
```

4.現在の環境にDjangoをインストールします。

```
pip install Django
```

5.django-adminコマンドで**Sample Project**を作成し、ディレクトリをプロジェクトフォルダに変更します。

```
django-admin startproject todoApp
```

```
cd todoApp/
```

6.データベースを移行またはブートストラップします。

```
python manage.py migrate 
```

7.管理パネルにアクセスするためのスーパーユーザーを作成します。

```
python manage.py createsuperuser
```

8.ユーザーを設定したら、manage.pyで処理されるrunerverコマンドを実行してアプリケーションをテストします。

```
python manage.py runserver 0.0.0.0:8000
```

8000番ポートで以下のように実行されていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/d10d32af-1ec8-d8b9-4952-093c6657deec.png)

あなたの管理パネルである**/admin**に移動して、アプリケーションを管理することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/4eeab8ab-5134-5583-d10d-e2e4f2669305.png)

ここで、[Nginx](https://www.nginx.com/?spm=a2c65.11461447.0.0.28a16cabOLprE3) を使用してアプリケーションを Web サーバーの後ろに配置します。

9.データベーススキーマを作成し、Python環境を有効化します。以下の手順で行うことができます。

- ディレクトリを Django Project ディレクトリに変更する
- 次のコマンドを実行する

```
  python manage.py migrate
```

10.CSSやJSファイルを含むすべての静的ファイルを収集します。以下の手順で行うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/294bbb56-952a-5651-1a03-c0cbf7a48934.png)

- 次のコマンドを実行して、特定の場所にあるすべての静的ファイルを収集します。

```
Python manage.py collectstatic --noinput
```

- 開発者は、すべての静的ファイルが収集される場所への `STATIC_URL` パスを設定する責任を負います。
- これらの変数は、Project ディレクトリ内の `setting.py` で定義されています。

1、`STATIC_URL`
2、`STATICFILES_DIRS`
3、`STATIC_ROOT`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/e1a3a025-a5db-0e13-6ba0-558ae1df1d0d.png)

11.**uwsgi**ライブラリをインストールし、**uwsgi server**を使用してサーバを起動します。以下の手順を実行することで実行できます。

```
 pip install uWSG
```

django アプリケーションのデプロイに使用する **ini** ファイルを作成します。

```
 vim uwsgi.ini
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/5065e3e8-c04e-c7fd-f7dd-2332a14bf0b6.png)

- `application dir`の `uwsgi.ini`に保存します。iniファイルの書き方については、**Python/WSGIアプリケーションのクイックスタート**を参照してください。以下のコマンドを実行してアプリケーションを起動します。

```
uwsgi uwsgi.ini (your ini file)
```

12.アプリケーションを提供するnginxの設定ファイルを変更します。

```
server   {       listen 80 default_server;                listen [::]:80 default_server ipv6only=on;                server_name localhost;  location /static/   {                    include uwsgi_params;                    alias /root/todoApp/public/;  } location  /    {                    include uwsgi_params;                    uwsgi_pass unix:/tmp/uwsgi.sock; } } 
```

13.nginxを再起動すると、アプリケーションはポート80でnginxの後ろで稼働しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/a70c7b91-5e7a-6b36-e901-a40bff2d71e5.png)

#結論
この記事では、Alibaba Cloud上にDjangoアプリケーションをデプロイする方法について説明しました。要約すると、これに関わる最初のステップは、UbuntuをOSとしてECSインスタンスを起動して実行すること、次に、このインスタンスに Django アプリケーションをインストールしてデプロイすることでした。このチュートリアルの前提条件の一部として、デプロイを完了し、有効な Alibaba Cloud のアカウントを持っている必要があることを覚えておいてください。

以下は、このチュートリアルに関連する製品のリストで、実運用のシナリオで Django アプリケーションをデプロイする際に役立つでしょう。

- Alibaba Cloud [Elastic Compute Service (ECS)](https://www.alibabacloud.com/ja/product/ecs)
- [Alibaba Cloud CloudMonitor](https://www.alibabacloud.com/ja/product/cloud-monitor)
- Alibaba Cloud [Web Application Firewall (WAF)](https://www.alibabacloud.com/ja/product/waf)
- [Alibaba Cloud Domain Name Service (DNS)](https://www.alibabacloud.com/ja/product/dns)
- Alibaba Cloud [ApsaraDB for RDS](https://www.alibabacloud.com/ja/product/apsaradb-for-rds-mysql)

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*