[{"data":1,"prerenderedAt":241},["ShallowReactive",2],{"post-\u002Fblog\u002Fhomelab-first-checklist":3,"surround-\u002Fblog\u002Fhomelab-first-checklist":230},{"id":4,"title":5,"body":6,"date":217,"description":218,"draft":219,"extension":220,"meta":221,"navigation":160,"path":222,"readTime":223,"seo":224,"stem":225,"tags":226,"__hash__":229},"blog\u002Fblog\u002Fhomelab-first-checklist.md","The boring homelab checklist",{"type":7,"value":8,"toc":209},"minimark",[9,13,18,21,25,33,37,40,178,182,185,191,195,198,202,205],[10,11,12],"p",{},"A homelab is easy to start and easy to regret. Before adding more hardware, work through this list. It is deliberately boring, because the boring parts are what keep the fun parts running.",[14,15,17],"h2",{"id":16},"_1-decide-what-has-to-stay-up","1. Decide what has to stay up",[10,19,20],{},"Separate the services you rely on (DNS, backups, a password manager) from the ones you experiment with. Give the first group stable hardware and the second group a place where breaking things is fine.",[14,22,24],{"id":23},"_2-use-static-addressing-and-names","2. Use static addressing and names",[10,26,27,28,32],{},"Give every machine a DHCP reservation and a name. Remembering ",[29,30,31],"code",{},"10.0.0.23"," does not scale past three machines.",[14,34,36],{"id":35},"_3-put-a-reverse-proxy-in-front","3. Put a reverse proxy in front",[10,38,39],{},"One entry point with automatic TLS beats a dozen ports. Caddy needs very little configuration:",[41,42,48],"pre",{"className":43,"code":44,"filename":45,"language":46,"meta":47,"style":47},"language-yaml shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","services:\n  caddy:\n    image: caddy:2\n    restart: unless-stopped\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n    volumes:\n      - .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile\n      - caddy_data:\u002Fdata\n\nvolumes:\n  caddy_data:\n","compose.yaml","yaml","",[29,49,50,63,71,84,95,103,119,131,139,147,155,162,170],{"__ignoreMap":47},[51,52,55,59],"span",{"class":53,"line":54},"line",1,[51,56,58],{"class":57},"suXOh","services",[51,60,62],{"class":61},"soVBu",":\n",[51,64,66,69],{"class":53,"line":65},2,[51,67,68],{"class":57},"  caddy",[51,70,62],{"class":61},[51,72,74,77,80],{"class":53,"line":73},3,[51,75,76],{"class":57},"    image",[51,78,79],{"class":61},":",[51,81,83],{"class":82},"sTbE_"," caddy:2\n",[51,85,87,90,92],{"class":53,"line":86},4,[51,88,89],{"class":57},"    restart",[51,91,79],{"class":61},[51,93,94],{"class":82}," unless-stopped\n",[51,96,98,101],{"class":53,"line":97},5,[51,99,100],{"class":57},"    ports",[51,102,62],{"class":61},[51,104,106,109,113,116],{"class":53,"line":105},6,[51,107,108],{"class":61},"      -",[51,110,112],{"class":111},"sbYkP"," \"",[51,114,115],{"class":82},"80:80",[51,117,118],{"class":111},"\"\n",[51,120,122,124,126,129],{"class":53,"line":121},7,[51,123,108],{"class":61},[51,125,112],{"class":111},[51,127,128],{"class":82},"443:443",[51,130,118],{"class":111},[51,132,134,137],{"class":53,"line":133},8,[51,135,136],{"class":57},"    volumes",[51,138,62],{"class":61},[51,140,142,144],{"class":53,"line":141},9,[51,143,108],{"class":61},[51,145,146],{"class":82}," .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile\n",[51,148,150,152],{"class":53,"line":149},10,[51,151,108],{"class":61},[51,153,154],{"class":82}," caddy_data:\u002Fdata\n",[51,156,158],{"class":53,"line":157},11,[51,159,161],{"emptyLinePlaceholder":160},true,"\n",[51,163,165,168],{"class":53,"line":164},12,[51,166,167],{"class":57},"volumes",[51,169,62],{"class":61},[51,171,173,176],{"class":53,"line":172},13,[51,174,175],{"class":57},"  caddy_data",[51,177,62],{"class":61},[14,179,181],{"id":180},"_4-back-up-before-you-need-to","4. Back up before you need to",[10,183,184],{},"Follow the 3-2-1 rule: three copies, two kinds of media, one off-site. Then test a restore, because an untested backup is a hope, not a backup.",[186,187,188],"warning",{},[10,189,190],{},"Snapshots on the same disk are not backups. If the disk dies, both go with it.",[14,192,194],{"id":193},"_5-monitor-the-basics","5. Monitor the basics",[10,196,197],{},"Disk space, memory and whether the service answers. Anything more elaborate can wait until these three are green.",[14,199,201],{"id":200},"_6-write-it-down","6. Write it down",[10,203,204],{},"Keep a short document of what runs where, how it was set up, and how to rebuild it. Future you is the primary audience.",[206,207,208],"style",{},"html pre.shiki code .suXOh, html code.shiki .suXOh{--shiki-light:#E53935;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":47,"searchDepth":65,"depth":65,"links":210},[211,212,213,214,215,216],{"id":16,"depth":65,"text":17},{"id":23,"depth":65,"text":24},{"id":35,"depth":65,"text":36},{"id":180,"depth":65,"text":181},{"id":193,"depth":65,"text":194},{"id":200,"depth":65,"text":201},"2026-09-14","Six things to sort out before you buy a second server, in the order they usually bite.",false,"md",{},"\u002Fblog\u002Fhomelab-first-checklist",null,{"title":5,"description":218},"blog\u002Fhomelab-first-checklist",[227,228],"homelab","networking","OF2XKehKDXfML4ty_39yYgRuRnMcqm50tg6kNuw4yTw",[231,236],{"title":232,"path":233,"stem":234,"description":235,"children":-1},"Hello from the rack","\u002Fblog\u002Fhello-from-the-rack","blog\u002Fhello-from-the-rack","What this log is for, what I plan to write about, and how the posts are put together.",{"title":237,"path":238,"stem":239,"description":240,"children":-1},"Recording guitar direct, a practical chain","\u002Fblog\u002Frecording-guitar-direct","blog\u002Frecording-guitar-direct","An interface, an amp simulator and a few habits that make direct recording sound less like a compromise.",1793217405788]