Personal notes for setting up MoinMoin wiki on Raspberry Pi OS for home use. I’m running Raspbian on Hyper-V, but these steps work equally on a physical Raspberry Pi.


Step 1 — Install Raspberry Pi OS on Hyper-V

Download the Raspberry Pi Desktop image: 👉 https://www.raspberrypi.org/downloads/raspberry-pi-desktop/

Optional extras to install on this host:

  • Install TightVNC for remote desktop access
  • Set up TightVNC with a password:
/usr/bin/tightvncserver

Step 2 — Download and Extract MoinMoin

Download the MoinMoin source:

wget http://static.moinmo.in/files/moin-1.9.10.tar.gz

Extract the archive:

tar xvzf moin-1.9.10.tar.gz

Rename the extracted folder:

sudo mv moin-1.9.10 moin

Step 3 — Create the Required Directories

# Engine folder — where MoinMoin is installed
sudo mkdir /usr/local/moinmoin_engine

# Instance folder — the website root served by lighttpd
sudo mkdir /usr/local/moinmoin_instance1

Step 4 — Install MoinMoin

From inside the moin source folder (/home/pi/moin), run:

sudo python setup.py install --prefix=/usr/local/moinmoin_engine

Step 5 — Copy Required Files to the Instance Folder

sudo cp -r /usr/local/moinmoin_engine/share/moin/data /usr/local/moinmoin_instance1
sudo cp -r /usr/local/moinmoin_engine/share/moin/underlay /usr/local/moinmoin_instance1
sudo cp /usr/local/moinmoin_engine/share/moin/config/wikiconfig.py /usr/local/moinmoin_instance1
sudo cp /usr/local/moinmoin_engine/share/moin/server/moin.fcgi /usr/local/moinmoin_instance1

Step 6 — Set Folder Permissions

Give the web server user ownership of the instance folder:

sudo chown -R www-data:www-data /usr/local/moinmoin_instance1

Step 7 — Configure moin.fcgi

Edit /usr/local/moinmoin_instance1/moin.fcgi and update the following lines:

# Point to the MoinMoin package location
sys.path.insert(0, '/usr/local/moinmoin_engine/lib/python2.7/site-packages')

# Point to the wiki config directory
sys.path.insert(0, '/usr/local/moinmoin_instance1')

# Force FastCGI mode (not slow CGI)
os.environ['FCGI_FORCE_CGI'] = 'N'

# Fix the script name for URL rewriting
fix_script_name = ''

Step 8 — Configure Lighttpd

Edit /etc/lighttpd/lighttpd.conf:

Add modules under server.modules:

"mod_accesslog",
"mod_fastcgi",

Bind to your server IP (add after server.port):

server.bind = "xx.xx.xx.xx"   # replace with your server IP

Remove .fcgi from the static file exclusions:

static-file.exclude-extensions = ( ".php", ".pl" )

Add the FastCGI virtual host block at the end of the file:

$HTTP["host"] =~ "/" {

    fastcgi.server += ( "/" =>
      ((
        "socket"            => "/tmp/moin.socket",
        "min-procs"         => 1,
        "max-procs"         => 2,
        "check-local"       => "disable",
        "bin-path"          => "/usr/local/moinmoin_instance1/moin.fcgi",
        "fix-root-scriptname" => "enable"
      ))
    )

}

Step 9 — Allow User Registration in wikiconfig.py

In /usr/local/moinmoin_instance1/wikiconfig.py, enable account creation:

actions_superuser = multiconfig.DefaultConfig.actions_superuser[:]
actions_superuser.remove('newaccount')

After this change, users can register via the MoinMoin login page.


Step 10 — Set Admin User Permissions

acl_rights_before = u"Your-User:read,write,delete,revert,admin"

Replace Your-User with your actual wiki username.


Step 11 — Configure Email (SMTP)

# SMTP server
mail_smarthost = "smtp.office365.com:587"

# Return address
mail_from = u"Jimmy Wiki Support <your_email@domain.com>"

# SMTP login credentials
mail_login = "your_email@domain.com Yourpassword"

Step 12 — Restart Lighttpd

sudo service lighttpd restart

You’ll be prompted to authenticate:

==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'lighttpd.service'.
 1.  ,,, (pi)
 2.  root
Choose identity to authenticate as (1-2):

Select 1 and enter the pi user password. You should see:

==== AUTHENTICATION COMPLETE ===

Done!

Open your browser and navigate to your server IP. Create the username that matches Your-User — this account will have full admin permissions to create and manage wiki pages.

Optional — restrict wiki to known users only:

Add this to wikiconfig.py to prevent anonymous access:

acl_rights_default = u"Trusted:read,write,delete,revert Known:read"

This means only logged-in (Known) users can read pages.

Enjoy your wiki 🎉