{
  "path": "/3mabhndm2bk2h",
  "site": "at://did:plc:l37td5yhxl2irrzrgvei4qay/site.standard.publication/3m2mxdedwoc2m",
  "tags": [
    "Docker",
    "Tailscale",
    "Cloudflare",
    "FireFox"
  ],
  "$type": "site.standard.document",
  "title": "Firefox in Chrome - How I use Firefox with Docker to bypass school restrictions ",
  "content": {
    "$type": "pub.leaflet.content",
    "pages": [
      {
        "id": "019a7ead-67d8-7aa5-9a8c-720002365a85",
        "$type": "pub.leaflet.pages.linearDocument",
        "blocks": [
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "Background"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "I know nothing about docker, proxies, and how to \"kill\" chrome extensions used by your school to restrict access to sites."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 72,
                    "byteStart": 66
                  },
                  "features": [
                    {
                      "uri": "https://www.zimaspace.com/zimaos",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 252,
                    "byteStart": 203
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                }
              ],
              "plaintext": "This is just something I found out about when playing around with ZimaOS, and I'm glad I did. It's easy, fast, and you can even add authentication, so nosey kids at school can't use the browser. Because this is just a VM of Firefox on your home network."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 90,
                    "byteStart": 70
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                }
              ],
              "plaintext": "And you can set it up in minutes using Docker Compose and Cloudflared (cloudflare tunnels) or Tailscale to public expose it safely."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "Why?"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 27,
                    "byteStart": 14
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                }
              ],
              "plaintext": "Short answer: Because I can."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 87,
                    "byteStart": 69
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 274,
                    "byteStart": 262
                  },
                  "features": [
                    {
                      "uri": "https://madebydanny.uk/followonbsky.html?did=tangled.org",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 307,
                    "byteStart": 275
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 347,
                    "byteStart": 336
                  },
                  "features": [
                    {
                      "uri": "https://madebydanny.uk/followonbsky.html?did=wisp.place",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "Long answer: Because the so-called \"laptops\" my school gives out are (to put it nicely) horrible, they suck. They can't handle more than 5 tabs and are so slow it takes over 1 minute to restart, in that amount of time I can open VS Code, edit files, git push to @tangled.org (git pushes on tangled are slow) and update my website using @wisp.place on my Mac. So why not use the power of your home PC at school?"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.horizontalRule"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "Setup"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 17,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 117,
                    "byteStart": 49
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                }
              ],
              "plaintext": "Before installing for the best experience please use a domain that you own that's managed by the Cloudflare Registrar, this way we can set up a Cloudflare tunnel to public expose the docker container safely. "
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.unorderedList",
              "children": [
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 103,
                          "byteStart": 51
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#bold"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 166,
                          "byteStart": 104
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#italic"
                          }
                        ]
                      }
                    ],
                    "plaintext": "A computer running Linux, preferably Debian based, based on my experience, Ubuntu Server works the best (Mac and Windows works, but for the best experience use Linux) with support for Docker and Docker Compose."
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 63,
                          "byteStart": 30
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#italic"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 144,
                          "byteStart": 100
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#italic"
                          }
                        ]
                      }
                    ],
                    "plaintext": "8GB of RAM, 32 GB of Storage (NVME SSD for the best experience), and a 2+ Core x86 Intel or AMD CPU (use a \"modern\" CPU for the best experience)."
                  },
                  "children": []
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.horizontalRule"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 78,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 123,
                    "byteStart": 99
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                }
              ],
              "plaintext": "If you have a Domain that's not managed using Cloudflare you can use Tailscale which will give you a free public IP address, you don't even need to set up an exit node."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Learn more about Tailscale:"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "src": "https://blog.madebydanny.uk/3m2wkvtopys2t",
              "$type": "pub.leaflet.blocks.website",
              "title": "Notes - installing Tailscale on a Raspberry Pi - Daniel's Notes & Thoughts",
              "description": "You provide the hardware, they provide the software and infrastructure, easy as that"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "src": "https://tailscale.com/",
              "$type": "pub.leaflet.blocks.website",
              "title": "Tailscale · Best VPN Service for Secure Networks",
              "description": "Securely connect to anything on the internet with Tailscale. Deploy a WireGuard®-based VPN to achieve point-to-point connectivity that enforces least privilege."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.horizontalRule"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 13,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                }
              ],
              "plaintext": "Terminal Tips:"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.unorderedList",
              "children": [
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 67,
                          "byteStart": 61
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#highlight"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 84,
                          "byteStart": 72
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#highlight"
                          }
                        ]
                      }
                    ],
                    "plaintext": "When pasting from your clipboard into the terminal don't use CTRL+V use CTRL+SHIFT+V. "
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 23,
                          "byteStart": 21
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#highlight"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 38,
                          "byteStart": 28
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#italic"
                          }
                        ]
                      }
                    ],
                    "plaintext": "You can also use the UP key (up arrow)which will recall the previous command from your terminal's history."
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 18,
                          "byteStart": 12
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#highlight"
                          }
                        ]
                      }
                    ],
                    "plaintext": "You can use CTRL+C to cancel/force stop what the terminal is currently doing."
                  },
                  "children": []
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 1,
              "facets": [],
              "plaintext": "1 - Docker Setup"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "1A - Update your system"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Update package list and install updates"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "sudo apt update && sudo apt upgrade -y",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 4,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 13,
                    "byteStart": 9
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 28,
                    "byteStart": 14
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                }
              ],
              "plaintext": "TIP: Use sudo (superuser do) when running commands as admin in the terminal "
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "1B - Install docker"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "This installs Docker to your system"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "sudo apt install docker.io -y",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 5,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 9,
                    "byteStart": 5
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 11,
                    "byteStart": 9
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    },
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 84,
                    "byteStart": 11
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                }
              ],
              "plaintext": "TIP: Add -y at the end of a command to run it without needing to enter your password"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "1C - Install Docker install"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "This installs Docker Compose to your system"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "sudo apt install docker-compose -y",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "1D - Add your user to the docker group"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 66,
                    "byteStart": 62
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                }
              ],
              "plaintext": "This allows you to run Docker Commands without needing to add sudo at the start of the command"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "sudo usermod -aG docker $USER",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "1E - Apply the group change"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "newgrp docker",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "1F - Start Docker"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "sudo systemctl start docker",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "1G - Tell Docker to start on boot"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "This tells your system to start Docker after the system turns on"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "sudo systemctl enable docker",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "1H - Check to see if Docker is running"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "sudo systemctl status docker",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 1,
              "facets": [],
              "plaintext": "2 - Create Container Directory"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 44,
                    "byteStart": 20
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                }
              ],
              "plaintext": "Create the directly (folder in simple terms) for the Docker Container and Docker config file."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "2A - Create Directory "
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "mkdir ~/firefox-docker",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 5,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 10,
                    "byteStart": 5
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    },
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 57,
                    "byteStart": 10
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 59,
                    "byteStart": 57
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    },
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 69,
                    "byteStart": 59
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                }
              ],
              "plaintext": "TIP: mkdir sands for Make Directory and can be run using md for short"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "2B - Navigate to the container's directory"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "cd ~/firefox-docker",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 5,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 7,
                    "byteStart": 5
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    },
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 69,
                    "byteStart": 7
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                }
              ],
              "plaintext": "TIP: cd stands for Change Directory and is used to enter a directory (a folder)"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "2C - Make sure you're in the right directory"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "pwd",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 5,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 8,
                    "byteStart": 5
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    },
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 20,
                    "byteStart": 8
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                }
              ],
              "plaintext": "TIP: pwd stands for Print Working Directory and is used to tell the user what directory they're currently in"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 1,
              "facets": [],
              "plaintext": "3 - Get system information"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 74,
                    "byteStart": 48
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                }
              ],
              "plaintext": "This information will be needed in the feature, make sure to write it down"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "3A - Get User and Group ID"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "This will get your PUID (user id) and PGID (group) ID."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "id",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "3B - Get timezone"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "timedatectl",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 1,
              "facets": [],
              "plaintext": "4 - Create the Docker config file"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Make the docker-compose.yml file that tells Docker what image to pull, ports to use, Environment variables, Dependencies, and more."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "4D - Create the docker config file"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 45,
                    "byteStart": 31
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 71,
                    "byteStart": 68
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 108,
                    "byteStart": 94
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 132,
                    "byteStart": 113
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                }
              ],
              "plaintext": "Check If you're already in the firefox-docker directory, by running pwd. If the output is not firefox-docker run cd ~/firefox-docker."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "nano docker-compose.yml",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 5,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 9,
                    "byteStart": 5
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    },
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 161,
                    "byteStart": 9
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                }
              ],
              "plaintext": "TIP: nano is a simple text editor that runs entirely in the current terminal session, very useful when editing config files without needing to leave the terminal"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "Edit config file"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Once in the nano editor, paste the following"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "version: '3.8'\n\nservices:\n  firefox:\n    image: lscr.io/linuxserver/firefox:latest\n    container_name: firefox\n    environment:\n      - PUID=1000                    # Change to your user ID\n      - PGID=1000                    # Change to your group ID\n      - TZ=America/New_York          # Change to your timezone\n      - CUSTOM_USER=myuser           # Optional: set login username\n      - PASSWORD=mypassword          # Optional: set login password\n    volumes:\n      - ./config:/config             # Stores Firefox data persistently\n    ports:\n      - 6543:3000                    # External:Internal port mapping\n    shm_size: \"4gb\"                  # Shared memory for browser stability\n    restart: always                  # Always restart container\n    security_opt:\n      - seccomp:unconfined           # Better performance",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.unorderedList",
              "children": [
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 24,
                          "byteStart": 20
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#highlight"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 33,
                          "byteStart": 29
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#highlight"
                          }
                        ]
                      }
                    ],
                    "plaintext": "Change the value of PUID and PGID with your PUID and PGID IDs you got in step 3A"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 22,
                          "byteStart": 20
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#highlight"
                          }
                        ]
                      }
                    ],
                    "plaintext": "Change the value of TZ with your timezone you got in step 3B"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 31,
                          "byteStart": 20
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#highlight"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 44,
                          "byteStart": 36
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#highlight"
                          }
                        ]
                      }
                    ],
                    "plaintext": "Change the value of CUSTOM_USER and PASSWORD to the username and password you want to use when accessing the browser. This is not required, meaning anyone with the link can use it. But it's highly recommended."
                  },
                  "children": []
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 61,
                    "byteStart": 57
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 88,
                    "byteStart": 62
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 92,
                    "byteStart": 88
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    },
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                }
              ],
              "plaintext": "If you want to change the port the container is on, edit 6543 do not mess with the port 3000."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 55,
                    "byteStart": 49
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 63,
                    "byteStart": 62
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 75,
                    "byteStart": 70
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                }
              ],
              "plaintext": "Once you're done editing your config file, press CTRL+X, then Y, then ENTER."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 1,
              "facets": [],
              "plaintext": "Start the Container"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "Pull linuxserver/firefox:latest "
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "docker-compose pull",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 5,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 58,
                    "byteStart": 5
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 62,
                    "byteStart": 58
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    },
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                }
              ],
              "plaintext": "TIP: If you get an error about running as root, run using sudo"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "Start the container"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "docker-compose up -d",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 1,
              "facets": [],
              "plaintext": "Check if it's running"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "docker-compose ps",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 3,
              "facets": [],
              "plaintext": "or use "
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "docker ps",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 1,
              "facets": [],
              "plaintext": "Accessing your Firefox Container"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Now that your Firefox container is running, you probably want to use it... right? First, we need to find our local IP Address."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "Find your IP Address"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "hostname -I",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "or"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "ip addr show",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "or"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "plaintext": "ifconfig",
              "syntaxHighlightingTheme": "gruvbox-dark-hard"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 59,
                    "byteStart": 49
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 72,
                    "byteStart": 63
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 140,
                    "byteStart": 125
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 160,
                    "byteStart": 150
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 190,
                    "byteStart": 186
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    }
                  ]
                }
              ],
              "plaintext": "Your IP Address should look something like this, 10.0.0.145 or 192.0.2.1. Once you find your local IP Address, you can visit 10.0.0.145:6543. Replace 10.0.0.145 with your IP Address and 6543 with the port you set. But as of now you can only access this on your home network, but you want to be able to access it anywhere."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "I highly recommend using a Cloudflare Tunnel, if you don't have a Domain that's managed by the Cloudflare Registrar you can use the public IPV4 address given by Tailscale to access it."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.horizontalRule"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 48,
                    "byteStart": 39
                  },
                  "features": [
                    {
                      "did": "did:plc:4hawmtgzjx3vclfyphbhfn7v",
                      "$type": "pub.leaflet.richtext.facet#didMention"
                    }
                  ]
                }
              ],
              "plaintext": "If you want more types of these posts, @j4ck.xyz  did a leaflet on how he uses Tailscale to bypass school restrictions"
            }
          }
        ]
      }
    ]
  },
  "bskyPostRef": {
    "cid": "bafyreig2gyz7atzz3unvzs5a3bwkz3n5ohblm2djqd37tv7lexixtsv5iu",
    "uri": "at://did:plc:l37td5yhxl2irrzrgvei4qay/app.bsky.feed.post/3mabhnostps2h",
    "commit": {
      "cid": "bafyreifbdprlnfizlxt25rdpg5lpt6yr4t6pa37su6vfwi47cbd4tnkg4u",
      "rev": "3mabhnovmll2g"
    },
    "validationStatus": "valid"
  },
  "description": "Yes, you read that correctly, Firefox in Chrome all from a server in your house for free",
  "publishedAt": "2025-12-18T15:13:18.582Z"
}