3:I[7614,[],""] 5:I[5920,[],""] 6:I[6303,["791","static/chunks/08ffd5a1-ac4a8e9bc792a552.js","252","static/chunks/252-6dd2865078747f47.js","311","static/chunks/311-9b0fb8f6606a5ec3.js","59","static/chunks/59-f2e35b2f047fff99.js","67","static/chunks/67-5ce274445058c831.js","917","static/chunks/917-1a14ae2ccd7a4494.js","185","static/chunks/app/layout-610217646f0fe571.js"],"ThemeProvider"] 7:I[9187,["791","static/chunks/08ffd5a1-ac4a8e9bc792a552.js","252","static/chunks/252-6dd2865078747f47.js","311","static/chunks/311-9b0fb8f6606a5ec3.js","59","static/chunks/59-f2e35b2f047fff99.js","67","static/chunks/67-5ce274445058c831.js","917","static/chunks/917-1a14ae2ccd7a4494.js","185","static/chunks/app/layout-610217646f0fe571.js"],"NavigationBar"] 8:I[5007,["791","static/chunks/08ffd5a1-ac4a8e9bc792a552.js","252","static/chunks/252-6dd2865078747f47.js","311","static/chunks/311-9b0fb8f6606a5ec3.js","59","static/chunks/59-f2e35b2f047fff99.js","67","static/chunks/67-5ce274445058c831.js","917","static/chunks/917-1a14ae2ccd7a4494.js","185","static/chunks/app/layout-610217646f0fe571.js"],"FramerOverlay"] 9:I[9552,["252","static/chunks/252-6dd2865078747f47.js","160","static/chunks/app/not-found-e7a7ad017fe6ee24.js"],"GoBackButton"] a:I[5880,["791","static/chunks/08ffd5a1-ac4a8e9bc792a552.js","252","static/chunks/252-6dd2865078747f47.js","311","static/chunks/311-9b0fb8f6606a5ec3.js","59","static/chunks/59-f2e35b2f047fff99.js","67","static/chunks/67-5ce274445058c831.js","917","static/chunks/917-1a14ae2ccd7a4494.js","185","static/chunks/app/layout-610217646f0fe571.js"],"Toaster"] 4:["id","unraid-tailscale-proxy","d"] 0:["1EQ7X-lyHl912n0bbj9rb",[[["",{"children":["posts",{"children":[["id","unraid-tailscale-proxy","d"],{"children":["__PAGE__?{\"id\":\"unraid-tailscale-proxy\"}",{}]}]}]},"$undefined","$undefined",true],["",{"children":["posts",{"children":[["id","unraid-tailscale-proxy","d"],{"children":["__PAGE__",{},[["$L1","$L2",null],null],null]},[null,["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","posts","children","$4","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[null,["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","posts","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/8d85e77d78283910.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__className_c1e5c9 h-full scroll-smooth antialiased pl-[calc(100vw-100%)]","children":["$","$L6",null,{"attribute":"class","defaultTheme":"dark","children":[["$","$L7",null,{}],["$","div",null,{"children":["$","$L8",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":["$","div",null,{"className":"flex items-center justify-center h-screen","children":["$","div",null,{"className":"text-center text-foreground","children":["$","div",null,{"className":"max-w-lg space-y-4 flex flex-col","children":[["$","h1",null,{"className":"text-7xl font-bold","children":"404"}],["$","p",null,{"className":"text-lg","children":"The page you're looking for doesn't exist or has been moved elsewhere."}],["$","div",null,{"className":"flex justify-center","children":["$","$L9",null,{}]}]]}]}]}],"notFoundStyles":[]}]}]}],["$","$La",null,{}],["$","div",null,{"className":"fixed top-[-10px] z-40 h-10 w-screen bg-background opacity-70 blur backdrop-blur-lg ","aria-hidden":true}],["$","div",null,{"className":"fixed bottom-[-10px] z-40 h-10 w-screen bg-background opacity-70 blur backdrop-blur-lg","aria-hidden":true}]]}]}]}]],null],null],["$Lb",null]]]] c:I[3996,["252","static/chunks/252-6dd2865078747f47.js","900","static/chunks/900-83c6fd9c30ca5de6.js","59","static/chunks/59-f2e35b2f047fff99.js","722","static/chunks/app/posts/%5Bid%5D/page-7432072a73c167d0.js"],""] 2:["$","div",null,{"className":"min-h-screen max-w-xl mx-auto flex items-center justify-center","children":["$","div",null,{"className":"py-24 px-6 text-sm","children":[["$","div",null,{"className":"flex flex-col space-y-8","children":[["$","div",null,{"className":"flex flex-row space-x-2 items-center justify-between group","children":[["$","span",null,{"className":"text-neutral-500","children":["$","$Lc",null,{"href":"/","className":"text-foreground group-hover:text-muted-foreground/50 transition-colors duration-150 hover:cursor-pointer","children":"Go Back"}]}],["$","div",null,{"className":"flex-grow border-t border-dotted border-gray-400"}],["$","span",null,{"className":"text-muted-foreground","children":"16 September 2024"}]]}],["$","div",null,{"className":"flex flex-col space-y-2","children":["$","h1",null,{"className":"text-foreground text-2xl font-semibold","children":"The only proxy you'll ever need"}]}]]}],["$","section",null,{"className":"flex flex-col space-y-2 mt-8 max-w-xl","children":"$Ld"}]]}]}] b:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"The only proxy you'll ever need • dromzeh.dev"}],["$","meta","3",{"name":"description","content":"How I set up Unraid, swag, Tailscale & Cloudflare to create a secure connection to my services."}],["$","link","4",{"rel":"icon","href":"/favicon.ico","type":"image/x-icon","sizes":"16x16"}]] 1:null e:I[7952,["252","static/chunks/252-6dd2865078747f47.js","900","static/chunks/900-83c6fd9c30ca5de6.js","59","static/chunks/59-f2e35b2f047fff99.js","722","static/chunks/app/posts/%5Bid%5D/page-7432072a73c167d0.js"],"CopyCodeToClipboard"] d:[["$","p",null,{"children":["I've been using ",["$","a",null,{"className":"text-foreground hover:text-muted-foreground/50 transition duration-150","href":"https://unraid.net","children":"Unraid"}]," for a while after switching from FreeNAS, and with that wanted an easy way to share some of my services with just friends without giving them any unwanted access to my Unraid Server or any other devices on my Tailet."]}],"\n",["$","p",null,{"children":["This is where ",["$","a",null,{"className":"text-foreground hover:text-muted-foreground/50 transition duration-150","href":"https://tailscale.com","children":"Tailscale"}]," comes in, it's a VPN service that allows you to create a secure connection between your devices without the need for port forwarding or any other complex networking setups. It's also free for personal use, which is a bonus."]}],"\n",["$","p",null,{"children":"This post entails setting up Swag with Tailscale to prevent any unwanted access to other services alongside an example service (Vaultwarden) on Unraid linked to a domain, with Cloudflare acting as the DNS provider."}],"\n",["$","h3",null,{"id":"setting-up-tailscale-on-unraid","className":"text-foreground text-lg font-semibold pt-8","children":[["$","a",null,{"className":"text-foreground hover:text-muted-foreground/50 transition duration-150","href":"#setting-up-tailscale-on-unraid","children":["$","span",null,{"className":"icon icon-link"}]}],"Setting Up Tailscale on Unraid"]}],"\n",["$","p",null,{"children":"Open the Unraid web interface and navigate to the Apps section."}],"\n",["$","p",null,{"children":"Search for and install \"Tailscale (Plugin)\", make sure it's the plugin & do not use the Docker container. Once installed, locate to Settings > Network Services > Tailscale & authenticate and log in with your Tailscale account."}],"\n",["$","h3",null,{"id":"installing-and-configuring-swag","className":"text-foreground text-lg font-semibold pt-8","children":[["$","a",null,{"className":"text-foreground hover:text-muted-foreground/50 transition duration-150","href":"#installing-and-configuring-swag","children":["$","span",null,{"className":"icon icon-link"}]}],"Installing and Configuring swag"]}],"\n",["$","p",null,{"children":"In the Apps section, search for and install \"swag\"."}],"\n",["$","p",null,{"children":["Change port ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"443"}]," to ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"1443"}]," and ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"80"}]," to ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"180"}]," to avoid conflicts. For the remainder of the settings, set the URL to your domain only. Set ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"VALIDATION"}]," to ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"dns"}]," & ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"SUBDOMAINS"}]," to ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"wildcard"}]," to let swag generate appropiate certificates for all subdomains."]}],"\n",["$","p",null,{"children":["Your ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"DNSPLUGIN"}]," should be set to ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"cloudflare"}]," and ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"EMAIL"}]," set to the email linked with your Cloudflare account. Setting ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"ONLY_SUBDOMAINS"}]," is up to you, I personally set it to ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"true"}]," as I'm not using the main domain for hosting any services."]}],"\n",["$","p",null,{"children":"Apply the changes and let the container start."}],"\n",["$","h3",null,{"id":"creating-a-custom-docker-network","className":"text-foreground text-lg font-semibold pt-8","children":[["$","a",null,{"className":"text-foreground hover:text-muted-foreground/50 transition duration-150","href":"#creating-a-custom-docker-network","children":["$","span",null,{"className":"icon icon-link"}]}],"Creating a Custom Docker Network"]}],"\n",["$","p",null,{"children":"To connect the swag container to the Tailscale network, we need to create a custom Docker network, which we'll call \"swagproxy\". This will allow the containers to communicate with each other."}],"\n",["$","div",null,{"className":"relative","children":[["$","div",null,{"className":"absolute top-0 right-0 translate-y-5 translate-x-[-4px]","children":["$","$Le",null,{"code":"docker network create swagproxy\ndocker network connect swagproxy swag\n"}]}],"$Lf"]}],"\n",["$","h3",null,{"id":"installing-and-configuring-vaultwarden-bitwarden","className":"text-foreground text-lg font-semibold pt-8","children":[["$","a",null,{"className":"text-foreground hover:text-muted-foreground/50 transition duration-150","href":"#installing-and-configuring-vaultwarden-bitwarden","children":["$","span",null,{"className":"icon icon-link"}]}],"Installing and Configuring Vaultwarden (Bitwarden)"]}],"\n",["$","p",null,{"children":["Install Vaultwarden from the Apps section, set the network type to your custom \"swagproxy\" network, and generate a password for the ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"ADMIN_TOKEN"}]," field using argon2."]}],"\n",["$","div",null,{"className":"relative","children":[["$","div",null,{"className":"absolute top-0 right-0 translate-y-5 translate-x-[-4px]","children":["$","$Le",null,{"code":"echo -n \"your_password_here\" | argon2 saltItWithSalt -l 32\n"}]}],"$L10"]}],"\n",["$","p",null,{"children":["Copy the encoded password into the Vaultwarden ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"ADMIN_TOKEN"}]," field, then apply the changes. You can check the container is connected to the proxy by pinging the swag container from the Vaultwarden container terminal."]}],"\n",["$","h3",null,{"id":"configuring-swag-with-tailscale","className":"text-foreground text-lg font-semibold pt-8","children":[["$","a",null,{"className":"text-foreground hover:text-muted-foreground/50 transition duration-150","href":"#configuring-swag-with-tailscale","children":["$","span",null,{"className":"icon icon-link"}]}],"Configuring swag with Tailscale"]}],"\n",["$","p",null,{"children":"Generate a Tailscale API key and locate to the swag settings in unraid, add these variables which will allow the swag container to connect to your Tailnet:"}],"\n",["$","ul",null,{"children":["\n",["$","li",null,{"className":"ml-4 list-disc","children":[["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"Docker_MODS"}],": ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"ghcr.io/tailscale-dev/Docker-mod:main"}]]}],"\n",["$","li",null,{"className":"ml-4 list-disc","children":[["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"TAILSCALE_STATE_DIR"}],": ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"/data/lib/tailscale"}]]}],"\n",["$","li",null,{"className":"ml-4 list-disc","children":[["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"TAILSCALE_HOSTNAME"}],": ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"swag-unraid"}]]}],"\n",["$","li",null,{"className":"ml-4 list-disc","children":[["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"TAILSCALE_AUTH_KEY"}],": ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"tskey-..."}]," (your Tailscale auth key)"]}],"\n"]}],"\n",["$","p",null,{"children":["Alongside, create a path ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"/var/lib/tailscale"}]," mapped to ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"/mnt/user/appdata/swag/tailscale"}],".\nApply and restart the swag container."]}],"\n",["$","h3",null,{"id":"setting-up-cloudflare-dns","className":"text-foreground text-lg font-semibold pt-8","children":[["$","a",null,{"className":"text-foreground hover:text-muted-foreground/50 transition duration-150","href":"#setting-up-cloudflare-dns","children":["$","span",null,{"className":"icon icon-link"}]}],"Setting Up Cloudflare DNS"]}],"\n",["$","p",null,{"children":["Navigate to ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"/mnt/user/appdata/swag/dns-conf"}]," in your Unraid terminal and edit the ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"cloudflare.ini"}],":"]}],"\n",["$","div",null,{"className":"relative","children":[["$","div",null,{"className":"absolute top-0 right-0 translate-y-5 translate-x-[-4px]","children":["$","$Le",null,{"code":"dns_cloudflare_email = your_cloudflare_email@domain.com\ndns_cloudflare_api_key = your_global_cf_api_key\n"}]}],"$L11"]}],"\n",["$","p",null,{"children":["In retrospect, you should use a custom API token with restricted permissions under ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"dns_cloudflare_api_token"}]," instead of the global API key - for initial configuration, the global key is fine."]}],"\n",["$","h3",null,{"id":"configuring-the-reverse-proxy","className":"text-foreground text-lg font-semibold pt-8","children":[["$","a",null,{"className":"text-foreground hover:text-muted-foreground/50 transition duration-150","href":"#configuring-the-reverse-proxy","children":["$","span",null,{"className":"icon icon-link"}]}],"Configuring the Reverse Proxy"]}],"\n",["$","p",null,{"children":["Go to ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"/mnt/user/appdata/swag/nginx/proxy-confs"}]," and copy the built-in Vaultwarden example, swag also includes various templates inside the same folder."]}],"\n",["$","div",null,{"className":"relative","children":[["$","div",null,{"className":"absolute top-0 right-0 translate-y-5 translate-x-[-4px]","children":["$","$Le",null,{"code":"cp vaultwarden.subdomain.conf.example vaultwarden.subdomain.conf\n"}]}],"$L12"]}],"\n",["$","p",null,{"children":["Edit ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"vaultwarden.subdomain.conf"}],", replacing placeholder IP and port with your Vaultwarden container's details, then restart the swag container to apply changes - you'll have to restart the swag container any time you make changes to the proxy confs."]}],"\n",["$","h3",null,{"id":"linking-your-domain","className":"text-foreground text-lg font-semibold pt-8","children":[["$","a",null,{"className":"text-foreground hover:text-muted-foreground/50 transition duration-150","href":"#linking-your-domain","children":["$","span",null,{"className":"icon icon-link"}]}],"Linking Your Domain"]}],"\n",["$","p",null,{"children":"In your Tailscale dashboard, locate the swag-unraid device and note its IPv4 address, you can also change the IPv4 to something more memorable in the Tailscale admin console."}],"\n",["$","p",null,{"children":["In Cloudflare, create an ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"A"}]," record pointing the subdomain listed in the configuration file (e.g., ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"vaultwarden.yourdomain.com"}],") to the Tailscale IP, the cloudflare proxy must be disabled or all records pointing to Tailscale IPs."]}],"\n",["$","h3",null,{"id":"check-the-setup","className":"text-foreground text-lg font-semibold pt-8","children":[["$","a",null,{"className":"text-foreground hover:text-muted-foreground/50 transition duration-150","href":"#check-the-setup","children":["$","span",null,{"className":"icon icon-link"}]}],"Check the setup"]}],"\n",["$","p",null,{"children":["Navigate to ",["$","code",null,{"className":"bg-background text-foreground code rounded-sm px-1","children":"https://vaultwarden.yourdomain.com"}]," and you should see the Vaultwarden login page, for the first time, it can take a while for Vaultwarden to load."]}],"\n",["$","p",null,{"children":"If the page errors or shows the default swag page, edit the subdomain conf to be linked to the appropiate IP (e.g 192.168.0.143) instead of the name of the container, then restart the swag container."}],"\n",["$","p",null,{"children":"When Tailscale is off, the domain will not be accessible, as expected. Tailscale's auth key does expire after a set amount of time of 90 days - you can create a tag in Tailscale's admin console to prevent this from occuring."}]] f:["$","div",null,{"data-bright-theme":"Mellow","data-bright-mode":"$undefined","className":"rounded-sm max-w-[calc(100vw-2rem)] overflow-x-auto","style":{"color":"#c9c7cd","borderRadius":"4px","overflow":"hidden","margin":"1em 0","--selection-background":"#3e3e43","--line-number-color":"#57575f","--tab-border":"#27272a","--tab-background":"#27272a","--tab-color":"#cac9dd","--inactive-tab-background":"#1b1b1d","--inactive-tab-color":"#757581","--tab-top-border":"#aca1cf","--tab-bottom-border":"#27272a","colorScheme":"dark"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n [data-bright-theme] ::selection { background-color: var(--selection-background) }\n [data-bright-theme] [data-bright-ln] { \n color: var(--line-number-color); \n margin-right: 1.5ch; \n display: inline-block;\n text-align: right;\n user-select: none;\n }\n "}}],"$undefined",["$","pre",null,{"style":{"margin":0,"color":"#c9c7cd","background":"#161617","padding":"1em 0","overflow":"auto"},"children":["$","code",null,{"className":"$undefined","style":{"display":"block","minWidth":"fit-content"},"children":[["$","div",null,{"style":{"padding":"0 1em"},"children":["$","span",null,{"children":[["$","span",null,{"data-bright-ln":1,"style":{"width":"1ch"},"children":1}],[["$","span",null,{"style":{"color":"#C1C0D4"},"children":"docker "}],["$","span",null,{"style":{"color":"#90B99F"},"children":"network create swagproxy"}]],["$","br",null,{}]]}]}],["$","div",null,{"style":{"padding":"0 1em"},"children":["$","span",null,{"children":[["$","span",null,{"data-bright-ln":2,"style":{"width":"1ch"},"children":2}],[["$","span",null,{"style":{"color":"#C1C0D4"},"children":"docker "}],["$","span",null,{"style":{"color":"#90B99F"},"children":"network connect swagproxy swag"}]],["$","br",null,{}]]}]}]]}]}]]}] 10:["$","div",null,{"data-bright-theme":"Mellow","data-bright-mode":"$undefined","className":"rounded-sm max-w-[calc(100vw-2rem)] overflow-x-auto","style":{"color":"#c9c7cd","borderRadius":"4px","overflow":"hidden","margin":"1em 0","--selection-background":"#3e3e43","--line-number-color":"#57575f","--tab-border":"#27272a","--tab-background":"#27272a","--tab-color":"#cac9dd","--inactive-tab-background":"#1b1b1d","--inactive-tab-color":"#757581","--tab-top-border":"#aca1cf","--tab-bottom-border":"#27272a","colorScheme":"dark"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n [data-bright-theme] ::selection { background-color: var(--selection-background) }\n [data-bright-theme] [data-bright-ln] { \n color: var(--line-number-color); \n margin-right: 1.5ch; \n display: inline-block;\n text-align: right;\n user-select: none;\n }\n "}}],"$undefined",["$","pre",null,{"style":{"margin":0,"color":"#c9c7cd","background":"#161617","padding":"1em 0","overflow":"auto"},"children":["$","code",null,{"className":"$undefined","style":{"display":"block","minWidth":"fit-content"},"children":[["$","div",null,{"style":{"padding":"0 1em"},"children":["$","span",null,{"children":[["$","span",null,{"data-bright-ln":1,"style":{"width":"1ch"},"children":1}],[["$","span",null,{"style":{"color":"#C1C0D4"},"children":"echo "}],["$","span",null,{"style":{"color":"#90B99F"},"children":"-n \"your_password_here\" "}],["$","span",null,{"style":{"color":"#E6B99D"},"children":"| "}],["$","span",null,{"style":{"color":"#C1C0D4"},"children":"argon2 "}],["$","span",null,{"style":{"color":"#90B99F"},"children":"saltItWithSalt -l "}],["$","span",null,{"style":{"color":"#E29ECA"},"children":"32"}]],["$","br",null,{}]]}]}]]}]}]]}] 12:["$","div",null,{"data-bright-theme":"Mellow","data-bright-mode":"$undefined","className":"rounded-sm max-w-[calc(100vw-2rem)] overflow-x-auto","style":{"color":"#c9c7cd","borderRadius":"4px","overflow":"hidden","margin":"1em 0","--selection-background":"#3e3e43","--line-number-color":"#57575f","--tab-border":"#27272a","--tab-background":"#27272a","--tab-color":"#cac9dd","--inactive-tab-background":"#1b1b1d","--inactive-tab-color":"#757581","--tab-top-border":"#aca1cf","--tab-bottom-border":"#27272a","colorScheme":"dark"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n [data-bright-theme] ::selection { background-color: var(--selection-background) }\n [data-bright-theme] [data-bright-ln] { \n color: var(--line-number-color); \n margin-right: 1.5ch; \n display: inline-block;\n text-align: right;\n user-select: none;\n }\n "}}],"$undefined",["$","pre",null,{"style":{"margin":0,"color":"#c9c7cd","background":"#161617","padding":"1em 0","overflow":"auto"},"children":["$","code",null,{"className":"$undefined","style":{"display":"block","minWidth":"fit-content"},"children":[["$","div",null,{"style":{"padding":"0 1em"},"children":["$","span",null,{"children":[["$","span",null,{"data-bright-ln":1,"style":{"width":"1ch"},"children":1}],[["$","span",null,{"style":{"color":"#C1C0D4"},"children":"cp "}],["$","span",null,{"style":{"color":"#90B99F"},"children":"vaultwarden.subdomain.conf.example vaultwarden.subdomain.conf"}]],["$","br",null,{}]]}]}]]}]}]]}] 11:["$","div",null,{"data-bright-theme":"Mellow","data-bright-mode":"$undefined","className":"rounded-sm max-w-[calc(100vw-2rem)] overflow-x-auto","style":{"color":"#c9c7cd","borderRadius":"4px","overflow":"hidden","margin":"1em 0","--selection-background":"#3e3e43","--line-number-color":"#57575f","--tab-border":"#27272a","--tab-background":"#27272a","--tab-color":"#cac9dd","--inactive-tab-background":"#1b1b1d","--inactive-tab-color":"#757581","--tab-top-border":"#aca1cf","--tab-bottom-border":"#27272a","colorScheme":"dark"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"\n [data-bright-theme] ::selection { background-color: var(--selection-background) }\n [data-bright-theme] [data-bright-ln] { \n color: var(--line-number-color); \n margin-right: 1.5ch; \n display: inline-block;\n text-align: right;\n user-select: none;\n }\n "}}],"$undefined",["$","pre",null,{"style":{"margin":0,"color":"#c9c7cd","background":"#161617","padding":"1em 0","overflow":"auto"},"children":["$","code",null,{"className":"$undefined","style":{"display":"block","minWidth":"fit-content"},"children":[["$","div",null,{"style":{"padding":"0 1em"},"children":["$","span",null,{"children":[["$","span",null,{"data-bright-ln":1,"style":{"width":"1ch"},"children":1}],[["$","span",null,{"style":{"color":"#ACA1CF"},"children":"dns_cloudflare_email"}],["$","span",null,{"style":{"color":"#C9C7CD"},"children":" = your_cloudflare_email@domain.com"}]],["$","br",null,{}]]}]}],["$","div",null,{"style":{"padding":"0 1em"},"children":["$","span",null,{"children":[["$","span",null,{"data-bright-ln":2,"style":{"width":"1ch"},"children":2}],[["$","span",null,{"style":{"color":"#ACA1CF"},"children":"dns_cloudflare_api_key"}],["$","span",null,{"style":{"color":"#C9C7CD"},"children":" = your_global_cf_api_key"}]],["$","br",null,{}]]}]}]]}]}]]}]