-
Notifications
You must be signed in to change notification settings - Fork 224
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Supporting multi-node, containerised deployments #3198
Comments
There are a couple of scenarios/approaches I can imagine here:
The following are the main changes/additions I made to support multi-node, Core ArchivesSpace changes
Extra, somewhat container-specific featuresExtra things the container image supports which are not essential. These could
Plugin configurationTo install a plugin for a conventional ArchivesSpace deployment, people would I needed to install plugins into the image at build time, and provide a way to To support this, I allow the image build to be configured to include a dir containing For example, here's the config file we use to install the oauth plugin: I wrote a small CLI program that works with these config files to lock the git My normal go-to dynamic language is Python rather than Ruby, so I wrote this Container image itselfThe container image supports either running one or more ArchivesSpace |
Recently I reworked Cambridge University's ArchivesSpace deployment to address performance and reliability/availability problems that it'd been struggling with. We now deploy ArchivesSpace from a bespoke container image I created. We run each of the components (frontend, backend, public UI, indexer etc) in separate containers, and run 3 instances of the frontend, backend and public UI.
This approach has been really successful. It's been in production for a few months and we've had no downtime (other than one or two unrelated infra problems), and performance is consistent. Previously (with the conventional unix service deployment in one JVM process) we were experiencing the service becoming unresponsive quite regularly (sometimes every few days, usually every week or two). This was initially due to the JVM's memory not being appropriately tuned, but even after I did some tuning and scaled up the server a lot, it would still run out of memory periodically.
We can also do zero-downtime deploys now, which is very handy. We use a single-VM Docker Swarm cluster to run the containers, but this approach would work with Kubernetes or any orchestrator.
We'd like to share the work we've done to enable ArchivesSpace to deploy like this. It seems like it should be helpful for other people to be able to deploy from containers, even if they run everything from a single container. It would also help us if ArchivesSpace had official support for this, to reduce the amount of difference between our own deployment and the vanilla ArchivesSpace.
So this issue is really to talk about multi-node and containerised deployments, whether ArchivesSpace would like to have official support for them, and whether I can help with that.
(I've got a related PR in the oauth plugin to contribute a change I made to that plugin to support multi-node deployments: lyrasis/aspace-oauth#33 )
To build our ArchivesSpace container image I created a standalone repo (not a fork of the main ArchivesSpace source repo) that contains a kind of generic container image build for ArchivesSpace that allows anyone to build an ArchivesSpace image, customised with whichever plugins they use. That is here: https://gitlab.developers.cam.ac.uk/lib/dev/ams/archivesspace-container
Then we have another repo that uses
archivesspace-container
to build the image we deploy — it configures our plugins and has the CI config to build our images. So it's basically an example of usingarchivesspace-container
in practice. That is here: https://gitlab.developers.cam.ac.uk/lib/dev/ams/infra/I can say more about the changes I made to get this working, but it wasn't anything significant, most things were already in place. I'll leave it there for now, don't want to write too much!
The text was updated successfully, but these errors were encountered: