Fully decentralized Discourse forum (UPDATE)

My plan was to build a fully decentralized forum using Discourse, hosted on Akash, and using Handshake for the domain and mail server. I’m also running Windows, so a significant amount of early work went into getting the Akash installation process right for Windows.

Since starting work, the main wall I ran into was figuring out what to include in my deploy.yaml file - Discourse has a lot of specific environment variables and commands required to finish setup after deploying to a cloud instance. Because a manifest isn’t accepted by a provider if it won’t work and the lease is closed (rightfully so to prevent people from spending unnecessarily), it made it challenging for me to troubleshoot and tweak my deploy file.

I have the mail server and domain set up and ready to go (with traditional backups in case Handshake doesn’t work out initially), but because I’m still working on the deploy file, I’m not sure if the Handshake domain / mail server work.

My next steps:

  • Set Discourse config values as env variables in deploy.yaml
  • Figure out & set commands in deploy.yaml to map variables to corresponding Discourse config prompts
  • Test deployment until manifest successfully uploaded to provider and can deploy
  • Get provider IP address & add A record to DNS settings for the domain

Once the deploy.yaml file is correct and I can successfully complete bootstrapping, the Discourse server should be accessible through a web browser via the Handshake domain name used during configuration.

Hopefully, then, I’ll have a fully decentralized forum running.

Github repo with instructions

Current iteration of deploy.yaml file:

---
version: "2.0"

services:
  web:
    image: discourse/base
    
	env:
		- Hostname="hmail.app"
		- ADMIN_EMAIL="admin@boatmeal"
		- SMTP_ADDRESS="hmail.app"
		- SMTP_PORT="465"
		- SMTP_USERNAME="admin@boatmeal
		- SMTP_PW="coca2113"
		- NOTIF__EMAIL="admin@boatmeal"
	
	command: 
		- ./discourse-setup 	
	
    expose:
      - port: 3000
        as: 80
        to:
          - global: true

profiles:
  compute:
    web:
      resources:
        cpu:
          units: 0.1
        memory:
          size: 1Gi
        storage:
          size: 4Gi
  placement:
    westcoast:
      attributes:
        host: akash
      signedBy:
        anyOf:
          - "akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63"
      pricing:
        web: 
          denom: uakt
          amount: 1000

deployment:
  web:
    westcoast:
      profile: web
      count: 1