6ec291c096f9e10a7af209e368984551ac3b9f82
Captures everything that took a debug cycle to figure out: server-vs-Studio version divergence (3.5 vs 3.7), the two competing login stacks and which one to keep, the admin password-hash trap, Traefik forwarded-headers, the SPA fallback carving out /elsa/api, SQLite pinning to App_Data, and the Coolify quirks (git_repository truncation, dockercompose→service, base64 raw compose). Future sessions read this first before touching versions or auth wiring.
Elsa Custom Server
Custom Elsa Workflows API server. Extends stock Elsa 3.x with our own activities.
Where activities live
src/Elsa.CustomServer/Activities/*.cs — anything marked [Activity(...)] under this
folder is auto-registered via AddActivitiesFrom<Program>() in Program.cs.
To add a new node type in the Studio designer:
- Drop a new file under
Activities/. - Inherit from
CodeActivity,CodeActivity<T>, orActivityfor triggerable ones. - Rebuild and redeploy — Studio picks it up automatically the next time it fetches the activity descriptors.
Example — see Activities/Shout.cs.
Local run
dotnet run --project src/Elsa.CustomServer
Listens on http://localhost:8080; API root is /elsa/api.
Docker
docker build -t elsa-custom-server .
docker run --rm -p 8080:8080 \
-e Identity__Tokens__SigningKey="$(openssl rand -base64 64)" \
elsa-custom-server
Deployment
Coolify builds this image from the Dockerfile at repo root when the app is created
with build_pack: "dockerfile". The Studio (separate container running the stock
elsaworkflows/elsa-studio-v3 image) needs its BACKEND__URL env var pointed at
this server's /elsa/api.
Description
Languages
C#
85.7%
HTML
10.7%
Dockerfile
3.6%