content/blog/2024-02-21-self-hosting-otter-wiki.org
120 lines · 3297 bytes
Self-Hosting Guide: Otter Wiki
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