WindowsでDjangoを使うためのApacheとPythonのインストール方法

Django

はじめに

この記事では、WindowsでApache2 + Python + Djangoの環境を作ることを紹介します。
通常はpyenvなどを使ってPythonの仮想環境を作って運用しますが、Windowsの場合はDjangoが動作するPythonとmod_wsgiの組み合わせが限定されているのでpyenvは使いません。

この記事では環境を作るまでを紹介しており、実際のDjangoとApacheの設定方法を紹介した記事はこちらになります。

2022.06.22 環境を更新

環境

Windowsのバイナリが提供されているPython 3.10の最新版を使います。
また、PostgreSQLのバージョンは問いませんが、これも最新版を使いました。

 - Windows 10 Pro 64bit 21H2
 - Python 3.10.5
 - Apache 2.4.54
 - Django 4.0.5
 - mod_wsgi-4.9.1-cp310-cp310-win_amd64.whl

ディレクトリ構造は以下の通りです。

C:\Python
 ┣ -- Scripts
        ┣ -- mod_wsgi-express.exe
        ┣ -- pip.exe
 ┣ -- DLLs
 ┣ -- Lib
 ・・・

C:\Apache24
 ┣ -- conf
        ┣ -- httpd.conf
 ・・・

C:\user\xxx\Django\proj
 ┣ -- proj
        ┣ -- settings.py
        ┣ -- wsgi.py
 ┣ -- app
 ┣ -- templates
 ┣ -- static
 ┣ -- db.sqlite3

set_wakeup_fd only works in main thread of the main interpreter


最新に近いPythonとmod_wsgiの組み合わせでは、エラーが表示されてDjangoが動作しませんでした。

set_wakeup_fd only works in main thread of the main interpreter


この件に関してはissueが挙がっており、Python 3.7を使えば良いと記述されています。

https://bugs.python.org/issue43007

ダウンロードとインストール

各パッケージのインストーラーは以下になります。

Python

「python-3.10.5-amd64.exe」をダウンロードしてインストールします。
Python3.10系ならば何でも良いですが、Windowsのバイナリが提供されている最新バージョンをダウンロードします。
インストーラーを起動後、「Customize Installation」を選択します。
ほとんどデフォルト設定で良いですが、「Customize install location」でインストールするパスを変更します。
インストール先はデフォルトでは隠しディレクトリのAppData以下になりますが「C:\Python」に変更します。

Python Releases for Windows
The official home of the Python Programming Language

パスを通す

キーボードのWindowsキーを押し、歯車マーク「設定」→「システム」→「詳細情報」→「システムの詳細設定」→「詳細設定」→「環境変数」から設定します。

「システム環境変数」のPathをダブルクリックして「新規」をクリック後、「C:\Python」と「C:\Python\Scripts」をそれぞれ入力します。

C:\Python
C:\Python\Scripts

環境変数にPYTHONPATHを登録する

ApacheをWindowsサービスには登録できたのですが、起動で失敗しました。
Apacheの「C:\Apache24\logs\error.log」を見るとPYTHONHOME、PYTHONPATHが「not set」になっていました。

PYTHONHOMEはhttpd.confでWSGIPythonHomeとして設定しているのでPYTHONPATHだろうと推測し、環境変数に追加することでWindowsサービスから起動することができました。

キーボードのWindowsキーを押し、歯車マーク「設定」→「システム」→「詳細情報」→「システムの詳細設定」→「詳細設定」→「環境変数」から設定します。

「システム環境変数」の「新規」をクリック後、変数名に「PYTHONPATH」、変数値に「C:\Python\Lib;C:\Python\DLLs」を入力しました。

変数名: PYTHONPATH
変数値: C:\Python\Lib;C:\Python\DLLs

Pythonの確認

コマンドプロンプトを起動してPythonにパスが通っているか確認します。
以下はPythonのバージョンを表示します。

python -V

    Python 3.10.5

pipのアップグレード

管理者権限でコマンドプロンプトを起動してpipをアップグレードします。

pip install --upgrade pip

Djangoのインストール

管理者権限でコマンドプロンプトを起動してDjangoをインストールします。

pip install Django

mod_wsgi

「Mod_wsgi」の項目から「mod_wsgi-4.9.1-cp310-cp310-win_amd64.whl」をダウンロードしてpipでインストールします。
コマンドプロンプトを管理者権限で起動して、以下のようにインストールします。

pip install mod_wsgi-4.9.1-cp310-cp310-win_amd64.whl
Page Not Found - Laboratory for Fluorescence Dynamics
HTTP Error 404 - File or directory not found

Apache

「Apache 2.4.54 Win64」にあるリンクから「httpd-2.4.54-win64-VS16.zip」をダウンロードします。

Apache VS17 binaries and modules download
For (business) webmasters, developers and home-users who want running always up to date Windows VS17...

フォルダの移動

解凍すると「Apache24」フォルダがあるので「C:\Apache24」にコピーします。

httpd.confを修正する

今回はローカルからのみアクセスするので「C:\Apache24\conf\httpd.conf」のServerNameを以下のように修正します。

ServerName localhost:80

Apacheを起動する

Apacheの動作確認のために起動します。
この場合、コマンドプロンプトを閉じるとApacheも終了します。

cd c:\Apache24\bin

httpd.exe

接続テスト

Webブラウザから以下にアクセスしてテストします。
「It works!」と表示されたら成功です。

 http://localhost/

Windowsサービスに登録する

Windowsの起動時にApacheが起動するようにWindowsサービスに登録します。
コマンドプロンプトをAdministrator権限で起動して以下のコマンドを実行します。
付属の「C:\Apache24\bin\ApacheMonitor.exe」を起動するとService StatusにApache2.4が表示されます。
これ以降はApacheMonitorを使って制御します。

httpd.exe -k install

VCランタイムが存在しないとメッセージが表示されたら、VC16(Visual Studio 2019)のVCランタイムが必要です。

MicrosoftのWebサイトから「その他のツールとフレームワーク」をクリックして「Visual Studio 2019 の Microsoft Visual C++ 再頒布可能パッケージ」をダウンロードします。

Visual Studio Tools のダウンロード - Windows、Mac、Linux 用の無料インストール
Visual Studio IDE または VS Code を無料でダウンロードします。 Windows、Mac で Visual Studio Professional または Enterprise...

Windowsサービスから削除する

Windowsサービスから削除したい場合は、コマンドプロンプトをAdministrator権限で起動して以下のコマンドを実行します。

httpd.exe -k uninstall

PostgreSQL

Djangoの標準のデータベースであるSQLite(以下、sqlite3)をPostgreSQLに変更します。
以下のページの文章中にある「Download the installer」をクリックして「postgresql-14.4-1-windows-x64.exe」をダウンロードします。

PostgreSQL: Windows installers

インストール時の変更点

インストールする際の設定項目は以下のようにしています。

1. インストールディレクトリを変更します。

C:\PostgreSQL\14

2. Stack Builderのチェックをはずします。
3. データディレクトリを変更します。

C:\PostgreSQL\14\data

4. postgresユーザのパスワードを設定します。
5. PostgreSQLで使用するポート番号を指定します。
 デフォルトの5432で良いです。
 この番号は、Djangoプロジェクトのsettings.pyで指定します。
6. Locale(言語)は、「C」を選択します。
 Cを選択する意味については以下で取り上げられています。

ロケール(国際化と地域化) | Let's POSTGRES

アクセス制限

ローカルからのみアクセスを許可するのでpostgresql.confのlisten_addressesを変更します。

listen_addresses = 'localhost'

サービス開始・停止

PostgreSQLをインストールするとWindowsサービスに登録され、Windowsの起動時に自動で起動します。
設定ファイルを変更した際は再起動が必要なので管理者権限でコマンドプロンプトを起動して、サービスを停止・起動します。

停止
  net stop postgresql-x64-14

起動
  net start postgresql-x64-14


postgresql-x64-14はサービス名です。
PostgreSQLのバージョンによって名前が変わるので、Windowsの「ファイル名を指定して実行」でservices.mscを起動してpostgresqlから始まるサービス名を探します。

データベースの作成

データベースの情報は以下とします。

データベース名: proj
   ユーザ名: projuser
  パスワード: projpass
  文字コード: utf8
 タイムゾーン: asia/tokyo

データベースをPostgreSQLに作成するために、Windowsキーを押してメニューからPostgreSQL 14→SQL Shell(psql)を起動します。
起動するといくつか質問されますが、インストール時にポート番号などを変更していなければ全てデフォルトでエンターキーを押します。
postgresのパスワードは、PostgreSQLのインストール時に設定したものとなります。

無事にshellが起動したら、以下のコマンドを打ってデータベースを作成します。

create database proj;
create user projuser with password 'projpass';
alter role projuser set client_encoding to 'utf8';
alter role projuser set default_transaction_isolation to 'read committed';
alter role projuser set timezone to 'asia/tokyo';
grant all privileges on database proj to projuser;
\q

Djangoの設定

Djangoのsettings.pyファイルを修正します。
sqlite3の該当個所をコメントアウトして、PostgreSQLの設定を追記します。
データベース名などは、上記でデータベースの作成したときの情報と同じにします。

#DATABASES = {
#    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': BASE_DIR / 'db.sqlite3',
#    }
#}

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'proj',
        'USER': 'projuser',
        'PASSWORD': 'projpass',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

psycopg2

DjangoからPostgreSQLにアクセスするためにpsycopg2をインストールします。
管理者権限でコマンドプロンプトを起動して以下のコマンドを実行します。

pip install  psycopg2

Djangoへの反映

作成したデータベースをDjangoに反映させます。
管理者権限でコマンドプロンプトを起動して以下のコマンドを実行します。

python manage.py makemigrations
python manage.py migrate

Djangoの管理者情報

Djangoの管理画面にアクセスするための管理者IDとパスワードを設定します。
安易なパスワードを入力すると警告が表示されます。

python manage.py createsuperuser

接続テスト

DjangoとApacheの設定方法の記事を参考に設定が完了したら、Apache2を再起動してWebブラウザで管理画面にアクセスします。
Djangoの管理画面が表示されてログイン出来たら環境構築は完成です。


404 Error - Not Found
または
404 Error - Not Found

Comments