build | ||
cmd | ||
db | ||
html | ||
internal | ||
public | ||
.env.example | ||
.gitignore | ||
Caddyfile | ||
docker-compose.yml | ||
Dockerfile | ||
Dockerfile.caddy | ||
go.mod | ||
go.sum | ||
LICENSE | ||
Makefile | ||
production.yml | ||
README.md |
pastes.sh
A pastebin service for hackers.
comms
setup
- golang
v1.18
You'll also need some environment variables
export POSTGRES_PASSWORD="secret"
export DATABASE_URL="postgresql://postgres:secret@db/pastes?sslmode=disable"
export PASTES_SSH_PORT=2222
export PASTES_WEB_PORT=3000
export PASTES_DOMAIN="pastes.sh"
export PASTES_EMAIL="hello@pastes.sh"
export PASTES_PROTOCOL="http"
I just use direnv
which will load my .env
file.
development
db
I use docker-compose
to standup a postgresql server. If you already have a
server running you can skip this step.
Copy example .env
cp .env.example .env
Then run docker compose.
docker-compose up -d
Then create the database and migrate
make create
make migrate
build the apps
make build
run the apps
There are two apps: an ssh and web server.
./build/ssh
Default port for ssh server is 2222
.
./build/web
Default port for web server is 3000
.
subdomains
Since we use subdomains for blogs, you'll need to update your /etc/hosts
file
to accommodate.
# /etc/hosts
127.0.0.1 pastes.test
127.0.0.1 erock.pastes.test
Wildcards are not support in /etc/hosts
so you'll have to add a subdomain for
each blog in development. For this example you'll also want to change the domain
env var to PASTES_DOMAIN=pastes.test
.
deployment
I use docker-compose
for deployment. First you need .env.prod
.
cp .env.example .env.prod
The production.yml
file in this repo uses my docker hub images for deployment.
docker-compose -f production.yml up -d
If you want to deploy using your own domain then you'll need to edit the
Caddyfile
with your domain.