A smol blog platform.


  • golang v1.18

You’ll also need some environment variables

export POSTGRES_PASSWORD="secret"
export DATABASE_URL="postgresql://postgres:secret@db/prose?sslmode=disable"
export PROSE_SSH_PORT=2222
export PROSE_WEB_PORT=3000
export PROSE_DOMAIN=""
export PROSE_EMAIL="[email protected]"

I just use direnv which will load my .env file.



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.


Default port for ssh server is 2222.


Default port for web server is 3000.


Since we use subdomains for blogs, you’ll need to update your /etc/hosts file to accommodate.

# /etc/hosts prose.test erock.prose.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 PROSE_DOMAIN=prose.test.


I use docker-compose for deployment. First you need

cp .env.example

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.


View Github