[{"data":1,"prerenderedAt":716},["ShallowReactive",2],{"project-41591018":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":48,"post_text":50,"what":51,"said":112,"maker_in_thread":259,"shape":270,"grid":274,"attempts":678,"same_week":679,"maker_shows":42,"maker_hidden":708,"reader_version":709,"card":710},"41591018","Sidekick","A CLI tool I made to self-host any app with two commands on a VPS","title","Show HN: A CLI tool I made to self-host any app with two commands on a VPS","https:\u002F\u002Fgithub.com\u002FMightyMoud\u002Fsidekick","github.com","mightymoud",1726748225,2024,452,152,87,3515,3,"legend","dev_tools","deployment cli","cli",[24,25,26,27,28],"self-host","vps deployment","docker deploy","traefik tls","zero downtime","mixed",0.368,{"positive":32,"neutral":33,"mixed":34,"critical":35},27,23,2,9,61,{"idea":38,"design":41,"privacy":43,"performance":45,"docs":46,"execution":47},{"positive":39,"critical":40},8,4,{"positive":34,"critical":42},1,{"positive":44,"critical":34},0,{"positive":44,"critical":42},{"positive":18,"critical":44},{"positive":40,"critical":44},[49,49,44,44,34,18,34,44,44,44,18,44,18,42,18,44,44,44,44,44,49,44,49,49,42,49,49,18,42,18,18,49,49,44,40,49,40,49,49,49],5,null,{"problem":52,"audience":64,"pricing":50,"motivation":72,"time_to_build":50,"stack":80,"openness":110,"stage":111,"team_size":110},{"value":53,"source":54,"evidence":55},"Deploying and hosting side-project apps on a VPS with TLS and zero-downtime is tedious","commenter",[56,60],{"id":57,"by":58,"text":59},"41593635","AndrewCopeland","Its a simple cli in go It uses docker There is no k8s Handles certs Zero down time I would love for it to support docker-compose as some of my side projects needs a library in…",{"id":61,"by":62,"text":63},"41594960","joseferben","this looks amazing! i’m building https:\u002F\u002Fwww.plainweb.dev and i’m looking for the simplest way to deploy a plainweb\u002Fplainstack project. looks like sidekick has the same spirit…",{"value":65,"source":66,"evidence":67},"Developers self-hosting side projects and small apps on a single VPS","inferred",[68,69],{"id":61,"by":62,"text":63},{"id":70,"by":11,"text":71},"41594579","1) Kamal is more geared towards having one VPS for project - it' made for big projects really. They also show on the demo that even the db is hosted on its own VPS. Which is…",{"value":73,"source":74,"evidence":75},"Make self-hosting side projects simpler without Kamal-style complexity","maker",[76,77],{"id":70,"by":11,"text":71},{"id":78,"by":11,"text":79},"41594458","Sounds like you have a great setup. My vision is to make a setup like yours more accessible really w\u002Fo having to play with low level config like ansible. I think you should try…",[81,89,95,99],{"value":82,"source":54,"evidence":83},"Go",[84,85],{"id":57,"by":58,"text":59},{"id":86,"by":87,"text":88},"41593034","dvaun","Awesome! Love that it's written in Go—I've recently tested the language for some use cases at work and find it great. I'll dive into your repo to see if I can learn anything new :)",{"value":90,"source":74,"evidence":91},"Docker",[92],{"id":93,"by":11,"text":94},"41594513","Locally here means the locally on your laptop locally, not locally on your VPS. Contrary to popular opinion, I believe your source code shouldn't be on your prod machine - a…",{"value":96,"source":74,"evidence":97},"Traefik",[98],{"id":78,"by":11,"text":79},{"value":100,"source":54,"evidence":101},"sops and age for secrets",[102,106],{"id":103,"by":104,"text":105},"41595590","funshed","Nice, you should probably explain what traefik, sops and age will do. First time I've heard of sops, very handy!",{"id":107,"by":108,"text":109},"41596171","gf297","What's the purpose of encrypting the env file with sops, when the age secret key is stored on the VPS? If someone has access to the encrypted env file, they will also have access…","unknown","launched",{"praise":113,"objections":142,"requests":172,"questions":201,"alternatives":224},[114,126,137],{"value":115,"source":54,"evidence":116},"Simple, clean CLI and well-written README",[117,121,122],{"id":118,"by":119,"text":120},"41593406","Canada","Very well presented, the README.md looks great.",{"id":57,"by":58,"text":59},{"id":123,"by":124,"text":125},"41592943","devmor","Wow this is super handy! I have paid tools that function like this for a couple of specific stacks but this seems like an amazing general purpose tool. Considering the ease of…",{"value":127,"source":54,"evidence":128},"Handles TLS automatically",[129,133],{"id":130,"by":131,"text":132},"41592875","bluehatbrit","This is super nice, and I'm a big fan of the detailed readme with screenshots. I'll definitely be trying it out, although I do have a pretty nice setup now which will be hard to…",{"id":134,"by":135,"text":136},"41593117","spelunker","Looks great! I similarly got frustrated about the complexity of doing side-project ops stuff and messed around with Kamal, but this goes the extra mile by automatically setting…",{"value":138,"source":54,"evidence":139},"Good fit for side projects versus heavier tools",[140,141],{"id":61,"by":62,"text":63},{"id":57,"by":58,"text":59},[143,150,157,161],{"value":144,"source":54,"evidence":145},"Docker-only framing; 'any app' claim is inaccurate",[146],{"id":147,"by":148,"text":149},"41595181","johnklos","\"to self-host any app\" Docker != app. Perhaps it'd be more accurate to say, \"to host any Docker container\"?",{"value":151,"source":54,"evidence":152},"Not highly available on a single VPS; scaling claims questioned",[153],{"id":154,"by":155,"text":156},"41595807","turtlebits","What about this is highly available? On a single VPS? Does this only support a single app? Nice project but the claims (production ready? Load balance on a single server?) are a…",{"value":158,"source":54,"evidence":159},"Encrypting env with sops while keeping age key on the VPS offers little security",[160],{"id":107,"by":108,"text":109},{"value":162,"source":54,"evidence":163},"Lacks backup and restore and long-term maintenance guidance",[164,168],{"id":165,"by":166,"text":167},"41597523","Humphrey","Love this! That said, I achieve the same thing manually using Docker Compose & some shell scripts. It takes a bike longer, but it has forced me to learn the lower level tools…",{"id":169,"by":170,"text":171},"41596297","FloatArtifact","Part of me dies every time I see projects not integrating robust restoring and backup systems.",[173,181,188,194],{"value":174,"source":54,"evidence":175},"Database hosting and streaming backups such as Litestream or Barman",[176,180],{"id":177,"by":178,"text":179},"41592636","pqdbr","This looks really nice, congrats! 1) I see Kamal was an inspiration; care to explain what differs from it? I'm still rocking custom Ansible playbooks, but I was planning on…",{"id":70,"by":11,"text":71},{"value":182,"source":54,"evidence":183},"Docker compose support",[184,185],{"id":57,"by":58,"text":59},{"id":186,"by":11,"text":187},"41594484","Thanks man! I'm working on the docker-compose support. I got it working locally, but the ergonomics are really hard to get right, cus compose files are so flexible. I was even…",{"value":189,"source":74,"evidence":190},"Deploy hooks",[191],{"id":192,"by":11,"text":193},"41594601","Yup deploy hooks are on my mind. Just didn't put them on Readme. Shouldn't be very hard to implement. Might do this first before docker-compose support.",{"value":195,"source":54,"evidence":196},"Authentication or zero-trust access layer",[197],{"id":198,"by":199,"text":200},"41595389","sigmonsays","tools like this are pretty sweet but I would rather just run it myself. docker-compose with a load balancer (traefik) is fairly straightforward and awesome. the TLS setup is nice…",[202,210,217],{"value":203,"source":54,"evidence":204},"How does it differ from Kamal?",[205,206],{"id":177,"by":178,"text":179},{"id":207,"by":208,"text":209},"41599623","strzibny","Given the choice of Docker and Traefik I would love to know what's the exact difference to Kamal? And btw Kamal will soon have a new improved version with a custom proxy.",{"value":211,"source":54,"evidence":212},"Why Docker registry push instead of local builds?",[213],{"id":214,"by":215,"text":216},"41594282","aag","This could be great for my projects, but I'm confused about one thing: why does it need to push to a Docker registry? The Dockerfile is local, and each image is built locally.…",{"value":218,"source":54,"evidence":219},"Can multiple apps run on one VPS?",[220],{"id":221,"by":222,"text":223},"41595268","InvOfSmallC","Can I run more than one app on the same VPS with this solution? I now run more than one app into one single VPS.",[225,230,241,252],{"value":226,"source":54,"evidence":227},"Kamal",[228,229],{"id":177,"by":178,"text":179},{"id":165,"by":166,"text":167},{"value":231,"source":54,"evidence":232},"Dokku",[233,237],{"id":234,"by":235,"text":236},"41595810","dewey","I'd also suggest people to take a look at Dokku, it's a very mature project with a similar scope and was discussed here a few weeks ago:…",{"id":238,"by":239,"text":240},"41596045","mimischi","Been using dokku for probably 8 years now? (or something close to that; it used to be written entirely in bash!) Hosting private stuff on it, and an application at $oldplace…",{"value":242,"source":54,"evidence":243},"CapRover",[244,248],{"id":245,"by":246,"text":247},"41596959","hkon","Have used caprover. Good that more tools enter this space.",{"id":249,"by":250,"text":251},"41599509","vickodin","Also: Kamal, CapRover",{"value":253,"source":54,"evidence":254},"Cloudflare tunnel with docker",[255],{"id":256,"by":257,"text":258},"41592750","4star3star","I like what I'm seeing, though I'm not sure I have a use case. On a VPS, I'll typically run a cloudflared container and configure a Cloudflare tunnel to that VPS. Then, I can…",{"comments":260,"answered":261,"key":262},16,7,[263,264,267],{"id":70,"text":71},{"id":265,"text":266},"41594644","It's a tunnel. So VPS can only be reached through cloudflare. It's not only for https, but more for security and lockdown",{"id":268,"text":269},"41594633","Interesting setup.... How do you run the containers on your VPS tho? You could still use Sidekick for that! I think your setup is one step up in security from Sidekick…",{"commenters":271,"max_depth":39,"maker_replies":260,"first_comment_mins":272,"lifespan_hours":273},95,147,126,[275,277,281,285,287,291,293,294,297,299,302,305,308,311,314,316,319,323,326,329,332,336,340,344,346,348,351,354,357,359,362,364,367,370,373,375,378,381,383,386,389,392,394,397,400,402,405,406,409,411,412,414,417,420,422,425,428,430,432,435,437,440,442,444,447,449,452,454,457,459,461,463,465,468,470,473,475,477,478,480,481,483,486,488,490,495,497,501,504,505,509,512,514,516,518,520,523,527,531,534,538,540,542,543,544,546,549,551,555,557,559,561,563,565,567,568,572,574,577,579,581,583,586,588,589,592,595,597,599,602,606,609,612,614,617,619,624,627,631,634,636,640,644,646,649,651,655,660,663,667,670,674],[177,44,49,276,178,44],"maker\u002Fpositive\u002Fidea",[278,44,44,279,280,44],"41593672","other\u002Fneutral\u002Fnone","indigodaddy",[282,44,44,283,284,44],"41595764","commenter\u002Fneutral\u002Fnone","ctvo",[286,44,44,283,280,44],"41596461",[288,44,49,289,290,44],"41599274","project\u002Fpositive\u002Fidea","russelg",[70,44,44,292,11,42],"project\u002Fneutral\u002Fidea",[256,42,18,292,257,44],[295,42,44,283,296,44],"41594560","skinner927",[265,42,44,298,11,42],"project\u002Fneutral\u002Fprivacy",[300,42,44,279,301,44],"41595596","mediumsmart",[303,42,44,279,304,44],"41596327","nine_k",[306,42,44,283,307,44],"41599282","newaccount74",[309,42,44,283,310,44],"41600888","BigJ1211",[312,42,44,283,313,44],"41605418","worik",[268,42,44,315,11,42],"project\u002Fneutral\u002Fnone",[317,42,18,315,318,44],"41594731","tacone",[320,42,42,321,322,44],"41594997","project\u002Fcritical\u002Fdesign","hu3",[324,42,18,315,325,44],"41595548","aborsy",[327,42,18,315,328,44],"41604797","eikenberry",[330,42,18,315,331,44],"41595355","vineyardmike",[333,42,42,334,335,44],"41595379","project\u002Fcritical\u002Fprivacy","SahAssar",[337,42,49,338,339,44],"41596510","project\u002Fpositive\u002Fdesign","renewiltord",[341,42,42,342,343,44],"41596566","project\u002Fcritical\u002Fperformance","jmpavlec",[345,42,44,283,339,44],"41596589",[165,34,18,347,166,44],"project\u002Fmixed\u002Fdocs",[349,18,18,315,350,44],"41592727","LVB",[352,18,44,283,353,44],"41593002","kokanee",[355,18,44,283,356,44],"41593156","bantunes",[358,18,44,283,131,44],"41593210",[360,18,44,283,361,44],"41593417","stackskipton",[363,18,44,283,131,44],"41600278",[365,18,44,283,366,44],"41593794","oarsinsync",[368,18,44,283,369,44],"41595564","Ringz",[371,18,44,283,372,44],"41596019","dijksterhuis",[374,18,44,279,366,44],"41608884",[376,18,44,279,377,44],"41610221","aflukasz",[379,18,44,283,380,44],"41594099","hiAndrewQuinn",[382,18,44,283,353,44],"41595151",[384,18,44,279,385,44],"41598101","codiogo",[387,18,18,292,388,44],"41593538","mikkelam",[390,18,18,391,280,44],"41593603","project\u002Fneutral\u002Fdesign",[393,18,44,292,11,42],"41594701",[395,18,44,279,396,44],"41594070","faangguyindia",[398,18,44,279,399,44],"41599176","prmoustache",[401,18,44,279,396,44],"41603438",[403,18,44,279,404,44],"41604363","rustyminnow",[234,40,44,279,235,44],[407,40,18,298,408,44],"41595938","rgrieselhuber",[410,40,44,283,235,44],"41595962",[238,40,44,279,239,44],[169,40,42,413,170,44],"project\u002Fcritical\u002Fnone",[415,40,44,279,416,44],"41596768","Aeolun",[418,40,44,283,419,44],"41603312","doublerabbit",[421,40,44,279,235,44],"41596872",[423,40,18,315,424,44],"41597163","sgarland",[426,40,44,283,427,44],"41597288","GauntletWizard",[429,40,44,283,399,44],"41599118",[431,40,44,283,235,44],"41599257",[433,40,44,283,434,44],"41600163","transpute",[436,40,44,283,235,44],"41600195",[438,40,44,283,439,44],"41603429","Yiin",[441,40,44,283,434,44],"41606644",[443,40,44,283,424,44],"41600868",[445,40,44,283,446,44],"41602687","pmarreck",[448,40,44,279,170,44],"41606371",[450,40,44,283,451,44],"41600049","sally_glance",[453,40,44,283,424,44],"41600895",[455,40,44,279,456,44],"41604172","cweagans",[458,40,44,283,235,44],"41604243",[460,40,44,283,456,44],"41604452",[462,40,44,283,170,44],"41606353",[464,40,44,279,170,44],"41610818",[466,40,44,283,467,44],"41597013","trog",[469,40,44,283,399,44],"41599105",[471,40,44,279,472,44],"41596641","oulipo",[474,40,44,279,235,44],"41596706",[476,40,44,279,416,44],"41597513",[249,40,44,279,250,44],[130,49,49,479,131,44],"project\u002Fpositive\u002Fdocs",[78,49,44,283,11,42],[482,49,44,283,131,44],"41600314",[484,49,44,283,485,44],"41601092","mxuribe",[487,49,44,283,131,44],"41601646",[489,49,44,283,485,44],"41605757",[491,492,49,493,494,44],"41592480",6,"project\u002Fpositive\u002Fexecution","silasb",[496,492,44,283,11,42],"41594498",[498,261,49,499,500,44],"41595917","project\u002Fpositive\u002Fnone","nhatcher",[502,39,49,499,503,44],"41595619","tegiddrone",[103,35,49,479,104,44],[506,507,49,499,508,44],"41597573",10,"jfdi",[147,510,42,511,148,44],11,"project\u002Fcritical\u002Fidea",[513,510,44,283,399,44],"41599195",[515,510,42,511,148,44],"41605091",[154,517,42,511,155,44],12,[519,517,44,283,235,44],"41595822",[521,517,44,283,522,44],"41595988","closewith",[524,525,49,289,526,44],"41592453",13,"Hexigonz",[528,529,49,289,530,44],"41598052",14,"interstice",[532,529,44,279,533,44],"41598680","apitman",[535,536,49,499,537,44],"41593027",15,"Sn0wCoder",[539,536,44,279,280,44],"41593726",[541,536,44,283,537,44],"41598113",[57,260,49,499,58,44],[186,260,44,315,11,42],[107,545,42,334,108,44],17,[547,545,44,283,548,44],"41604136","nsluss",[207,550,18,315,208,44],18,[552,553,42,511,554,44],"41592528",19,"superkuh",[556,553,44,283,350,44],"41592637",[558,553,44,283,554,44],"41592784",[560,553,44,283,280,44],"41593793",[562,553,44,279,11,42],"41594355",[564,553,44,315,11,42],"41594346",[214,566,18,391,215,44],20,[93,566,44,292,11,42],[569,566,18,570,571,44],"41595513","project\u002Fneutral\u002Fexecution","sdf4j",[573,566,18,570,377,44],"41610600",[575,566,18,570,576,44],"41595643","3np",[61,578,49,499,62,44],21,[580,578,44,279,11,42],"41598105",[123,582,49,289,124,44],22,[584,582,44,585,11,42],"41594324","maker\u002Fneutral\u002Fnone",[587,582,18,292,124,44],"41594423",[192,582,44,292,11,42],[590,33,49,289,591,44],"41592954","achempion",[593,33,44,594,11,42],"41594434","commenter\u002Fneutral\u002Fidea",[596,33,44,594,591,44],"41595206",[598,33,44,283,576,44],"41595738",[600,33,44,594,601,44],"41604785","evantbyrne",[603,604,18,292,605,44],"41597217",24,"singhrac",[607,604,44,283,608,44],"41597368","brirec",[610,611,18,292,313,44],"41605468",25,[134,613,49,289,135,44],26,[615,32,44,279,616,44],"41600636","udev4096",[86,618,49,493,87,44],28,[620,621,49,622,623,44],"41639402",29,"maker\u002Fpositive\u002Fnone","MarvinJWendt",[198,625,18,626,199,44],30,"project\u002Fmixed\u002Fidea",[628,629,49,493,630,44],"41596702",31,"trey-jones",[632,633,18,391,250,44],"41599498",32,[221,635,18,292,222,44],33,[637,638,18,292,639,44],"41599151",34,"vander_elst",[641,642,49,493,643,44],"41606840",35,"mutant",[245,645,49,289,246,44],36,[118,647,49,648,119,44],37,"maker\u002Fpositive\u002Fdocs",[650,647,44,585,11,42],"41594410",[652,653,49,338,654,44],"41609094",38,"lenkite",[656,657,18,658,659,44],"41597937",39,"project\u002Fneutral\u002Fdocs","mattfrommars",[661,657,44,662,11,42],"41598043","maker\u002Fneutral\u002Fdocs",[664,665,49,499,666,44],"41592510",40,"jjkmk",[668,669,18,292,446,44],"41602661",41,[671,672,49,499,673,44],"41593025",42,"rafaelgoncalves",[675,676,49,499,677,44],"41593649",43,"replwoacause",[],[680,685,689,694,699,703],{"id":681,"name":682,"points":683,"category":684},"41635592","OpenFreeMap",848,"infrastructure",{"id":686,"name":687,"points":688,"category":20},"41604262","Container Desktop",464,{"id":690,"name":691,"points":692,"category":693},"41609947","Time Flies",401,"creative",{"id":695,"name":696,"points":697,"category":698},"41603865","AnySkin",390,"hardware",{"id":700,"name":701,"points":702,"category":684},"41642151","blogtech",303,{"id":704,"name":705,"points":706,"category":707},"41623814","King Thirteen",269,"games",false,"v2",{"id":711,"name":5,"line":6,"ai":708,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":712,"top":18,"kw":713,"maker":11,"domain":10,"tier":19,"attempts":44,"strip":714,"url":9,"mix":715,"praise":115,"objection":144,"sub":21},41591018,0.37,[24,25,26,27,28],"5500232000303130000050551553133550454555",[32,33,34,35],1793991100648]