Size: 3681
Comment:
|
Size: 3644
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 19: | Line 19: |
Create a server location that passes into the !MoinMoin socket. then enable and start the NGINX service. | '''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. |
Line 44: | Line 44: |
Use the NGINX plugin for `certbot`. | '''certbot''' can quickly and freely encrypt the wiki, using its NGINX plugin. |
Line 47: | Line 47: |
sudo add-apt-repository ppa:certbot/certbot sudo apt update sudo apt install python-certbot-nginx |
|
Line 59: | Line 56: |
{{{ sudo apt install uwsgi uwsgi-plugin-python }}} |
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 Setup
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
Configuration
Unpack key directories and files from the downloaded !MoinMoin 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, and enjoy your wiki!