this post was submitted on 30 Oct 2026
170 points (100.0% liked)

Selfhosted

63437 readers
436 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:

Detailed Rules Post

  1. Be civil.

  2. No spam.

  3. Posts are to be related to self-hosting.

  4. Don't duplicate the full text of your blog or readme if you're providing a link.

  5. Submission headline should match the article title.

  6. No trolling.

  7. Promotion posts require active participation, with an account that is at least 30 days old. F/LOSS without a paywall has exceptions, with requirements. See the rules link for details. Tags [CBH] or [AIP] are required, see the links in Rule 8 for details.

  8. AI-related discussions and AI-involved promotional posts have additional requirements for tagging, as noted in Rule 7 and the AI & Promotional Post Expanded Rules post, and find example disclosures here.

Resources:

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

Questions? DM the mods!

founded 3 years ago
MODERATORS
 

Hi all,

I am running proxmox on a mini PC with a handful of services in my stack. I also run NPM in an LXC to reach my services through my domain name (service.domain.tld).

For my Arr related stuff, I use Usenet, and everything runs through a VPN.

I have three services which are public. Jellyfin, Seer and BookOrbit (for syncing Kobos).

Currently I have no security besides the built in login managers from the services, but I am considering setting up Authentik. I know I'm asking for trouble with my current set up.

I have elderly and extremely tech averse family members who live in two countries other than me, so tech support can be a challenge.

A lot of people suggest running a VPN, but it would be difficult for my family and I don't know how to make it work syncing our Kobos with BookOrbit.

I've also seen some posts about tunneling to a VPS somewhere and users can connect to the VPS without a VPN.

I feel this question has been asked several times, and I tried searching here and on the internet in general, but my knowledge is not good enough to use the right terms and to get something that is idiot proof.

Any suggestions on best practices or links to guides you recommend would be much appreciated. Also, what EU based affordable VPS would you recommend?

top 50 comments
sorted by: hot top controversial new old
[–] peregus@lemmy.world 4 points 14 hours ago

Never call yourself an idiot. Not a good IT engineer? (Just saying, I don't know you) That doesn't make you stupid at all.

[–] phobiac@lemmy.world 4 points 1 day ago

For whatever it is worth to you I've hardened my jellyfin docker compose this way. I'm obscuring some things in this that are local to my network.

The container is read only. It mounts the media read only. It should be fairly isolated from getting privileges it shouldn't have. The only things lost in this setup are the ability to delete media from a jellyfin client (something I never do) and the ability to manipulate files directly stored with the media. I use bazarr for subtitles so don't need jellyfin to download them and I don't keep trickplay or any other jellyfin metadata related files alongside the media. I feel pretty confident with this that even if the jellyfin codebase had a serious 0 day that the worst I'd lose is metadata and server setup, and important config files I have backing up to another machine.

I'm sure there's things I've overlooked with this setup so I'm very open to being told there's a better way to do something.

services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    restart: unless-stopped
    mac_address: OBSCURED # see macvlan note below
    hostname: jellyfin
    user: ${PUID}:${PGID}
    group_add:
      - "992" # my render group id
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    read_only: true
    tmpfs:
      - /tmp:exec,nosuid,nodev # exec some plugins can write to /tmp, no-nosuid,nodev for security
    networks:
      macvlan:
        ipv4_address: OBSCURED
    healthcheck:
      test: [ "CMD", "curl", "-fsS", "http://127.0.0.1:8096/health" ]
      interval: 1m
      timeout: 10s
      retries: 3
      start_period: 30s
    environment:
      - TZ=${TZ}
      - JELLYFIN_PublishedServerUrl=OBSCURED
      - JELLYFIN_DATA_DIR=/config/data # consolidates these dirs under /config, migrated from linuxserver.io setup
      - JELLYFIN_CONFIG_DIR=/config
      - JELLYFIN_LOG_DIR=/config/log
      - JELLYFIN_CACHE_DIR=/config/cache
      - HOME=/config
    volumes:
      - ./jellyfin:/config
      - ${MEDIA}:/media:ro
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128 # isolate to just the renderD128 device
    device_cgroup_rules:
      - 'c 226:128 rw' # further limits access for the renderD128 device

networks: # I went with macvlan to preserve mdns for local discovery, otherwise you need to use host level networking
  macvlan:
    driver: macvlan
    driver_opts:
      parent: OBSCURED # Replace with host network interface name (find via: ip route | grep default)
    ipam:
      config:
        - subnet: OBSCURED/24 # Your local LAN network CIDR
          gateway: OBSCURED # Your local router IP address
[–] just_an_average_joe@lemmy.dbzer0.com 5 points 1 day ago (2 children)

Not sure why nobody here recommended netbird reverse proxies. It has crowdsec out of the box plus blocking/allowing ip ranges. On top of it, it also support pin or password based auth, so you can have 2 layers of auth.

But i haven't hosted jellyfin yet, only opencloud and a couple others. Haven't seen anybody pwning it based on the logs

[–] uzername@lemmy.world 1 points 1 day ago

at this point why not just use Pangolin ?

[–] relaymoth@sh.itjust.works 1 points 1 day ago (1 children)

Netbird's reverse proxy is still in beta and is free, so when it goes GA the pricing may change. Otherwise this is a great option.

[–] just_an_average_joe@lemmy.dbzer0.com 1 points 1 day ago (1 children)
[–] relaymoth@sh.itjust.works 1 points 1 day ago

It's just something to keep in mind.

Tailscale is also a good option. Headscale will also be good for this once they finish the implementation.

[–] Nalivai@lemmy.world 7 points 1 day ago (1 children)

Backup.
Update.
Don't keep all in one place.
Update.
Don't forget to backup.

[–] neo2478@sh.itjust.works 3 points 1 day ago

At least the backup part I think I got. I do local backups in the mini PC, which get replicated to my NAS, which get backedup to backblaze (encrypted, because my photos and documents are also backed up there)

[–] MonkderVierte@lemmy.zip 7 points 1 day ago (2 children)

So the public services are purely for private use, to sync your mobile devices? You can install Wireguard on Android, send them over there. Though for e-reader, since they are Kobos (basically Android), you can trick it to install the app. Or even another launcher/book reader.

[–] neo2478@sh.itjust.works 4 points 1 day ago (2 children)

Kobo uses its own OS, not Android unfortunately. But I just found a tailscale plugin for it, so will try that

[–] Evotech@lemmy.world 3 points 14 hours ago

Install Koreader. Then install the bookorbit plugin

It’s very easy and reversible. And its really good

[–] MonkderVierte@lemmy.zip 1 points 1 day ago* (last edited 1 day ago) (1 children)

Yeah, not "Android" like Amazons' is not Android; all based on AOSP but not certified for Play Store. Or is it depending on the device in Kobo, do they use something else too? The ones i know (Leaf, Note) have the not-Android ROM.

[–] PerogiBoi@lemmy.ca 3 points 1 day ago* (last edited 1 day ago) (1 children)

Kobo runs a light linux software called NickelOS on an esp32 board. No android at all. No ability to instal apks. Its not even AOSP.

One can install a custom OS over top called KOreader which expands its usability and offers tons of community led plugins.

[–] surewhynotlem@lemmy.world 2 points 1 day ago (2 children)

I hate our kobos. The app is shit. Total waste of money.

But this gives me hope. I'm going to play with this.

[–] Evotech@lemmy.world 1 points 14 hours ago

Just install koreader. It really saved my kobo purchase

[–] PerogiBoi@lemmy.ca 4 points 1 day ago

I love my kobo precisely because there's a huge community behind KOreader. Lots of YouTube tutorials, lots of flexibility. My kobo kept dying at like 50% battery and I just assumed it was a bad battery. Turns out NickelOS was trying to cache a book infinitely in the background so the battery calibration was wildly off because it never properly achieved a sleep state when powered down.

I left it sitting for a year and a half. Charged it for a full day to balance the cells, copy pasted the files needed for KOreader, changed a config file so that NickelOS would not cache items in hidden folders, and then threw all my epubs onto a hidden folder called ". books" and boom.

New life in my kobo. I use it daily now. Battery is accurate to 20% (then it sorta doesnt turn back on but whatever). Fair warning though because KOreader is so expansive that its a rabbit hole. UI takes getting used to but the customizability is huge and it runs more efficiently without bloat and you can even use LocalSend to wirelessly push epubs from any device that can run LocalSend to the Kobo so you never have to plug it in again.

I sync book progress from my Xteink X4 pro to my Kobo Clara HD using KOSync and have my own little KOSync instance running on my homelab (but you can just use the public instances if you want).

[–] Appoxo@lemmy.dbzer0.com 2 points 1 day ago* (last edited 1 day ago) (1 children)

Issue:
Most clients we instruct on homeoffice usage with vpns are already unable to remember the workflow: VPN -> (wait until green for connected) -> open work app -> Do work -> close work app -> disconnect vpn.

Now you also may not want to tunnel all traffic (if you don't have a VPS with symmetric Gbit and unlimited traffic) so you'd need to set up split-tunneling and/or limit the apps allowed for the tunnel (works in android).

Honestly? It would be easier to set up a S2S split-tunnel VPN with wireguard on the relatives router.

[–] unique_hemp@discuss.tchncs.de 4 points 1 day ago (1 children)

You can just specify AllowedIPs in the wireguard client config to route only traffic to your services through the VPN, works great.

[–] Appoxo@lemmy.dbzer0.com 3 points 1 day ago (1 children)

Yes. Split-tunneling...
But if you are really hardcore about restrictions and would need to update the profiles it will be a pita...
Scheduling stuff is annoying ;-;

[–] unique_hemp@discuss.tchncs.de 2 points 1 day ago (1 children)

AllowedIPs is a client side restriction that can be ignored anyway, no real security benefit from not just putting your entire network there.

[–] MrTolkinghoen@lemmy.zip 1 points 1 day ago (1 children)
[–] Appoxo@lemmy.dbzer0.com 3 points 1 day ago (1 children)

The user can just edit the wg conf file and remove the restriction where it can and cannot connect to.
The file is not a baked immutable binary

[–] MrTolkinghoen@lemmy.zip 1 points 16 hours ago

Oh sorry I was thinking you were talking about something entirely different. Makes sense, and yes.

[–] shishka_b0b@lemmy.zip 47 points 2 days ago (8 children)
[–] Blip6338@lemmy.ca 20 points 2 days ago

Crowdsec is excellent. Also add per country block for inbound connections. If you expose the services to a few friends and family members limit inbound access to their country. Just remember to change the list when travelling abroad and coming back.

load more comments (7 replies)
[–] Seldon@discuss.tchncs.de 10 points 1 day ago* (last edited 1 day ago) (1 children)

I use Pangolin on a kinda cheap VPS on Hetzner (they're now a bit too pricey), and route my services through Site Connectors (Newt, it's called). Dealing with opening my firewall is a pain I don't wanna think about, but Pangolin creates a websocket and can do NAT traversal from the Site Connector, so no swiss-cheesing your firewall.

It's nice because you can contain different services with VLANs to further segment and protect your network, and each Site Connector can work for many services (if there's no firewall rules restricting it/VLANs) or you can put a Site Connector on each server individually, if segmentation is important to you.

[–] neo2478@sh.itjust.works 3 points 1 day ago (1 children)

Is there a guide you can link?

[–] Seldon@discuss.tchncs.de 5 points 1 day ago (1 children)
[–] neo2478@sh.itjust.works 2 points 1 day ago* (last edited 1 day ago) (1 children)

Thanks a lot! Thus actually looks doable and like it will fit my needs!

[–] Seldon@discuss.tchncs.de 3 points 1 day ago

Awesome, good to hear. Just a reminder that I forgot when I sent that link: double-check the Tutorial, it might have slightly outdated information. But a few lessons I learned when setting it up:

Pangolin uses its own auth. You can use a OIDC provider if you like, but you have to set it up. I use TinyAuth in conjunction because I have so few users.

To bypass auth on Pangolin, you must disable it and it will appear "Unprotected". This helps with mobile apps, which don't know how to deal with third-party login screens, but it leaves the login screen of whatever server you're running (like Jellyfin) accessible by everyone. So something more hardened as your OIDC provider at the frontend help. Although lots of apps, again like Jellyfin, don't have native OIDC login.

The solution would be to route it with Private Resources, which are zero-trust connections. Great for a few people on your network, but it requires you setting up the Client app to access the Pangolin network. I've had issues with DNS on Android before, but your problems may vary.

If you have any more questions, let me know. I've been using Pangolin for only about a year, but I think I learned enough to help.

[–] heyeddi@lemmy.world 14 points 2 days ago (2 children)

Get Jellyfin off the open internet. For family who'll never install a VPN app, the setup that holds up is WireGuard on their router, or Tailscale on whatever TV box they use, set up before it ever ships to them. They never see it. If something has to stay public, CrowdSec plus Pocket-ID is a lot lighter than Authentik for three users. I'm building a home box that ships locked down like this by default, so I'm curious: which broke first for your family, remote access or the logins?

[–] smiletolerantly@awful.systems 9 points 1 day ago (1 children)

Jellyfin on the open internet is FINE.

[–] Appoxo@lemmy.dbzer0.com 3 points 1 day ago* (last edited 1 day ago)

Agreed.
Secure it properly and you wont be pwned instantly.
My setup:
WAN -> OPNsense -> CrowdSec on FW and docker server -> Traefik -> Authelia middleware -> Jellyfin.

I also have a geoblock active on the Cloudflare domain and directly on my opnsense.
Most datacenter ASNs are also blocked. They don't need to connect to me.

Yes, first party apps are broken but the browser works good enough and if I meed it, I have a VPN for myself.
Relatives get web browser or I'll consider a S2S VPN setup.

[–] Blue_Morpho@lemmy.world 6 points 2 days ago (4 children)

How would you handle a mother in law at a retirement community with a Roku and no access to the router that serves the condo?

[–] Klox@lemmy.world 6 points 1 day ago* (last edited 1 day ago) (1 children)

Get a router/travel router and set it up as a gateway where it provides its own SSID for the Roku to connect to. Basically a bridge to the complex, where you can inject some software. A lot of the travel devices have baked in Wireguard+Tailnet support. iNet are generally good products.

[–] meltedcheese@c.im 2 points 1 day ago

@Klox This is exactly what I do in my RV. Easy, cheap, reliable.

load more comments (3 replies)
[–] homelabrat@lemmy.world 17 points 2 days ago (1 children)

If you don't mind I'd share my scenario with you, but I'm far from a professional myself, so in the same time I'm also asking any thought about my own approach.

For my public facing services (e.g. Nextcloud) I've created a separate VLAN which is completely isolated from the rest of the system, I've deployed an nginx LXC with Crowdsec/fail2ban, and opened very specific "pinhole" style firewall rules towards the service layer VLAN in OPNsense. I've also separated this service / app VLAN layer from the database layer (which is another VLAN with strict firewall rules and SSL). For authentication I use what the service offers natively, except for some cases of keycloak / hardware key.

Based on my research, this should be a solid baseline, but honestly noone more knowledgeable than myself has confirmed it, so take it with a grain of salt.

[–] Reannlegge@lemmy.ca 8 points 2 days ago (4 children)

I personally have been getting away from Nextcloud, because I feel it tries to do to much and does not do any of it great, except maybe file storage. It is also has a lot of php in its coding, so I have other services replacing it, and because I do not yet have the money to replace my iOS devices with stuff that can run GrapheneOS or Linux I use smb for file sharing. I do have a inexpensive VPS that hosts my blog and off site backup and that same host hosts my email (easyDNS), everything else is held locally.

If you are running crowdsec I hope that everything other than your honeypot (on its private vLAN) is using something other than port 22 for ssh?

load more comments (4 replies)
[–] airgapped@piefed.social 3 points 1 day ago (1 children)

There is some great advice in here but I wanted to throw my two cents in by saying bollocks to Hetzner, they get circlejerked far too much. Go with Contabo instead, 4 core 8GB VPS with 100GB SSD is $5 a month right now and has a generous 30TB/month bandwidth allowance.

load more comments (1 replies)
load more comments
view more: next ›