如何在 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