+++
title = "Service Managers (eg. systemd)"
weight = 40
+++

You may want to start Aerogramme on boot.

## systemd

We make some assumptions for this systemd deployment.

 - Your garage binary is located at `/usr/local/bin/aerogramme`.
 - Your configuration file is located at `/etc/aerogramme/config.toml`.
 - If you use Aerogramme's user management, the user list is set to `/etc/aerogramme/users.toml`.

Create a file named `/etc/systemd/system/aerogramme.service`:

```ini
[Unit]
Description=Aerogramme Email Server
After=network-online.target
Wants=network-online.target

[Service]
Environment='RUST_LOG=aerogramme=info' 'RUST_BACKTRACE=1'
ExecStart=/usr/local/bin/aerogramme -c /etc/aerogramme/config.toml provider daemon
DynamicUser=true
ProtectHome=true
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
```

**A note on hardening:** The Aerogramme daemon is not expected to write on the filesystem.
When you use the `aerogramme provider account`, the write is done by your current user/process,
not the daemon process. That's why we don't define a `StateDirectory`.

To start the service then automatically enable it at boot:

```bash
sudo systemctl start aerogramme
sudo systemctl enable aerogramme
```

To see if the service is running and to browse its logs:

```bash
sudo systemctl status aerogramme
sudo journalctl -u aerogramme
```

To add a new user:

```bash
sudo aerogramme \
  -c /etc/aerogramme/config.toml \
  provider account add --login alice --setup #...

sudo systemctl reload aerogramme
```

## docker-compose

An example docker compose deployment with Garage included:

```yml
version: "3"
services:
  aerogramme:
    image: registry.deuxfleurs.org/aerogramme:0.2.0
    restart: unless-stopped
    ports:
      - "1025:1025"
      - "143:1143"
    volumes:
      - aerogramme.toml:/aerogramme.toml
      - users.toml:/users.toml
  garage:
    image: docker.io/dxflrs/garage:v0.9.1
    restart: unless-stopped
    volumes:
      - garage.toml:/etc/garage.toml
      - garage-meta:/var/lib/garage/meta
      - garage-data:/var/lib/garage/data
```
