The following 422 words could not be found in the dictionary of 615 words (including 615 LocalSpellingWords) and are highlighted below:

able   above   Absolute   absolute   abspath   accessible   accessing   adjust   Adjust   Administration   all   allow   allowed   allright   an   and   another   Apache   apache   appear   appears   ask   assume   at   attachment   back   basic   Be   be   been   better   bgcolor   bin   binary   body   border   both   browse   bunch   but   by   call   called   calling   can   cannot   check   choice   choose   Choose   chooses   chosen   client   colspan   comfortable   Common   complete   config   configuration   Configuration   Configure   Consult   contain   contains   Contents   continue   copied   correct   course   css   delete   deliver   denied   deny   depends   describe   described   describes   details   did   dir   directly   directories   distribution   document   documentation   does   domain   don   done   download   Download   edit   editor   encounter   env   environ   Environment   errors   even   everything   example   Example   except   executable   execute   executed   execution   Exploration   Explore   explore   extension   fancy   farmconfig   favorite   few   file   Filename   files   find   Find   fine   Follow   following   for   forth   found   fresh   from   ftp   Gateway   get   gets   gives   going   guess   Having   having   head   Headers   help   Help   hinder   hints   home   homework   hope   host   how   htaccess   htdocs   icons   If   if   images   immediately   import   Important   important   in   index   indicated   information   Information   Insert   insert   install   installation   installing   Installing   intensive   Interface   Internal   into   its   job   just   kind   knowledge   Later   latest   leads   least   lib   like   likely   line   local   location   locations   main   make   manually   many   match   means   method   migration   mod   modifications   Modify   more   most   must   Name   named   necessary   need   new   newer   nice   no   noted   Now   nowhere   number   Of   of   On   on   one   online   only   open   Open   option   options   or   os   our   out   outside   packages   page   pages   path   Pedia   permission   permissions   place   Place   placed   placing   plan   planned   platform   Platform   Please   please   popular   possible   prefix   Premature   privileges   Probably   probably   problems   processed   protect   protected   protection   provider   Ps   pubic   public   python   Python   quite   read   recommend   relative   rename   replace   Replace   report   reports   requested   required   resides   reveals   right   root   run   runs   same   says   screen   script   Script   scripts   search   see   See   separate   served   Server   server   service   Set   set   setting   setup   shell   short   should   show   site   slash   small   so   So   Some   some   Sometimes   somewhere   source   ssh   start   static   Static   steps   sticking   stoneage   stuff   stylesheets   Summary   summary   support   supports   sure   sys   System   table   Table   task   td   team   tell   telnet   templates   test   text   th   than   that   The   the   their   them   then   there   There   Therefore   these   they   things   this   This   those   through   time   title   to   To   too   tr   transfer   transfered   try   Try   tuning   two   type   Uncomment   under   underlay   Unfortunately   unpack   Unpack   up   upload   Upload   uploading   use   Use   using   usr   usually   value   variable   Variables   version   very   via   want   warned   We   we   web   webbrowser   webserver   what   whatever   when   whenever   where   whether   why   wikiconfig   will   window   with   work   works   would   write   written   wrong   You   you   Your   your  


HelpContents > HelpOnAdministration > HelpOnInstalling

Installing MoinMoin with Apache using ftp

This document describes how to install MoinMoin on the webserver of your ISP.

  • /!\ Please be warned that installing just by FTP (and not having shell access) is the least comfortable and most work intensive method to do it. If you need to change a file, you will have to ftp it back and forth. If you need to change many files (like your complete data_dir like when having to run some migration script) you will have to ftp many files back and forth. So if you like to have it comfortable, better get some server with shell access.

We will assume a few things:

  • Your ISP supports Python (with the right version) via CGI.
  • You have no telnet/ssh-access to the webserver, but ftp access.
  • You are not allowed to write into Python's site-packages directory.

  • You are not allowed to access apache's main config file.

Follow these steps:

Download the latest distribution of MoinMoin

Download the latest distribution of MoinMoin from MoinMoinDownload. Unpack it into a local directory. We do not need to run the script, we just work with the source code!

Explore the webserver configuration

Now it is time to find out how your ISP supports Python. Unfortunately, python is not as popular as PHP. Therefore, it is quite likely that your ISP does not support fancy Python stuff like mod_python. If they support Python at all, they probably support the Common Gateway Interface (CGI). As noted above, I describe only this installation option. Now there is some homework for you to do:

  • Find out where the Python binary resides on your webserver. You should be able to find some hints in the ISPs online documentation, or you can ask their support team, or you can guess. Common locations are /usr/bin/python, /usr/bin/pythonX.X (X.X means the version number of Python like 2.3, 2.4 or newer) or /usr/local/bin/python. Sometimes, an ISP chooses to support more than one Python version, usually indicated by a version number in the search path. If possible, choose the latest version. Modify the first line of the explore script and the moin.cgi file to match the path of the python executable.

  • Try to find a place where Python scripts can be executed. To help you with that task, I have written a small script. Upload it to your webserver and see whether it gets executed or not. Here are some hints:
    • Use your favorite FTP-client and transfer your script to your webserver's cgi-bin directory, using the .cgi file extension. Try to call its URL via a web browser. If you don't have a cgi-bin,

    • copy the script into your favorite directory on your webserver, using the .py or .cgi file extension. Try to call its URL via a web browser.

    • First check it using the .cgi extension, then try the .py extension if necessary.

   1 #!/usr/bin/python2
   3 import os.path
   4 import os
   5 import sys
   7 try:
   8     __file__
   9 except NameError:
  10     __file__ = '?'
  12 print """Content-type: text/html
  14 <html><head><title>Python Exploration</title></head><body>
  15 <table border=1>
  16 <tr><th colspan=2>1. System Information</th></tr>
  17 <tr><td>Python</td><td>%s</td></tr>
  18 <tr><td>Platform</td><td>%s</td></tr>
  19 <tr><td>Absolute path of this script</td><td>%s</td></tr>
  20 <tr><td>Filename</td><td>%s</td></tr>
  21 """ % (sys.version,
  22        sys.platform,
  23        os.path.abspath('.'),
  24        __file__)
  25 print "<th colspan=2>2. Environment Variables</th>\n"
  26 for variable in os.environ:
  27     print "<tr><td>%s</td><td>%s</td></tr>\n" % (variable, os.environ[variable])
  28 print "</table></body></html>"


Some of the following problems may show up:

  • If only the source code appears in your browser window, your file has not been processed by the CGI. Probably some kind of apache configuration is required to make things work. Consult your ISPs documentation.
  • If you encounter a 404 Not found error, that probably means what it says: you have chosen the wrong URL.

  • If you have errors in your script, apache usually reports an Internal Server Error.

  • If your script has wrong file privileges, apache may report a Premature End of Script Headers. Set the file permission so as to allow execution of the script. Your FTP-client will do the job.

If everything works, a table should appear on your screen. It gives you some basic information on your webserver. Later we will need Python version, absolute path of this script, DOCUMENT_ROOT and SITE_URI.

Copy directories

You have to transfer four directories in the moin directory to your webserver.

  • ./wiki/htdocs contains static files (e. g. css stylesheets and icons). Place this directory on your server somewhere under apache's DOCUMENT_ROOT and rename it to 'wiki'. Apache has to deliver them directly.

  • ./wiki/underlay contains wiki templates and help pages. Place this directory on your server outside the DOCUMENT_ROOT, if possible. Apache should not be able to deliver these files directly.

  • ./wiki/data is going to contain your wiki pages. Place this outside apache's DOCUMENT_ROOT.

  • ./MoinMoin contains python source code. Place this outside apache's DOCUMENT_ROOT.

SECURITY WARNING: If you have no choice but to place MoinMoin, underlay or data under apache's DOCUMENT_ROOT, it is very important to hinder apache from directly accessing them.

1. Use your favorite editor to create a file named .htaccess.

2. Insert into this file the text deny from all

3. Copy it via FTP into the directory you want to protect.

4. Try to access the protected directory via your webbrowser. If protection does work, you should see Access denied.

5. If you cannot protect these directories, please delete them from your webserver immediately. Do not continue your installation.


There are two files that need fine tuning:

  • ./wiki/server/moin.cgi is going to be called by apache whenever a wiki page is requested.

  • ./wiki/config/ contains configuration options for your wiki.

Choose a location for these files on your webserver. You are free to choose, but apache must be able to execute moin.cgi. If necessary, you can even rename moin.cgi, for example to I would recommend placing in a separate config directory that is not accessible by apache. Do not start uploading, we are going to make some modifications first.#

  • /!\ If you want to host more than one Wiki you need to work with !


Now open ./wiki/server/moin.cgi in your favorite editor.

(1) Adjust python path. First you have to adjust your python path in line 1. The new value depends on your ISPs setting.


(2) Set the path to MoinMoin. You will find a line

## sys.path.insert(0, 'PREFIX/lib/pythonX.X/site-packages')

Uncomment this line and replace the path information. If you have run on your webserver, you may use your knowledge of absolute path of this script to guess the absolute path to the MoinMoin directory.

Example: You transfered with your FTP-client into /public_html on your webserver. Absolute path of this script reveals /home/ You transfered MoinMoin to /MoinMoin. You plan to place moin.cgi as /pubic_html/ on your webserver. You would have to insert

sys.path.insert(0, '/home/')   # REPLACED!

Of course a relative path will be allright, too. So, sticking to our example, you could also insert

sys.path.insert(0, '..')

(3) Set the path to Now search for

sys.path.insert(0, '/path/to/wikiconfig')

Insert the path to on your webserver.

Example: You transfered with your FTP-client into /public_html on your webserver. Absolute path of this script reveals /home/ Your planned location for is /config. You plan to place moin.cgi as /pubic_html/ on your webserver. You would have to insert

# choose one:
sys.path.insert(0, '/home/')           # absolute path
sys.path.insert(0, '../config')                          # path relative to moin.cgi

Open ./wiki/config/

(1) Set the path to your data directory. Try to find

data_dir = './data/'

Replace './data/' with whatever leads to your data directory.

Example: You transfered with your FTP-client into /public_html on your webserver. Absolute path of this script reveals /home/ You transfered data to /data. You plan to place moin.cgi as /pubic_html/ on your webserver. You would have to insert

# choose one:
data_dir = '/home/'   # absolute path
data_dir = '../data/'                  # path relative to moin.cgi

(2) Set the path to your underlay directory. Try to find

data_underlay_dir = './underlay/'

Replace './underlay/' with whatever leads to the underlay directory on your webserver.

Example: You transfered with your FTP-client into /public_html on your webserver. Absolute path of this script reveals /home/ You transfered underlay to /underlay. You plan to place moin.cgi as /pubic_html/ on your webserver. You would have to insert

# choose one:
data_underlay_dir = '/home/'   # absolute path
data_underlay_dir = '../data/'                  # path relative to moin.cgi

(3) Set the URL of your static files.

Static files like images and css files are served by Apache, not by moin. You install them in a location accessible by Apache, and tell moin what is the url of those files.

url_prefix = '/wiki'

If you copied your htdocs directory to /wiki under your document root, you don't need to change this.

  • (!) Important: url_prefix must start with a slash

Example: You placed under /public_html and called it with You placed htdocs as /public_html/wiki. So url_prefix is correct as it is, don't change it.

(4) Set configuration options. If you browse through, you will see a bunch of options. Set these options as you like. See HelpOnConfiguration for details.

Upload moin.cgi and

You are done! Upload moin.cgi and and test your wiki by calling moin.cgi through your webbrowser. You may have to set file permissions manually to allow the execution of moin.cgi. Be sure to upload both files to the directories described above.


Here is a short summary of an example installation. Having read this document, I hope you see what I did and why I did it.

ftp       ./wiki/data       ==>           /data
ftp       ./wiki/htdocs     ==>           /wiki
ftp       ./wiki/underlay   ==>           /underlay
ftp       ./MoinMoin        ==>           /MoinMoin

ftp       create directory     /config

create     ./.htaccess      insert content:
deny from all

ftp       ./.htaccess      ==>           /data
ftp       ./.htaccess      ==>           /underlay
ftp       ./.htaccess      ==>           /MoinMoin
ftp       ./.htaccess      ==>           /config

edit ./wiki/server/moin.cgi:

           #!/usr/bin/env python

           ## sys.path.insert(0, 'PREFIX/lib/pythonX.X/site-packages')
           sys.path.insert(0, '.')

           sys.path.insert(0, '/path/to/wikiconfig')
           sys.path.insert(0, './config')

ftp      ./wiki/server/moin.cgi   ==>     /
edit ./wiki/config/

   set data_dir:
                   data_dir = './data/'

   set data_underlay_dir:
                   data_underlay_dir = './underlay/'

   set url_prefix:
                   url_prefix = '/wiki'

ftp      ./wiki/config/   ==>    /config/

If your provider's python is stoneage ...

  • find out what Python version the server runs
  • find another server that runs the same Python version and there:
  • after that, you have a nice, fresh python in $PREFIX
  • you can ftp it to your home directory at provider and use it from there