Replies: 6 comments
-
|
Based on our discussion in openUC2/imswitch-os#7, here's my current (very limited) understanding of the current conditions of the project which have implications for deployment strategies - please correct any mistakes I make so I can understand the situation better 🙂
Managing shared configs & secretsUnder the assumptions listed above, it might make sense to set non-secret config variables in files which are passed to Docker Compose, e.g.:
For services on the same container host, they can just share access to the same file(s). For services on different container hosts, either you can use Docker Compose (with or without Forklift) and just have something which mounts remotely-stored configs into the local filesystem (e.g. via Similarly, it might make sense to save secrets in files which are passed to Docker Compose's The secret & non-secret files could be saved within some predictable path, e.g. I've probably missed something in my assessment of Arkitekt's architecture and deployment requirements which might make these baseline recommendations not quite appropriate or not quite feasible - if so, please let me know so that I can adjust accordingly! If you can describe a few services and the specifics configs and secrets they need to share (as a microcosm of the overall Arkitekt system), we could also talk about solving the problem for those specific services so that we can have a more concrete discussion. The potential role of ForkliftForklift is primarily aimed at improving the user/developer experience related to items 1-4 above, i.e. integrating and version-controlling combinations of versions of disparate software services, and their associated general (i.e. not specific to a single deployment) configs. Items 5-7 above are intended to be solved with orthogonal systems (e.g. functionality already provided via Docker Compose) under the assumption that they can be made to interact/combine well with Forklift (even if Forklift's design must be adjusted to make that true). Note that Forklift is designed to make system state changes (roughly) atomic at the level of a single container host (i.e. computer or VM), not a cluster of container hosts. Note also that Forklift currently deploys Compose apps via Docker Compose rather than Docker Swarm. One way Forklift might provide some benefits to Arkitekt could be via the following architecture:
Depending on project requirements, other architectures may also make sense - with their own trade-offs. |
Beta Was this translation helpful? Give feedback.
-
|
In openUC2/imswitch-os#7 (comment), @beniroquai proposed having a ready-to-deploy OS image for running Arkitekt on a single computer (or VM). I think that would be great as a way of making it easier to try out Arkitekt (e.g. in a cloud VM). The use (and usefulness) of such an OS image could be somewhat independent of exactly how services are baked into that OS image (e.g. with Forklift or not, with one secrets-management strategy or another), so I'm making a separate comment thread for this topic under the overall discussion item of "Arkitekt deployment strategies". If I had to be the person building, maintaining, and sysadmin'ing such an OS image, my initial attempt would be based on something like Fedora CoreOS using the Bootable Containers approach. That approach is how I currently build a custom Fedora Kinoite-based OS image for my laptop via GitHub Actions, and how I make automatic OS updates safe and undo-able on my laptop. The resulting OS images can be hosted as OCI images for free on any OCI image registry (such as the GitHub Container Registry, and probably also Docker Hub if it doesn't have size limits for container images), and they can also be exported into various formats (which would need to be hosted in some other way). |
Beta Was this translation helpful? Give feedback.
-
|
Thanks so much for the thoughtful summary—this really captures the current state of Arkitekt better than I’ve managed to explain it myself in the past 😅 I'd love to offer a few clarifications and background notes. A lot of this has grown organically over time, so criticism is very welcome! 1. Service Modularity & Polyrepo StructureYes, the intention from the beginning was to keep services independently deployable and composable. Most services are maintained and (supposedly) tested in isolation, and they can be used on their own. For example
While the polyrepo approach has its downsides (and I’m not in love with the sprawl, and it must be overwhelming in the start), merging everything into a monorepo would be difficult given how diverse the dependencies are—e.g., 2. Deployment Focus: Local First, Federated LaterA smooth, local "try-it-out" experience is still the top priority—especially for new users. That said, it currently requires more effort than I'd like. Distributed multi-machine deployments were part of the way-back vision, and the stack is really well-suited to it, but in practice, most use cases don’t yet demand that level of scale. Another idea is pushing it to "federated arkitekt" but thats still in the pipeline. And i truly believe local-single-machine-first. 3. Minimal Inter-Service DependenciesServices are deliberately designed to be self-contained. They rely only on common backend infrastructure:
There is no direct service-to-service API communication. Instead, apps (which act as intermediaries) consume and integrate data from services externally. For example, an app might associate a microscopy image from This decoupling gives a lot of flexibility, though it does push complexity into the app layer—something we're always balancing. 4. Just a few words on Auth: JWT-Based AuthAll services rely on JWTs for authentication. They don’t need to know where a token came from—just that it’s valid. Currently, tokens are issued by the Importantly, 5. Current Deployment Approach: Shared Config & Compose GenerationDeployments currently rely on a autogenerated shared directory that contains:
This setup is powered by two tools:
Why did I design it that way?
6. Where Forklift Could Really HelpHonestly, Forklift looks like a great fit for all things packaging, and some modular setup for a cloud or local vm. I think your idea of giving users a prebuild ubuntu / fedora image would be amazing <3 Thanks again for diving in so deeply—this kind of feedback and perspective is super valuable. 🙏 |
Beta Was this translation helpful? Give feedback.
-
|
One maybe very obvious side-comment would be to differentiate between host and client-side OS images. Anyway, great stuff of which I understood - not everything :D |
Beta Was this translation helpful? Give feedback.
-
|
I think both ideas are very promising! I’ve been thinking a bit more about the ClientOS concept. Currently, everything related to an Arkitekt app can be bundled into a Docker container, since the apps primarily just communicate with APIs. This is also how we handle plugins internally—each is a container that can run on any Docker host with access to the Arkitekt server. The app store, in this context, functions as a central repository of all installable apps and provides an interface to deploy them on connected Docker hosts via deployer apps, which are essentially wrappers around a local Docker client. (You can check out arkitektio/deployer for more implementation details.) Based on this, I could imagine a potential Arkitekt-based "swapping" mechanism that works like this:
✅ Potential benefits
❌ A few concerns to consider
|
Beta Was this translation helpful? Give feedback.
-
|
Here are my follow-up comments/questions on a server-side OS image:
Here are my follow-up comments on client-side OS images:
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
This is a place to discuss deployment strategies for an arkitekt server and options beyond Konstruktor and the new blok cli builds. It would be super nice to have something like the super cool forklift project to easily deploy an arkitekt server on hardware and to hide the microservice architecture a bit away.
Beta Was this translation helpful? Give feedback.
All reactions