使用Django+Apache2+mod_wsgi进行Web服务器配置的步骤

首先

每次在Apache上发布由Django创建的Web应用程序时,都需要对mod_wsgi进行配置。由于每次都会忘记步骤,所以我重新整理了一下。

执行流程 ​​

准备Django的执行环境。

在venv的虚拟环境中安装Django,并准备进行开发。

# python関係のパッケージをインストール
# devのインストールにはマイナーバージョンまで指定する必要があるので注意
sudo apt install python3-venv python3.8-dev

cd ~
mkdir django
cd django
python3 -m venv venv
source venv/bin/activate
pip install wheel django mod_wsgi

在虚拟环境中,除了Django之外,还安装了mod_wsgi以便稍后在Apache上运行Django所需。

关于mod_wsgi,可以参考维基百科等外部网站。简单来说,Python的Web应用程序框架有Django和Flask等各种存在,而mod_wsgi可以将这些框架的接口标准化,使得可以在Apache等Web服务器上运行,而不需要考虑框架的类型。我理解mod_wsgi是为了在Web服务器上运行Python的Web应用程序而设计的。

 

mod_wsgi是一个模块,用于在Apache HTTP Server上运行符合WSGI(Web Server Gateway Interface)接口的Python程序。

使用Django进行Web应用开发

尽管和Apache或mod_wsgi无关,但还是保留下来。在这里,我们将项目名称设置为alice,应用程序名称设置为artemis。

django-admin startproject alice
cd alice

为了避免使用默认文件夹名难以理解,我们将项目中的alice目录重命名为config。由于重命名后路径发生了变化,因此我们需要将以下文件中的alice.*等部分改为config.*。

    • manager.py

 

    • config/asgi.py

 

    • config/settings.py

 

    config/wsgi.py

当完成初期设置后,我们将使用startapp开始开发应用程序。

python manager.py startapp artemis

创建一个用于应用程序的urls.py文件,并编辑根路径和应用程序的URLConf文件。IndexView是在views.py中创建的一个适当的视图。

from django.urls import path
from . import views

urlpatterns = [
    path('', views.IndexView.as_view(), name="index"),
]
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include("artemis.urls")),
]

最后,我们将编辑settings.py文件,并进行必要的配置以注册和外部公开所开发的应用程序。

・・・
DEBUG = False

ALLOWED_HOSTS = ['*']

INSTALLED_APPS = [
    'artemis.apps.ArtemisConfig',
    ・・・
]

・・・

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

汇集静态内容

当开发完成后,将静态内容(如.jpg、.js、.css等)汇集到一个目录中。

Django为我们提供了collectstatic命令,使用它可以自动将各个应用程序使用的静态内容收集到在settings.py中指定的STATIC_ROOT目录中。

cd [プロジェクトディレクトリ]
mkdir static
python manage.py collectstatic

安装Apache2

在APT中安装Apache2。

sudo apt install apache2 apache2-dev

本次我们将使用8000作为HTTP端口。我们将在apache的配置中更改接收请求的端口,并且也会开放8000端口的防火墙。

sudo nano /etc/apache2/ports.conf
# - Listen 80
# + Listen 8000
sudo ufw allow 8000/tcp
sudo ufw enable

修改mod_wsgi的配置

进入Django的虚拟环境,执行mod_wsgi-express命令,并保存输出。之后将它粘贴到mod_wsgi的配置文件中。

source ~/django/venv/bin/activate
mod_wsgi-express module-config
# LoadModule wsgi_module "/home/vboxuser/django/venv/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so"
# WSGIPythonHome "/home/vboxuser/django/venv"

接下来,我们要创建一个在Apache中执行的应用程序配置文件。由于已经有了名为000-default.conf的默认配置文件,我们将复制并使用它。

cd /etc/apache2/sites-available
sudo cp 000-default.conf alice.conf
sudo nano alice.conf

设置的内容如下所示。

# 先程控えたmod_wsgi-expressの出力を貼り付ける
LoadModule wsgi_module "/home/vboxuser/django/venv/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so"
WSGIPythonHome "/home/vboxuser/django/venv"

<VirtualHost *:8000>
# Djangoのwsig.pyのパスを記述する
WSGIScriptAlias / /home/vboxuser/django/alice/config/wsgi.py
# 仮想環境のホームディレクトリとPYTHONPATHを指定する
# processとthreadsにはApacheで起動するプロセス数とスレッド数を指定する
# display-nameにはtopやpsで確認するための起動プロセス名を指定する
WSGIDaemonProcess alice_http python-home=/home/vboxuser/django/venv python-path=/home/vboxuser/django/alice:/home/vboxuser/django/venv/lib/python3.8/site-packages processes=2 threads=2 display-name=alice
WSGIProcessGroup alice_http

# Djangoのconfigディレクトリを指定する
<Directory /home/vboxuser/django/alice/config>
  <Files wsgi.py>
    Require all granted
  </Files>
</Directory>

# 静的コンテンツがある場合のみ
# collectstaticで集積したディレクトリを指定する
Alias /static/ /home/vboxuser/django/alice/static/
<Directory /home/vboxuser/django/alice/static>
  Require all granted
</Directory>        
</VirtualHost>

最後,禁用默认应用程序000-default的配置文件,并启用创建的alice.conf。

sudo a2dissite 000-default
sudo a2ensite alice
sudo systemctl restart apache2.service
sudo systemctl enable apache2.service

确认行动

通过Web浏览器访问http://localhost:8000以进行操作确认。此外,还可以在http://localhost:8000/admin/中确认是否可以加载CSS等静态内容。

ps -ax | grep alice
   3320 ?        Sl     0:00 alice             -k start
   3321 ?        Sl     0:00 alice             -k start

使用ps命令确认正在运行的进程,可以看到根据alice.conf配置文件中指定的,有两个以alice作为进程名的进程在运行。

请对以下内容进行中文释义,仅需要一个选项:

参考

 

广告
将在 10 秒后关闭
bannerAds