如何使用 lighttpd 部署 CKAN?

How to deploy CKAN using lighttpd?

我想知道如何使用 lighttpd 运行 和部署 CKAN。

实际上,我正在使用 mod_proxy 将 lighttpd 重定向到 httpd 备用端口(即 运行ning ckan):

$HTTP["host"] == "ckan.example.com"{    
    proxy.server = ( "" =>
    ( "" => 
    ("host" => "127.0.0.1", "port" => 81)
    )
    )
}

但肯定会降低性能。

apache配置如下:

WSGISocketPrefix /var/run/wsgi
<VirtualHost 0.0.0.0:81>
    ServerName localhost
    ServerAlias localhost
    WSGIScriptAlias / /etc/ckan/default/apache.wsgi

    # Pass authorization info on (needed for rest api).
    WSGIPassAuthorization On

    # Deploy as a daemon (avoids conflicts between CKAN instances).
    WSGIDaemonProcess ckan_default display-name=ckan_default processes=2 threads=15

    WSGIProcessGroup ckan_default

    # Add this to avoid Apache show error: 
    # "AH01630: client denied by server configuration: /etc/ckan/default/apache.wsgi" 
    <Directory /etc/ckan/default>
    Options All
    AllowOverride All
    Require all granted
    </Directory>

    ErrorLog /var/log/httpd/ckan_default.error.log
    CustomLog /var/log/httpd/ckan_default.custom.log combined
</VirtualHost>

/etc/ckan/default/apache.wsgi 是:

import os
activate_this = os.path.join('/usr/lib/ckan/default/bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))

from paste.deploy import loadapp
config_filepath = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'development.ini')
from paste.script.util.logging_config import fileConfig
fileConfig(config_filepath)
application = loadapp('config:%s' % config_filepath)

作为 FastCGI 的一种方法是完美的。

尝试使用 uWSGI。在你最喜欢的发行版上安装 uwsgi 和 uwsgi-plugin-python 包。然后,uwsgi --plugin python --ini-paste /path/to/development.ini ...。 uWSGI 可以配置为 SCGI 服务器或 FastCGI 服务器或 HTTP 服务器(以及其他网关),因此可以作为 lighttpd mod_scgi (SCGI), mod_fastcgi (FastCGI), mod_proxy (HTTP).

http://uwsgi-docs.readthedocs.io/en/latest/Python.html#paste-support

仅供参考:lighttpd mod_scgi 也将在即将推出的 lighttpd 1.4.42

中支持 uwsgi 协议

不安装任何其他东西,是可能的运行 CKAN 作为守护进程并使用代理通过 lighttpd 在端口 80 上为 ckan 提供服务。

所以,要做到这一点,有必要在 CentOS7 上将其变成一项服务:

为 运行 ckan 守护程序创建服务:

使用 CentOS7(以及所有 RHEL7 系列)很容易创建服务。 您只需要创建一个 ckand.service 和 运行 CKAN 作为守护进程。

创建日志和 运行 目录:

mkdir -p /var/run/ckan && chown ckan:ckan /var/run/ckan -R
mkdir -p /var/log/ckan && chown ckan:ckan /var/log/ckan -R

因此,为服务创建一个 ckand.service unit file,内容如下:

您可能需要更改配置文件路径。

[Unit]
Description=CKAN Daemon Service
Requires=solr.service postgresql.service
After=solr.service postgresql.service

[Service]
User=ckan
Group=ckan
Type=forking
TimeoutSec=0
PermissionsStartOnly=true

PIDFile=/var/run/ckan/ckan.pid

Restart=on-failure

RestartPreventExitStatus=1

PrivateTmp=false

ExecStart=/usr/lib/ckan/default/bin/paster serve /etc/ckan/default/development.ini --daemon  --pid-file=/var/run/ckan/ckan.pid  --log-file=/var/log/ckan/ckan.log
ExecStop=/usr/lib/ckan/default/bin/paster serve /etc/ckan/default/development.ini --stop-daemon --pid-file=/var/run/ckan/ckan.pid
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

Restart=on-failure
RestartSec=42s

[Install]
WantedBy=default.target

然后在 lighttpd 上创建虚拟主机:

1st 你必须确保代理模块已激活,然后 在 /etc/lighttpd/vhost.d/ 上,您必须像这样创建一个 .conf:

$HTTP["host"] == "ckan.example.com" {
  proxy.server = ( "" =>
        ( "" => 
            ("host" => "127.0.0.1", "port" => 5000) # if you're running ckan on a different port please change here
        )
    )
}

恢复方式:

cd /etc/ckan/default
wget https://gist.githubusercontent.com/LeonanCarvalho/a7bd73fe9632873c1bd7898c73d4b218/raw/637db259f4e1ac8980ea3377259bd65042cd1a8b/ckand.service
#It can't be a symbolic link
ln -P /etc/ckan/default/ckand.service /etc/systemd/system/ckand.service 
systemctl enable ckand
systemctl start ckand
systemctl status ckand -l
cd /etc/lighttpd/vhost.d
wget https://gist.githubusercontent.com/LeonanCarvalho/a7bd73fe9632873c1bd7898c73d4b218/raw/637db259f4e1ac8980ea3377259bd65042cd1a8b/ckan_lighttpd_vhost.conf
systemctl restart lighttpd

wget之前请检查链接内容,下载后可以更改。