[ckan-dev] Issues with Deploying Source Install on Vagrant VM
Sean Baskin
seanbaskin at gmail.com
Wed Mar 12 20:22:00 UTC 2014
I've been following the Installing CKAN from
Source<http://docs.ckan.org/en/latest/maintaining/installing/install-from-source.html>
and
the Deploying a Source
Install<http://docs.ckan.org/en/latest/maintaining/installing/deployment.html>
guides
to construct an Ansible playbook to provision a Vagrant virtual machine.
Ideally once I have nailed down this process I will add the production
server to the Ansible hosts file. Everything seems to work fine except for
the actual site being served by Apache via WSGI.
A few general notes:
[1] I can SSH into the VM and run 'paster serve' to serve the site on port
5000. I can also accomplish this via a task in my Ansible playbook with the
same results. Visiting my domain on this port is successful; I can see the
CKAN site, e.g. http://opendata.chattlibrary.dev:5000
[2] I have checked that Apache Solr is correctly configured and running.
Visiting http://opendata.chattlibrary.dev:8983/solr lands me on the Solr
page.
[3] When I visit the root domain, i.e. http://opendata.chattlibrary.dev, I
am directed to the Apache default site page OR the Nginx default site page.
Upon disabling the default Apache site and reloading Apache + Nginx, I
visit the root domain and am presented with a HTTP 404 response stating
"The requested URL / was not found on this server".
>From my understanding, the Apache config file is redirecting HTTP requests
to my WSGI application (CKAN). It would appear that CKAN is not actually
running. I understand this problem has more to do with Apache + Nginx +
WSGI and less to do with Vagrant + Ansible, but I'm including the relevant
portions in this email. I was under the impression that serving the site
with paster is not best practice, so there is something here I'm missing.
Any help would be greatly appreciated!
---
[/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__)),
'production.ini')
from paste.script.util.logging_config import fileConfig
fileConfig(config_filepath)
application = loadapp('config:%s' % config_filepath)
---
[/etc/apache2/sites-available/ckan_default]
<VirtualHost 0.0.0.0:8080>
ServerName opendata.chattlibrary.dev
ServerAlias www.opendata.chattlibrary.dev
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
ErrorLog /var/log/apache2/ckan_default.error.log
CustomLog /var/log/apache2/ckan_default.custom.log combined
</VirtualHost>
---
[/etc/nginx/sites-available/ckan_default]
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache:30m
max_size=250m;
proxy_temp_path /tmp/nginx_proxy 1 2;
server {
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_cache cache;
proxy_cache_bypass $cookie_auth_tkt;
proxy_no_cache $cookie_auth_tkt;
proxy_cache_valid 30m;
proxy_cache_key $host$scheme$proxy_host$request_uri;
# In emergency comment out line to force caching
# proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
}
}
---
[site.yml] This is my main playbook. It's ugly, but it gets the job done
for the moment.
---
- hosts: all
user: vagrant
sudo: true
tasks:
- name: General | Copy SSH Keypair
copy: src=/home/sean/.ssh/{{ item }} dest=/home/vagrant/.ssh/{{ item
}} owner=vagrant
with_items:
- id_rsa_vagrant
- id_rsa_vagrant.pub
- name: General | Install Required Packages
apt: pkg={{ item }} state=present update_cache=yes
with_items:
- apache2
- git-core
- libapache2-mod-wsgi
- libpq-dev
- nginx
- openjdk-6-jdk
- postgresql
- python-dev
- python-pip
- python-psycopg2
- python-virtualenv
- solr-jetty
- name: CKAN | Install CKAN source to virtualenv
pip: name='git+https://github.com/ckan/ckan.git@ckan-2.2#egg=ckan'
virtualenv=/usr/lib/ckan/default virtualenv_site_packages=no
- name: CKAN | Install Python Requiements
pip: requirements=/usr/lib/ckan/default/src/ckan/requirements.txt
virtualenv=/usr/lib/ckan/default virtualenv_site_packages=no
- name: PostgreSQL | Start DB Cluster
command: /etc/init.d/postgresql start
- name: CKAN | Create DB
sudo_user: postgres
postgresql_db: name=ckan_default
encoding='UTF-8'
lc_collate='en_US.UTF-8'
lc_ctype='en_US.UTF-8'
template='template0'
login_password=pass
- name: CKAN | Create Database User
sudo_user: postgres
postgresql_user: db=ckan_default user=ckan_default password=pass
- name: CKAN | Create site directory
file: path=/etc/ckan/default state=directory owner=vagrant
- name: CKAN | Create CKAN config file
command: /usr/lib/ckan/default/bin/paster make-config ckan
/etc/ckan/default/development.ini
- name: CKAN | Copy Jetty configuration to remote host
copy:
src=/home/sean/projects/github/open-data-portal/provisioning/roles/common/files/jetty
dest=/etc/default/jetty
- name: CKAN | Start Jetty Server
service: name=jetty state=started
- name: CKAN | Backup Solr schema
command: mv /etc/solr/conf/schema.xml /etc/solr/conf/schema.xml.bak
# Update to use file module
- name: CKAN | Replace Solr schema.xml with symlink to CKAN schema file
command: ln -s
/usr/lib/ckan/default/src/ckan/ckan/config/solr/schema.xml
/etc/solr/conf/schema.xml
- name: CKAN | Restart Jetty Server
service: name=jetty state=restarted
- name: CKAN | Initialize CKAN database
command: chdir=/etc/ckan/default /usr/lib/ckan/default/bin/paster
--plugin=ckan db init
# Update to use file module
- name: CKAN | Link to who.ini
command: ln -s /usr/lib/ckan/default/src/ckan/who.ini
/etc/ckan/default/who.ini
- name: CKAN | Create production.ini
command: cp /etc/ckan/default/development.ini
/etc/ckan/default/production.ini
- name: CKAN | Copy Apache WSGI file
copy:
src=/home/sean/projects/github/open-data-portal/provisioning/roles/common/files/apache.wsgi
dest=/etc/ckan/default/apache.wsgi
- name: CKAN | Copy Apache configuration file
copy:
src=/home/sean/projects/github/open-data-portal/provisioning/roles/common/files/ckan_default
dest=/etc/apache2/sites-available/ckan_default
- name: CKAN | Copy Nginx configuration file
copy:
src=/home/sean/projects/github/open-data-portal/provisioning/roles/common/files/ckan_default_nginx
dest=/etc/nginx/sites-available/ckan_default
- name: CKAN | Enable CKAN site
command: a2ensite ckan_default
- name: CKAN | Enable CKAN
command: ln -s /etc/nginx/sites-available/ckan_default
/etc/nginx/sites-enabled/ckan_default
- name: CKAN | Reload Apache2
service: name=apache2 state=reloaded
- name: CKAN | Reload Nginx
service: name=nginx state=reloaded
# This is a long running process and only for development purposes
# - name: CKAN | Serve CKAN
# command: /usr/lib/ckan/default/bin/paster serve
/etc/ckan/default/production.ini
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.okfn.org/pipermail/ckan-dev/attachments/20140312/f7af3ea8/attachment-0002.html>
More information about the ckan-dev
mailing list