Skip to content

Gramps Web — Proxmox LXC

Gramps Web is a self-hosted web frontend for the Gramps genealogy application. It runs as a set of Docker containers (web app, API, and a Celery worker for background tasks) and is served over HTTPS via Tailscale, making it accessible from any device on your tailnet without exposing it to the public internet.


1. Create the LXC Container

In the Proxmox web UI, create a new CT with these settings:

  • RAM: 1 GB
  • CPU: 2 cores
  • Network: DHCP
  • Features: Enable nesting — required for Docker to run inside the LXC

2. Base OS Setup

In the LXC shell:

apt update && apt upgrade -y && apt install curl -y

3. Install Docker

Gramps Web is distributed and run entirely via Docker Compose — there are no native packages to install. The official Docker install script handles adding the apt repo, GPG key, and installing the engine in one step.

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

4. Create Admin User

adduser jake

When prompted for a password, enter your preferred password. Then add jake to the docker and sudo groups:

usermod -aG docker jake
usermod -aG sudo jake

Apply the new group membership and switch to the user:

newgrp docker
su - jake

5. Set Up Gramps Web via Docker Compose

mkdir gramps-web && cd gramps-web
nano docker-compose.yml

Copy the compose template from the Gramps Web quickstart guide. The template defines containers for the web frontend, the API backend, Redis, and a Celery worker for background tasks like media processing and tree imports.


6. Tailscale — TUN Device Access

Tailscale is used here for two things: putting the LXC on your private tailnet so it's reachable from other devices, and providing TLS certificates via tailscale serve so the app is served over HTTPS without a separate reverse proxy or public cert setup.

Unprivileged LXCs don't have access to /dev/net/tun by default, which Tailscale needs to create its virtual network interface. On the Proxmox host, edit the container config (replace 107 with your VMID):

nano /etc/pve/lxc/107.conf

Add at the bottom:

lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

Reboot the LXC:

# From Proxmox host
pct stop 107 && pct start 107

7. Install and Connect Tailscale

Back in the LXC console:

curl -fsSL https://tailscale.com/install.sh | sh

Start Tailscale and authenticate:

tailscale up

Copy the URL displayed into a browser and log in to your Tailscale account.

In the Tailscale admin console, make sure MagicDNS is enabled, and enable HTTPS.


8. Configure Tailscale Serve (HTTPS)

tailscale serve acts as a local reverse proxy — it terminates TLS using a certificate issued by Tailscale's CA, then forwards traffic to Gramps Web running on port 5050. This means the app is accessible at https://gramps.<tailnet>.ts.net with a valid cert, no manual certificate management needed.

tailscale serve --bg --https=443 http://localhost:5050

You should see:

Serve started and running in the background.
To disable the proxy, run: tailscale serve --https=443 off

Gramps Web is now accessible over HTTPS on your tailnet.