MoinMoin
!MoinMoin is a wiki software. Version 1 (current release) runs on Python 2 with vendored dependencies, a complex plugin ecosystem, and no plan for security support. Version 2 (unstable) runs on Python 3 with the Flask ecosystem.
Contents
Server Setup
!MoinMoin requires a running web server running Python and uWSGI. The below walkthrough skims over security and configuration details.
NGINX
NGINX can run a 'good-enough' web server with minimal configuration. Create a server location that passes into the !MoinMoin socket. then enable and start the NGINX service.
server { listen 80 default_server; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { include /etc/nginx/uwsgi_params; uwsgi_pass unix:///var/www/moin/moin.sock; uwsgi_modifier1 30; } }
Often, uWSGI apps recommend adding uwsgi_modifier1 30 to rewrite PATH_INFO and SCRIPT_NAME. This is a deprecated measure, and is unstable for Python 3+. Instead, configure uWSGI.
See here for more details on setting up NGINX.
Let's Encrypt
certbot can quickly and freely encrypt the wiki, using its NGINX plugin.
sudo certbot --nginx -d wiki.dominic-ricottone.com
See here for more details on setting up SSL.
uWSGI
See here for more details on setting up uWSGI.
MoinMoin
Python Dependencies
To insulate the !MoinMoin instance from the wider web server, it should be installed inside a virtual environment.
sudo apt install python-pip sudo pip install virtualenv sudo virtualenv /var/www/moin/pythonenv
!MoinMoin and its dependencies can now be installed safely.
#download cd /tmp wget http://static.moinmo.in/files/moin-1.9.10.tar.gz tar zxvf moin-1.9.10.tar.gz cd ./moin-1.9.10 #install source /var/www/moin/pythonenv/bin/activate python ./setup.py install
Minimum Running Configuration
In order to run, !MoinMoin expects a specific directories and scripts. Unpack these from the downloaded package.
cp -r /tmp/wiki /var/www/moin cp /tmp/config/wikiconfig.py /var/www/moin/wiki/ cp /tmp/server/moin.wsgi /var/www/moin/wiki/
Insert the below into wikiconfig.py, after import os but before from MoinMoin.config import multiconfig, url_prefix_static.
import sys sys.path.insert(0, '/var/www/moin/pythonenv/lib/python2.7/site-packages/') sys.path.insert(0, '/var/www/moin/wiki/')
Create a new file, uwsgi.ini.
[uwsgi] uid = moin gid = www-data socket = /var/www/moin/moin.sock chmod-socket = 660 plugin = python chdir = /var/www/moin/wiki wsgi-file = /var/www/moin/wiki/moin.wsgi master workers = 3 max-requests = 200 harakiri = 60 die-on-term
Permissions
You know you'll have permissions errors eventually. Preempt them.
chown www-data:www-data -R /var/www/moin chmod g+w,o-rwx -R /var/www/moin
Service File
Create a service file at /etc/systemd/system/moinmoin.service. It should call uWSGI with the configuration we just setup.
[Unit] Description=Start uwsgi for MoinMoin wiki After=network.target [Service] Type=simple User=www-data ExecStart=/usr/bin/uwsgi --ini /var/www/moin/wiki/uwsgi.ini [Install] WantedBy=multi-user.target
Enable and start the service.
Configuration
Follow the on-screen instructions to setup a superuser, install language packs and addons, and set the front page.