From 38d43a0ea236afa84b3dd16d952eb46031caed74 Mon Sep 17 00:00:00 2001 From: realaravinth Date: Thu, 31 Mar 2022 16:40:54 +0530 Subject: [PATCH] feat: add bare metal deployment instructions --- docs/installation/bare-metal.md | 119 ++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 docs/installation/bare-metal.md diff --git a/docs/installation/bare-metal.md b/docs/installation/bare-metal.md new file mode 100644 index 0000000..327bdad --- /dev/null +++ b/docs/installation/bare-metal.md @@ -0,0 +1,119 @@ +# Bare metal: + +The process is tedious, most of this will be automated with a script in +the future. + +## 1. Create new user for running `pages`: + +```bash +sudo useradd -b /srv -m -s /usr/bin/zsh pages +``` + +## 2. Install Runtime dependencies + +1. [Nginx](https://packages.debian.org/bullseye/nginx) + +On Debian-based systems, run: + +```bash +sudo apt install nginx +``` + +## 3. Build `Pages` + +### i. Install Build Dependencies + +To build `pages`, you need the following dependencies: + +1. [Git](https://packages.debian.org/bullseye/git) +2. [pkg-config](https://packages.debian.org/bullseye/pkg-config) +3. [GNU make](https://packages.debian.org/bullseye/make) +4. [libssl-dev](https://packages.debian.org/bullseye/libssl-dev) +5. Rust + +To install all dependencies **except Rust** on Debian boxes, run: + +```bash +sudo apt-get install -y git pkg-config libssl-dev +``` + +### ii. Install Rust + +Install Rust using [rustup](https://rustup.rs/). + +rustup is the official Rust installation tool. It enables installation +of multiple versions of `rustc` for different architectures across +multiple release channels(stable, nightly, etc.). + +Rust undergoes [six-week release +cycles](https://doc.rust-lang.org/book/appendix-05-editions.html#appendix-e---editions) +and some of the dependencies that are used in this program have often +relied on cutting edge features of the Rust compiler. OS Distribution +packaging teams don't often track the latest releases. For this reason, +we encourage managing your Rust installation with `rustup`. + +**rustup is the officially supported Rust installation method of this +project.** + +```bash +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +``` + +### iii. Build + +```bash +$ make release +``` + +## 5. Install + +Install binary and copy demo configuration file into default configuration +lookup path(`/etc/static-pages/config.toml`) + +```bash +sudo cp ./target/release/pages /usr/local/bin/ && \ + sudo mkdir /etc/static-pages && \ + sudo cp config/default.toml /etc/static-pages/config.toml +``` + +## 4. Systemd service configuration: + +### i. Copy the following to `/etc/systemd/system/pages.service`: + +```systemd +[Unit] +Description=pages: Auto-deploy static websites from git repositories + +[Service] +Type=simple +User=pages +ExecStart=/usr/local/bin/pages +Restart=on-failure +RestartSec=1 +MemoryDenyWriteExecute=true +NoNewPrivileges=true +Environment="RUST_LOG=info" + +[Unit] +Wants=network-online.target +Wants=network-online.target +After=syslog.target + +[Install] +WantedBy=multi-user.target +``` + +### ii. Enable and start service: + +```bash +sudo systemctl daemon-reload && \ + sudo systemctl enable pages && \ # Auto startup during boot + sudo systemctl start pages +``` + +## 5. Optionally configure Nginx to reverse proxy requests to Pages + +**NOTE: This sections includes instructions to reverse proxy requests to +Pages API, not the websites managed by Pages.** + +See [here](../../config/pages-nginx-config) for sample Nginx configuration.