前提条件
这个教程的基础是你的电脑上已经安装了 java 和 python 。并需要以下三步来确保符合安装条件。
Step 1 确认已经安装了基础包
使用命令 rpm -qa | grep selinux
, rpm -q policycoreutils
和 rpm -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 会返回 Enforcing
, Permissive
或者 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.deploy
和 paste.script
包,你可以通过下面的指令来确定是否安装:
# python
>>> from paste.deploy import loadapp
>>> from paste.script.util.logging_config import fileConfig
如果执行命令后没有报错,则你可直接跳过下面安装的步骤,如果提示没有相关的包,并且你安装了pip
包,那么你可以直接通过下面两个语句安装这两个包:
pip install PasteDeploy
pip install PasteScript
提示: 包 paste.deploy
和 paste.script
与paste
包是不一样的。你可以通过 Ctrl+D
或 exit
指令退出 python 环境。
具备以上条件后你就可以开始安装CKAN了!
1. 安装所需的包
安装并激活 CentOS Release 库
# yum install centos-release
更新并重启你的系统
# yum update
# shutdown -r now
安装后面我们需要用到的 wget
和 policycoreutils-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+D
或 exit
退出 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.com
和 www.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
.