mirror of
https://github.com/mailscope/kumomta.git
synced 2026-08-25 21:58:18 +00:00
160 lines
4.0 KiB
Markdown
160 lines
4.0 KiB
Markdown
# Installing KumoMTA in a Docker container
|
|
|
|
## Quick Start with published Docker Image
|
|
|
|
Our CI builds the latest version of our image and publishes it
|
|
to the GitHub Container registry.
|
|
|
|
You'll need a policy script in order to start kumo.
|
|
|
|
Create a file named `init.lua` with these contents:
|
|
|
|
```lua
|
|
local kumo = require 'kumo'
|
|
-- This config acts as a sink that will discard all received mail
|
|
|
|
kumo.on('init', function()
|
|
-- Listen on port 25
|
|
kumo.start_esmtp_listener {
|
|
listen = '0:25',
|
|
-- allow all clients to send mail
|
|
relay_hosts = { '0.0.0.0/0' },
|
|
}
|
|
|
|
-- Define the default "data" spool location.
|
|
-- This is unused by this config, but we are required to
|
|
-- define a default spool location.
|
|
kumo.define_spool {
|
|
name = 'data',
|
|
path = '/tmp/kumo-sink/data',
|
|
}
|
|
|
|
-- Define the default "meta" spool location.
|
|
-- This is unused by this config, but we are required to
|
|
-- define a default spool location.
|
|
kumo.define_spool {
|
|
name = 'meta',
|
|
path = '/tmp/kumo-sink/meta',
|
|
}
|
|
end)
|
|
|
|
kumo.on('smtp_server_message_received', function(msg)
|
|
-- Accept and discard all messages
|
|
msg:set_meta('queue', 'null')
|
|
end)
|
|
```
|
|
|
|
When we launch the image, we want to mount our `init.lua` file into the image
|
|
and tell it to use it. The default location for this is `/opt/kumomta/policy`:
|
|
|
|
```console
|
|
$ sudo docker run --rm -p 2025:25 \
|
|
-v .:/opt/kumomta/policy \
|
|
--name kumo-sink \
|
|
ghcr.io/kumomta/kumomta:main
|
|
```
|
|
|
|
# Longer version that shows how to setup docker
|
|
|
|
!!! todo
|
|
Move most of this to a reference section
|
|
|
|
## Configure Docker
|
|
|
|
Ensure docker is actually installed in your server instance.
|
|
|
|
=== "DNF based systems"
|
|
In Rocky, Alma, and any other DNF package manager system
|
|
|
|
```console
|
|
$ sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
|
|
$ sudo dnf update -y
|
|
$ sudo dnf install -y docker-ce docker-ce-cli containerd.io
|
|
$ sudo systemctl enable docker
|
|
```
|
|
|
|
=== "APT based systems"
|
|
|
|
In Ubuntu, Debian, and other Debial APT package management systems:
|
|
|
|
```console
|
|
$ sudo apt update
|
|
$ sudo apt install -y apt-utils docker.io
|
|
$ sudo snap install docker
|
|
```
|
|
|
|
If you get an error that `/etc/rc.d/rc.local is not marked executable` then make it executable with `sudo chmod +x /etc/rc.d/rc.local`
|
|
|
|
### Start Docker
|
|
|
|
```console
|
|
$ sudo systemctl start docker
|
|
```
|
|
|
|
### Check if Docker is running
|
|
|
|
```console
|
|
$ systemctl status docker
|
|
```
|
|
|
|
### Enable Non-Root User Access
|
|
|
|
After completing Step 3, you can use Docker by prepending each command with sudo. To eliminate the need for administrative access authorization, set up a non-root user access by following the steps below.
|
|
|
|
1. Use the usermod command to add the user to the docker system group.
|
|
```console
|
|
$ sudo usermod -aG docker $USER
|
|
```
|
|
|
|
2. Confirm the user is a member of the docker group by typing:
|
|
```console
|
|
$ id $USER
|
|
```
|
|
|
|
It is a good idea to restart to make sure it is all set correctly.
|
|
|
|
## Build the KumoMTA container image
|
|
|
|
You need `git` to clone the repo:
|
|
|
|
=== "RPM based systems"
|
|
```console
|
|
$ sudo dnf install -y git
|
|
```
|
|
|
|
=== "APT based systems"
|
|
```console
|
|
$ sudo apt install -y git
|
|
```
|
|
|
|
Then clone the repo and run the image builder script:
|
|
|
|
```console
|
|
$ git clone https://github.com/kumomta/kumomta.git
|
|
$ cd kumomta
|
|
$ ./docker/kumod/build-docker-image.sh
|
|
```
|
|
|
|
This should result in something roughly like this:
|
|
|
|
```console
|
|
$ docker image ls kumomta/kumod
|
|
REPOSITORY TAG IMAGE ID CREATED SIZE
|
|
kumomta/kumod latest bbced15ff4d1 3 minutes ago 116MB
|
|
```
|
|
|
|
You can then run that image; this invocation mounts the kumo src dir at
|
|
`/config` and then the `KUMO_POLICY` environment variable is used to override
|
|
the default `/config/policy.lua` path to use the SMTP sink policy script
|
|
[sink.lua](https://github.com/kumomta/kumomta/blob/main/sink.lua), which will
|
|
accept and discard all mail:
|
|
|
|
```console
|
|
$ sudo docker run --rm -p 2025:25 \
|
|
-v .:/config \
|
|
--name kumo-sink \
|
|
--env KUMO_POLICY="/config/sink.lua" \
|
|
kumomta/kumod
|
|
```
|
|
|