social.anoxinon.de ist einer von vielen unabhängigen Mastodon-Servern, mit dem du dich im Fediverse beteiligen kannst.
Die offizielle Mastodon Instanz des Vereins Anoxinon e.V.

Serverstatistik:

1,1 Tsd.
aktive Profile

#caddy

3 Beiträge3 Beteiligte0 Beiträge heute

🐌 Wow, someone found a way to make their #localhost #setup even more convoluted! Now, instead of just typing "localhost:4333", you can go through the joyous process of configuring #launchd daemons, editing /etc/hosts, and wrangling #Caddy for that sweet appname.localhost experience. 🧙‍♂️ Truly the pinnacle of #productivity for when you have too much time and not enough friends. 🤦‍♂️
inclouds.space/localhost-domai #devlife #HackerNews #ngated

inclouds.space.localhost domains

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.

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

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.)

Fun (actually not fun at all) fact about Caddy:

This expression will be merged with
AND:

@matcher {
    path /foo
    header Header-Name value
}

But this one will be merged with
OR, despite being functionally identical:
@matcher {
    expression `path('/foo')`
    expression `header({'Header-Name': 'value'})`
}

Caddy has some cursed, barely-documented logic where matcher blocks always merge with
AND unless two matchers of the same time are adjacent. In the latter case, they may be merged with AND or OR depending on matcher-specific logic, which is not publicly documented.


This results in completely different behavior depending on whether a matcher is defined using expression or directive syntax. Despite the docs implying that the two options are identical,
they are not! You can have an existing, functional matcher with a mix of directives and expressions, and suddenly it breaks because one of the directives was replaced with an identical expression. It's extremely counter-intuitive.

#Caddy #PSA #ServerAdmin #SelfHost