norden.social is one of the many independent Mastodon servers you can use to participate in the fediverse.
Moin! Dies ist die Mastodon-Instanz für Nordlichter, Schnacker und alles dazwischen. Folge dem Leuchtturm.

Administered by:

Server stats:

3.5K
active users

#caddy

4 posts4 participants0 posts today

Officially moved our #Gitea instance to Canadian soil (aka my basement.) Did this both to reduce dependency on US Cloud/SaaS, and to lower costs.

Doing this has made me realize I don't truly understand reverse proxies as well as I thought. Tried the #nginx and #caddy plugins for OPNSense but I don't really understand their setup. So right now I just run it through some sketchy port forwarding.

I recently started to replace #nginx with @caddy and it's as satisfying as it is scary to replace a complex config that spans five included files and a total of about 400 lines with a single Caddyfile of around 80 lines.

And on top of that #Caddy also made certbot redundant as it takes care of fetching and renewing the tls certs from #LetsEncrypt and keeps a #ZeroSSL backup for all of my domains.

I think I'm in love..

Ok, so it took me more than 10 minutes to figure out the right Caddyfile syntax for a reverse-proxy with TLS using DNS challenge from Cloudflare.

Caddy is great, and generally it is super easy, but this particular case was not.

So in the interest of saving some other poor frazzled soul like myself from digging through the interwebs, I'm throwing an example up on my blog. Hope it saves someone a few.

christopherbauer.org/blog/cadd

Caddy Reverse Proxy with TLS and Cloudflare DNS Challenge - A Caddyfile ExampleCaddy Reverse Proxy with TLS and Cloudflare DNS Challenge - A Caddyfile Example

Hallo Leipzig!

Die #LeipzigerBuchmesse hat ihre Pforten geöffnet. Dank meinem tollen Team habe ich den Aufbau gestern geschafft und wurde sogar trotz operiertem Knie erfolgreich zu meinem traditionellen "Phoenix der Messecamper"-Foto aufs Auto und wieder runtergehoben. 📚🚘

#Autor_innenleben #Messeleben #AutorinOnTour #Phantastik #FantasyAusDeutschland #Vantasy #Vanautorin #WirSindPAN #LeipzigerBuchmesse2025 #LBM #Caddy #CaddyMaxi #CaddyCamper #Messemobil #Messecamper @volkswagen_de

I'm curious to hear what others are #SelfHosting! Here's my current setup:

Hardware & OS

Infrastructure & Networking

Security & Monitoring

Authentication & Identity Management

  • Authelia (Docker): Just set this up for two-factor authentication and single sign-on. Seems to be working well so far!
  • LLDAP (Docker): Lightweight LDAP server for managing authentication. Also seems to be working pretty well!
    #AuthenticationTools #IdentityManagement

Productivity & Personal Tools

Notifications & Development Workflow

  • Notifications via: #Ntfy (Docker) and Zoho's ZeptoMail (#Zoho)
  • Development Environment: Mostly using VSCode connected to my server via Remote-SSH extension. #VSCodeRemote

Accessibility Focus ♿🖥️

Accessibility heavily influences my choices—I use a screen reader full-time (#ScreenReader), so I prioritize services usable without sight (#InclusiveDesign#DigitalAccessibility). Always open to discussing accessibility experiences or recommendations!

I've also experimented with:

  • Ollama (#Ollama): Not enough RAM on my Pi.
  • Habit trackers like Beaver Habit Tracker (#HabitTracking): Accessibility issues made it unusable for me.

I don't really have a media collection, so no Plex or Jellyfin here (#MediaServer)—but I'm always open to suggestions! I've gotten a bit addicted to exploring new self-hosted services! 😄

What's your setup like? Any cool services you'd recommend I try?

#SelfHosted #LinuxSelfHost #OpenSource #TechCommunity #FOSS #TechDIY

@selfhost @selfhosted @selfhosting

Caddy with certbot's certificates

I would like to use #certbot to retrieve a certificate for my domain and instruct #Caddy to use this certificate. Problem is that clients can't validate the chain correctly. Any ideas or pointers?

I used the following in my Caddyfile:

a.example.com {
tls /etc/letsencrypt/live/a.example.com/fullchain.pem /etc/letsencrypt/live/a.example.com/privkey.pem {
ca_root /etc/letsencrypt/live/a.example.com/chain.pem
}
}

@selfhosted @selfhosting

Gerade habe ich bei #Nextcloud AiO die Domain gewechselt. Grund:

Die DDNS Domain, die ich verwendet hatte (seit NCP Zeiten), gehört einem bekannten Firewall und Sicherheitslösungen Anbieter. #crowdsec , welches ich mit #Caddy verwende, hatte viel zu tun. Jetzt ist ruhe.

(Wie bekomme ich einen . hinter ein Hashtag?)

Hi all. Hoping someone in the #SelfHosting community can help. I'm trying to set up #Linkwarden in #Docker behind #Caddy. The service is running, but I'm unable to create a user account. This is what I see in my browser console when I try:

register:1 [Intervention] Images loaded lazily and replaced with placeholders. Load events are deferred. See https://go.microsoft.com/fwlink/?linkid=2048113
register:1 [DOM] Input elements should have autocomplete attributes (suggested: "new-password"): (More info: https://www.chromium.org/developers/design-documents/create-amazing-password-forms)
<input data-testid=​"password-input" type=​"password" placeholder=​"••••••••••••••" class=​"w-full rounded-md p-2 border-neutral-content border-solid border outline-none focus:​border-primary duration-100 bg-base-100" value=​"tyq5ghp!QVH-mva1agc">
register:1 [DOM] Input elements should have autocomplete attributes (suggested: "new-password"): (More info: https://www.chromium.org/developers/design-documents/create-amazing-password-forms)
<input data-testid=​"password-confirm-input" type=​"password" placeholder=​"••••••••••••••" class=​"w-full rounded-md p-2 border-neutral-content border-solid border outline-none focus:​border-primary duration-100 bg-base-100" value=​"tyq5ghp!QVH-mva1agc">
Error
api/v1/users:1 Request unavailable in the network panel, try reloading the inspected page Failed to load resource: the server responded with a status of 400 () Failed to load resource: the server responded with a status of 400 ()

compose file:

services:
postgres:
image: postgres:16-alpine
container_name: linkwarden_postgres
env_file: .env
restart: always
volumes:
- ./pgdata:/var/lib/postgresql/data
networks:
- linkwarden_net
linkwarden:
env_file: .env
environment:
- DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@linkwarden_postgres:5432/postgres
restart: always
# build: . # uncomment this line to build from source
image: ghcr.io/linkwarden/linkwarden:latest # comment this line to build from source
container_name: linkwarden
ports:
- 3009:3000
volumes:
- ./data:/data/data
networks:
- linkwarden_net
depends_on:
- postgres

networks:
linkwarden_net:
driver: bridge

Relevant part of .env file:

NEXTAUTH_URL=https://bookmarks.laniecarmelo.tech/api/v1/auth
NEXTAUTH_SECRET=x8az9q9w8ofAxnrVcer2vsPHeMmKSPbf

# Manual installation database settings
# Example: DATABASE_URL=postgresql://user:password@localhost:5432/linkwarden
DATABASE_URL=

# Docker installation database settings
POSTGRES_PASSWORD=redacted

# Additional Optional Settings
PAGINATION_TAKE_COUNT=
STORAGE_FOLDER=
AUTOSCROLL_TIMEOUT=
NEXT_PUBLIC_DISABLE_REGISTRATION=false
NEXT_PUBLIC_CREDENTIALS_ENABLED=true

Caddyfile snippet

*.laniecarmelo.tech {
tls redacted {
dns cloudflare redacted
}

header {
Content-Security-Policy "default-src 'self' https: 'unsafe-inline' 'unsafe-eval';
img-src https: data:;
font-src 'self' https: data:;
frame-src 'self' https:;
object-src 'none'"
Referrer-Policy "strict-origin-when-cross-origin"
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
X-Content-Type-Options "nosniff"
X-Xss-Protection "1; mode=block"
}

encode br gzip

# Bookmarks
@bookmarks host bookmarks.laniecarmelo.tech
handle @bookmarks {
reverse_proxy 127.0.0.1:3009
}
}

Can anyone help? I have no idea how to fix this.
#SelfHosted #CaddyServer #Linux #Tech #Technology
@selfhost @selfhosted @selfhosting

Och ffs ey. Ich will #Seafile in #Docker mit einem #apache-#Proxy in einer #virtuellenMaschine installieren (weil ich das Testen will und nur Chuck Norris in Prod testet). Warum geht das nicht wenigstens halbwegs out-of-the-box?

Auch ohne den apache-Proxy klappt das nicht. (Edit: da spielt ja jetzt immer noch ein #caddy mit rum, bei dem nicht dokumentiert ist, ob ich ihn wirklich brauche, wenn hinter apache, oder wie da die Einstellungen sein müssen.)