如何在 Linux Apache HTTP 服务器上部署 Jam-py 应用?
抱歉,因为我对 MS 服务器完全不了解, 因此,这里基本说的是直接部署到云服务器上,它们通常开放 22、80 和 443 端口。 前提是拥有 DNS 服务器名称的签名证书(即,下面的 YOUR_SERVER DNS )。 也可以使用自签名证书等,这里不涵盖这些内容。 此外,还需要安装 Python 和授予 sudo 访问权限(或 Linux 的 root 权限)。
应用处于只读模式。您可以访问 admin.html 页面,但无法更改任何内容。 我在 Google Cloud 服务器上进行了一些调整,这是一个微型 Ubuntu 实例, 使用 apt-get 进行普通的 apache2 安装。
为 Apache 安装 wsgi 模块 :
apt-get install libapache2-mod-wsgi为 apache 启用 ssl 和 wsgi 模块 :
a2enmod ssl wsgi为 jam-py 应用创建自定义配置文件,例如 /etc/apache2/sites-available/test.conf(仍在完善中):
<IfModule mod_ssl.c> <VirtualHost YOUR_IP:443> ServerName YOUR_SERVER ServerAlias ServerAdmin YOUR_EMAIL ErrorLog ${APACHE_LOG_DIR}/test-error-sec.log CustomLog ${APACHE_LOG_DIR}/test-access-sec.log combined #below is for cx_Oracle SetEnv LD_LIBRARY_PATH /u01/app/oracle/product/11.2.0/xe/lib SetEnv ORACLE_SID XE SetEnv ORACLE_HOME /u01/app/oracle/product/11.2.0/xe #finish cx_Oracle DocumentRoot /var/www/html/simpleassets SSLEngine on SSLCertificateFile "/etc/ssl/private/your.crt" SSLCertificateKeyFile "/etc/ssl/private/your.key" SSLCertificateChainFile "/etc/ssl/private/your_chain.crt" SSLCACertificateFile "/etc/ssl/private/your_CA.crt" WSGIDaemonProcess web user=www-data group=www-data processes=1 threads=5 WSGIScriptAlias / /var/www/html/simpleassets/wsgi.py <Directory /var/www/html/simpleassets> Options +ExecCGI SetHandler wsgi-script AddHandler wsgi-script .py Order deny,allow Allow from all Require all granted <Files wsgi.py> Order deny,allow Allow from all # comment the following for ubuntu <13 Require all granted </Files> </Directory> <Directory /var/www/html/simpleassets/static> # comment the following for ubuntu < 13 Require all granted </Directory> </VirtualHost> </IfModule>
上面的文件使用带有 your.key 的签名证书 your.crt ,以及从 CA 获取的 CA 和链文件。 请查看网络上关于证书和 DNS 的资源。 您需要获取并将这些文件复制到 /etc/ssl/private 文件夹中。将 YOUR_xyz 更改为您的自己的内容。
/var/www/html 是 Ubuntu 用于提供网页的默认文件夹。
像往常一样安装 jam-py
我创建了 /var/www/html/simpleassets 文件夹,在那里解压了 jam-py SimpleAssets 项目。 按照这里解释的步骤来部署这些:
简单来说,导出您的项目,保存好 zip 文件,并将其复制到您的网络托管服务器的所需文件夹中。 同时复制 admin.sqlite 和您的数据库(假设您使用的是 sqlite3 数据库)。 如果使用其他数据库,例如 mysql,您需要导出/导入数据库。
启用 test.conf (上面没有扩展名的文件名):
a2ensite test; systemctl restart apache2就是这样。目前,我保留了 80 端口不变,jam-py 只在 https 端口上运行。 要调试问题,我会从 SeLinux 或 apparmor 开始。 在 Ubuntu 上,这可能会有所帮助:
sudo /etc/init.d/apparmor stop
现在,问题是如何在一个 https 服务器上运行两个 jam-py 实例?
这个问题的一个可能答案是 DNS。您可以将您的 DNS 设置为例如 second_instance.YOUR_SERVER 名称(上面的实际例子是 jam2.research...)。
因此,上面的 test.conf 文件几乎相同,只是 YOUR_SERVER 被称为 second_instance.YOUR_SERVER。
/etc/apache2/sites-available/test3.conf 文件内容如下 :
<IfModule mod_ssl.c>
<VirtualHost YOUR_IP:443>
ServerName second_instance.YOUR_SERVER
ServerAlias
ServerAdmin YOUR_EMAIL
ErrorLog ${APACHE_LOG_DIR}/test3-error-sec.log
CustomLog ${APACHE_LOG_DIR}/test3-access-sec.log combined
#below is for cx_Oracle
SetEnv LD_LIBRARY_PATH /u01/app/oracle/product/11.2.0/xe/lib
SetEnv ORACLE_SID XE
SetEnv ORACLE_HOME /u01/app/oracle/product/11.2.0/xe
#finish cx_Oracle
DocumentRoot /var/www/html/simpleassets3
SSLEngine on
SSLCertificateFile "/etc/ssl/private/your.crt"
SSLCertificateKeyFile "/etc/ssl/private/your.key"
SSLCertificateChainFile "/etc/ssl/private/your_chain.crt"
SSLCACertificateFile "/etc/ssl/private/your_CA.crt"
WSGIDaemonProcess assets3 user=www-data group=www-data processes=1 threads=5
WSGIScriptAlias / /var/www/html/simpleassets3/wsgi.py
<Directory /var/www/html/simpleassets3>
Options +ExecCGI
SetHandler wsgi-script
AddHandler wsgi-script .py
Order deny,allow
Allow from all
Require all granted
<Files wsgi.py>
Order deny,allow
Allow from all
# comment the following for ubuntu <13
Require all granted
</Files>
</Directory>
<Directory /var/www/html/simpleassets3/static>
# comment the following for ubuntu < 13
Require all granted
</Directory>
</VirtualHost>
</IfModule>
Jam-py 应用的 second_instance 现在位于例如 /var/www/html/simpleassets3 中, 并且 WSGIDaemonProcess 已调整为新的守护进程,称为 assets3。其他一切几乎相同。
这是可能的,因为 SSL 证书是 *(星号或通配符)证书,使您能够在一个 DNS 域上运行多个服务。
本文最初由 Dražen Babić 发布于 https://github.com/jam-py/jam-py/issues/35