Please log in first.

Clear message

HelpContents > HelpOnAdministration > HelpOnInstalling

Installing MoinMoin with Apache using ftp

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

We will assume a few things:

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 setup.py 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:

   1 #!/usr/bin/python2
   2 
   3 import os.path
   4 import os
   5 import sys
   6 
   7 try:
   8     __file__
   9 except NameError:
  10     __file__ = '?'
  11 
  12 print """Content-type: text/html
  13 
  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>"

Download: explore.py

Some of the following problems may show up:

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.

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.

Configure

There are two files that need fine tuning:

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 moin.py. I would recommend placing wikiconfig.py in a separate config directory that is not accessible by apache. Do not start uploading, we are going to make some modifications first.#

moin.cgi

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.

#!/usr/bin/python

(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 explore.py 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 explore.py with your FTP-client into /public_html on your webserver. Absolute path of this script reveals /home/nowhere.com/public_html. You transfered MoinMoin to /MoinMoin. You plan to place moin.cgi as /pubic_html/index.py on your webserver. You would have to insert

sys.path.insert(0, '/home/nowhere.com')   # 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 wikiconfig.py. Now search for

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

Insert the path to wikiconfig.py on your webserver.

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

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

wikiconfig.py

Open ./wiki/config/wikiconfig.py.

(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 explore.py with your FTP-client into /public_html on your webserver. Absolute path of this script reveals /home/nowhere.com/public_html. You transfered data to /data. You plan to place moin.cgi as /pubic_html/index.py on your webserver. You would have to insert

# choose one:
data_dir = '/home/nowhere.com/data/'   # 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 explore.py with your FTP-client into /public_html on your webserver. Absolute path of this script reveals /home/nowhere.com/public_html. You transfered underlay to /underlay. You plan to place moin.cgi as /pubic_html/index.py on your webserver. You would have to insert

# choose one:
data_underlay_dir = '/home/nowhere.com/data/'   # 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.

Example: You placed explore.py under /public_html and called it with http://www.your-domain.com/explore.py. 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 wikiconfig.py, you will see a bunch of options. Set these options as you like. See HelpOnConfiguration for details.

Upload moin.cgi and wikiconfig.py

You are done! Upload moin.cgi and wikiconfig.py 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.

Summary

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:

  replace:
           #!/usr/bin/env python
    by:
           #!/usr/bin/pythonX.X

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

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

ftp      ./wiki/server/moin.cgi   ==>     /moin.py
    
edit ./wiki/config/wikiconfig.py:

   set data_dir:
                   data_dir = './data/'

   set data_underlay_dir:
                   data_underlay_dir = './underlay/'

   set url_prefix:
                   url_prefix = '/wiki'

ftp      ./wiki/config/wikiconfig.py   ==>    /config/wikiconfig.py

If your provider's python is stoneage ...