#!/bin/bash BLACK_BOLD=$'\e[1;30m' RESET=$'\e[0m' # Add swap space # https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04 fallocate -l 1G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile swapon --show echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab sysctl vm.swappiness=10 sysctl vm.vfs_cache_pressure=50 echo 'vm.swappiness=10' >> /etc/sysctl.conf echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf # Configure Linux users groupadd --system caddy useradd --system \ --gid caddy \ --create-home --home-dir /home/caddy \ caddy groupadd --system hmn useradd --system \ --gid hmn \ --create-home --home-dir /home/hmn \ hmn groupadd --system annotations useradd --system \ --gid annotations \ --create-home --home-dir /home/annotations \ annotations # Install important stuff apt update apt install -y \ build-essential monit \ libcurl4-openssl-dev byacc flex # Install Go wget https://golang.org/dl/go1.17.linux-amd64.tar.gz tar -C /usr/local -xzf go1.17.linux-amd64.tar.gz echo 'PATH=$PATH:/usr/local/go/bin:/root/go/bin' >> ~/.profile source ~/.profile # Install Caddy # https://www.digitalocean.com/community/tutorials/how-to-host-a-website-with-caddy-on-ubuntu-18-04 # (with modifications) go install github.com/caddyserver/xcaddy/cmd/xcaddy@v0.1.9 xcaddy build \ --with github.com/caddy-dns/cloudflare \ --with github.com/aksdb/caddy-cgi/v2 mv caddy /usr/bin chown root:root /usr/bin/caddy chmod 755 /usr/bin/caddy # Install Postgres # (instructions at https://www.postgresql.org/download/linux/ubuntu/) sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt-get update sudo apt-get -y install postgresql # Configure Postgres sudo -u postgres createuser --createdb --login --pwprompt hmn # Set up the folder structure, clone the repo sudo -u hmn bash -s <<'SCRIPT' cd ~ mkdir log mkdir bin ssh-keygen -t ed25519 -C "beta-server" -N "" -f ~/.ssh/gitlab git config --global core.sshCommand "ssh -i ~/.ssh/gitlab" echo "" echo "Copy the following key and add it as a Deploy Key in the project in GitLab (https://git.handmade.network/hmn/hmn/-/settings/ci_cd#js-deploy-keys-settings):" cat ~/.ssh/gitlab.pub echo "Press enter to continue when you're done." read git clone git@gitssh.handmade.network:hmn/hmn.git SCRIPT # Copy config files to the right places cp /home/hmn/hmn/server/Caddyfile /home/caddy/Caddyfile cp /home/hmn/hmn/server/logrotate /etc/logrotate.d/hmn cp /home/hmn/hmn/server/monitrc ~/.monitrc cp /home/hmn/hmn/server/deploy.conf.example /home/hmn/hmn/server/deploy.conf cp /home/hmn/hmn/src/config/config.go.example /home/hmn/hmn/src/config/config.go cp /home/hmn/hmn/cinera/cinera.conf.sample /home/hmn/hmn/cinera/cinera.conf chmod 600 ~/.monitrc # TODO: Work this message in with all the others about config files you need to update echo "The Caddyfile has been written to the home folder. Please edit it and add the Cloudflare key so that the ACME challenge can pass." echo <