Centos6.8安装CKAN2.5.2的安装指南

时间:2021-11-11 23:11:25

前提条件

这个教程的基础是你的电脑上已经安装了 java 和 python 。并需要以下三步来确保符合安装条件。

Step 1 确认已经安装了基础包

使用命令 rpm -qa | grep selinuxrpm -q policycoreutilsrpm -qa | grep setroubleshoot 来确认你已经安装了 SELinux 包。如果没有,则需要先安装上。

确认你已经安装了下面几个: selinux-policy-targeted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils, setroubleshoot, setroubleshoot-server, setroubleshoot-plugins。

作为 Linux 的root用户,使用下面的命令来安装上面所列内容中你没有安装的包。

yum install package-name  

下面这几个的安装是可选的: policycoreutils-gui,selinux-policy-devel,mcstrans 。

Step 2 打开 SELinux

使用命令 /usr/sbin/getenforce or /usr/sbin/sestatus 来检查 SELinux 的状态,命令 getenforce 会返回 EnforcingPermissive 或者 Disabled。如果返回Enforcing 则说明SELinux是打开的(SELinux规则会被执行):

# /usr/sbin/getenforce
Enforcing

如果 SELinux 是 disabled 状态,你需要在安装ckan之前打开它。

在打开 SELinux 之前,文件系统的每个文件必须用 SELinux 内容所标记。在这之前,限制的部分可能被定义为允许状态,使得你的系统不能正确启动,为此,要确保 /etc/selinux/config 文件中 ELINUX=permissive

[root@localhost ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

然后作为 Linux的 root 身份,执行命令 reboot 来重启计算机,这样在在下一次启动的过程中,文件系统会被标记。

Step 3 安装python需要的包

在安装的第9步中,定义的 WSGI 文件需要 python 的 paste.deploypaste.script 包,你可以通过下面的指令来确定是否安装:

# python
>>> from paste.deploy import loadapp
>>> from paste.script.util.logging_config import fileConfig

如果执行命令后没有报错,则你可直接跳过下面安装的步骤,如果提示没有相关的包,并且你安装了pip包,那么你可以直接通过下面两个语句安装这两个包:

pip install PasteDeploy
pip install PasteScript

提示: 包 paste.deploypaste.scriptpaste 包是不一样的。你可以通过 Ctrl+Dexit 指令退出 python 环境。

具备以上条件后你就可以开始安装CKAN了!

1. 安装所需的包

安装并激活 CentOS Release 库

# yum install centos-release

更新并重启你的系统

# yum update
# shutdown -r now

安装后面我们需要用到的 wgetpolicycoreutils-python

# yum install wget policycoreutils-python

安装并激活 Enterprise Linux (EPEL) 库额外的包(可能你的电脑已经安装了)

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

安装以下包:

# yum install xml-commons git subversion mercurial postgresql-server postgresql-devel \
postgresql python-devel libxslt libxslt-devel libxml2 libxml2-devel python-virtualenv \
gcc gcc-c++ make java-1.7.0-openjdk-devel java-1.7.0-openjdk tomcat tomcat-webapps \
tomcat-admin-webapps xalan-j2 unzip policycoreutils-python mod_wsgi httpd

2. 安装 CKAN

首先,创建一个 CKAN 用户, ckan 用户是通过 /sbin/nologin 创建,并由目录 /usr/lib/ckan 映射,详见文件 CKAN Deployment documentation

# useradd -m -s /sbin/nologin -d /usr/lib/ckan -c "CKAN User" ckan

将新创建的目录设置为可读,其内容将能够通过 httpd 来执行。

# chmod 755 /usr/lib/ckan

修改默认值和新创建目录中的内容,使其内容可通过 httpd 来执行。

# semanage fcontext --add --ftype -- --type httpd_sys_content_t "/usr/lib/ckan(/.*)?"
# semanage fcontext --add --ftype -d --type httpd_sys_content_t "/usr/lib/ckan(/.*)?"
# restorecon -vR /usr/lib/ckan

转换为 ckan 用户

# su -s /bin/bash - ckan

建立一个名为 default 的独立 Python 环境

# virtualenv --no-site-packages default

激活刚刚创建的 python 环境

# . default/bin/activate

下载并安装 CKAN 2.5.2

(default)# pip install --ignore-installed -e git+https://github.com/okfn/ckan.git@ckan-2.5.2#egg=ckan

下载并安装所需的 python 模块,使得 CKAN 可以在独立的 python 环境中运行

(default)# pip install --ignore-installed -r default/src/ckan/pip-requirements-docs.txt

通过以下命令返回 root 身份

(default)# exit()

或通过 Ctrl+D

3. 配置 PostgreSQL

使 PostgreSQL 在系统启动时自动运行

# chkconfig postgresql on

初始化 PostgreSQL 数据库

# service postgresql initdb

编辑文件 /var/lib/pgsql/data/pg_hba.conf,使得它既可以通过密码登录,也可以允许本地 postgres 用户通过识别登录管理。文件 pg_hba.conf 需要修改的相关部分如下:

local   all         postgres                          ident
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
Start PostgreSQL
# service postgresql start

打开 PostgreSQL :

service postgresql start

转换为 postgres 用户:

su - postgres

列出已经存在的数据库:

# psql -l

确认数据的编码方式为 UTF8, 如果不是的话国际化可能会是个问题,因为改变 Postgresql 的编码方式需要删除之前的数据库,所以最好在安装 CKAN 之前就使其编码方式固定。

下一步需要创建一个数据库的用户,建立一个新的 PostgreSQL 数据库用户,名为 ckan_default,之后会提示为这个用户输入一个密码 password,你要记住这个密码,在后面的步骤中会用到

# createuser -S -D -R -P ckan_default

创建一个新的 PostgreSQL 数据库,名为 ckan_default,它的所有者为刚刚创建的数据库用户:

# createdb -O ckan_default ckan_default -E utf-8

退出 postgres 用户环境,可以使用 Ctrl+D 或者

# exit

4. 创建 CKAN 配置

转化回 root 用户并创建一个目录文件来存储网站的配置:

# mkdir -p /etc/ckan/default
# chown -R ckan /etc/ckan/

转化到 ckan 用户并创建网站的配置文件:

# su -s /bin/bash - ckan
# . default/bin/activate
(default)# cd /usr/lib/ckan/default/src/ckan
(default)# paster make-config ckan /etc/ckan/default/development.ini

编辑文件 development.ini 更改下面对应的部分:

sqlalchemy.url = postgresql://ckan_default:pass@localhost/ckan_default
ckan.site_url = http://default.yourdomain.com
ckan.site_id = default
solr_url = http://127.0.0.1:8080/solr/schema-2.0.xml

将其中的 pass 置换为你在第3步中创建的 password
将其中的 “http://default.yourdomain.com” 置换为你希望ckan上传数据或使用其他功能时的网址 。

退出 ckan 用户,可采用 Ctrl+D 或命令 exit.

5. 建立 Apache SOLR

CKAN 不能使用 Apache SOLR 最新的版本,需要版本 1.4.1。

下载并提取 Apache SOLR

# curl http://archive.apache.org/dist/lucene/solr/1.4.1/apache-solr-1.4.1.tgz | tar xzf -

创建一个目录来存储多个 SOLR 核

# mkdir -p /usr/share/solr/core0 /usr/share/solr/core1 /var/lib/solr/data/core0 \
/var/lib/solr/data/core1 /etc/solr/core0 /etc/solr/core1

将 Apache SOLR war 复制到制定位置

# cp apache-solr-1.4.1/dist/apache-solr-1.4.1.war /usr/share/solr

将 Apache SOLR 配置事例复制到 core0 目录

# cp -r apache-solr-1.4.1/example/solr/conf /etc/solr/core0

编辑配置文件 /etc/solr/core0/conf/solrconfig.xml更改如下部分:

<dataDir>${dataDir}</dataDir>

将 core0 的配置复制到 core1

# cp -r /etc/solr/core0/conf /etc/solr/core1

创建 /etc/usr 配置之间的符号链接

# ln -s /etc/solr/core0/conf /usr/share/solr/core0/conf
# ln -s /etc/solr/core1/conf /usr/share/solr/core1/conf

将配置core中提供的 schema 删除,并连接CKAN中的 schema 文件

# rm -f /etc/solr/core0/conf/schema.xml
# ln -s /usr/lib/ckan/default/src/ckan/ckan/config/solr/schema.xml /etc/solr/core0/conf/schema.xml
# rm -f /etc/solr/core1/conf/schema.xml
# ln -s /usr/lib/ckan/default/src/ckan/ckan/config/solr/schema-1.4.xml /etc/solr/core1/conf/schema.xml

创建一个新的文件,名为 /etc/tomcat6/Catalina/localhost/solr.xml,它的内容如下:

<Context docBase="/usr/share/solr/apache-solr-1.4.1.war" debug="0" privileged="true" allowLinking="true" crossContext="true">
<Environment name="solr/home" type="java.lang.String" value="/usr/share/solr" override="true" />
</Context>

创建一个新的文件,名为 /usr/share/solr/solr.xml,它的内容如下:

<solr persistent="true" sharedLib="lib">
<cores adminPath="/admin/cores">
<core name="ckan-schema-2.0" instanceDir="core0">
<property name="dataDir" value="/var/lib/solr/data/core0" />
</core>
<core name="ckan-schema-1.4" instanceDir="core1">
<property name="dataDir" value="/var/lib/solr/data/core1" />
</core>
</cores>
</solr>

创建认证信息

使得 tomcat 成为 Solr 目录的所有者:

# chown -R tomcat:tomcat /usr/share/solr /var/lib/solr

打开 Tomcat

配置 Tomcat 开机自动启动

# chkconfig tomcat6 on

开启 Tomcat

# service tomcat6 start

如果 Tomcat 安装成功,则在浏览器中输入以下网址时可看到 Tomcat 的欢迎界面:

http://localhost:8080/

如果 Apache Solr 安装成功,则在浏览器中输入以下网址时可看到它的网站接口:

http://localhost:8080/solr

6. Create the Database Tables

转换到 ckan 用户,激活那个独立的 Python 环境,并切换到 CKAN 的源目录:

su -s /bin/bash - ckan
. default/bin/activate
cd default/src/ckan

初始化 CKAN 数据库:

paster db init -c /etc/ckan/default/development.ini

你可能会看到一些错误提示,但最终会显示:

Initialising DB: SUCCESS.

7. 创建 Datastore (可选步骤)

参考文件 Setting up the DataStore 来创建所需的 databases 和用户,设置正确的认证信息,并对正确配置你的 CKAN 配置文件。

提示: 你可能需要以root身份运行指令 paster --plugin=ckan datastore set-permissions -c /etc/ckan/default/development.ini ,因为我们还没有为 ckan 的用户创建密码。
提示: 创建 DataStore 是可选的。

8. 连接 who.ini

这一步你需要在 python 的环境中,如果没在,则执行以下命令:

su -s /bin/bash - ckan
. default/bin/activate
cd default/src/ckan

who.ini (Repoze.who 配置文件)需要从你的 CKAN 配置文件的目录中可访问到,因此需要创建它的一个链接:

ln -s /usr/lib/ckan/default/src/ckan/who.ini /etc/ckan/default/who.ini

9. 创建一个 WSGI 文件

为你的网站创建一个 WSGI 脚本文件 /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)

这个 modwsgi Apache 模块会将你的网站服务器的需求指向这个 WSGI 脚本文件,然后这个脚本文件通过将它们指向你的 CKAN 案例来处理这些需求(在最初配置 CKAN 运行的python 环境之后)。

使用Ctrl+Dexit退出 ckan 用户。

10. 创建 Apache 配置文件

创建你的 Apache 配置文件 /etc/httpd/conf.d/ckan_default.conf,其内容如下:

WSGISocketPrefix /var/run/wsgi
<VirtualHost 0.0.0.0:80>
ServerName default.yourdomain.com
ServerAlias http://default.yourdomain.com
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 Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>

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

default.yourdomain.comwww.default.yourdomain.com 置换为你想为自己的网站设置的域名。

这个文件使 Apache modwsgi 模块能将网络服务器的需求再指向你刚刚创建的 WSGI脚本文件,你的 WSGI 文件在返回来将这些需求指向你的 CKAN 案例。

然后使用下面的命令编辑 /etc/hosts

vi /etc/hosts

在文件的最后加入新的一行内容:

127.0.0.1    default.yourdomain.com

default.yourdomain.com 替换为你的网站的域名,即刚刚在 /etc/httpd/conf.d/ckan_default.conf中设置的域名。

11. 配置 Apache

打开 httpd 使网络连接

setsebool -P httpd_can_network_connect 1

配置 httpd 开机自动启动

chkconfig httpd on

开启 httpd

service httpd start 

12. 配置 iptables

编辑文件 /etc/sysconfig/iptables ,在文件中加入下面内容:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

重启 iptables

service iptables restart

13. 连接 CKAN

打开你的 browser 并输入你之前设置的域名网址,你会看到 CKAN 正在运行。例如,我的域名为 default.yourdomain.com.