From ac2c62f9e67b7e68de7a1fb91cddc773865b47bc Mon Sep 17 00:00:00 2001 From: Gerdriaan Mulder Date: Sat, 28 Dec 2019 18:47:20 +0100 Subject: [PATCH 1/2] README updated with -root_url and sample systemd unit file --- README.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 086be37..d7935e8 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ are the exceptions: ## Database -We will be using [`go.etcd.io/bbolt`]. This file should be the *only* file +We use [`go.etcd.io/bbolt`]. This file should be the *only* file apart from our monolithic binary. All settings and keys should go in here. Any read-only data resides in the binary file (possibly compressed). @@ -114,8 +114,25 @@ server { proxy_pass http://127.0.0.1:8000; proxy_set_header Host rushlink.local; proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; } } ``` +`rushlink` automatically detects whether `http` or `https` is used when +`X-Forwarded-Proto` is correctly set. Otherwise, pass `-root_url +https://rushlink.local` to the binary (e.g. in the `systemd` unit file). + +## Sample `systemd` unit file + +``` +[Install] +WantedBy=nginx.service + +[Service] +Type=simple +User=rushlink +Group=nogroup +ExecStart=/var/lib/rushlink/rushlink -database /var/lib/rushlink/db -file-store /var/lib/rushlink/filestore -root_url https://rushlink.local +``` From 9a690e2b8b57f1313c5150ceef200eb82fe12ad6 Mon Sep 17 00:00:00 2001 From: Gerdriaan Mulder Date: Sat, 28 Dec 2019 19:24:59 +0100 Subject: [PATCH 2/2] README: restructure to accentuate building/deploying --- README.md | 74 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index d7935e8..64fdf03 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,53 @@ A URL shortener and (maybe) a pastebin server for our #ru community. -## Build instructions +## Building - `go get -u github.com/go-bindata/go-bindata/...` - `go generate ./...` - `go build ./cmd/rushlink` +## Deploying + +We recommend running `rushlink` behind a reverse proxy suitable for processing +HTTP requests, such as `nginx`, or `haproxy`. + +## Sample `nginx` config + +``` +server { + location / { + root /var/www/rushlink; + proxy_pass http://127.0.0.1:8000; + proxy_set_header Host rushlink.local; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_http_version 1.1; + } +} +``` + +`rushlink` automatically detects whether `http` or `https` is used when +`X-Forwarded-Proto` is correctly set. Otherwise, pass `-root_url +https://rushlink.local` to the binary (e.g. in the `systemd` unit file). + +## Sample `systemd` unit file + +``` +[Install] +WantedBy=nginx.service + +[Service] +Type=simple +User=rushlink +Group=nogroup +ExecStart=/var/lib/rushlink/rushlink -database /var/lib/rushlink/db -file-store /var/lib/rushlink/filestore -root_url https://rushlink.local +``` + +--- + +# Background + ## Libraries Use standard-Go-libraries if the job can be done with those. As of now, these @@ -105,34 +146,3 @@ header that the client sends. We can still wrap the plain-text page in a single We will try as hard as possible to not store any data about our users, and will only provide any data when we have the legal obligation to do so. -## Sample `nginx` config - -``` -server { - location / { - root /var/www/rushlink; - proxy_pass http://127.0.0.1:8000; - proxy_set_header Host rushlink.local; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_http_version 1.1; - } -} -``` - -`rushlink` automatically detects whether `http` or `https` is used when -`X-Forwarded-Proto` is correctly set. Otherwise, pass `-root_url -https://rushlink.local` to the binary (e.g. in the `systemd` unit file). - -## Sample `systemd` unit file - -``` -[Install] -WantedBy=nginx.service - -[Service] -Type=simple -User=rushlink -Group=nogroup -ExecStart=/var/lib/rushlink/rushlink -database /var/lib/rushlink/db -file-store /var/lib/rushlink/filestore -root_url https://rushlink.local -```