= Mailcow on Kubernetes
Matthias Andreas Benkard
:experimental:
:data-uri:
:sectnums:
:toc:
:stem:
:toclevels: 2
:icons: font
:source-highlighter: prettify

== Description

This directory contains a distribution of https://mailcow.github.io/mailcow-dockerized-docs/[*Mailcow*]
that you can run in a https://matthias.benkard.de/posts/814[*Kata container*] as part of a *Kubernetes cluster*.

The main artifact provided is a Docker image, meant to run in a Kata container, which embeds its own
https://www.docker.com[Docker daemon] and copies of https://docs.docker.com/compose/[docker-compose] and a very slightly patched
https://github.com/mailcow/mailcow-dockerized/[mailcow-dockerized].

== Usage

=== Building the Docker image

The main Docker image that you can run in the cluster is defined in link:default.nix[].
To build it, you can either go through the regular procedure of
https://nixos.org/guides/building-and-running-docker-images.html[building Docker images with Nix]
or make use of the top-level link:../Makefile[Makefile]:

[source,shell script]
----
make mailcow.load
----

After building and loading the image, push it to the registry of your choice.

=== Deploying to Kubernetes

First, create a *configuration file* as explained in the https://mailcow.github.io/mailcow-dockerized-docs/i_u_m_install/[Mailcow installation howto] and deploy the configuration as a *Kubernetes secret*:

[source,shell script]
----
kubectl create secret generic mailcow-secrets \
    --from-file=mailcow.conf=src/mailcow-dockerized/mailcow.conf
----

You can then use the provided link:mailcow.yaml[] file to perform the *deployment*.
Be sure to change the *image name* to the image you built above.
You probably also want to adjust the *namespace* unless a namespace named `mulk` makes sense to you.

=== Updating Mailcow

Updating should usually be as easy as *synchronizing* the link:src/mailcow-dockerized/[] subtree with *upstream* and then <<Building the Docker image,rebuilding the image>>.

To synchronize the subtree, use `git subtree`:

[source,shell script]
----
git subtree pull \
    --prefix=mailcow/src/mailcow-dockerized \
    https://github.com/mailcow/mailcow-dockerized.git \
    master
----
