Deploying a source install¶
Since CKAN is written mainly in Pylons and supports WSGI, CKAN can be used with a number of different web server and deployment configurations.
This guide explains how to deploy CKAN using Gunicorn and proxied with Nginx on an Ubuntu server. These instructions have been tested on Ubuntu 16.04.
1. Create a production.ini
file¶
Important
(For depositar
administrator) Please ignore this step
and use production.ini
the in the configs.tar.gz
.
cp /etc/ckan/default/development.ini /etc/ckan/default/production.ini
2. Modify the production.ini
file¶
Important
(For depositar
administrator) Please ignore this step.
Edit the production.ini file in a text editor, changing the [server:main] and [app:main] sections as follows:
[server:main] #use = egg:Paste#http #host = 0.0.0.0 #port = 5000 use = egg:gunicorn#main bind = unix:/var/run/gunicorn/ckan_socket.sock preload = true ## The Error log file to write to. errorlog = /etc/ckan/default/ckan.log loglevel = warning ##USER
is the owner of/etc/ckan/default
user = USER group = www-data umask = 0113 [app:main] ... ## Site Settings ckan.site_url = http://127.0.0.1
3. Install Gunicorn¶
Install Gunicorn into a Python virtual environment:
. /usr/lib/ckan/default/bin/activate
pip install gunicorn
. /usr/lib/ckan/datapusher/bin/activate
pip install gunicorn
4. Set the startup script for CKAN¶
Create a Systemd service for CKAN:
sudo vi /etc/systemd/system/ckan.service
In the vi editor, add the following contents:
[Unit] Description=Gunicorn instance to serve CKAN After=network.target [Service] WorkingDirectory=/usr/lib/ckan/default/src/ckan RuntimeDirectory=gunicorn ExecStart=/usr/lib/ckan/default/bin/gunicorn --paste /etc/ckan/default/production.ini ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID StandardError=syslog PrivateTmp=true [Install] WantedBy=multi-user.target
Start the Systemd service:
sudo systemctl enable ckan
To start the installed service, run the following command:
sudo service ckan start
You can check the site status via:
sudo service ckan status
You should now be able to see the following output:
● ckan.service - Gunicorn instance to serve CKAN Loaded: loaded (/etc/systemd/system/ckan.service; enabled; vendor preset: enabled) Active: active (running) since Thr 2017-12-14 14:36:37 CST; 2s ago Process: 20152 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS) Main PID: 20191 (gunicorn) Tasks: 2 Memory: 88.0M CPU: 1.596s CGroup: /system.slice/ckan.service ├─20191 /usr/lib/ckan/default/bin/python2 /usr/lib/ckan/default/bin/gunicorn --paste /etc/ckan/default/production.ini └─20198 /usr/lib/ckan/default/bin/python2 /usr/lib/ckan/default/bin/gunicorn --paste /etc/ckan/default/production.ini
You can stop the Systemd service by:
sudo service ckan stop
5. Set the startup script for DataPusher¶
Note
This DataPusher is a service that automatically uploads data to the DataStore from suitable files (like CSV or Excel files), whether uploaded to CKAN’s FileStore or externally linked.
Create a Systemd service for DataPusher:
sudo vi /etc/init/datapusher.conf
In the vi editor, add the following contents:
[Unit] Description=Gunicorn instance to serve DataPusher After=network.target [Service] RuntimeDirectory=gunicorn Environment=JOB_CONFIG=/usr/lib/ckan/datapusher/src/datapusher/deployment/datapusher_settings.py ExecStart=/usr/lib/ckan/datapusher/bin/gunicorn wsgi:app ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID StandardOutput=null StandardError=null PrivateTmp=true [Install] WantedBy=multi-user.target
Start the Systemd service:
sudo systemctl enable datapusher
To start the installed service, run the following command:
sudo service datapusher start
You can check the status via:
sudo service datapusher status
You should now be able to see the following output:
● datapusher.service - Gunicorn instance to serve DataPusher Loaded: loaded (/etc/systemd/system/datapusher.service; enabled; vendor preset: enabled) Active: active (running) since Thr 2017-12-14 14:48:44 CST; 2min 44s ago Process: 20571 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS) Main PID: 20626 (gunicorn) Tasks: 2 Memory: 46.0M CPU: 1.790s CGroup: /system.slice/datapusher.service ├─20626 /usr/lib/ckan/datapusher/bin/python2 /usr/lib/ckan/datapusher/bin/gunicorn wsgi:app └─20673 /usr/lib/ckan/datapusher/bin/python2 /usr/lib/ckan/datapusher/bin/gunicorn wsgi:app
You can stop the Systemd service by:
sudo service datapusher stop
6. Install and setup Nginx¶
Install Nginx:
sudo apt-get install nginx
b. Create your site’s Nginx config file at /etc/nginx/sites-available/ckan, with the following contents:
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache:30m max_size=250m; server { listen 80; server_name 127.0.0.1; client_max_body_size 1000M; access_log /var/log/nginx/ckan_access.log; error_log /var/log/nginx/ckan_error.log error; location / { try_files $uri @proxy_to_app; } location @proxy_to_app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # enable this if and only if you use HTTPS # proxy_set_header X-Forwarded-Proto https; proxy_set_header Host $http_host; # we don't want nginx trying to do something clever with # redirects, we set the Host: header above already. proxy_redirect off; proxy_pass http://unix:/var/run/gunicorn/ckan_socket.sock; } }
To prevent conflicts, disable your default Nginx sites. Finally, enable your CKAN site in Nginx:
sudo rm /etc/nginx/sites-enabled/default sudo ln -s /etc/nginx/sites-available/ckan /etc/nginx/sites-enabled/ckan
Restart Nginx:
sudo service nginx restart
7. Test the site¶
You should now be able to visit your server (at http://127.0.0.1) in a web browser and see your new CKAN instance.