さくらのVPS

さくらのVPSでDjangoアプリを公開する【Nginx・uWSGI・MySQL】

さくらのVPSでDjango環境作成したい・・・

そんな悩みを解消するために、この記事ではさくらのVPSでサーバーを立ててDjangoアプリケーションを公開してみます。

この記事で分かること

  • さくらのVPSでサーバーを立てる方法
  • さくらのVPSでDjango環境を作成する方法
  • Nginx・uWSGI・Django・MySQLで動かす方法

ポイント

今回作成する環境は以下です。

  • Ubuntu
  • Nginx
  • MySQL
  • uWSGI

さくらのVPSでDjangoアプリケーションを動かしていきます。

さくらのVPSでサーバー構築をする

さくらのVPSに登録したらさっそくサーバーを立てましょう。利用クーポンを利用する場合は選択するといいです。

ゾーンは別にどこでもいいかなーっていう感じだけど東京第2にしておきます。

プランは今回は毎月払いの1GBでいきます。メモリやCPUの高いものが欲しいならそれ相応のプランにしましょう。

ストレージは変更手数料0円の50GBにしておきます。

次へボタンを押すとサーバー設定の画面です。サーバー名やサーバー説明は入力しておくと管理画面から見るときに分かりやすいです。

OSは今回Ubuntuにしておいてバージョンは新しそうなやつを選択。

管理ユーザー名とパスワードはコンソールログインに必要なので、覚えておきましょう。

スタートアップスクリプトと言ってインストール時に実行してくれるスクリプトがあるけど、今回は利用しないとしておきます。

SSHキーはとりあえず登録しないにして進みます。

次へボタンを押すと支払方法を選択することができる。

毎月払いにしてクレジットカードを選択しておきます。

クレジットカード払いにしておくと2週間の無料お試しが利用できるから、もちろん利用するを選んでおきます。

お支払いボタンを押すと完了です。

Ubuntuの初期設定に関しては以下の記事で書いているので、よかったらみてみてください。

さくらのVPS

さくらのVPSでサーバーをUbuntuで立てて初期設定する

2022/8/10  

今回はそんなさくらのVPSでUbuntuを入れて設定していくっていうことをやっていきます。 ちなみにですが、今回使うUbuntuのバージョンはこんな感じです。 さくらのVPSでサーバー構築をする さく ...

Nginxをインストールする

まずはNginxをインストールします。

# パッケージを最新に
$ sudo apt update
$ sudo apt upgrade

# nginxをインストール
$ sudo apt install nginx

# nginxステータスの確認(ActiveだったらOK)
$ systemctl status nginx

これでブラウザからサーバーのIPアドレスにアクセスすれば、Nginxの初期画面が表示されるはずです。たださくらのVPSのパケットフィルターを使っている場合は、80番ポートを許可してやらないといけないのでやっていきましょう。

パケットフィルターで80番ポートを許可する

サーバーのIPアドレスにアクセス

サーバーのIPアドレスにアクセスするとNginxの画面が出てきました。

データベース(Mysql)のインストール

$ sudo apt install mysql-server

# 起動
$ sudo service mysql start

rootユーザーのパスワードを設定する

# 初回rootパスワードは空欄です。
$ sudo mysql -u root -p

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<パスワード>';
mysql> FLUSH PRIVILEGES;

ユーザーを作成する

mysql> CREATE USER 'ユーザー名'@'localhost' IDENTIFIED BY 'パスワード';

権限も付与しておきます。

mysql> GRANT ALL PRIVILEGES ON * . * TO 'ユーザー名'@'localhost';
mysql> FLUSH PRIVILEGES;

全部の権限与えたけど、必要に応じてユーザー権限を調整しましょう。

データベースの作成

Djangoアプリで使うデータベースを作成します。

mysql> create databse 〇〇;

Djangoアプリケーションをサーバーにアップする

サーバーの中でアプリケーションを入れるディレクトリを作ります。ubuntuユーザーのままだけど、今回はこれで進めます。

/home/ubuntu

$ mkdir app

今作ったappディレクトリにアプリケーションをアップするんだけど、アプリケーションはローカルで以下コマンドで作っていたアプリケーションをアップします。

$ django-admin startproject 〇〇
app
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py

アップロードにはFTPソフトを使って配置です。

ポイント

これはローカルのアプリケーションをアップロードしたけど、別にサーバーの中でコマンド使ってDjangoアプリケーション作成してもいいです。

仮想環境を作る

仮想環境を作ってその中で必要なものをインストールして使う形式でやります。まずはpythonとvenv、pipをインストール。

$ sudo apt install python3
$ sudo apt install -y build-essential libssl-dev libffi-dev python3-dev
$ sudo apt-get install python3-venv
$ sudo apt install python-pip

そしたらアプリケーションのディレクトリを作成して仮想環境を作ります。

/home/ubuntu
$ cd app

# 仮想環境を作成
$ python3 -m venv myvenv

# 仮想環境を有効化
$ source myvenv/bin/activate

requirements.txtを作って、その中にDjangoを記載してインストールします。

/home/ubuntu/app
$ vi requirements.txt
# 以下を記述
Django
uwsgi
PyMySQL

$ pip install -r requirements.txt

Vim使うといいです

エディタは使いづらいと思うので、vim入れて使うといいですよ。

# vimをインストール
$ sudo apt install vim

# vimを選択
$ sudo update-alternatives --config editor

これでアプリケーション側の設定はOKです。

Nginxの設定ファイルを作る

Nginxを経由してアプリケーションまで到達させるようにNginxの設定ファイルを作ります。

$ vim /etc/nginx/conf.d/app_nginx.conf

80番ポートできたアクセスを8001番ポートで起動するuwsgiにつなげます。

upstream django {
    ip_hash;
    server 127.0.0.1:8001;
}

server {
    listen      80;
    server_name サーバーのIPアドレス;
    charset     utf-8;

    location /static {
        alias /static;
    }

    location / {
        uwsgi_pass  django;
        include     /etc/nginx/uwsgi_params;
    }
}

server_tokens off;

サーバーのIPアドレスの部分は自分のサーバーのIPアドレスに変更してください。

Djangoアプリケーション設定

いくつか設定しないといけない項目があるので設定します。

$ vim app/settings.py

# IPアドレスを追加
ALLOWED_HOSTS = ['サーバーのIPアドレスを追加']

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '作成したデータベース名',
        'USER': '作成したユーザー名',
        'PASSWORD': '設定したパスワード',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}


# staticを編集
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

staticフォルダも作成しておくといいですね。migrateも実行しておきましょう。

$ python manage.py migrate

wsgiを起動する

仮想環境を有効かしてuwsgiで起動します。

$ source myvenv/bin/activate
$ uwsgi --socket :8001 --module app.wsgi

app.wsgiって指定しているけど、このファイルは実際ないです。

IPアドレスにアクセスしてみるとちゃんと表示されました。

ディレクトリ構成は最終的にこんな感じになりましたね。

app
├── app
│   ├── __init__.py
│   ├── __pycache__
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── myvenv
│   ├── bin
│   ├── include
│   ├── lib
│   ├── lib64 -> lib
│   ├── pyvenv.cfg
│   └── share
├── requirements.txt
└── static

まとめ

今回はさくらのVPS でNginx + uWSGI + Djangoで動かすっていうことをやりました。

  • Nginxのインストール
  • データベースの設定
  • Djangoアプリの作成
  • Nginx,uwsgiの設定

環境作るのはしんどいものだからしょうがないけど、ちょっと面倒ですよね。特にNginxとuwsgiの繋ぎ込みの設定なんてよく分かりません。詰まるところはNginxとuWSGIあたりなんじゃないかなと思います。

それとパッケージ関連のエラーとかも出る場合があるので、エラーが出たら地道に解決していきましょう。

  • この記事を書いた人

管理人

各VPSの使い方を紹介します。

-さくらのVPS