this post was submitted on 17 Feb 2025
47 points (98.0% liked)

Selfhosted

44033 readers
1845 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 2 years ago
MODERATORS
 

I have been self-hosting for a while now with Traefik. It works, but I'd like to give Nginx Proxy Manager a try, it seems easier to manage stuff not in docker.

Edit: btw I'm going to try this out on my RPI, not my hetzner vps, so no risk of breaking anything

top 31 comments
sorted by: hot top controversial new old
[–] Kusimulkku@lemm.ee 20 points 3 weeks ago (1 children)

Caddy is really simple and easy. Just werks and gives you https

[–] sxan@midwest.social 15 points 3 weeks ago (1 children)

I mean, the basic config file for Caddy is 1 line, and gives you Let's Encrypt by default. The entire config file for a reverse proxy can be as few as 3 lines:

my.servername.net {
   reverse_proxy 127.0.0.1:1234
}

It's a single executable, and a single 3-line file. Caddy is an incredible piece of software.

[–] Kusimulkku@lemm.ee 2 points 3 weeks ago

When I was researching reverse proxies I first stumbled upon nginx and traefik and especially nginx seemed a bit intimidating. As someone who hadn't done it before I was worried if I'd do it right. Then I found caddy and yeah just used a threeliner like that in config and that was that. Simple and easy to get it right.

I've since switched to having my stuff behind wireguard instead of reverse proxy, but I keep caddy around so I can just spin it back up if I want to access Jellyfin on someone's tv or something.

[–] hendrik@palaver.p3x.de 16 points 3 weeks ago (1 children)

In my experience, all the 3 big ones work just fine. Caddy, Traefik, Nginx. I use Nginx.

I have had the same experience. Have used all three at some point but mostly use nginx for new servers

[–] mbirth@lemmy.ml 15 points 3 weeks ago

it seems easier to manage stuff not in docker

Read into Traefik’s dynamic configuration. Adding something outside of Docker is as easy as adding a new config file in the dynamic configuration folder. E.g. jellyfin.yml:

http:

  routers:

    jellyfin:
      rule: Host(`jellyfin.example.org`)
      entrypoints: websecure
      tls:
        certResolver: le
      service: jellyfin

  services:

    jellyfin:
      loadbalancer:
        servers:
          - url: "http://192.168.1.5:8096/"

The moment you save that file it will be active and working in Traefik.

[–] traches@sh.itjust.works 14 points 3 weeks ago

I’ve been using caddyserver for awhile and love it. Config is nicely readable and the defaults are very good.

[–] reddwarf@feddit.nl 6 points 3 weeks ago (1 children)

I use NPM in a docker container. It could not be easier in my opinion but then again, I did not use any of the alternatives so I might be missing out on something, who knows. I did manage a couple of proxy servers in the past based on Apache and I can tell you that NPM is much easier and logical to me than that.

Just create a compose file and start it. Create DNS records pointing to your NPM IP address/exposed IP and make a host in NPM sending traffic to the right container IP:port. The compose file is super simple, could not be easier. Here's mine for example:

services:
  nginx-proxy-manager:
    container_name: nginx-proxy-manager
    image: 'jc21/nginx-proxy-manager:latest'
    restart: always
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

I just make sure ports 443 and 80 are exposed on my router so DNS records can point to that IP adrdess. All traffic on port 80 gets re-routed to 443.

I'm probably stating all the obvious things here 😀

[–] Tiritibambix@lemmy.ml 2 points 3 weeks ago (1 children)

I mean yes, that seems obvious now that I've learned this.

But I wish I read this comment 3 years ago when I was starting to dive into self hosting. Would have saved me a bunch of time. So always assume some piece of knowledge is not obvious for someone out there and share ᕕ( ᐛ )ᕗ

[–] reddwarf@feddit.nl 1 points 3 weeks ago (1 children)

So always assume some piece of knowledge is not obvious for someone out there and share

You just described a thing of mine I cannot help but do; explain the ever loving crap out of things
I need to be careful with that though as relatives start to complain and push back on me telling things over and over.
Thing is, until I see a full comprehension on the other side on what I try to convey I just keep explaining in variations, keep finding metaphors and keep pestering you until you 'get it'. Some say it is a virtue, some say it is a hindrance.

I have had therapy on this... 😂

[–] Tiritibambix@lemmy.ml 1 points 3 weeks ago

Hahaha, I can totally relate. I think we should think of it as a virtue. Continue the good work 💪

[–] Dirk@lemmy.ml 6 points 3 weeks ago

but I’d like to give Nginx Proxy Manager a try, it seems easier to manage stuff not in docker.

NPM is pretty agnostic. If it receives a request for a specific address and port combination it just forwards the traffic to another specific address and port combination. This can be a docker container, but also can be a physical machine or any random URL.

It also has Let's Encrypt included (but that should be a no-brainer).

[–] CrankyCarrot@lemmy.world 6 points 3 weeks ago* (last edited 3 weeks ago)

I use Traefik at home. The initial setup was more complex than others but now it's set up it's by far the easiest to add new routes than any other I've tried, just by virtue of being right there in the compose/k8s files I'm already writing. Static routes are manual of course, but so are every other proxy so that's no different, and they're not exactly complicated (I see another comment has examples). The config files are the same markup language as your Compose/k8s files so you're not learning a whole new syntax and having to switch languages mentally as you switch between them.

Caddy is super easy, but the fact that the Docker labels thing was a plugin is a con to me, I'd prefer it being first party. It also isn't as performant as Traefik, higher CPU usage while also having higher latency.

As far as I'm aware, Nginx and Nginx Proxy Manager support no such thing, you have to manually write those routes every time you create a new service. Personally I think Nginxs config syntax annoying, I'm very comfortable with it now but I much prefer TOML/YAML.

Nginx Proxy Manager is a lot like Portainer. It's useful for people who don't want to learn Nginx and/or just want to click a few buttons. But anything complex you're suddenly going to be thrown into the deep end.

You've already set up Traefik, you've already done the complex bit. IMO there's no reason to change, from this point everything else is more complicated.

We use Nginx at work but are currently in the process of switching to Traefik.

[–] lorentz@feddit.it 5 points 3 weeks ago (1 children)

Nginx for my intranet because configuration is fully manual and I have complete control over it.

Caddy for the public services on my vps because it handles cert renewal automatically and most of its configuration is magic which just works.

It is unbelievable how shorter caddy configuration is, but on my intranet:

  1. I don't want my reverse proxy to dial on internet to try to fetch new SSL certs. I know it can be disabled, but this is the default.
  2. I like to learn how stuff works, Nginx forces you to know more details but it is full of good documentation so it is not too painful compared to Caddy.
[–] Oisteink@feddit.nl 3 points 3 weeks ago

I switched to caddy just for the certs. I get trusted certs on all my internal subdomains without maintenance.

I use haproxy, nginx and caddy at work including a caddy instance with internal CA. 4 lines in config and its signed by our normal CA, so its trusted by all our devices.

[–] synapse1278@lemmy.world 5 points 3 weeks ago

Caddy is the only reverse proxy I have ever managed to successfully make use of. I failed miserably with Nginix and Traefik.

Caddy has worked very well for me for several years now. It gets the SSL certificate from my domain name provider and all.

[–] vfsh@lemmy.blahaj.zone 4 points 3 weeks ago

I've been using NPM for a few years now and can't recommend it enough. I use it to route to both docker containers on an internal proxy network as well at other services within my networks

[–] boydster@sh.itjust.works 4 points 3 weeks ago

I've been mostly using Nginx Proxy Manager, but I recently set up Bunkerweb as a WAF for a couple of public services I'm hosting and I kind of like it. It does reverse proxy along with a bunch of other things (bad behavior blocking, geographic blocking, SSL cert handling, it does a lot).

Mentioning it because I didn't see any other mention of it yet.

NPM is easy to use. Caddy sounds like something I'd like to try too now.

[–] MXX53@programming.dev 4 points 3 weeks ago (1 children)

I use traefik. I like it. Took a bit to understand, but it has some cool options like ssl passthrough and middlewares for basic auth.

[–] mbirth@lemmy.ml 1 points 3 weeks ago

You can even use it to do the SSL part for a local non-SSL IMAP server. And, there’s a CrowdSec middleware as well, that will block blacklisted IPs.

[–] 0x0@programming.dev 3 points 3 weeks ago
[–] kevincox@lemmy.ml 3 points 3 weeks ago

I've been using nginx forever. It works, I can do almost everything I want, even if more complex things sometimes require some contortions. I'm not sure I would pick it again if starting from scratch, but I have no problems that are worth switching for.

[–] midnight@programming.dev 2 points 3 weeks ago

I'll throw in another recommendation for Caddy. I've been using it for years and the few problems/feature suggestions I had got implemented by the developers pretty quickly. They're super active on their forums and I haven't yet run into an issue where I couldn't either figure it out myself or with help from their community forums (usually from a dev.) They're very friendly and won't berate you for simple mistakes like other devs.

[–] snekerpimp@lemmy.world 2 points 3 weeks ago (2 children)

I use the caddy plugin in opnsense. Used nginx proxy manager from Proxmox helper scripts before that, which was relatively easy and helped me understand the whole proxy thing. Moved to caddy on opnsense a few months ago, just because, and have had no good reason to change yet.

[–] EarMaster@lemmy.world 1 points 3 weeks ago

I recently switched a bunch of nginx configs to the opnsense Caddy plugin. It is easy to configure, but in my opinion it lacks the ability to change settings beyond the basics. It isn't helpful either that the plugin developer fails to recognize any other use case than the basics. It disqualifies the plugin for everyone with a little bit more complex setups.

[–] tofuwabohu@slrpnk.net 1 points 3 weeks ago

I was thinking about putting it from its dedicated VM to opnsense as well. I just don't know yet what the security implications are and also my firewall hardware isn't too beefy so I have to play around with it for a bit.

[–] JASN_DE@lemmy.world 2 points 3 weeks ago

I use both, Traefik on my docker host that's also used for trying out new stacks, and NPM at work for a config that won't change (ever, probably).

Yes, the NPM web ui is somewhat easier in regard to proxying targets outside Docker.

[–] brownmustardminion@lemmy.ml 2 points 3 weeks ago

I use nginx for static websites and TLS passthrough servers.

I use traefik as a reverse proxy for sites with many services and SSO.

Nginx is definitely easier to configure for simple things. But I prefer traefik for more complex setups.

[–] mhzawadi@lemmy.horwood.cloud 2 points 3 weeks ago

I use nginx as the internet facing proxy, write my own config and manage it with source control. Also use traefik in docker land with service labels to configure it

[–] Shimitar@downonthestreet.eu 1 points 3 weeks ago

I use and love nginx.

Maybe a bit more old fashioned than more modern solutions, but steady solid and versatile. I use it as reverse proxy ad well as proxy for php stuff and more.

I like Zoraxy it has a lot of features, like Zerotier integration, status monitoring etc and a clean UI

Runs fine for my needs and fully replaced NPM for me 😊

You can run it in docker or as a single binary directly