<?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>Web on Nobody&#39;s Home</title>
    <link>https://new.cloud.nobodyhome.dev/tags/web/</link>
    <description>Recent content in Web on Nobody&#39;s Home</description>
    <generator>Hugo -- 0.154.5</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 11 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://new.cloud.nobodyhome.dev/tags/web/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Named Tor Site</title>
      <link>https://new.cloud.nobodyhome.dev/posts/named-tor-site/</link>
      <pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/named-tor-site/</guid>
      <description>&lt;h3 id=&#34;whats-the-point-of-this&#34;&gt;What&amp;rsquo;s the Point of This?&lt;/h3&gt;
&lt;p&gt;Recently, schools across the US were hit by a breach of the education software Canvas by the ShinyHunters. The group&amp;rsquo;s ransom note included an interesting .onion url:
&lt;img alt=&#34;ransom note&#34; loading=&#34;lazy&#34; src=&#34;https://new.cloud.nobodyhome.dev/assets/named_tor_site/note.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;Normally a .onion address is randomly generated characters with no meaning. The site&amp;rsquo;s name being tied to the keys generated when the node joins the network. However, ShinyHunters and the CIA have been able to generate custom TOR keys to at least get a partially human readable url.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo Static Site Generator</title>
      <link>https://new.cloud.nobodyhome.dev/posts/hugo/</link>
      <pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/hugo/</guid>
      <description>&lt;h2 id=&#34;hugo-site-example&#34;&gt;Hugo Site Example:&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;nobodyhome&#34; loading=&#34;lazy&#34; src=&#34;https://new.cloud.nobodyhome.dev/assets/hugo/nobodyhome.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This guide is not all inclusive. &lt;a href=&#34;https://gohugo.io/getting-started/quick-start/&#34;&gt;RTFM&lt;/a&gt;. Hugo is a static site generator, converting your .md text files, and a chosen theme into a modern looking website (like this one). There are a staggering number of &lt;a href=&#34;https://themes.gohugo.io/&#34;&gt;themes&lt;/a&gt; to give you the look and feel that your site needs.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;themes&#34; loading=&#34;lazy&#34; src=&#34;https://new.cloud.nobodyhome.dev/assets/hugo/hugo_themes.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;everything-up-front&#34;&gt;Everything Up Front&lt;/h2&gt;
&lt;p&gt;It all starts with the &lt;code&gt;hugo.yaml&lt;/code&gt; file (you can use .toml too, but that&amp;rsquo;s beyond my expertise, consult the hugo &lt;a href=&#34;https://gohugo.io/documentation/&#34;&gt;documentation&lt;/a&gt;). Here is the configuration for this site:&lt;/p&gt;</description>
    </item>
    <item>
      <title>AdGuardHome</title>
      <link>https://new.cloud.nobodyhome.dev/posts/adguardhome/</link>
      <pubDate>Sat, 14 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/adguardhome/</guid>
      <description>&lt;h4 id=&#34;references&#34;&gt;References&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://adguard-dns.io/kb/adguard-home/getting-started/&#34;&gt;AdGuardHome&lt;/a&gt;
&lt;a href=&#34;https://github.com/AdguardTeam/AdGuardHome/releases/tag/v0.107.73&#34;&gt;Download AdGuardHome&lt;/a&gt;
&lt;a href=&#34;https://adguard-dns.io/kb/adguard-home/faq/&#34;&gt;Fix systemd-resolved&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;why-adguardhome&#34;&gt;Why AdGuardHome?&lt;/h4&gt;
&lt;p&gt;AdGuard has become a key service in my homelab. I&amp;rsquo;m so used to having ads blocked across my network, it&amp;rsquo;s a surprise loading a site away from home and seeing the broken hellscape of ads everywhere. Get a network level adblocker and learn how to use it. The less tech savvy folks in your home will thank you.&lt;/p&gt;
&lt;h4 id=&#34;installation&#34;&gt;Installation&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/AdguardTeam/AdGuardHome/releases/tag/v0.107.73&#34;&gt;Download&lt;/a&gt; the latest version of AdGuardHome&lt;/li&gt;
&lt;li&gt;Extract using &lt;code&gt;tar -xf AdGuardHome_linux_amd64.tar.gz&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Move the folder to the  destination: &lt;code&gt;mv AdGuardHome [DESTINATION]&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fedora&lt;/strong&gt;: &lt;code&gt;/usr/local/bin/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ubuntu&lt;/strong&gt;: &lt;code&gt;/opt/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Install using &lt;code&gt;sudo ./AdGuardHome -s install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Set up your account at &lt;code&gt;http://ADGUARD-SERVER:3000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Set your router&amp;rsquo;s DNS server to point at your AdGuardHome server (steps will vary by router)
&lt;img alt=&#34;dns settings&#34; loading=&#34;lazy&#34; src=&#34;https://new.cloud.nobodyhome.dev/assets/adguardhome/dns_settings.png&#34;&gt;&lt;/li&gt;
&lt;li&gt;Set your AdGuard
&lt;ul&gt;
&lt;li&gt;Block Lists
&lt;img alt=&#34;dns blocklists&#34; loading=&#34;lazy&#34; src=&#34;https://new.cloud.nobodyhome.dev/assets/adguardhome/dns_blocklists.png&#34;&gt;&lt;/li&gt;
&lt;li&gt;Upstream Providers
&lt;img alt=&#34;dns providers&#34; loading=&#34;lazy&#34; src=&#34;https://new.cloud.nobodyhome.dev/assets/adguardhome/dns_providers.png&#34;&gt;&lt;/li&gt;
&lt;li&gt;DNS Rewrites&lt;/li&gt;
&lt;li&gt;Allow Lists&lt;/li&gt;
&lt;li&gt;Custom Rules
&lt;img alt=&#34;dns custom rules&#34; loading=&#34;lazy&#34; src=&#34;https://new.cloud.nobodyhome.dev/assets/adgaurdhome/dns_custom_rules.png&#34;&gt;&lt;/li&gt;
&lt;li&gt;Back up you AdGuardHome.yaml&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id=&#34;deploy-with-docker-compose&#34;&gt;Deploy with Docker Compose:&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;services:
  adguardhome:
    image: adguard/adguardhome
    container_name: adguardhome
    volumes:
	    #place AdGuardHome.yaml here if you already have a configured instance
      - [map to your /conf directory]:/opt/adguardhome/conf 
      - [map to your /work directory]:/opt/adguardhome/work
    deploy: 
      mode: global
    ports:
      - &amp;#34;53:53/udp&amp;#34;  # &amp;lt;Host Port&amp;gt;:&amp;lt;Container Port&amp;gt;
      - &amp;#34;53:53/tcp&amp;#34;
      - &amp;#34;67:67/udp&amp;#34;
#      - &amp;#34;68:68/udp&amp;#34;
      - &amp;#34;80:80/tcp&amp;#34;
      - &amp;#34;443:443/tcp&amp;#34;
      - &amp;#34;443:443/udp&amp;#34;
      - &amp;#34;3000:3000/tcp&amp;#34;
      - &amp;#34;853:853/tcp&amp;#34;
      - &amp;#34;853:853/udp&amp;#34;
      - &amp;#34;8853:8853/udp&amp;#34;
      - &amp;#34;784:784/udp&amp;#34;
      - &amp;#34;5443:5443/tcp&amp;#34;
      - &amp;#34;5443:5443/udp&amp;#34;
    restart: unless-stopped
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;/h4&gt;
&lt;h5 id=&#34;systemd-resolved&#34;&gt;Systemd-Resolved&lt;/h5&gt;
&lt;p&gt;Reference: &lt;a href=&#34;https://adguard-dns.io/kb/adguard-home/faq/&#34;&gt;Fix systemd-resolved&lt;/a&gt;
Us these steps when systemd is using port 53:&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>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>
  </channel>
</rss>
