如何使用文檔和 GIS 數據插件部署 CKAN 環境

本指南將引導您使用 Ubuntu 16.04 部署和設置 CKAN 存儲庫。 CKAN 是一個開源數據集存儲庫,用於收集和分發來自各種來源的大型數據集,包括人口普查數據、電子表格、地理數據、政府和研究數據。

完成本指南後,您將擁有一台運行 CKAN 2.7 的生產服務器,該服務器已準備好導入新數據集,但如果您想開始使用 CKAN,則必須查看官方文檔以設置開發環境。

要完成本指南,您需要:

  • 使用公共 IP 運行 Ubuntu 16.04 64 位的雲 VPS 或虛擬機
  • 與您的 VPS 關聯的域名(您也可以使用子域)
  • 一些使用 Python 虛擬環境和命令行 shell 的經驗
  • 有關的一些知識 Apache、Nginx 和 Tomcat
  • 具有 CSV 結構的示例數據集或 Excel 格式(可選)

1. 設置系統

讓我們首先使用所需的軟件包設置 ubuntu 機器:

一個。 更新服務器

$ sudo ssh root@$REMOTE_SERVER

apt update && apt upgrade

灣創建備份腳本

$ cat > /usr/bin/backme.sh
#! /bin/bash  -e

backme () {
  TIMESTAMP=$( date +'%s')
  for SOURCE_FILE in $*
  do
    cp -av $SOURCE_FILE ${SOURCE_FILE}-${TIMESTAMP}
  done
}

backme $*

exit $?
$ sudo chmod +x /usr/bin/backme.sh

C。 更新服務器主機名配置,您需要將“xxxx”替換為您的服務器 IP 地址,還將 yourdomain.com 替換為分配給您服務器的域。

backme.sh /etc/hosts /etc/hostname

echo "ckanproduction.yourdomain.com" > /etc/hostname

echo -e "nx.x.x.x ckanproduction.yourdomain.com ckanproduction" >> /etc/hosts

$ sudo hostname ckanproduction.yourdomain.com

exit

$ sudo ssh root@$REMOTE_SERVER

d. 設置一個用戶帳戶來部署 CKAN

adduser ckanadmin  

# USE THE INTERACTIVE PROGRAM TO SETUP A NEW USER AND PASSWORD TO MANAGE CKAN

echo -e "nckanadmin ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers

此外,您可以使用“visudo”來設置用戶權限。

$ su - ckanadmin

mkdir .ssh 

$ cat > .ssh/authorized_keys
# INSERT A PUBLIC KEY TO ACCESS YOUR SERVER AS THE USER ckanadmin
chmod 700 .ssh

exit

$ ssh ckanadmin@$REMOTE_SERVER

e. 安裝CKAN的軟件包依賴

$ cat > packagelist
apache2
build-essential
git
git-core
jq
libapache2-mod-rpaf
libapache2-mod-wsgi
libffi-dev
libgeos-c1
libgeos-dev
libjts-java
libpq5
libpq-dev
libtomcat6-java
libxml2-dev
libxslt1-dev
links
openjdk-8-jdk
postgresql
postgresql-9.3-postgis-2.1
python-dev
python-jinja2
python-pastescript
python-pip
python-virtualenv
python-werkzeug
redis-server
solr-tomcat
tomcat8
unzip
virtualenvwrapper
zlib1g-dev
postfix
unzip
unrar
p7zip-full
python-gdal
$ sudo apt install -y $( cat packagelist )

$ sudo service apache2 stop

$ sudo apt install nginx -y

$ sudo service nginx stop

注意:使用 apt search packagename* 搜索當前版本 Ubuntu 支持的軟件包版本,並相應地更新“packagelist”文件。

2.下載並安裝CKAN包進行生產

我們必須使用 wget 命令從 ckan 打包網站下載相應的文件。

$ sudo wget https://packaging.ckan.org/python-ckan_2.7-trusty_amd64.deb

$ sudo dpkg -i python-ckan_2.7-trusty_amd64.deb

3. 設置一個 PostgreSQL 數據庫

一個。 檢查PostgreSQL是否安裝正確,檢查數據庫的編碼是否為UTF8

sudo -u postgres psql -l

灣接下來您需要創建一個數據庫用戶(請使用不同的密碼)

$ sudo -u postgres createuser -S -D -R -P ckan_default    

password: f!+hRnztXgDtKSLW9kY

C。 創建一個新的 PostgreSQL 數據庫,

$ sudo -u postgres createdb -O ckan_default ckan_default -E utf-8

database: ckan_default  

5. 設置 Solr

一個。 編輯Tomcat配置文件

$ sudo backme.sh  /etc/tomcat8/server.xml

$ sudo sed -r -i "/Connector port="8080"/ s/$/address="127.0.0.1"/" /etc/tomcat6/server.xml

$ sudo sed -r -i "/port=.8080./ s/8080/8983/g" /etc/tomcat8/server.xml

$ diff /etc/tomcat8/server.xml /etc/tomcat8/server.xml.last   

sudo service tomcat8 restart

灣用指向 CKAN 模式的符號鏈接替換默認的 schema.xml 文件

$ sudo mv -v /etc/solr/conf/schema.xml /etc/solr/conf/schema.xml.orig.back

$ sudo ln -s /usr/lib/ckan/default/src/ckan/ckan/config/solr/schema.xml /etc/solr/conf/schema.xml

$ sudo service tomcat8 restart

C。 更改 CKAN 配置文件中的 solr_url 設置

$ sudo backme.sh /etc/ckan/default/production.ini

$ sudo sed -r -i "/solr_url/ s/^#//" /etc/ckan/default/production.ini

$ diff /etc/ckan/default/production.ini /etc/ckan/default/production.ini.last

$ sudo ln -s /usr/bin/rotatelogs /usr/sbin/rotatelogs

$ sudo service tomcat8 restart

$ sudo service apache2 restart

links https://localhost:8983/solr/

$ ssh -L 8983:localhost:8983 [email protected]

Use a web browser to check https://localhost:8983/solr/

6.更新配置並初始化數據庫

d. 設置 ckan.site_id

sudo backme.sh /etc/ckan/default/production.ini

sudo sed -i "/ckan.site_id/ s/default/tenosolution/" /etc/ckan/default/production.ini

diff /etc/ckan/default/production.ini /etc/ckan/default/production.ini.last

e. 設置 ckan.site_url

sudo backme.sh /etc/ckan/default/production.ini

sudo sed -r -i "/ckan.site_url/ s/$/ https://ckanproduction.yourdomain.com/" /etc/ckan/default/production.ini  

diff /etc/ckan/default/production.ini /etc/ckan/default/production.ini.last

C。 編輯 sqlalchemy.url 設置( sqlalchemy.url = postgresql://ckan_default:pass@localhost/ckan_default )

sudo backme.sh /etc/ckan/default/production.ini

sudo sed -i "/sqlalchemy/ s/pass/f!+hRnztXgDtKSLW9kY/"  /etc/ckan/default/production.ini

diff /etc/ckan/default/production.ini /etc/ckan/default/production.ini.last

C。 初始化您的 CKAN 數據庫

$ sudo ckan db init

d. 重新啟動 Web 服務器

$ sudo service apache2 restart

$ sudo service nginx restart    

7. 設置管理員賬戶和測試數據

一個。 初始化虛擬環境

$ . /usr/lib/ckan/default/bin/activate

$ cd /usr/lib/ckan/default/src/ckan

灣創建 sysadmin 用戶(請設置不同的密碼)

paster sysadmin add mycompanyadmin -c /etc/ckan/default/production.ini

password: mycompanyadmin

C。 創建測試數據

$ paster create-test-data -c /etc/ckan/default/production.ini

d. 設置 CKAN 所有權以稍後安裝擴展…

$ cd /usr/lib/ckan

$ sudo chown -R ckanadmin: default/

8. 設置 ckanext-spatial

一個。 安裝 PostGIS:

cd /usr/lib/ckan/default/src/ckan

$ sudo apt-get install postgresql-9.3-postgis-2.1 python-dev libxml2-dev libxslt1-dev libgeos-c1

灣在數據庫中創建必要的表和函數

$ sudo -u postgres psql -d ckan_default -f /usr/share/postgresql/9.3/contrib/postgis-2.1/postgis.sql

$ sudo -u postgres psql -d ckan_default -f /usr/share/postgresql/9.3/contrib/postgis-2.1/spatial_ref_sys.sql

C。 將空間表的所有者更改為 CKAN 用戶

sudo -u postgres psql -d ckan_default -c 'ALTER VIEW geometry_columns OWNER TO ckan_default;'

$ sudo -u postgres psql -d ckan_default -c 'ALTER TABLE spatial_ref_sys OWNER TO ckan_default;'

d. 查看 PostGIS 是否已正確安裝:

$ sudo -u postgres psql -d ckan_default -c "SELECT postgis_full_version()"

e. 安裝擴展

$ cd /usr/lib/ckan/default/src

$ git clone https://github.com/okfn/ckanext-spatial.git

$ cd ckanext-spatial

$ sudo pip install -r pip-requirements.txt

$ python setup.py develop

F。 配置擴展:

$ cd /usr/lib/ckan/default/src/ckanext-spatial

$ paster --plugin=ckanext-spatial spatial initdb 4326 -c /etc/ckan/default/production.ini

$ sudo backme.sh /etc/ckan/default/production.ini

$ sudo sed -r -i "/ckan.plugins =/ s/$/ spatial_metadata spatial_query/" /etc/ckan/default/production.ini

$ diff /etc/ckan/default/production.ini /etc/ckan/default/production.ini.last

deactivate

9. 配置文件存儲

d. 創建文件存儲目錄

$ sudo mkdir -p /var/lib/ckan/default

$ sudo chown -R www-data: /var/lib/ckan/default

$ sudo chmod -u+rwx /var/lib/ckan/default

e. 啟用 FileStore 和文件上傳

$ sudo backme.sh /etc/ckan/default/production.ini

$ sudo sed -i "/ckan.storage_path/ s/^#//" /etc/ckan/default/production.ini

$ diff /etc/ckan/default/production.ini /etc/ckan/default/production.ini.last

$ sudo chown -R www-data: /var/lib/ckan

10.安裝擴展

一個。 初始化虛擬環境

$ . /usr/lib/ckan/default/bin/activate

一個。 安裝 ckanext-spatialUI ( https://extensions.ckan.org/extension/spatialui/ )

$ cd /usr/lib/ckan/default/src

$ git clone https://github.com/XVTSolutions/ckanext-spatialUI

$ cd ckanext-spatialUI

$ python setup.py develop

$ sudo backme.sh /etc/ckan/default/production.ini

$ sudo sed -r -i "/ckan.plugins =/ s/$/ spatialUI/" /etc/ckan/default/production.ini 

$ diff  /etc/ckan/default/production.ini  /etc/ckan/default/production.ini.last

灣安裝 ckanext-pdfview ( https://extensions.ckan.org/extension/pdfview/ )

$ cd /usr/lib/ckan/default/src

$ git clone https://github.com/ckan/ckanext-pdfview.git

$ cd ckanext-pdfview

$ python setup.py develop

$ sudo backme.sh /etc/ckan/default/production.ini

$ sudo sed -r -i "/ckan.plugins =/ s/$/ resource_proxy pdf_view/" /etc/ckan/default/production.ini  

$ diff  /etc/ckan/default/production.ini  /etc/ckan/default/production.ini.last

C。 安裝 ckanext-officedocs ( https://extensions.ckan.org/extension/officedocs/ )

$ cd /usr/lib/ckan/default/src

$ git clone https://github.com/jqnatividad/ckanext-officedocs.git

$ cd ckanext-officedocs

$ python setup.py install

$ sudo backme.sh /etc/ckan/default/production.ini

$ sudo sed -r -i "/ckan.plugins =/ s/$/ officedocs_view/" /etc/ckan/default/production.ini 

$ diff  /etc/ckan/default/production.ini  /etc/ckan/default/production.ini.last

d. 安裝 ckanext-dictionary ( https://extensions.ckan.org/extension/dictionary/ )

$ cd /usr/lib/ckan/default/src

$ git clone https://github.com/cmuphillycapstone/ckanext-dictionary.git

$ cd ckanext-dictionary

$ python setup.py develop

$ sudo backme.sh /etc/ckan/default/production.ini

$ sudo sed -r -i "/ckan.plugins =/ s/$/ dictionary/" /etc/ckan/default/production.ini 

$ diff  /etc/ckan/default/production.ini  /etc/ckan/default/production.ini.last

G。 安裝 ckanext-geoview ( https://github.com/ckan/ckanext-geoview )

$ cd /usr/lib/ckan/default/src

$ git clone https://github.com/ckan/ckanext-geoview.git

$ cd ckanext-geoview

$ python setup.py develop

$ sudo backme.sh /etc/ckan/default/production.ini

$ sudo sed -r -i "/ckan.plugins =/ s/$/ geo_view geojson_view wmts_view/" /etc/ckan/default/production.ini 

$ sudo sed -r -i "/ckan.views.default_views =/ s/$/ geo_view geojson_view wmts_view/" /etc/ckan/default/production.ini 

$ diff  /etc/ckan/default/production.ini  /etc/ckan/default/production.ini.last

H。 安裝 ckanext-geopusher ( https://github.com/datacats/ckanext-geopusher )

$ cd /usr/lib/ckan/default/src

$ git clone https://github.com/datacats/ckanext-geopusher.git

$ cd ckanext-geopusher

$ backme.sh requirements.txt

$ sed -r -i "/celery/ s/$/==3.1.25/" requirements.txt

$ pip install -r requirements.txt

$ python setup.py develop

$ sudo backme.sh /etc/ckan/default/production.ini

$ sudo sed -r -i "/ckan.plugins =/ s/$/ geopusher/" /etc/ckan/default/production.ini 

$ sudo sed -i "100ickanext.geoview.ol_viewer.formats = wms kml geojson wfs" /etc/ckan/default/production.ini

$ diff  /etc/ckan/default/production.ini  /etc/ckan/default/production.ini.last

$ sudo service apache2 reload

deactivate

11. 設置 DataStore(在新終端中運行)

$ . /usr/lib/ckan/default/bin/activate

一個。 啟用數據存儲插件

$ sudo backme.sh /etc/ckan/default/production.ini

$ sudo sed -r -i "/ckan.plugins =/ s/$/ datastore/" /etc/ckan/default/production.ini

$ diff  /etc/ckan/default/production.ini  /etc/ckan/default/production.ini.last

灣設置數據庫,創建一個名為datastore_default 的database_user。 (請使用不同的密碼)

$ sudo -u postgres psql -l

$ sudo -u postgres createuser -S -D -R -P -l datastore_default

$ password: 7DN4ta2igWVlFj

$ sudo -u postgres createdb -O ckan_default datastore_default -E utf-8

C。 設置您的 CKAN 配置

$ sudo backme.sh /etc/ckan/default/production.ini

$ sudo sed -r -i -e "/ckan.datastore.write_url/ s/^#//" -e "/ckan.datastore.write_url/ s/ckan_default:pass/ckan_default:f!+hRnztXgDtKSLW9kY/" /etc/ckan/default/production.ini

$ sudo sed -r -i -e "/ckan.datastore.read_url/ s/^#//" -e "/ckan.datastore.read_url/ s/datastore_default:pass/datastore_default:7DN4ta2igWVlFj/" /etc/ckan/default/production.ini

$ diff  /etc/ckan/default/production.ini  /etc/ckan/default/production.ini.last

d. 設置權限,使用此命令進行源碼安裝

$ sudo ckan datastore set-permissions | sudo -u postgres psql --set ON_ERROR_STOP=1

e. 設置數據推送器

$ sudo backme.sh /etc/ckan/default/production.ini

$ sudo sed -r -i "/ckan.plugins =/ s/$/ datapusher/" /etc/ckan/default/production.ini 

$ sudo sed -r -i "/datapusher/ s/^#ckan/ckan/" /etc/ckan/default/production.ini

$ diff  /etc/ckan/default/production.ini  /etc/ckan/default/production.ini.last  

12. 重啟網絡服務

$ sudo -i

$ service tomcat8 restart; service apache2 restart;  service nginx restart

您應該能夠通過 https://ckanproduction.yourdomain.com 訪問您的 CKAN 存儲庫並使用 admin 之前創建的用戶。

請參閱 ckan 文檔 有關如何管理和設置新站點的更多詳細信息。