I’m intending to acquire a new VPS running Arch Linux (x86_64), and set up mailcow as the email server engine. Also, I intend to run a few websites from the same VPS (it should have enough virtual resources for this, at least 32GiB RAM, 500GiB SSD disk space, and 8 virtual CPUs in a KVM/QEMU VM). There will be very few regular users of this system, mainly for family email domains, and personal interest, low volume websites.
I was planning on leveraging the following services within mailcow: nginx, mariadb, and Let’s Encrypt/certbot. Each website would be its own service/container, using a separate database within mariadb (or maybe a separate mysql container, see below). The website containers themselves would be running the latest version of Ghost, at least until Ghost 6 reaches GA release (then I’d track Ghost 5 until it reaches end of life).
I found which suggests this is possible. However, I plan on using the official images of all services that don’t come as part of mailcow, so I’m not sure how necessary it will be to build my own images (primarily, for Ghost).
I already have experience using Docker in this fashion on my other VPS, though I learned about mailcow about a year after I had set up my docker compose
stack. If the new VPS I’m planning is successful (at least, technically), I may revamp my existing VPS to use mailcow with a completely different set of domains and databases (one will also include a Gitea site). But that’s at least a year if not longer away.
The only real concern I have at the outset is Ghost is only officially supported on MySQL, not MariaDB. On my existing docker compose stack I ran into an issue with the Ghost databases when they were running on MariaDB, so I converted them to official Oracle MySQL. Later on I came to understand the problem was actually a bug introduced in a specific minor release of Ghost 4, but I had already made the change so I left it.
I’m not against running more than one database engine container. On my existing docker compose stack I had three database engines at one time: MySQL (for Ghost), MariaDB (for Gitea), and even PostgreSQL (for the comment engine containers; Ghost 4 didn’t have native comment functionality in it; this was corrected in Ghost 5). My sites were low volume enough that this didn’t appear to present a performance problem.
Right now I have two files for my docker compose
stack: .env, containing all of my version variables, database names/credentials, and various other things that are referenced within my docker-compose.yml file. Basically what I’m looking for is the proper way to do this to be supportable by the mailcow community, since this is mainly just a hobby project for me.
I’m really excited about mailcow, I always found it daunting to try and run my own mail server. With all the security implications and headaches that I anticipate classically came with it. I don’t want to be a spam hub, or even worse, a vector for phishing, malware, and ultimately ransomware campaigns. Mailcow seems to do a lot of that heavy lifting for us, so I’m hoping to find success with it and hopefully give back to the community as I learn.
Any links or documentation, beyond what I’ve already found, would be most appreciated. Thanks in advance!