はじめに
今回は、引き続き下図のDjango部の環境を作ります。
DjangoをuWSGI経由でをsystemdで永続化するための方法を調べました。
環境
- Debian bullseye 64bit - Django 4.2.5 - django-cors-headers 4.2.0 - djangorestframework 3.14.0 - uWSGI 2.0.22
pipenvによるPythonの仮想環境
「~/.bashrc」に追記します。
export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init --path)" export WORKON_HOME=~/.venvs export PIPENV_VENV_IN_PROJECT=true
反映させます。
source ~/.bashrc または . ~/.bashrc
pyenvをアップデートするためのモジュールをインストールします。
git clone https://github.com/yyuu/pyenv-update.git ~/.pyenv/plugins/pyenv-update
pyenvで新しいバージョンのPythonを扱うためアップデートします。
pyenv update
必要なパッケージをインストールします。
sudo apt install -y gcc make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
インストール可能なPythonのリスト表示して、最新バージョンをインストールします。
pyenv install -l | grep '^ 3\.[0-9]*\.[0-9]' pyenv install 3.9.7 pyenv global 3.9.7 pyenv versions
仮想環境を作成するためにpyenv-virtualenvをインストールします。
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
pipenvでPythonの仮想環境を構築します。
sudo mkdir /home/www/backend cd /home/www/backend pip install pipenv pipenv --python 3.9.7 pipenv shell pip install --upgrade pip pip install pipenv pipenv install django pipenv install uwsgi pipenv install django-cors-headers pipenv install djangorestframework
Djangoの設定ファイルとアプリを作成します。
cd /home/www/backend django-admin startproject config . django-admin startapp app python manage.py makemigrations python manage.py migrate sudo -R chown www-data. /home/www/backend
Django管理画面の管理者ユーザを作成します。
cd /home/www/backend python manage.py createsuperuser
UWSGIの設定ファイルの編集
127.0.0.1(ローカルループバックアドレス)以外にIPアドレスを持っている場合は「http」で追加します。
追加しないとサーバ以外のパソコンからアクセスできません。
Djangoの管理画面に外部からもアクセスしたいので指定しています。
外部からアクセスする場合はWebブラウザで「http://192.168.10.2:8000」にアクセスします。
「config.wsgi:application」の「config」は上記の「django-admin startproject config .」で指定した名前になります。
今回は「config」です。
設定ファイル名はuwsgi.iniとします。
cd /home/www/backend sudo vi uwsgi.ini
processes、threadsなどは適当な数値に修正します。
また、Djangoの管理画面のレイアウトが崩れないようにするに以下の3個の方法がありますが、今回は「1」を使います。
1. uwsgi.iniで「static-map2」を使ってstaticディレクトリを指定する。
2. Nginxでリバースプロキシを作り、設定ファイルでadmin用のstaticディレクトリを指定する。
3. collectstaticを実行して、settings.pyでSTATIC_ROOTとSTATIC_URLを適切に設定する。
「static-map2」の詳細は公式サイトをご参照ください。
[uwsgi] chdir = /home/www/backend module = config.wsgi:application home = .venv master = true py-autoreload = 1 die-on-term = true enable-threads = true processes = 1 threads = 1 max-requests = 5000 buffer-size = 65536 uid = www-data gid = www-data # Django管理画面のstaticディレクトリを指定する。 static-map2 = /static/admin=/home/www/backend/.venv/lib/python3.11/site-packages/django/contrib/admin # # http # http = 127.0.0.1:8000 http = 192.168.10.2:8000 # Log #logto = uwsgi.log #deamonize = uwsgi-@(exec://date +%Y-%m-%d).log #daemonize = uwsgi-daemon.log #log-reopen = true # # socket # Reverse Proxy Nginx or Apache # #socket = /run/backend/uwsgi-backend.sock #chmod-socket = 666 #pidfile = /run/backend/uwsgi-backend.pid #vacuum = true
uWSGIをsystemdから自動起動するための設定ファイル
uWSGIをsystemdから自動起動するための設定ファイルするファイルを作成します。
sudo vi /etc/systemd/system/uwsgi-backend.service
ファイル内容は下記の通りです。
[Unit] Description = uWSGI Backend After = syslog.target [Service] ExecStart = /home/www/backend/.venv/bin/uwsgi --ini /home/www/backend/uwsgi.ini Restart = always #KillSignal = SIGQUIT #Type = notify StandardError = syslog #NotifyAccess = all [Install] WantedBy = multi-user.target
OSの起動時に自動起動するように設定します。
sudo systemctl enable uwsgi-backend sudo systemctl is-enabled uwsgi-backend sudo systemctl daemon-reload sudo systemctl start uwsgi-backend sudo systemctl status uwsgi-backend
Django REST frameworkとdjango-cors-headersの設定
Djangoのsettings.pyに追加します。
INSTALLED_APPS = [ ・・・・・(省略) 'corsheaders', # django-cors-headers 'rest_framework', # djangorestframework ] MIDDLEWARE = [ ・・・・・(省略) 'corsheaders.middleware.CorsMiddleware', # django-cors-headers 'django.middleware.common.CommonMiddleware', ・・・・・(省略) ]
uWSGIを再起動します。
sudo systemctl restart uwsgi-backend

Webブラウザでアクセスしてみる
以下のようにコマンドを実行してから、Webブラウザで「http://192.168.10.2:8000/admin」にアクセスするとDjangoの管理画面が表示されます。
Comments