Medplum Server Plugin Architecture #1424
Replies: 2 comments 2 replies
-
This seems very desirable from a cross platform perspective, and BYO logging, email, storage and secrets seem like the right abstractions to expose. Potentially including plugins for things like linked data warehouse, or even other datastores seem desirable as well. I believe that is would be possible to abstract the server to support plugins and that would be great. Is it possible to get a unified |
Beta Was this translation helpful? Give feedback.
-
I agree with @reshmakh that this is a great step in the right direction. This should make it easier to: support additional cloud providers, plug in additional service providers, and enable community contributions. I had a few questions / comments about some of the implementation details. I would love to get community feedback on these as well
To me it seems like writing such a simple
|
Beta Was this translation helpful? Give feedback.
-
Medplum Server Plugin Architecture
The Medplum API server is currently a single NodeJS project, which can be run on bare Linux or in AWS. This is good for simplicity, but has a few limitations:
To be clear, this is not a discussion about microservices. We are committed to a single server deployment model. This is purely a code architecture discussion.
Examples of "sub services":
nodemailer
as a common interface would be better, to support a variety of options, including mock loggingBinary
API endpointsvm.createContext()
Proposal
The package currently known as
@medplum/server
would get chopped up into a series of component packages. While@medplum/server
is currently not published in npm, all of these component packages would be published.@medplum/server-plugins
@medplum/core
?@medplum/server-base
@medplum/server-base
express
and related express plugins@medplum/server-config-aws
@medplum/server-logging-aws-cloudwatch
@medplum/server-logging-aws-ses
@medplum/server-logging-aws-s3
@medplum/server-bot-runner-aws-lambda
Then, a fully configured server would do the following:
@medplum/server-base
index.ts
that puts them togetherFor example, an AWS server:
As a convenience, we could publish default server configurations as Docker images.
Beta Was this translation helpful? Give feedback.
All reactions