Important
Before going any further, make sure you meet all the requirements.
- Install using Containers ( Docker / Kubernetes ) - recommended
- Install on Host ( Linux / macOS / Windows )
- Install using Cloud Images ( DigitalOcean, PikaPods, etc. )
Install using Containers
Tags
Images are tagged to major, major.minor and major.minor.patch versions.
It's recommended to use the major version, unless you have a specific requirement to pin your deployment to specific version.
ghcr.io/requarks/wiki:3
# or using a specific version:
ghcr.io/requarks/wiki:3.0.2
ghcr.io/requarks/wiki:3.0
Caution
DO NOT use the
latesttag as it may break your installation when a new major version with breaking changes is released! Thelatesttag is no longer assigned in 3.x or later.
All images are built for these architectures:
- linux/amd64 (Intel / AMD CPUs)
- linux/arm64 (Apple silicon, Gravitron, Raspberry Pi, etc.)
Environment Variables
✅ = Required, ✴️ = Recommended
| Env | Description | Required | Default Value |
|---|---|---|---|
ADMIN_EMAIL |
Email address to use to create the root administrator account. Has no effect if the root administrator account is already created. |
✴️ | [email protected] |
ADMIN_PASS |
Initial password to use to create the root administrator account. Has no effect if the root administrator account is already created. |
✴️ | 12345678 |
CONFIG_FILE |
Path to the config file | ./config.yml |
|
DATABASE_URL |
Database Connection String (overrides all DB_ prefixed env vars if set) |
||
DB_HOST |
Database Hostname / IP Address | ✅ | |
DB_NAME |
Database Name | ✅ | |
DB_USER |
Database Username | ✅ | |
DB_PASS |
Database Password | ✅ | |
DB_PASS_FILE |
Path to the mapped file containing the database password. (overrides DB_PASS if set) |
||
DB_PORT |
Database Port | 5432 |
|
DB_SCHEMA |
Database Schema | wiki |
|
DB_SSL |
Whether to use SSL to connect to the database. Accepted values: 0, 1, true, false |
false |
|
DB_SSL_CA |
Database CA certificate content, as a single line string (without spaces or new lines), without the prefix and suffix lines. | ||
LOG_FORMAT |
Logging format Accepted values: default, json |
default |
|
LOG_LEVEL |
Severity level for logging Accepted values: debug, info, warn, error |
info |
|
WIKI_PORT |
HTTP port the app should listen on. You should avoid changing this port and instead change the host port mapping at the container level. | 3000 |
Example
Assuming you have a PostgreSQL container named db on the same network (replace the values with your own!):
docker run -d -p 8080:3000 --name wiki --restart unless-stopped -e "[email protected]" -e "ADMIN_PASS=SuperSecret123" -e "DB_HOST=db" -e "DB_USER=wikijs" -e "DB_PASS=wikijsrocks" -e "DB_NAME=wiki" ghcr.io/requarks/wiki:3
Once the container is started, browse to http://YOUR-IP-ADDRESS:8080 and login using the admin email and password you provided in the command above.
Docker Compose
Here's a full example of a Docker Compose file for Wiki.js listening on port 80: (replace the values of ADMIN_EMAIL and ADMIN_PASS with your own):
services:
db:
image: postgres:18
environment:
POSTGRES_DB: wiki
POSTGRES_PASSWORD: wikijsrocks
POSTGRES_USER: wikijs
restart: unless-stopped
volumes:
- db-data:/var/lib/postgresql
wiki:
image: ghcr.io/requarks/wiki:3
depends_on:
- db
environment:
ADMIN_EMAIL: [email protected]
ADMIN_PASS: SuperSecret123
DB_HOST: db
DB_USER: wikijs
DB_PASS: wikijsrocks
DB_NAME: wiki
restart: unless-stopped
ports:
- "80:3000"
volumes:
db-data:
DB_HOST should match the service name (in this case, db). If container_name is specified for the service, its value should be used instead.
See the reference above for all available environment variables.
Once both containers are started, browse to http://YOUR-IP-ADDRESS and login using the admin email and password you provided above.
User Mode
By default, the Wiki.js docker image runs as the user wiki. Some deployments require the container to run as root. Simply add the -u root parameter when creating the container to do so.
This is however NOT a secure way to run containers. Make sure you understand the security implications before doing so.
Deploys Wiki.js 3.x, with a bundled PostgreSQL 18 or use an existing PostgreSQL 17+ server.
Quickstart
The chart is published as an OCI artifact, so no helm repo add is needed:
# Deploy Chart
helm install wiki oci://ghcr.io/requarks/charts/wiki
# Monitor Deployment
kubectl rollout status deployment/wiki
Unless admin.email and admin.password are set, the first login is [email protected] / 12345678, and it has to be changed.
Values
Customize your deployment using a values.yaml file.
Reference
Refer to the values.yaml file for all supported values and the chart README for documentation.
You can then deploy the chart by referencing your values.yaml file:
helm install wiki oci://ghcr.io/requarks/charts/wiki -f values.yaml
Database
By default, the chart includes a PostgreSQL database as a single StatefulSet replica for convenience. For serious deployments, you should instead deploy your own PostgreSQL cluster using an operator like CloudNativePG.
Using a Connection String
Passed to the wiki as DATABASE_URL, so an operator's generated Secret can be used as it is. For CloudNativePG:
postgresql:
enabled: false
externalDatabase:
connectionString:
existingSecret: mycluster-app # created by CloudNativePG for the cluster's app database
existingSecretKey: uri
Using Individual Parameters
Connection parameters can also be passed individually, e.g.:
postgresql:
enabled: false
externalDatabase:
parameters:
host: pg.databases.svc
database: wiki
user: wiki
existingSecret: wiki-db # key: password
ssl:
enabled: true
existingSecret: pg-ca # key: ca.crt, and optionally tls.crt / tls.key
Gateway / Ingress
The chart supports both the Gateway API (via httpRoute.enabled) and Ingress (via ingress.enabled).
In both cases, turn on Administration Area Security Trust Proxy, so the wiki records the visitor's address rather than the proxy's.
Reference
Refer to the values.yaml file for all supported values and the chart README for documentation.
Replicas
The number of replicas (via replicaCount) can be increased as needed (either manually or via auto-scaling). Replicas coordinate through the database, collaborative editing included, so no sticky sessions are needed. Replicas don't need to be able to talk to each other, however, they MUST ALL connect to the same database / cluster.
This guide provides an easy, no docker knowledge required, step-by-step instructions to install Wiki.js on a fresh Ubuntu server using containers.
Requirements
- Ubuntu 26.04 or 24.04
- Local Terminal or Remote SSH Access
Install dependencies
- Update the machine
sudo apt -qqy update sudo apt -qqy upgrade - Install Docker
# Add Docker's official GPG key: sudo apt install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: sudo tee /etc/apt/sources.list.d/docker.sources <<EOF Types: deb URIs: https://download.docker.com/linux/ubuntu Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") Components: stable Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/keyrings/docker.asc EOF sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - Setup firewall
sudo ufw allow ssh sudo ufw allow http sudo ufw allow https sudo ufw --force enable
Setup containers
- Create a new folder in the location of your choice (e.g.
~/wiki, replace in the commands below if different). - Generate a random DB secret:
cd ~/wiki openssl rand -base64 32 > .db-secret - Create a new file named
compose.yaml(under the same folder) with the following contents:Important
Replace
[email protected]andSuperSecret123in the code below with your email address and a temporary password that you'll change on first login.compose.yamlservices: db: image: postgres:18 environment: POSTGRES_DB: wiki POSTGRES_USER: wiki POSTGRES_PASSWORD_FILE: /etc/wiki/.db-secret restart: unless-stopped volumes: - db-data:/var/lib/postgresql - ./.db-secret:/etc/wiki/.db-secret:ro wiki: image: ghcr.io/requarks/wiki:3 depends_on: - db environment: ADMIN_EMAIL: [email protected] ADMIN_PASS: SuperSecret123 DB_HOST: db DB_NAME: wiki DB_USER: wiki DB_PASS_FILE: /etc/wiki/.db-secret restart: unless-stopped volumes: - ./.db-secret:/etc/wiki/.db-secret:ro ports: - "80:3000" volumes: db-data: - Start the containers
sudo docker compose up -d
Access your wiki
On your browser, navigate to your server IP / domain name (e.g. http://your-server-ip/).
Note
It can take a few minutes for the containers to download and initialize. Wait a few minutes and try again if the site doesn't load.
(Optional) Add HTTPS Support
By default, your wiki is accessible over unencrypted HTTP. This section adds automatic HTTPS using Caddy, a web server that obtains and renews free SSL certificates from Let's Encrypt for you.
Important
You need a domain name (e.g.
wiki.example.com) with a DNS A record pointing to your server's public IP address.
-
Verify that your domain resolves to your server. From your local machine, run:
ping wiki.example.comThe IP shown must match your server's public IP. If it doesn't, wait a few minutes for DNS changes to propagate and try again. The ping doesn't need to succeed (it might not) but it should show the correct IP.
-
Create a new file named
Caddyfile(under the same folder ascompose.yaml) with the following contents:Important
Replace
wiki.example.comwith your domain name and[email protected]with your email address. Let's Encrypt uses this address to notify you of any certificate issues.
Do NOT modify anything on thereverse_proxyline (line 6).Caddyfile{ email user@example.com } wiki.example.com { reverse_proxy wiki:3000 } -
Edit your
compose.yamlfile to match the following:Warning
Note that the
portssection was removed from thewikiservice. Caddy now handles all incoming traffic, so the wiki container must no longer claim port 80 for itself.compose.yamlservices: db: image: postgres:18 environment: POSTGRES_DB: wiki POSTGRES_USER: wiki POSTGRES_PASSWORD_FILE: /etc/wiki/.db-secret restart: unless-stopped volumes: - db-data:/var/lib/postgresql - ./.db-secret:/etc/wiki/.db-secret:ro wiki: image: ghcr.io/requarks/wiki:3 depends_on: - db environment: ADMIN_EMAIL: [email protected] ADMIN_PASS: SuperSecret123 DB_HOST: db DB_NAME: wiki DB_USER: wiki DB_PASS_FILE: /etc/wiki/.db-secret restart: unless-stopped volumes: - ./.db-secret:/etc/wiki/.db-secret:ro caddy: image: caddy:2 depends_on: - wiki restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy-data:/data - caddy-config:/config volumes: db-data: caddy-data: caddy-config: -
Apply the changes:
cd ~/wiki sudo docker compose up -d
Your wiki is now available at https://wiki.example.com/. Visitors using http:// are redirected to https:// automatically.
Tip
Certificates renew automatically in the background, roughly a month before they expire. There is nothing to schedule or maintain.
Troubleshooting
If the site doesn't load over HTTPS, check what Caddy is doing:
sudo docker compose logs caddy
Common causes:
- DNS isn't pointing at your server yet. Re-run the
pingcheck from step 1. - Port 80 is unreachable from the internet. Let's Encrypt must reach your server on port 80 to validate the domain. Confirm your firewall allows it (
sudo ufw status) and that your hosting provider isn't blocking it. - Too many failed attempts. Let's Encrypt applies rate limits per domain. If you hit one, wait an hour before retrying.
Install on Host
Tip
It's highly recommended to use containers, even if you're not familiar with Docker. See the Guided Ubuntu Install section for an easy, no docker knowledge required, guide to install Wiki.js on a Ubuntu machine.
Before going any further, make sure your system meets all the requirements. The following instructions assume Node.js and PostgreSQL are already installed.
Setup
-
Download the latest version of Wiki.js:
wget https://github.com/requarks/wiki/releases/latest/download/wiki-js.tar.gz -
Extract the package to the final destination of your choice:
mkdir wiki tar xzf wiki-js.tar.gz -C ./wiki cd ./wiki -
Rename the sample config file to
config.yml:mv config.sample.yml config.yml -
Edit the config file and fill in your database and port settings (refer to the configuration reference):
nano config.yml -
Run Wiki.js
# First run only (replace the email address with your own): [email protected] node --no-experimental-webstorage backend # Subsequent runs: node --no-experimental-webstorage backend -
Navigate to
http://localhost:3000(or the IP / port you configured), and login using the email address you entered in the last step and the password12345678. You'll be prompted to choose a new password. -
Go the Administration Area Extensions page and make sure the necessary extensions are installed, especially Sharp and Puppeteer which enables basic capabilities.
Run as service
There are several solutions to run Wiki.js as a background service. We'll focus on systemd in this guide as it's available in nearly all linux distributions.
- Create a new file named
wiki.serviceinside directory/etc/systemd/system.nano /etc/systemd/system/wiki.service - Paste the following contents (assuming your wiki is installed at
/var/wiki):[Unit] Description=Wiki.js After=network.target [Service] Type=simple ExecStart=/usr/bin/node --no-experimental-webstorage backend Restart=always # Consider creating a dedicated user for Wiki.js here instead of using nobody: User=nobody Environment=NODE_ENV=production WorkingDirectory=/var/wiki [Install] WantedBy=multi-user.target - Save the service file (
CTRL+X , followed byY ). - Reload systemd:
systemctl daemon-reload - Run the service:
systemctl start wiki - Enable the service on system boot.
systemctl enable wiki
Tip
You can see the logs of the service using
journalctl -u wiki
Before going any further, make sure your system meets all the requirements. The following instructions assume Node.js and PostgreSQL are already installed.
-
Open Terminal.
-
Download the latest version of Wiki.js:
wget https://github.com/requarks/wiki/releases/latest/download/wiki-js.tar.gz -
Extract the package to the final destination of your choice:
mkdir wiki tar xzf wiki-js.tar.gz -C ./wiki cd ./wiki -
Rename the sample config file to
config.yml:mv config.sample.yml config.yml -
Edit the config file and fill in your database and port settings (refer to the configuration reference):
nano config.yml -
Run Wiki.js
# First run only (replace the email address with your own): [email protected] node --no-experimental-webstorage backend # Subsequent runs: node --no-experimental-webstorage backend -
Navigate to
http://localhost:3000(or the IP / port you configured), and login using the email address you entered in the last step and the password12345678. You'll be prompted to choose a new password. -
Go the Administration Area Extensions page and make sure the necessary extensions are installed, especially Sharp and Puppeteer which enables basic capabilities.
Before going any further, make sure your system meets all the requirements. The following instructions assume Node.js and PostgreSQL are already installed.
-
Open a Powershell prompt in administrator mode.
-
Download the latest version of Wiki.js:
Invoke-WebRequest -Uri "https://github.com/requarks/wiki/releases/latest/download/wiki-js-windows.tar.gz" -OutFile "wiki-js.tar.gz" -
Extract the package to the final destination of your choice:
New-Item -Path "C:\" -Name "wiki" -ItemType "directory" tar xzf wiki-js.tar.gz -C "C:\wiki" cd C:\wiki -
Rename the sample config file to
config.yml:Rename-Item -Path config.sample.yml -NewName config.yml -
Edit the config file and fill in your database and port settings (refer to the configuration reference):
notepad .\config.yml -
Run Wiki.js
# First run only (replace the email address with your own): $env:ADMIN_EMAIL = "[email protected]"; node --no-experimental-webstorage backend # Subsequent runs: node --no-experimental-webstorage backend -
Navigate to
http://localhost:3000(or the IP / port you configured), and login using the email address you entered in the last step and the password12345678. You'll be prompted to choose a new password. -
Go the Administration Area Extensions page and make sure the necessary extensions are installed, especially Sharp and Puppeteer which enables basic capabilities.
Install using Cloud Images
Coming soon
Status
This image is officially maintained by the Wiki.js team.
Status
- Only the 2.x image available at the moment.
- This image is maintained by PikaPods.
See the Wiki.js page on PikaPods