在ConoHa的VPS上运行多个Django应用程序

首先/首先(hajime ni)

玩《宠物棒球2020》真好玩!

以前,我在Django中创建了栄冠ナイン数据库。由于应用程序的特性,可以在Django的开发服务器上运行,但现在我将其放置在ConoHa的VPS上。Heroku很快就达到了记录数的上限。
之前,我用Django创建了栄冠ナイン数据库。基于应用的特性,可以在Django的开发服务器上运行,但现在我将其放在了ConoHa的VPS上。Heroku很快达到了记录数的上限。

栄冠九数据库,但没有考虑栄冠九的循环播放。当考虑到这一点时,我曾考虑过再准备一个VPS,但即使是最便宜的计划资源都有剩余,所以我想在一个VPS内放入两个Django应用程序,这样不就好了吗?但意外的是,我遇到了一些困难。

英幹數據庫 ku)

ConoHa的虚拟私人服务器是什么?

公式

这次的环境

※截至2020年9月24日

    • メモリ 512MB/CPU 1Core

 

    • Djangoテンプレート

CentOS 7.7
Apache 2.4.6
Python 3.6.8
mod_wsgi

在ConoHa的VPS上运行Django应用

首先,将代码存储在/home/django/中。
如果使用Django模板,则只需将源代码放置在/home/django/下,并通过更改/etc/httpd/conf/httpd.conf文件中的以下内容来使用它。

# ファイルの一番下

WSGIScriptAlias / /home/django/sample/sample/wsgi.py
WSGIPythonPath /home/django/sample

<Directory /usr/lib64/python3.6/site-packages/django/contrib/admin/static>
  Require all granted
</Directory>

<Directory /home/django/sample/sample>
  <Files wsgi.py>
    Require all granted
  </Files>
</Directory>

# /home/django/sample/sample/wsgi.pyの部分を自分のアプリのwsgi.pyへのパスに変更する
WSGIScriptAlias / /home/django/eikan-database/config/wsgi.py

# 同様に自分のアプリのフォルダに変更する
WSGIPythonPath /home/django/eikan-database

# 変更なし
<Directory /usr/lib64/python3.6/site-packages/django/contrib/admin/static>
  Require all granted
</Directory>

# wsgi.pyが入っているフォルダのパスに変更する
<Directory /home/django/eikan-database/config>
  <Files wsgi.py>
    Require all granted
  </Files>
</Directory>

通过更改设置,你可以很容易地使用Django应用程序来进行样本编写。

在ConoHa的VPS上运行多个Django应用程序

绊倒点

ConoHa的VPS的Django模板使用Apache + mod_wsgi来运行。
当在此环境中尝试运行多个Django应用程序时,通过搜索很快找到了使用冒号(:)连接WSGIPythonPath的方法,但是这种方法无法实现。

观察WSGIDaemonProcess可以发现,默认情况下是设置为%{GLOBAL},如果安装了两个以上的Django应用程序,那么运行时它们会被放在同一个进程中,因此仅仅更改WSGIPythonPath并不会使进程被覆盖,无法同时运行多个Django应用程序。

通过将WSGIDaemonProcess和WSGIProcessGroup进行分离,可以在mod_wsgi环境下运行多个Django应用程序。

如果是目录类型的情况

同样地,将另一个应用程序存储在/home/django/中。

这次作为eikan-database和eikan-database-2进行了命名。
*样本原本是已经存在的东西

/home/django
├── eikan-database
├── eikan-database-2
└── sample

同时,这个例子中将Power Pro 2016的栄冠ナイン第三轮使用的应用程序标记为/201603,
将Power Pro 2020的栄冠ナイン第一轮使用的应用程序标记为/202001。大致就是这样。

    • https://endb.shimay.uno/201603

 

    https://endb.shimay.uno/202001

将/etc/httpd/conf/httpd.conf文件的内容更改如下:


# WSGIDaemonProcessのすぐ後ろは任意の名前でおk
# python-pathはそれぞれのアプリのフォルダを指定する
WSGIDaemonProcess endb201603 python-path=/home/django/eikan-database
WSGIDaemonProcess endb202001 python-path=/home/django/eikan-database-2

# WSGIDaemonProcessで指定した名前を指定する
# WSGIProcessGroup %{ENV:PROCESS_GROUP}とすると、プロセスグループ名は、指定された環境変数の値に設定されます。
SetENV PROCESS_GROUP endb201603
WSGIProcessGroup %{ENV:PROCESS_GROUP}

# このアプリのルートディレクトリを/201603とする
WSGIScriptAlias /201603 /home/django/eikan-database/config/wsgi.py
<Directory /home/django/eikan-database/config>
  <Files wsgi.py>
    Order deny,allow
    Allow from all
    Require all granted
  </Files>
</Directory>

# このアプリのルートディレクトリを/202001とする
WSGIScriptAlias /202001 /home/django/eikan-database-2/config/wsgi.py
<Directory /home/django/eikan-database-2/config>
  <Files wsgi.py>
    SetENV PROCESS_GROUP endb202001
    Order deny,allow
    Allow from all
    Require all granted
  </Files>
</Directory> 

这样做的话即使一直重复循环也能轻松增加数量吧。

将html文件放在/var/www/html中,通过添加类似于https://endb.shimay.uno/的链接,可以轻松切换。

对于子域名类型,也许可以这样进行流程划分处理吗?(未验证)

终结

最开始就使用Nginx + uWSGI是否会更快呢…?
或者在应用程序端考虑用户切换和循环玩法的设计呢…?
使用Docker…?
不使用VPS而是在本地开发服务器上运行…?

请参考

    • https://mowa-net.jp/wiki/Django

 

    • WSGIDaemonProcess

 

    • WSGIProcessGroup

 

    WSGIScriptAlias

時候的問候。

也許只有我和一小部份玩家會這樣做。

這回是同一個應用程式。

儘管需要進行一些額外的設定,例如資料庫設定、安裝使用的套件、以及設定https等等…

這只是一個我自己使用的草率網頁。

广告
将在 10 秒后关闭
bannerAds