I'm having a small amount of trouble pinning down exactly how I want to architect my Docker Swarm cluster. Currently it consists of:
1 MariaDB which will need to have persistent storage suitable for a database.
2 x MediaWiki servers which will need to have persistent storage suitable for storing images, videos and other media files.
Some kind of ingress that will map a domain name to each of the MediaWiki servers based on domain name.
I could do with some feedback on possible ways of architecting this. Ideally I'd like all three servers to contain instances of the MediaWiki application or perhaps 2 servers and 1 dedicated host server for the database. One MediaWiki application receives around 20x the traffic of the other so would benefit running over multiple machines.
The trouble I'm having is trying to persist data between deployments. I'm currently considering something like CephFS with block storage mounted into one master host and two slave instances replicating from that.
I also have not explored the ingress component yet but I'm assuming I can configure some kind of Nginx server, ideally with Lets Encrypt enabled, that will proxy traffic to either of the MediaWiki hostnames depending on the incoming domain name, however this may be a naive assumption.
You are going way over the top with ceph to store images. You are bound for failure on that.
Run it all in swarm but store your media on a block storage like AWS S3 for example. If you don't use a provider with something like S3 then look into
https://minio.io/
Its API compatible with S3. The benefit being most all major software has options in it for S3.