CaddyDash - A lightweight WebUI to manager single Caddy instance

Hello, I’ve built a WebUI for managing a single Caddy Server instance. In its design, we’ve aimed for a lightweight approach to minimize overhead.

CaddyDash is currently in its Pre-Alpha stage. The internal implementation and API are not yet stable, and we may replace current designs with better alternatives in the future.

CaddyDash Repository: caddydash/README_EN.md at main · WJQSERVER-STUDIO/caddydash · GitHub

reverse_proxy

Design Principles

  • Simplicity as a Core Principle: This project was originally designed to facilitate Caddy management via a web interface, eliminating the need for direct server access to modify the Caddyfile. Therefore, our design prioritizes simplicity.
  • Lightweight: We chose SQLite3 as the database and use lightweight HTTP framework. We aim for CaddyDash to have a small resource footprint.

Frontend

  • Responsive Design: Adapted for mobile devices.
  • Light and Dark Modes: Support.
  • i18n Support: Currently available in zh-CN and en. PR welcome

Deployment

CaddyDash is designed to handle the startup and shutdown of Caddy instances (with planned future improvements to this implementation). Thus, we currently recommend deployment using Docker Compose.

version: '3.8'

services:
  caddydash:
    image: wjqserver/caddydash:latest
    container_name: caddydash
    network_mode: host
    volumes:
      - ./config:/data/caddy/config
      - ./config.d:/data/caddy/config.d
      - ./log:/data/caddy/log
      - ./db:/data/caddy/db
      - ./caddy_internal_data:/root/.local/share/caddy
    
    restart: unless-stopped

By default, CaddyDash listens on :81. For security reasons, we recommend setting up a reverse proxy for it after initialization to ensure security.

Related Information

Github Repository: caddydash/README_EN.md at main · WJQSERVER-STUDIO/caddydash · GitHub

Related Blog Post: https://blog.wjqserver.com/post/about-caddydash

Future Roadmap

Many features are currently functional but not yet in their optimal state; they work, but they are not our perceived best implementation, and we are continuously working on improving them.

Concurrently, we will be building out the reserved functionalities for existing features and gradually moving them towards a stable state.

Time Investment

We’ve invested some time into this project, but there’s still much to improve. Moving forward, we will focus on enhancing existing features and implementing planned ones. If you have any ideas or feature requests, please open a “Feat Issue” (Feature Issue).

This project is open-sourced under the MPL 2.0 license.

Our current vision for this project is to avoid excessive complexity, striving for a simple and straightforward user experience. We welcome discussion.

3 Likes

Personally, I see little value in managing a single caddy instance. So as a future feature enhancement, I think there would be far more value in multi-instance monitoring and management…especially bulk updates.

1 Like

I think CaddyDash (this project) manages the config file which the Caddy process reads. It writes it somewhere then executes a caddy reload. For multi-instance setup, there are 2 ways:

  • Use {remote,}-admin endpoint (push): Here the manager must call the admin API, either remote endpoint which is secured by mTLS or plain, of each instance to push the new config. This becomes a headache once the cluster gets large.
  • Use dynamic loading mechanism (pull): Caddy loads the config from a source and runs with it. There’s a hidden option (due to documentation generation bug) called load_delay which tells Caddy to load the config again after the configured duration. This tells Caddy to execute the config loading mechanism again after the first application. Caddy runs diff check before applying new config, so the operation is a noop if the config hasn’t change.

CaddyDash may operate either of them flows

1 Like

Was that directed to me? I understand how it could be done, I won’t use a dashboard to manage a web server, that’s why there’s config management tools that allow me to keep versioned configs, manage in bulk, etc.

I was just providing feedback to the author on how they could make their new project a bit more useful.

2 Likes

Thank for your reply. Our target is build a simple manager WEBUI like Nginx Proxy Manager
Manager muti caddy servers is not is project’s target.

We will think about that, thanks

1 Like