AJ ONeal d244cbf589 | ||
---|---|---|
assets | ||
examples | ||
internal/db | ||
public | ||
tools | ||
vendor | ||
.gitignore | ||
.prettierignore | ||
.prettierrc | ||
AUTHORS | ||
LICENSE | ||
README.md | ||
go.mod | ||
go.sum | ||
main.go |
README.md
goserv
Boilerplate for how I like to write a backend web service
Build
export GOFLAGS="-mod=vendor"
go mod tidy
go mod vendor
go generate -mod=vendor ./...
go build -mod=vendor .
./goserv run --listen :3000 --serve-path ./overrides
Eamples and Config Templates
The example files are located in ./examples
- Caddyfile (web server config)
- .env (environment variables)
- build.sh
Dependencies
This setup can be run on a VPS, such as Digital Ocean, OVH, or Scaleway for $5/month with minimal dependencies:
- VPS
- Caddy
- PostgreSQL
- Serviceman
Mac, Linux:
curl -fsS https://webinstall.dev | bash
export PATH="$HOME:/.local/bin:$PATH"
webi caddy serviceman postgres
VPS Setup
You should have a domain pointing to a VPS and create a user account named app
(because that's a common convention). This script will create an app
user,
copying the authorized_keys
from the root account.
my_vps='example.com'
ssh root@"$my_vps" 'curl -sS https://webinstall.dev/ssh-adduser | bash'
You can then login as a normal user.
ssh app@"$my_vps"
It is now safe to disable the root account.
Caddy (Automatic HTTPS Server)
curl -fsS https://webinstall.dev/caddy | bash
You can start Caddy as a system service under the app user like this:
sudo setcap 'cap_net_bind_service=+ep' "$(readlink $(command -v caddy))"
sudo env PATH="$PATH" \
serviceman add --name caddy --username app \
caddy run --config ./Caddyfile
See the Cheat Sheet at https://webinstall.dev/caddy and https://webinstall.dev/serviceman
PostgreSQL (Database)
curl -fsS https://webinstall.dev/postgres | bash
You can start Postgres as a system service under the app user like this:
sudo env PATH="$PATH" \
serviceman add --name postgres --username app -- \
postgres -D /home/app/.local/share/postgres/var -p 5432
Username and password are set to 'postgres' by default:
psql 'postgres://postgres:postgres@localhost:5432/postgres'
See the Cheat Sheets at https://webinstall.dev/postgres and https://webinstall.dev/serviceman
License
Copyright 2020. All rights reserved.