Find a command/
中文
☰

03 / AFTER INSTALLATION

Installed. Now what?

Each app lives in /opt/<app> on the Docker network proxy. Here is how to open it, add a domain, back up, update, and remove it.

Add a domain with HTTPS

Shown for Nginx Proxy Manager; Zoraxy takes the same values (a new HTTP proxy rule targeting container:port). The proxy and the apps share the proxy network, so use container names, not IPs.

  1. At your DNS provider, add an A record pointing to the server’s public IP. On Cloudflare, set the cloud to grey (DNS only) before requesting a certificate.
  2. On the server, run dig +short YOUR_DOMAIN and confirm it returns this server’s IP.
  3. Open Nginx Proxy Manager → Hosts → Proxy Hosts → Add Proxy Host.
  4. Domain Names: your domain. Scheme: http. Forward Hostname and Port: the container and port from the table. Enable Websockets Support where the table says so.
  5. On the SSL tab choose Request a new SSL Certificate, enable Force SSL, and save. Open https:// after a few seconds.
AppForward HostnamePortWebsockets
Komarikomari25774On
Uptime Kumauptime-kuma3001On

Certificate request failed? See Why a certificate request fails. Port unreachable? See A port you cannot reach.

Back up everything

Container apps keep their data under /opt/<app>, so one command archives them all.

Archive every app under /opt

Read-only
cd /opt && tar -czf ~/apps-$(date +%F).tar.gz $(ls -d npm zoraxy komari uptime-kuma diun rustdesk 2>/dev/null)

Expect: For a consistent copy of databases, stop the apps first (see each app below).

Copy the archive to your computer

Read-only
scp root@YOUR_SERVER_IP:~/apps-*.tar.gz .

Expect: Run this on your own computer. A backup on the same disk does not survive a reinstall.

Docker Engine

Open it: Nothing to open. Check that the engine runs and how much disk images use.

Engine status and disk use

Read-only
docker info --format "{{.ServerVersion}}"
docker system df

Expect: A version number means the engine runs. On Alpine, rc-service docker status shows the service.

Update Docker on Debian or Ubuntu

Changes config
apt-get update
apt-get install --only-upgrade -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Expect: Running containers with restart: unless-stopped come back after the engine restarts.

Update Docker on Rocky, AlmaLinux, or CentOS Stream

Changes config
dnf upgrade -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Update Docker on Alpine

Changes config
apk update
apk upgrade docker docker-cli-compose
rc-service docker restart

Free space from unused images

Changes config
docker image prune -a

Expect: Asks before deleting. Removes images that no container uses.

Nginx Proxy Manager

Open it: Admin UI on 127.0.0.1:81. From your computer run ssh -L 81:127.0.0.1:81 root@YOUR_SERVER_IP, then open http://127.0.0.1:81.

Status and recent logs

Read-only
docker compose -f /opt/npm/compose.yaml ps
docker logs --tail 50 npm

Expect: The container is "running" or "Up". Errors in the log usually name the cause.

Back up the data

Changes config
docker compose -f /opt/npm/compose.yaml stop
tar -czf ~/npm-$(date +%F).tar.gz -C /opt npm
docker compose -f /opt/npm/compose.yaml start

Expect: Stopping first keeps SQLite databases consistent. Copy the archive off the server.

Update to the latest image

Changes config
docker compose -f /opt/npm/compose.yaml pull
docker compose -f /opt/npm/compose.yaml up -d
docker image prune -f

Expect: Read the upstream release notes and back up first. Only changed containers restart.

Remove (keeps data)

Changes config
docker compose -f /opt/npm/compose.yaml down

Expect: Data stays in /opt/npm. Delete that directory only when you are sure.

Zoraxy

Open it: Admin UI on 127.0.0.1:8000. Run ssh -L 8000:127.0.0.1:8000 root@YOUR_SERVER_IP, then open http://127.0.0.1:8000.

Status and recent logs

Read-only
docker compose -f /opt/zoraxy/compose.yaml ps
docker logs --tail 50 zoraxy

Expect: The container is "running" or "Up". Errors in the log usually name the cause.

Back up the data

Changes config
docker compose -f /opt/zoraxy/compose.yaml stop
tar -czf ~/zoraxy-$(date +%F).tar.gz -C /opt zoraxy
docker compose -f /opt/zoraxy/compose.yaml start

Expect: Stopping first keeps SQLite databases consistent. Copy the archive off the server.

Update to the latest image

Changes config
docker compose -f /opt/zoraxy/compose.yaml pull
docker compose -f /opt/zoraxy/compose.yaml up -d
docker image prune -f

Expect: Read the upstream release notes and back up first. Only changed containers restart.

Remove (keeps data)

Changes config
docker compose -f /opt/zoraxy/compose.yaml down

Expect: Data stays in /opt/zoraxy. Delete that directory only when you are sure.

Komari

Open it: The first account is printed by docker logs komari. Put it behind your domain (below), then add agents from the dashboard: it shows a one-line agent command for each server. Proxy target: komari:25774

Status and recent logs

Read-only
docker compose -f /opt/komari/compose.yaml ps
docker logs --tail 50 komari

Expect: The container is "running" or "Up". Errors in the log usually name the cause.

Back up the data

Changes config
docker compose -f /opt/komari/compose.yaml stop
tar -czf ~/komari-$(date +%F).tar.gz -C /opt komari
docker compose -f /opt/komari/compose.yaml start

Expect: Stopping first keeps SQLite databases consistent. Copy the archive off the server.

Update to the latest image

Changes config
docker compose -f /opt/komari/compose.yaml pull
docker compose -f /opt/komari/compose.yaml up -d
docker image prune -f

Expect: Read the upstream release notes and back up first. Only changed containers restart.

Remove (keeps data)

Changes config
docker compose -f /opt/komari/compose.yaml down

Expect: Data stays in /opt/komari. Delete that directory only when you are sure.

Uptime Kuma

Open it: Open it through ssh -L 3001:127.0.0.1:3001 root@YOUR_SERVER_IP and create the admin account first. The first visitor becomes admin. Proxy target: uptime-kuma:3001

Status and recent logs

Read-only
docker compose -f /opt/uptime-kuma/compose.yaml ps
docker logs --tail 50 uptime-kuma

Expect: The container is "running" or "Up". Errors in the log usually name the cause.

Back up the data

Changes config
docker compose -f /opt/uptime-kuma/compose.yaml stop
tar -czf ~/uptime-kuma-$(date +%F).tar.gz -C /opt uptime-kuma
docker compose -f /opt/uptime-kuma/compose.yaml start

Expect: Stopping first keeps SQLite databases consistent. Copy the archive off the server.

Update to the latest image

Changes config
docker compose -f /opt/uptime-kuma/compose.yaml pull
docker compose -f /opt/uptime-kuma/compose.yaml up -d
docker image prune -f

Expect: Read the upstream release notes and back up first. Only changed containers restart.

Remove (keeps data)

Changes config
docker compose -f /opt/uptime-kuma/compose.yaml down

Expect: Data stays in /opt/uptime-kuma. Delete that directory only when you are sure.

Diun

Open it: No web UI. Diun checks images every 6 hours and notifies you about new versions. When a notification arrives, update that app with its “Update to the latest image” step on this page.

Send a test notification

Read-only
docker exec diun diun notif test

Expect: A message arrives on Telegram or ntfy. If not, check the token or topic and generate the plan again.

Images Diun is watching

Read-only
docker exec diun diun image list

Status and recent logs

Read-only
docker compose -f /opt/diun/compose.yaml ps
docker logs --tail 50 diun

Expect: The container is "running" or "Up". Errors in the log usually name the cause.

Back up the data

Changes config
docker compose -f /opt/diun/compose.yaml stop
tar -czf ~/diun-$(date +%F).tar.gz -C /opt diun
docker compose -f /opt/diun/compose.yaml start

Expect: Stopping first keeps SQLite databases consistent. Copy the archive off the server.

Update to the latest image

Changes config
docker compose -f /opt/diun/compose.yaml pull
docker compose -f /opt/diun/compose.yaml up -d
docker image prune -f

Expect: Read the upstream release notes and back up first. Only changed containers restart.

Remove (keeps data)

Changes config
docker compose -f /opt/diun/compose.yaml down

Expect: Data stays in /opt/diun. Delete that directory only when you are sure.

RustDesk Server

Open it: In each RustDesk client: Settings → Network → ID server = your server IP or domain, Key = the public key below.

Print the public key

Read-only
cat /opt/rustdesk/data/id_ed25519.pub

Status and recent logs

Read-only
docker compose -f /opt/rustdesk/compose.yaml ps
docker logs --tail 50 hbbs

Expect: The container is "running" or "Up". Errors in the log usually name the cause.

Back up the data

Changes config
docker compose -f /opt/rustdesk/compose.yaml stop
tar -czf ~/rustdesk-$(date +%F).tar.gz -C /opt rustdesk
docker compose -f /opt/rustdesk/compose.yaml start

Expect: Stopping first keeps SQLite databases consistent. Copy the archive off the server.

Update to the latest image

Changes config
docker compose -f /opt/rustdesk/compose.yaml pull
docker compose -f /opt/rustdesk/compose.yaml up -d
docker image prune -f

Expect: Read the upstream release notes and back up first. Only changed containers restart.

Remove (keeps data)

Changes config
docker compose -f /opt/rustdesk/compose.yaml down

Expect: Data stays in /opt/rustdesk. Delete that directory only when you are sure.

Zsh + Oh My Zsh

Open it: Start it with zsh, or make it your login shell.

Make zsh the login shell

Changes config
chsh -s "$(command -v zsh)"

Expect: Takes effect on the next login.

Remove Oh My Zsh

Changes config
zsh -ic uninstall_oh_my_zsh

Expect: Restores the previous ~/.zshrc when a backup exists.

1Panel

Open it: Run 1pctl user-info for the address, entrance path, and account. Open the panel port in your cloud security group.

Panel address and account

Read-only
1pctl user-info
1pctl status

Uninstall 1Panel

May lock you out
1pctl uninstall

Expect: Interactive. Read each prompt; apps installed through the panel are affected.

← Back to software picks