Skip to content

Systemd

Systemd is the default system and service manager on most Linux distributions. It is usually installed by default so no installation is needed on supported Swift distributions.

Configure

Each Vapor app on your server should have its own service file. For an example Hello project, the configuration file would be located at /etc/systemd/system/hello.service. This file should look like the following:

[Unit]
Description=Hello
Requires=network.target
After=network.target

[Service]
Type=simple
User=vapor
Group=vapor
Restart=always
RestartSec=3
WorkingDirectory=/home/vapor/hello
ExecStart=/home/vapor/hello/.build/release/App serve --env production
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=vapor-hello

[Install]
WantedBy=multi-user.target

As specified in our configuration file the Hello project is located in the home folder for the user vapor. Make sure WorkingDirectory points to the root directory of your project where the Package.swift file is.

The --env production flag will disable verbose logging.

Environment

Otherwise, quoting the values is optional but recommended.

You can export variables in two ways via systemd. Either by creating an environment file with all the variables set in it:

EnvironmentFile=/path/to/environment/file1
EnvironmentFile=/path/to/environment/file2

Or you can add them directly to the service file under [service]:

Environment="PORT=8123"
Environment="ANOTHERVALUE=/something/else"

Exported variables can be used in Vapor using Environment.get

let port = Environment.get("PORT")

Start

You can now load, enable, start, stop and restart your app by running the following as root.

systemctl daemon-reload
systemctl enable hello
systemctl start hello
systemctl stop hello
systemctl restart hello