Choose Your Deployment Target First
SillyTavern is a Node.js application with a single writable data directory. That simplicity is what makes selfhosting practical: once Node, the repo, and c…
- sillytavern
- deployment
- docker
- vps
- self-hosting
- tutorial
| Target | Best for | Main tradeoff |
|---|---|---|
| VPS | Always-on access, remote users | Monthly cost; you manage the OS |
| Docker | Reproducible upgrades, easy rollback | Volume and permission setup |
| Home server | Zero recurring cost, full hardware control | NAT/firewall and uptime |
All three run the same upstream code. Pick based on where your character cards live and who needs to reach them.
Prerequisites (All Targets)
- Node.js 18+ (20 LTS recommended) and
git - A non-root user to own the install directory
- Port 8000 free, or a reverse proxy in front of it
- A backup habit for
data/— this directory holds your characters, chats, and settings
Option 1: Deploy on a VPS
Step 1 — Provision and harden
Create an Ubuntu 22.04/24.04 instance with at least 1 vCPU and 1 GB RAM (2 GB if you plan to run local inference elsewhere and proxy to it). Create a non-root sudo user, disable password SSH login, and enable a firewall allowing only SSH, HTTP, and HTTPS.
Step 2 — Install Node and clone
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs git
git clone https://github.com/SillyTavern/SillyTavern.git ~/SillyTavern
cd ~/SillyTavern
git checkout release
npm install
Step 3 — Configure for remote access
Edit config.yaml:
- Set
listen: true(or bind to0.0.0.0) - Set
whitelistMode: trueand add your IPs, or keep it false only behind an authenticated reverse proxy - Set
basicAuthMode: truewith credentials if you are not using a proxy with auth - Keep
dataRootat its default so your cards stay under~/SillyTavern/data
Step 4 — Run as a service
Create a systemd unit that runs node server.js from the install directory as your user, with Restart=on-failure. Enable and start it, then confirm with systemctl status. Put Caddy or Nginx in front for TLS — Caddy handles certificates with a two-line config.
Option 2: Deploy with Docker
Docker is the cleanest path for upgrades: pull a new image, restart, and your data/ volume is untouched.
Step 1 — Compose file
services:
sillytavern:
image: ghcr.io/sillytavern/sillytavern:latest
container_name: sillytavern
ports:
- "8000:8000"
volumes:
- ./config:/home/node/app/config
- ./data:/home/node/app/data
restart: unless-stopped
Step 2 — First run and permissions
Run docker compose up -d, then check logs. If the container cannot write to data/, fix ownership to the container’s node user (UID 1000 by default). Copy the sample config into ./config before the first start if you want to edit config.yaml on the host.
Step 3 — Upgrades
docker compose pull
docker compose up -d
Back up ./data before each pull. Character card imports, group chats, and presets all live there.
Option 3: Deploy on a Home Server
Step 1 — Install and pin the version
Follow the VPS install steps on the host machine. Check out the release branch rather than main so you are not tracking development commits.
Step 2 — Decide how to expose it
- LAN only: set
listen: true, restrict the whitelist to your local subnet, and access via the host’s LAN IP. - Remote access: use a mesh VPN (Tailscale, WireGuard) rather than opening a port. It avoids exposing the UI to the internet and needs no certificates.
- Reverse proxy: if you do forward ports, terminate TLS at Caddy and enable
basicAuthModeas a second layer.
Step 3 — Survive reboots
Use systemd or a Docker restart: unless-stopped policy. For home hardware, a UPS and automated data/ backups to another machine cover the realistic failure modes.
Post-Deploy Checklist
- Confirm
data/is writable and backed up - Verify character card import works from the UI
- Test a group chat and a preset save — these exercise the same data paths
- Lock down access: auth enabled, firewall minimal, TLS in place
- Record your upgrade command so the next update is boring
Conclusion
A VPS gives you reach, Docker gives you clean upgrades, and a home server gives you control; the SillyTavern configuration is identical across all three. Once deployed, the front-end experience becomes the bottleneck — which is where the MiniTavern iOS and Android apps, the Web Tavern client, and the Chrome extension come in, all sharing the same character card workflows you just set up. Browse the Character Card Market for ready-made cards, or start with the featured Captain Portia Vane, Harbormaster of the Cloud Wharf, to test your new deployment end to end.
Keep reading
More guides you might like
The 2026 Standard: What to Look For
The character card is the backbone of any SillyTavern experience. It defines the persona, the opening scene, and the behavioral guardrails for the model. W…
- character-card-generator
- ai-tools
- sillytavern
KoboldCpp Guide: Run Local LLMs for SillyTavern & MiniTavern (Privacy-First Setup in 2026)
KoboldCpp is a portable llama.cpp inference server with Kobold and OpenAI-compatible APIs on port 5001—ideal for privacy-focused SillyTavern and MiniTavern character-card roleplay without cloud keys.
- koboldcpp
- local llm
- privacy
- sillytavern
Why Use a Dedicated Generator Over Generic Chatbots?
The demand for highquality characters in SillyTavern has never been higher. Manually crafting a detailed card—balancing a rich persona, accurate character…
- character-card-generator
- ai-tools
- sillytavern