Server Installation
The LyftData binary is installed and available on the system. Use this guide to wire the server into systemd and choose the Linux deployment shape that matches your host.
Use the steps below to register the service account, install the systemd unit, and verify the control plane is reachable.
Need a trial-only setup? Start with the Evaluation Quickstart before committing to service accounts and systemd units.
Choose a deployment pattern
| Pattern | Best for | Service / env / binary | TLS model |
|---|---|---|---|
| Simple service-managed host | evaluation, small internal installs, first-time setup | lyftdata-server, /etc/default/lyftdata-server, /usr/sbin/lyftdata | LyftData serves HTTPS directly (self-signed by default) |
| Reverse-proxied production host | internet-facing deployments, hardened Linux hosts, rollback-friendly releases | lyftdata, /etc/lyftdata/lyftdata.env, /opt/lyftdata/current/bin/lyftdata | Caddy/Nginx terminates TLS; LyftData stays on 127.0.0.1:3000 over HTTP |
Create systemd files (simple layout)
Create a systemd service unit file:
sudo vi /etc/systemd/system/lyftdata-server.serviceThe file must contain the following:
[Unit]Description=lyftdata ServerAfter=network.target auditd.service
[Service]EnvironmentFile=/etc/default/lyftdata-serverUser=lyftdataGroup=lyftdataExecStart=/usr/sbin/lyftdata run serverRestart=on-failureRestartSec=60
[Install]WantedBy=multi-user.targetCreate an environment file for the EnvironmentFile setting:
sudo vi /etc/default/lyftdata-serverHere, the Server is configured through either lyftdata run server options or environment variables. In this case, we’ll be using the latter.
At a minimum, the Server needs LYFTDATA_STAGING_DIR and LYFTDATA_LICENSE_EULA_ACCEPT. For unattended service installs, also set LYFTDATA_ADMIN_INIT_PASSWORD:
LYFTDATA_STAGING_DIR=/var/lib/lyftdata-serverLYFTDATA_LICENSE_EULA_ACCEPT=yesLYFTDATA_ADMIN_INIT_PASSWORD=ChangeMeVerySoonWe’ve added 2 additional environment variables:
-
LYFTDATA_LICENSE_EULA_ACCEPT=yesprevents the one-time prompt for accepting the EULA. -
LYFTDATA_ADMIN_INIT_PASSWORDprovides an initialpasswordfor the Serveradminuser.
If you later lose access to that account, use the operator recovery runbook: Reset an admin password.
If LYFTDATA_ADMIN_INIT_PASSWORD is unset, the server enters Initial Setup Required and writes a one-time setup link to /var/lib/lyftdata-server/bootstrap/initial-admin.url. journalctl shows that setup is required and where the file lives, but it does not print the token itself.
Useful local alternatives when you omit LYFTDATA_ADMIN_INIT_PASSWORD:
sudo -u lyftdata /usr/sbin/lyftdata server bootstrap --staging-dir /var/lib/lyftdata-server --bind-address 127.0.0.1:3000 --print-urlsudo -u lyftdata /usr/sbin/lyftdata server create-admin --staging-dir /var/lib/lyftdata-server
Once you have saved the service unit file, reload systemd:
sudo systemctl daemon-reloadTo start the Server at boot, enable the service with:
sudo systemctl enable lyftdata-serverFinally, start the Server:
sudo systemctl start lyftdata-serverVerify that the Server started successfully:
systemctl status lyftdata-serverIt’s a good idea to inspect the startup output so you can confirm the ready splash and, if needed, see the setup URL file path:
journalctl -u lyftdata-serverThe Server will be listening on LYFTDATA_BIND_ADDRESS (default 127.0.0.1:3000). HTTPS is enabled by default using a self-signed certificate.
Go to https://localhost:3000/ in a browser. You will see a certificate warning because the default certificate is self-signed; proceed for evaluation. If you used LYFTDATA_ADMIN_INIT_PASSWORD, sign in as admin with that password. Otherwise, retrieve the one-time setup URL from /var/lib/lyftdata-server/bootstrap/initial-admin.url, create the admin password in the setup flow, and then sign in.
At this point, the Server is ready to start serving Workers.
Reverse-proxied production pattern
Use this pattern when the host already runs a reverse proxy, when you want the server port kept off the network, or when you want stricter systemd isolation that is closer to a production rollout.
1. Create the service account and directories
sudo useradd --system --no-create-home --shell /usr/sbin/nologin lyftdata-serversudo install -d -m 0755 /etc/lyftdata /var/lib/lyftdata /opt/lyftdata/releasessudo install -d -m 0750 -o lyftdata-server -g lyftdata-server /var/lib/lyftdata/lyftdataPlace the binary in a versioned release directory and point /opt/lyftdata/current at the active release:
sudo install -d -m 0755 /opt/lyftdata/releases/<release-id>/binsudo install -m 0755 ./lyftdata /opt/lyftdata/releases/<release-id>/bin/lyftdatasudo ln -sfn /opt/lyftdata/releases/<release-id> /opt/lyftdata/currentThis symlink pattern keeps upgrades and rollbacks predictable.
2. Create the environment file
sudoedit /etc/lyftdata/lyftdata.envExample:
LYFTDATA_LICENSE_EULA_ACCEPT=yesLYFTDATA_ADMIN_INIT_PASSWORD=ChangeMeVerySoonLYFTDATA_VARIABLES_MASTER_KEY_SOURCE=envLYFTDATA_VARIABLES_MASTER_KEY=<hex-64>LYFTDATA_CREDENTIAL_MANAGER_MASTER_KEY_SOURCE=envLYFTDATA_CREDENTIAL_MANAGER_MASTER_KEY=<hex-64>RUST_LOG=infoGenerate the two master keys with:
openssl rand -hex 32Headless Linux servers should set the variable-store and credential-manager master keys explicitly in the env file. This avoids depending on an interactive desktop keyring.
Lock the env file down after editing it:
sudo chown root:root /etc/lyftdata/lyftdata.envsudo chmod 0600 /etc/lyftdata/lyftdata.env3. Install the hardened systemd unit
sudoedit /etc/systemd/system/lyftdata.serviceExample:
[Unit]Description=LyftData serverAfter=network-online.targetWants=network-online.target
[Service]Type=simpleUser=lyftdata-serverGroup=lyftdata-serverWorkingDirectory=/var/lib/lyftdata/lyftdataEnvironmentFile=/etc/lyftdata/lyftdata.envEnvironment=HOME=/var/lib/lyftdata/lyftdataEnvironment=XDG_CONFIG_HOME=/var/lib/lyftdata/lyftdata/.configEnvironment=XDG_DATA_HOME=/var/lib/lyftdata/lyftdata/.local/shareEnvironment=XDG_CACHE_HOME=/var/lib/lyftdata/lyftdata/.cacheExecStart=/opt/lyftdata/current/bin/lyftdata run server --bind-address 127.0.0.1:3000 --disable-tlsRestart=on-failureRestartSec=2UMask=0077NoNewPrivileges=truePrivateTmp=truePrivateDevices=trueProtectSystem=strictProtectHome=trueProtectKernelTunables=trueProtectKernelModules=trueProtectControlGroups=trueLockPersonality=trueMemoryDenyWriteExecute=trueRestrictNamespaces=trueRestrictSUIDSGID=trueRestrictRealtime=trueSystemCallArchitectures=nativeRestrictAddressFamilies=AF_INET AF_INET6 AF_UNIXCapabilityBoundingSet=SystemCallFilter=@system-serviceReadWritePaths=/var/lib/lyftdata/lyftdata
[Install]WantedBy=multi-user.target4. Start and verify the service
sudo systemctl daemon-reloadsudo systemctl enable --now lyftdatasudo systemctl status lyftdata --no-pagercurl http://127.0.0.1:3000/api/livenessIf you want to inspect the sandbox posture:
systemd-analyze security lyftdata.service5. Put a reverse proxy in front
Keep LyftData bound to 127.0.0.1:3000 and expose only the reverse proxy on 80/443.
When proxying to LyftData:
- terminate TLS in Caddy or Nginx
- forward requests to
http://127.0.0.1:3000 - keep the raw
3000listener closed to public networks - point browsers, CLI clients, and workers at the proxy URL, not the loopback address
See Networking & TLS for the connectivity model and Security Hardening for broader host controls.
When the reverse proxy is ready, open the public HTTPS URL in a browser and sign in as admin using the configured bootstrap password, or complete setup from /var/lib/lyftdata/lyftdata/bootstrap/initial-admin.url if you intentionally omitted LYFTDATA_ADMIN_INIT_PASSWORD.