Service Outage: Please note that all services and subdomains on cleberg.net will be unavailable for a few days.

Self-Hosting an Otter Wiki

497 words; 3 minute(s)

Table of Contents

An Otter Wiki

An Otter Wiki is an easy to use wiki software that takes almost no effort to set up and maintain.

Installation

To install An Otter Wiki, I'm going to use Docker Compose to create the container and then use Nginx as a reverse proxy to allow external access via a subdomain I own.

Docker Compose

Start by creating a directory for the container's files.

mkdir ~/otterwiki

Next, create the docker-compose.yml file to define the container's parameters.

nano ~/otterwiki/docker-compose.yml

Within the file, paste the following content. You can read the project's documentation if you want to further override or customize the container.

version: '3'
services:
  otterwiki:
    image: redimp/otterwiki:2
    restart: unless-stopped
    # Internal port must be assigned to port 80
    # External port can be customized
    ports:
      - 8337:80
    volumes:
      - ./app-data:/app-data

Once the file is saved and closed, you can launch the container.

cd ~/otterwiki
sudo docker-compose up -d

The container is now available at localhost:8337. Next, we will use Nginx to serve this app externally.

Nginx

To access the app externally, let's set up a reverse proxy. I'll start by creating the Nginx configuration file for my wiki.

sudo nano /etc/nginx/sites-available/wiki

Within the file, I have saved the following content. This assumes you already have a TLS/SSL cert to use with this subdomain. If not, simply remove the ssl_* variables, remove the 80 server block, and change the 443 server block to 80 to serve the app without SSL.

server {
    if ($host ~ ^[^.]+\.example\.com$) {
        return 301 https://$host$request_uri;
    }

    listen [::]:80;
    listen 80;
    server_name wiki.example.com;
    return 404;
}

server {
    listen [::]:443 ssl http2;
    listen 443 ssl http2;
    server_name wiki.example.com;
    access_log  /var/log/nginx/wiki.access.log;
    error_log   /var/log/nginx/wiki.error.log;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
            set $upstream_wiki http://127.0.0.1:8337;
            proxy_pass $upstream_wiki;

        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $http_host;
    }
}

Save and close the configuration file. On Nginx, we need to symlink the file to enable it.

sudo ln -s /etc/nginx/sites-available/wiki /etc/nginx/sites-enabled/wiki

Once enabled, restart the Nginx server to start serving the app externally.

sudo systemctl restart nginx.service

Screenshots

In the screenshot below, you can see the initial launch screen for An Otter Wiki. Start by creating your admin account and configure the app as necessary.

An Otter Wiki - Initial
Screen

You can also see the default editing screen for creating and editing pages. It's as easy as typing Markdown and hitting the save button.

An Otter Wiki - Editing
Screen

Overall, I like An Otter Wiki and will be looking forward to seeing how much use I get out of it going forward.