]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blob - doc/tips/dot_cgi.mdwn
Merge branch 'master' into debian-jessie-backports
[git.ikiwiki.info.git] / doc / tips / dot_cgi.mdwn
1 [[!meta date="2009-01-12 20:01:03 -0500"]]
3 It's common to name the [[cgi]] "ikiwiki.cgi", and put it somewhere
4 like `~/public_html/ikiwiki.cgi`, or `/var/www/wiki/ikiwiki.cgi`.
6 If you do that, you may find that when trying to edit a page in your wiki,
7 you see the raw contents of the ikiwiki.cgi program. Or get a permission
8 denied problem.
10 This is because web servers are generally not configured to run cgi scripts
11 unless they're in `/usr/lib/cgi-bin/`. While you can put ikiwiki.cgi in
12 there if you like, it's better to configure your web server to 
13 run `.cgi`  programs from anywhere.
15 These instructions are for Debian systems, but the basic
16 configuration changes should work anywhere.
18 [[!toc]]
20 ## apache 2
22 * Make sure the cgi module is loaded. (Ie, `a2enmod cgi`).
23   Note that the cgid module will not work.
25 * Edit /etc/apache2/apache2.conf (or /etc/apache2/mods-available/mime.conf)
26   and add a line like this:
28         AddHandler cgi-script .cgi
30 * Find the "Options" line for the directory where you've put the
31   ikiwiki.cgi, and add "ExecCGI" to the list of options. For example, if
32   ikiwiki.cgi is in /var/www/, edit `/etc/apache2/sites-enabled/000-default`
33   and add it to the "Options" line in the "Directory /var/www/" stanza.
34   Or, if you've put it in a `~/public_html`, edit
35   `/etc/apache2/mods-available/userdir.conf`.
37 * If your wiki is in `~/public_html` and does not appear when you enter the URL given by the installer, check that you have 
38   the userdir mod enabled (there should be simlinks to userdir.load and userdir.conf in /etc/apache2/modes-enabled).  If not,
39   run `a2enmod userdir` and reload apache2.
40   
41 * You may also want to enable the [[plugins/404]] plugin.
42   To make apache use it, the apache config file will need a further
43   modification to make it use ikiwiki's CGI as the apache 404 handler.
44   Something like this, with the path adjusted to where you've put the CGI:
46         ErrorDocument 404 /cgi-bin/ikiwiki.cgi
48 ## lighttpd
50 Here is how to enable cgi on [lighttpd](http://www.lighttpd.net/) and
51 configure it in order to execute ikiwiki.cgi wherever it is located. 
53 * Activate cgi by linking `/etc/lighttpd/conf-available/10-cgi.conf` into `/etc/lighttpd/conf-enabled` ([doc](http://trac.lighttpd.net/trac/wiki/Docs%3AModCGI)). 
55 * Create `/etc/lighttpd/conf-available/90-ikiwiki-cgi.conf` and add a line like this:
57     cgi.assign = ( "ikiwiki.cgi"  => "", )
59 * Activate ikiwiki-cgi by linking `/etc/lighttpd/conf-available/90-ikiwiki-cgi.conf` into `/etc/lighttpd/conf-enabled`. 
61 * Restart lighttpd server with something like `/etc/init.d/lighttpd restart`.
63 Note that the first part enables cgi server wide but depending on default
64 configuration, it may be not enough. The second part creates a specific
65 rule that allow `ikiwiki.cgi` to be executed.
67 **Warning:** I only use this lighttpd configuration on my development
68 server (offline). I am not sure of how secure this approach is.
69 If you have any thought about it, feel free to let me know.
71 ## nginx
73 To run CGI under nginx, you need to use a FastCGI wrapper. The wrapper must be started somehow just like any other FastCGI program. You can use launchd on OSX.
75 In Linux, you will need the spawn-fcgi and fcgiwrap packages and start
76 them with:
78     spawn-fcgi -s /tmp/fcgi.socket -n -- /usr/sbin/fcgiwrap
80 This needs to be ran as your user. It can be added to `inittab` or
81 made into a startup script in `init.d`. You may also need to make this file writable by the webserver, if that's running as a different user, e.g.:
83     chmod a+w /tmp/fcgi.socket
85 If you have [systemd](https://en.wikipedia.org/wiki/Systemd), you may use a service file like so:
87 Edit/create a service file (in Debian it would be: `sudo vim /lib/systemd/system/ikiwiki.service`
89 Content of `ikiwiki.service`:
91     [Unit]
92     Description=Ikiwiki fcgi socket wrap
93     After=network.target
94     
95     [Service]
96     Type=simple
97     User=www-data
98     Group=www-data
99     ExecStart=/usr/bin/spawn-fcgi -s /tmp/fcgi.socket -n -- /usr/sbin/fcgiwrap
100     
101     [Install]
102     WantedBy=multi-user.target
104 Then run:
106     # This enables the service at startup
107     sudo systemctl enable ikiwiki.service
108     # This attempts to start the service
109     sudo systemctl start ikiwiki.service
111 Then you need an nginx config plugged in that wrapper. Here's an
112 example virtual host configuration:
114     server {
115         #listen   80; ## listen for ipv4; this line is default and implied
116         #listen   [::]:80 default_server ipv6only=on; ## listen for ipv6
118         root /home/anarcat/public_html/wiki.reseaulibre.ca/;
119         index index.html index.htm;
121         # Make site accessible from http://localhost/
122         server_name wiki.reseaulibre.ca;
124         location / {
125                 try_files $uri $uri/ /index.html;
126         }
127         location /ikiwiki.cgi {
128                 fastcgi_pass  unix:/tmp/fcgi.socket;
129                 fastcgi_index ikiwiki.cgi;
130                 fastcgi_param SCRIPT_FILENAME   /home/anarcat/public_html/ikiwiki.cgi;
131                 fastcgi_param  DOCUMENT_ROOT      /home/anarcat/public_html/wiki.reseaulibre.ca;
132                 include /etc/nginx/fastcgi_params;
133         }
134     }
136 Also, note that the `/tmp/fcgi.socket` file needs to be writable by the webserver. I am also unsure as to the security of this setup, as I am using this only on my dev server. Needless to say that [[real fastcgi support|todo/fastcgi_or_modperl_installation_instructions]] would be great. ;) --[[anarcat]]
138 ## boa
140 Edit /etc/boa/boa.conf and make sure the following line is not commented:
142     AddType application/x-httpd-cgi cgi