Link Search Menu Expand Document

Simple server deployment and configuration

system-deploy is a systemd inspired server configuration tool with focus on simplicity and ease of use.


Get started now View it on GitHub

GitHub go.mod Go version Stable: Beta GitHub GitHub release (latest SemVer)


Overview

system-deploy started as my personal server configuration and management tool. It’s heavily inspired by systemd’s unit files and is focused on simplicity and ease of use. Thanks to the Go programming language, the released binary is statically linked and does not require any external dependencies like heavy execution environments or preinstalled packages.

Features

  • systemd unit file syntax
  • static binary without external dependencies
  • detect changes and trigger actions
  • multi-platform supported
  • extensible and hackable

Getting started

This section will give you a quick overview on how to work with system-deploy so you can jumpstart your server configuration. For more information on system-deploy, examples and more documentation please checkout the sections on the left.

Installation

To install system-deploy, just download the latest release binary for your platform from the release page and copy it to a location inside your $PATH.

Release Page

For example, to install system-deploy to /usr/local/bin, use the following:

VERSION=0.1.0
DOWNLOAD_LINK=https://github.com/ppacher/system-deploy/releases/download/v${VERSION}/system-deploy_${VERSION}_linux_x86_64.tar.gz
              
# Download and unpack the archive
wget -O system-deploy.tar.gz ${DOWNLOAD_LINK}
tar xfz ./system-deploy.tar.gz

# Add execution permissions and copy to /usr/local/bin
chmod a+x ./system-deploy
sudo mv ./system-deploy /usr/local/bin 

Finally, try running system-deploy:

system-deploy help

Create your first task

Now, let’s create your first system-deploy task by creating the directory ~/.deploy/ and a task file:

~/.deploy/10-install-tools.task

[Task]
Description=Install various tools

[InstallPackages]
# AptPkgs will only be installed if `apt` is
# available (i.e. on Debia, Ubuntu and friends)
AptPkgs=vim git golang zsh restic ssmtp htop acl
AptPkgs=tree unattended-upgrades

# PacmanPkgs will onyl be installed if `pacman`
# is available (i.e. on Arch Linux, Manjaro, ...)
PacmanPkgs=vim go git acl zsh restic htop tree msmtp

Finally, execute all tasks in ~/.deploy:

$ system-deploy ~/.deploy
INFO[0004] 10-install-tools.task         : updated 

Congrats, you just created your first deployment task! Time to read on:

📖 Documentation 🧰 Actions 📓 Examples

About the project

system-deploy is © 2020 by Patrick Pacher and Contributors

License

system-deploy itself is licensed under a BSD 3-clause license. See LICENSE for more information.

Note that the binaries distributed via the release page are licensed under GPL-3 because the EditFile action is compiled against a GPL-3 licensed library.

Thank you to the contributors of system-deploy!

  • ppacher