Djangoを利用したWebサーバの構築 (nginx)
プロジェクトの作成 (Windows用)
バッチファイル (.bat)
@echo off
if "%1" == "" (
set /p projectName="プロジェクト名を入力 : "
) else (
set projectName=%1
)
django-admin startproject %projectName%
echo 作成完了
pause > nul
アプリの設定
ターミナル
cd [Project Name]
バッチファイル (.bat)
@echo off
if "%1" == "" (
goto help
) else if "%~1" == "/?" (
goto help
) else if "%~1" == "-help" (
goto help
) else if "%~1" == "-app" (
if "%2" == "" (
echo アプリ作成
set /p appName="アプリ名 : "
) else (
set appName=%2
)
setlocal enabledelayedexpansion
python manage.py startapp !appName!
echo 完了しました
pause > nul
exit /b
) else if "%~1" == "-mig" (
if "%2" == "" (
echo マイグレーション
set /p appName="アプリ名 : "
) else (
set appName=%2
)
setlocal enabledelayedexpansion
python manage.py makemigrations !appName!
python manage.py migrate
echo 完了しました
pause > nul
exit /b
) else if "%~1" == "-run" (
python manage.py runserver
pause>nul
exit /b
) else if "%~1" == "-col" (
python manage.py collectstatic
pause>nul
exit /b
) else if "%~1" == "--create-admin" (
python manage.py createsuperuser
pause>nul
exit /b
) else (
echo 引数が違います
goto help
)
:help
echo %~0
echo [/?] : help
echo [-app] [appName] : 指定したアプリを作成
echo [-mig] [appName] : 指定したアプリのマイグレーションを実行
echo [-run] : ローカルサーバ立ち上げ
echo [-col] : staticファイルを集める
echo [--create-admin] : 管理者登録
cmd
exit /b
必要なパッケージのインストール
ターミナル
sudo apt install nginx
pip install uwsgi # テスト環境用
sudo pip install django djangorestframework django-bootstrap5 uwsgi --break-system-packages # 実環境にインストール
設定ファイルの編集
ターミナル
nano [path]/[Project Name]/[Project Name]_uwsgi.ini
エディタ
[uwsgi]
socket = /tmp/[Project Name].sock
chmod-socket = 666
chdir = [path]/[Project Name]
module = [Project Name].wsgi
processes = 4
threads = 2
uid = www-data
gid = www-data
pidfile = /tmp/[Project Name].pid
logto = /var/log/uwsgi/[Project Name].log
daemonize = /var/log/uwsgi/[Project Name].log
ターミナル
uwsgi --ini [path]/[Project Name]/[Project Name]_uwsgi.ini # テスト
ターミナル
sudo nano /etc/nginx/sites-available/[Project Name]
エディタ
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
# Default server configuration
#
server {
listen 80 default_server;
# ワイルドカード (ホスト名がマッチしないすべて)
server_name _;
# 接続を即時切断
return 444;
}
server {
listen 80;
# root /var/www/html;
server_name raspi5.lan;
# 静的ファイル
location /static/ {
alias [path]/[Project Name]/static/;
}
# すべての動的リクエストをuWSGIに転送
location / {
include uwsgi_params;
uwsgi_pass unix:///tmp/[Project Name].sock; # uWSGI設定ファイルで指定したソケットのパス
}
error_log /var/log/nginx/[Project Name]_error.log;
access_log /var/log/nginx/[Project Name]_access.log;
}
設定の変更
ターミナル
sudo ln -s /etc/nginx/sites-available/[Project Name] /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t # テスト
起動
親ディレクトリにも実行権限o+x
を与えること
子ディレクトリには-R
オプションで一括権限付与
ターミナル
sudo systemctl restart nginx
自動起動
ターミナル
sudo nano /etc/systemd/system/[Project Name].service
エディタ
[Unit]
Description=uWSGI instance to serve [Project Name]
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=[path]/[Project Name]
ExecStart=uwsgi --ini [path]/[Project Name]/[Project Name]_uwsgi.ini
Restart=always
[Install]
WantedBy=multi-user.target
ターミナル
sudo systemctl daemon-reload
sudo systemctl restart [Project Name].service
sudo systemctl enable [Project Name].service