<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Docker on Nobody&#39;s Home</title>
    <link>https://new.cloud.nobodyhome.dev/tags/docker/</link>
    <description>Recent content in Docker on Nobody&#39;s Home</description>
    <generator>Hugo -- 0.154.5</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 12 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://new.cloud.nobodyhome.dev/tags/docker/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Docker Permissions</title>
      <link>https://new.cloud.nobodyhome.dev/posts/docker-permissions/</link>
      <pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/docker-permissions/</guid>
      <description>&lt;h3 id=&#34;references&#34;&gt;References:&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://man7.org/linux/man-pages/man7/capabilities.7.html&#34;&gt;Man Page&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://new.cloud.nobodyhome.dev/posts/install-docker/&#34;&gt;Install Docker Tutorial&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;docker-containers-can-do-too-much&#34;&gt;Docker Containers Can Do Too Much&lt;/h3&gt;
&lt;p&gt;Your containers can do too much. Look at all the capabilities a Docker container gets by default:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  - SYS_ADMIN
  - NET_ADMIN
  - NET_RAW
  - FOWNER
  - SETGID
  - SETUID
  - CHOWN
  - AUDIT_CONTROL
  - AUDIT_READ
  - AUDIT_WRITE
  - BLOCK_SUSPEND
  - BPF
  - CHECKPOINT_RESTORE
  - DAC_READ_SEARCH
  - DAC_OVERRIDE
  - FSETID
  - IPC_LOCK
  - KILL
  - LEASE
  - LINUX_IMMUTABLE
  - MAC_ADMIN
  - MAC_OVERRIDE
  - MKNOD
  - NET_ADMIN
  - NET_BIND_SERVICE
  - NET_BROADCAST
  - PERFMON
  - SETFCAP
  - SETPCAP
  - SYS_BOOT
  - SYS_CHROOT
  - SYS_NICE
  - SYS_PACCT
  - SYS_PTRACE
  - SYS_RAWIO
  - SYS_RESOURCE
  - SYS_TIME
  - SYS_TTY_CONFIG
  - SYSLOG
  - WAKE_ALARM
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This should &lt;strong&gt;clearly&lt;/strong&gt; be limited. Containers share functions of the host kernel, it&amp;rsquo;s how they cut down on overhead. Giving unecessary permissions violates the security principle of least privilege. So, how go about it?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dockhand</title>
      <link>https://new.cloud.nobodyhome.dev/posts/dockhand/</link>
      <pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/dockhand/</guid>
      <description>&lt;h3 id=&#34;references&#34;&gt;References&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=dwFktbtuTFQ&#34;&gt;TechHut&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dockhand.pro/&#34;&gt;Dockhand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dockhand.pro/manual/&#34;&gt;Dockhand Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;dashboard&#34; loading=&#34;lazy&#34; src=&#34;https://new.cloud.nobodyhome.dev/assets/dockhand/dockhand-dashboard.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;setup&#34;&gt;Setup&lt;/h3&gt;
&lt;h4 id=&#34;docker-compose&#34;&gt;Docker Compose:&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;services:
  dockhand:
    image: fnsys/dockhand:latest
    container_name: dockhand
    restart: unless-stopped
    ports:
      - &amp;#34;3000:3000&amp;#34;
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/app/data
      - /home/mechanicus/Code/compose:/mnt/compose
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notes: using a separate data directory instead of a volume mount will make the container easier to manage and transfer if necessary&lt;/p&gt;
&lt;h4 id=&#34;adding-environments&#34;&gt;Adding Environments&lt;/h4&gt;
&lt;p&gt;My preferred method is to use the hawser connector:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -d --name hawser --restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /home/mechanicus/code/docker-compose/:/mnt/compose \
-p 2376:2376 -e TOKEN==[SECURE TOKEN] \
ghcr.io/finsys/hawser:latest
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note: Include the location of compose files for easier management&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tor Site</title>
      <link>https://new.cloud.nobodyhome.dev/posts/tor-hidden-services/</link>
      <pubDate>Sat, 13 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/tor-hidden-services/</guid>
      <description>&lt;h3 id=&#34;directory-setup&#34;&gt;Directory Setup&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Set up the files and directories:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mkdir -p tor-site/keys tor-site/html tor-site/logs
touch tor-site/torrc
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Set permissions:
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;chmod 700 tor-site/keys 
chmod 600 tor-site/logs
sudo chown root:root tor-site/keys tor-site/logs
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;content-setup&#34;&gt;Content Setup&lt;/h3&gt;
&lt;p&gt;Add the files for your website into the &lt;code&gt;tor-site/html&lt;/code&gt; folder:
example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Hello from the Onion Router!&amp;lt;/h1&amp;gt;
    &amp;lt;p&amp;gt;This site is hosted inside Docker.&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;docker-setup&#34;&gt;Docker Setup&lt;/h3&gt;
&lt;p&gt;[[Install Docker]]
Docker  Compose File
&lt;code&gt;compose.yaml&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;services:
  nginx:
    container_name: nginx
    image: nginx
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
    volumes:
      - ./html:/usr/share/nginx/html:ro
      - ./logs:/var/log/nginx
    networks:
      - tor_network
  tor:
    container_name: tor
    volumes:
      - ./torrc:/etc/tor/torrc:ro
      - ./keys:/var/lib/tor/hidden_service/
    image: alpine:latest
    entrypoint: sh -c &amp;#34;apk add --no-cache tor &amp;amp;&amp;amp; tor -f /etc/tor/torrc&amp;#34;
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
    networks:
      - tor_network
    depends_on:
      - nginx

networks:
  tor_network:
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nginx&lt;/code&gt; is the name of your web server container - this is important for the &lt;code&gt;torrc&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:ro&lt;/code&gt; sets the volume to read only&lt;/li&gt;
&lt;li&gt;&lt;code&gt;networks: tor_network&lt;/code&gt; means all the traffic stays inside the tor network&lt;/li&gt;
&lt;li&gt;&lt;code&gt;security_opt: - no-new-privileges:true&lt;/code&gt;  prevents the user from running as root through &lt;code&gt;setuid&lt;/code&gt; or &lt;code&gt;setgid &lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cap_drop: -All&lt;/code&gt; removes all default Linux capabilities granted to a container&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cap_add: - NET_BIND_SERVICE&lt;/code&gt; will allow tor to work with only the necessary capabilities&lt;/li&gt;
&lt;li&gt;&lt;code&gt;networks&lt;/code&gt; ensures that all traffic stays inside the docker network with a custom bridge &lt;code&gt;tor_network&lt;/code&gt; to access the tor relays
See &lt;a href=&#34;https://new.cloud.nobodyhome.dev/posts/docker-permissions/&#34;&gt;Docker Permissions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;create-torrc&#34;&gt;Create &lt;code&gt;torrc&lt;/code&gt;:&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Standard Tor config
DataDirectory /var/lib/tor

# Define the Hidden Service
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 nginx:80
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;note: the name &lt;code&gt;nginx&lt;/code&gt; should be the same as you name your web server container in the &lt;code&gt;compose.yaml&lt;/code&gt; (see [[#Docker Setup]]).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;notes&#34;&gt;Notes:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Did you know you can make a custom tor site name? See the &lt;a href=&#34;https://new.cloud.nobodyhome.dev/posts/named-tor-site/&#34;&gt;Named Tor Site&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The docker service setup:
&lt;a href=&#34;https://new.cloud.nobodyhome.dev/posts/dockhand/&#34;&gt;Dockhand&lt;/a&gt;
&lt;a href=&#34;https://new.cloud.nobodyhome.dev/posts/portainer/&#34;&gt;Portainer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;
services:
  nginx:
    container_name: nginx
    image: nginx
    volumes:
      - /home/mechanicus/code/tor-site/html:/usr/share/nginx/html:ro
      - /home/mechanicus/code/tor-site/logs:/var/log/nginx
    networks:
      - tor_network
    deploy: 
      mode: replicated
      replicas: 1
    labels:
      - &amp;#34;com.centurylinklabs.watchtower.enable=true&amp;#34;
      - &amp;#34;label=shepherd.autodeploy=true&amp;#34;
  tor:
    container_name: tor
    volumes:
      - /home/mechanicus/code/tor-site/torrc:/etc/tor/torrc:ro
      - /home/mechanicus/code/tor-site/keys:/var/lib/tor/hidden_service/
    image: alpine:latest
    entrypoint: sh -c &amp;#34;apk add --no-cache tor &amp;amp;&amp;amp; tor -f /etc/tor/torrc&amp;#34;
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
    networks:
      - tor_network
    depends_on:
      - nginx
    deploy: 
      mode: replicated
      replicas: 1
    labels:
      - &amp;#34;com.centurylinklabs.watchtower.enable=true&amp;#34;
      - &amp;#34;label=shepherd.autodeploy=true&amp;#34;

networks:
  tor_network:
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Building Docker Containers</title>
      <link>https://new.cloud.nobodyhome.dev/posts/building-docker-containers/</link>
      <pubDate>Sun, 31 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/building-docker-containers/</guid>
      <description>&lt;h3 id=&#34;install-docker&#34;&gt;Install Docker&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://new.cloud.nobodyhome.dev/posts/install-docker/&#34;&gt;Install Docker Tutorial&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;setup-buildx-environment&#34;&gt;Setup Buildx Environment&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker buildx create \
  --name container-builder \
  --driver docker-container \
  --bootstrap --use
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;build-the-container&#34;&gt;Build the Container&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 \
-t [repository]/[containername]:[tag] . --push
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;-t&lt;/code&gt; flag sets the naming convention for the container, &lt;code&gt;.&lt;/code&gt; tells docker where to build the container (where the Dockerfile is located), and &lt;code&gt;--push&lt;/code&gt; sends it to the &lt;a href=&#34;https://hub.docker.com/&#34;&gt;Docker Hub&lt;/a&gt; repository.&lt;/p&gt;
&lt;h3 id=&#34;tag-a-docker-container&#34;&gt;Tag a Docker Container&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker tag [name]:[tag] [new-name]:[new-tag]
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;save-and-transfer-a-docker-container&#34;&gt;Save and Transfer a Docker Container&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker save -o [name] [name]:[tag]
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;rsync -P [name] [target]:[location]
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker load -i [name]
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Install Docker</title>
      <link>https://new.cloud.nobodyhome.dev/posts/install-docker/</link>
      <pubDate>Sun, 31 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/install-docker/</guid>
      <description>&lt;h4 id=&#34;references&#34;&gt;References&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.docker.com/engine/install/ubuntu/&#34;&gt;Docker&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;setup-debian-based&#34;&gt;Setup: Debian Based&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Add Docker&amp;#39;s official GPG key:
sudo apt-get update
sudo apt-get 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:
echo \
  &amp;#34;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;#34;$VERSION_CODENAME&amp;#34;) stable&amp;#34; | \
  sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
sudo apt-get update
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;setup-arch-based&#34;&gt;Setup: Arch Based&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Pamac (manjaro)
sudo pamac install docker docker-compose
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Arch
sudo pacman -Syu docker docker-compose
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Enable the docker service&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kasm Workspaces</title>
      <link>https://new.cloud.nobodyhome.dev/posts/kasm-workspace/</link>
      <pubDate>Sun, 31 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/kasm-workspace/</guid>
      <description>&lt;h4 id=&#34;references&#34;&gt;References&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://kasmweb.com/docs/latest/install/single_server_install.html&#34;&gt;Kasm Documentation&lt;/a&gt;
&lt;a href=&#34;https://kasmweb.com/docs/latest/install/system_requirements.html&#34;&gt;Kasm System Requirements&lt;/a&gt;
&lt;a href=&#34;https://kasmweb.com/docs/latest/how_to/gpu.html&#34;&gt;Kasm GPU Install&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://new.cloud.nobodyhome.dev/posts/install-docker/&#34;&gt;Install Docker Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Swap Space&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;installation&#34;&gt;Installation&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;NOTE: check for the latest version&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cd /tmp
curl -O https://kasm-static-content.s3.amazonaws.com/kasm_release_1.18.1.tar.gz
tar -xf kasm_release_1.18.1.tar.gz
sudo bash kasm_release/install.sh --accept-eula --swap-size 8192
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;gpu-setup&#34;&gt;GPU Setup&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;The Nvidia container setup instructions, and standard GPU driver installation threw an error: &lt;code&gt;nvidia runtime not found&lt;/code&gt;. The script on Kasm&amp;rsquo;s site worked.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash

# Check for NVIDIA cards
if ! lspci | grep -i nvidia &amp;gt; /dev/null; then
    echo &amp;#34;No NVIDIA GPU detected&amp;#34;
    exit 0
fi

add-apt-repository -y ppa:graphics-drivers/ppa

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  &amp;amp;&amp;amp; curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed &amp;#39;s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g&amp;#39; | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

apt update
apt install -y ubuntu-drivers-common

# Run ubuntu-drivers and capture the output
DRIVER_OUTPUT=$(ubuntu-drivers list 2&amp;gt;/dev/null)
# Extract server driver versions using grep and regex
# Pattern looks for nvidia-driver-XXX-server
SERVER_VERSIONS=$(echo &amp;#34;$DRIVER_OUTPUT&amp;#34; | grep -o &amp;#39;nvidia-driver-[0-9]\+-server&amp;#39; | grep -o &amp;#39;[0-9]\+&amp;#39; | sort -n)
# Check if any server versions were found
if [ -z &amp;#34;$SERVER_VERSIONS&amp;#34; ]; then
    echo &amp;#34;Error: No NVIDIA server driver versions found.&amp;#34; &amp;gt;&amp;amp;2
    exit 1
fi
# Find the highest version number
LATEST_VERSION=$(echo &amp;#34;$SERVER_VERSIONS&amp;#34; | tail -n 1)
# Validate that the version is numeric
if ! [[ &amp;#34;$LATEST_VERSION&amp;#34; =~ ^[0-9]+$ ]]; then
    echo &amp;#34;Error: Invalid version number: $LATEST_VERSION&amp;#34; &amp;gt;&amp;amp;2
    exit 2
fi
# Output only the version number
echo &amp;#34;Latest version is: $LATEST_VERSION&amp;#34;
ubuntu-drivers install &amp;#34;nvidia:$LATEST_VERSION-server&amp;#34;
apt install -y &amp;#34;nvidia-utils-$LATEST_VERSION-server&amp;#34;
# Install NVIDIA toolkit + configure for docker
apt-get install -y nvidia-container-toolkit
nvidia-ctk runtime configure --runtime=docker
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;egress-setup-nordvpn&#34;&gt;Egress Setup: NordVPN&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Get service credentials for the VPN: &lt;a href=&#34;https://my.nordaccount.com/dashboard/nordvpn/manual-configuration/service-credentials/&#34;&gt;Available on the VPN dashboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download desired OpenVPN configuration files: &lt;a href=&#34;https://my.nordaccount.com/dashboard/nordvpn/manual-configuration/service-credentials/&#34;&gt;Available on the VPN dashboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;On Kasm Administrator dashboard, select Egress (Infrastructure &amp;gt; Egress)
&lt;ul&gt;
&lt;li&gt;Add the egress provider:
&lt;img alt=&#34;egress&#34; loading=&#34;lazy&#34; src=&#34;https://new.cloud.nobodyhome.dev/assets/kasm/egress_provider.png&#34;&gt;&lt;/li&gt;
&lt;li&gt;Configure VPN type:
&lt;img alt=&#34;provider&#34; loading=&#34;lazy&#34; src=&#34;https://new.cloud.nobodyhome.dev/assets/kasm/add_provider.png&#34;&gt;&lt;/li&gt;
&lt;li&gt;Add egress gateways:
&lt;img alt=&#34;add route&#34; loading=&#34;lazy&#34; src=&#34;https://new.cloud.nobodyhome.dev/assets/kasm/add_egress.png&#34;&gt;
&lt;img alt=&#34;add egress&#34; loading=&#34;lazy&#34; src=&#34;https://new.cloud.nobodyhome.dev/assets/kasm/egress_setup.png&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;On the Workspaces &amp;gt; Workspace page, select the workspace to allow it to use the VPN, click &lt;code&gt;edit&lt;/code&gt; and add the egress provider on the &lt;code&gt;Egress&lt;/code&gt; tab.&lt;/li&gt;
&lt;li&gt;On the &lt;code&gt;Egress Credentials&lt;/code&gt; tab, add in the service credentials for the VPN&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Portainer</title>
      <link>https://new.cloud.nobodyhome.dev/posts/portainer/</link>
      <pubDate>Fri, 20 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/portainer/</guid>
      <description>&lt;h3 id=&#34;description&#34;&gt;Description&lt;/h3&gt;
&lt;p&gt;Portainer is a web-based Docker management interface that allows users to easily manage their Docker containers, networks, and volumes. It provides a simple and intuitive way to view and interact with your Docker environment.&lt;/p&gt;
&lt;h3 id=&#34;installation&#34;&gt;Installation&lt;/h3&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://new.cloud.nobodyhome.dev/posts/install-docker/&#34;&gt;Install Docker&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Create the Portainer server database:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker volume create portainer_data
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Download and install Portainer-CE&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h4 id=&#34;things-ive-learned&#34;&gt;Things I&amp;rsquo;ve Learned&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;To update the container&amp;rsquo;s name in the yaml file, use the &lt;code&gt;container_name:&lt;/code&gt; variable&lt;/li&gt;
&lt;li&gt;If a stack is unable to be deleted, it&amp;rsquo;s likely because the &lt;code&gt;/var/lib/docker/volumes/portiner_data/_data/compose&lt;/code&gt; file is missing. You&amp;rsquo;ll have to recreate that numbered file and a docker-compose.yml in the directory in order to delete the stack.&lt;/li&gt;
&lt;li&gt;After Setup remove the 8000 port bind&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -d -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;see-also&#34;&gt;See also:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Setup automatic updates with [[Watchtower]] or [[Shepherd]].&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;references&#34;&gt;References&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.portainer.io/start/install-ce/server/docker/linux&#34;&gt;Portainer-CE&lt;/a&gt;
&lt;a href=&#34;https://forums.docker.com/t/custom-container-name-for-docker-compose/48089/2&#34;&gt;Container Names&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shepherd</title>
      <link>https://new.cloud.nobodyhome.dev/posts/shepherd/</link>
      <pubDate>Sat, 06 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/shepherd/</guid>
      <description>&lt;h4 id=&#34;references&#34;&gt;References:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/containrrr/shepherd/tree/master/examples&#34;&gt;Shepherd Docker Compose Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/containrrr/shepherd&#34;&gt;Shepherd Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hub.docker.com/r/containrrr/shepherd&#34;&gt;Shepherd on hub.docker.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;about&#34;&gt;About&lt;/h4&gt;
&lt;p&gt;Shepherd is a Docker swarm service for automatically updating your services whenever their base image is refreshed.&lt;/p&gt;
&lt;h4 id=&#34;variables&#34;&gt;Variables&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Default check time is every 5 minutes. Change this with the &lt;code&gt;SLEEP_TIME&lt;/code&gt; variable.&lt;/li&gt;
&lt;li&gt;Control which services aren&amp;rsquo;t updated with the &lt;code&gt;IGNORELIST_SERVICES&lt;/code&gt; variable. Ignored services should be in a space separated list of service names.&lt;/li&gt;
&lt;li&gt;As an alternative to ignore, use &lt;code&gt;FILTER_SERVICES&lt;/code&gt; to specify which services you want updated.&lt;/li&gt;
&lt;li&gt;Notifications can be enabled through the &lt;a href=&#34;https://github.com/djmaze/apprise-microservice&#34;&gt;appraise micro service&lt;/a&gt; and the &lt;code&gt;APPRISE_SIDECAR_URL&lt;/code&gt; variable.&lt;/li&gt;
&lt;li&gt;Set the timezone with the &lt;code&gt;TZ&lt;/code&gt; variable. Note, do not include quotations for the timezone.&lt;/li&gt;
&lt;li&gt;Clean up old services with &lt;code&gt;IMAGE_AUTOCLEAN_LIMIT&lt;/code&gt;, the variable set keeps that number of old images.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;setup&#34;&gt;Setup:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Docker Compose&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;version: &amp;#34;3&amp;#34;

services:
  app:
    image: containrrr/shepherd
    environment:
      APPRISE_SIDECAR_URL: notify:5000
      TZ: Pacific/Honolulu
      IMAGE_AUTOCLEAN_LIMIT: 2
      SLEEP_TIME: &amp;#39;360m&amp;#39;
      FILTER_SERVICES: &amp;#34;label=shepherd.autodeploy&amp;#34;
      VERBOSE: &amp;#39;true&amp;#39;
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - notification
    deploy:
      placement:
        constraints:
          - node.role == manager

  notify:
    image: mazzolino/apprise-microservice:latest
    environment:
      NOTIFICATION_URLS: discord:[add your URL here]
    networks:
      - notification

networks:
  notification:
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Docker Run&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker service create --name shepherd --constraint &amp;#34;node.role==manager&amp;#34; --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock,ro containrrr/shepherd
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;notes&#34;&gt;Notes:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Notifications runs through the &lt;a href=&#34;https://github.com/djmaze/apprise-microservice/tree/master&#34;&gt;apprise microservice&lt;/a&gt; which runs on &lt;a href=&#34;https://github.com/caronc/apprise&#34;&gt;Apprise&lt;/a&gt;. The format for discord notifications is: &lt;code&gt;discord://webhook_id/webhook_token&lt;/code&gt; or &lt;code&gt;discord://avatar@webhook_id/webhook_token&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Watchtower</title>
      <link>https://new.cloud.nobodyhome.dev/posts/watchtower/</link>
      <pubDate>Sat, 06 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/watchtower/</guid>
      <description>&lt;h4 id=&#34;references&#34;&gt;References&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://containrrr.dev/watchtower/&#34;&gt;Watchtower Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://containrrr.dev/watchtower/notifications/&#34;&gt;Watchtower Notifications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.smarthomebeginner.com/watchtower-docker-compose-2024/&#34;&gt;Watchtower Configuration - smarthomebeginner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/containrrr/watchtower/blob/main/docker-compose.yml&#34;&gt;Watchtower Docker Compose Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://containrrr.dev/watchtower/arguments/&#34;&gt;All Arguments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/r/selfhosted/comments/18kzbie/watchtower_notifications_via_shoutrrr_howto/&#34;&gt;A Good Reddit Thread&lt;/a&gt;\&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://linuxiac.com/watchtower-automatically-update-docker-container-images/&#34;&gt;A Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;setup&#34;&gt;Setup&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Docker Compose:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;version: &amp;#34;3&amp;#34;
services:
  watchtower:
    image: nickfedor/watchtower
    container_name: watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
#      - WATCHTOWER_LABEL_ENABLE=true 
      - WATCHTOWER_NOTIFICATIONS=shoutrrr
      - WATCHTOWER_NOTIFICATION_URL=discord:[add discord url]
      - WATCHTOWER_POLL_INTERVAL=21600
      - WATCHTOWER_CLEANUP=true
#    labels:
#      - &amp;#34;com.centurylinklabs.watchtower.enable=true&amp;#34;
    command: homepage portainer
    hostname: watchtower
    restart: unless-stopped
    deploy: 
      mode: global
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Docker Run:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -d --name watchtower --volume /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower [NAMES OF THE CONTAINERS TO UPDATE]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;notes&#34;&gt;Notes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Watchtower does not work with docker swarms, for that use case see &lt;a href=&#34;https://new.cloud.nobodyhome.dev/posts/shepherd/&#34;&gt;Shepherd&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Cloudflare Tunnel</title>
      <link>https://new.cloud.nobodyhome.dev/posts/cloudflare-service/</link>
      <pubDate>Thu, 04 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/cloudflare-service/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;250&#34; loading=&#34;lazy&#34; src=&#34;https://upload.wikimedia.org/wikipedia/commons/4/4b/Cloudflare_Logo.svg&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;links&#34;&gt;Links&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://dash.cloudflare.com/&#34;&gt;dash.cloudflare.com&lt;/a&gt;
&lt;a href=&#34;https://one.dash.cloudflare.com&#34;&gt;one.dash.cloudflare.com&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;installing-the-service&#34;&gt;Installing the service&lt;/h3&gt;
&lt;h5 id=&#34;ubuntu&#34;&gt;Ubuntu&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb &amp;amp;&amp;amp; 

sudo dpkg -i cloudflared.deb &amp;amp;&amp;amp; 

sudo cloudflared service install [TUNNEL KEY]
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;red-hat&#34;&gt;Red Hat&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -L --output cloudflared.rpm https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm &amp;amp;&amp;amp; 

sudo yum localinstall -y cloudflared.rpm &amp;amp;&amp;amp; 

sudo cloudflared service install [TUNNEL KEY]
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;docker&#34;&gt;Docker&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token [TUNNEL KEY]
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;docker-compose&#34;&gt;Docker Compose&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;version: &amp;#34;3.8&amp;#34;

services:
  cloudflared:
    image: cloudflare/cloudflared:latest
    restart: unless-stopped
    command: tunnel run
    network_mode: host
    environment:
      - &amp;#34;TUNNEL_TOKEN=[TUNNEL KEY]&amp;#34;
    deploy:
      mode: global
      placement:
        constraints: [node.platform.os == linux]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;cloudflare-as-a-docker-sidecar&#34;&gt;Cloudflare as a Docker Sidecar&lt;/h4&gt;
&lt;p&gt;Cloudflare can serve ports from other docker containers without actually exposing the container ports on the host device. See the compose example below:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ollama Service</title>
      <link>https://new.cloud.nobodyhome.dev/posts/ollama-service/</link>
      <pubDate>Wed, 03 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/ollama-service/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;llama|75&#34; loading=&#34;lazy&#34; src=&#34;https://ollama.com/public/ollama.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;references&#34;&gt;References&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://ollama.com/download&#34;&gt;Ollama.com&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;installation&#34;&gt;Installation&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -fsSL https://ollama.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;useful-commands&#34;&gt;Useful Commands&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo usermod -aG ollama $USER 
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ollama pull llama3 llama2-uncensored godegemma gemma dolphin-mistral
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;service-configuration&#34;&gt;Service Configuration&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment=&amp;#34;PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin&amp;#34;
Environment=&amp;#34;OLLAMA_HOST=0.0.0.0&amp;#34;

[Install]
WantedBy=default.target
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;useful-plugins&#34;&gt;Useful Plugins&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Obsidian: local gpt&lt;/li&gt;
&lt;li&gt;Openweb-UI&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;misc-information&#34;&gt;Misc Information&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Service runs on port 11433&lt;/li&gt;
&lt;li&gt;By default service only listens on local host&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Openweb-UI</title>
      <link>https://new.cloud.nobodyhome.dev/posts/openweb-ui/</link>
      <pubDate>Wed, 03 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/openweb-ui/</guid>
      <description>&lt;h3 id=&#34;references&#34;&gt;References:&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.openwebui.com/&#34;&gt;Open WebUI&lt;/a&gt;
&lt;a href=&#34;https://docs.openwebui.com/troubleshooting/&#34;&gt;Open WebUI Troubleshooting&lt;/a&gt;
&lt;a href=&#34;https://docs.openwebui.com/tutorial/web_search/&#34;&gt;Searxng Integration&lt;/a&gt;
&lt;a href=&#34;https://github.com/open-webui/open-webui/issues/2824&#34;&gt;This is my error&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;setup&#34;&gt;Setup&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Main&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -d -p 8080:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Latest&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -d -p 8080:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:latest
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Docker Compose Yaml&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;version: &amp;#34;3&amp;#34;
services:
	open-webui:
		image: ghcr.io/open-webui/open-webui:latest
		container_name: open-webui
		volumes:
			- /home/mechanicus/open-webui:/app/backend/data
		restart: unless-stopped
		port:
			- &amp;#34;8080:8080&amp;#34;
		extra_hosts:
			- &amp;#34;host.docker.internal:host-gateway&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;updates&#34;&gt;Updates&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Pull the new image (make sure you pick main or latest based on your install)&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker pull ghcr.io/open-webui/open-webui:latest
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Remove the old container&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker rm --force open-webui
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Start the new container by rerunning the setup command&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -d -p 8080:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:latest
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;(Optional) Let [[Watchtower]] Do it&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -d --name watchtower --volume /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower open-webui
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Resetting the admin password on a local instance - generate a new password hash&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;htpasswd -bnBC 10 &amp;#34;&amp;#34; your-new-password | tr -d &amp;#39;:\n&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Change the password using a new docker container - replace HASH with the new password hash you just generated.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run --rm -v open-webui:/data alpine/socat EXEC:&amp;#34;bash -c &amp;#39;apk add sqlite &amp;amp;&amp;amp; echo UPDATE auth SET password=&amp;#39;\&amp;#39;&amp;#39;HASH&amp;#39;\&amp;#39;&amp;#39; WHERE email=&amp;#39;\&amp;#39;&amp;#39;admin@example.com&amp;#39;\&amp;#39;&amp;#39;; | sqlite3 /data/webui.db&amp;#39;&amp;#34;, STDIO
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Data needs to be directly in the base folder for a mapped volume (Docker volumes use  &lt;code&gt;_data&lt;/code&gt; within a volume folder).&lt;/li&gt;
&lt;li&gt;[[Searxng]] needs the following changes to &lt;code&gt;searxng/settings.yml&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;search:
	safe_search: 0
	autocomplete: &amp;#34;&amp;#34;
	default_lang: &amp;#34;&amp;#34;
	formats:
		- html
		- json
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
  </channel>
</rss>
