Why Akash?
This comprehensive guide will show you how to unlock the full potential of hosting Mastodon on Akash. Mastodon is an open-source social network platform that provides a powerful and secure way to communicate and collaborate with others. Akash is a decentralized cloud computing platform that allows users to deploy and manage distributed applications and services. By combining these two powerful technologies, you can benefit from a reliable, secure, and cost-effective hosting solution. This guide will provide you with the necessary information to get started and maximize the benefits of hosting Mastodon on Akash.
Requirements:
- Fund your Keplr Wallet / Chrome Extension with at least 5 $AKT.
- Mailjet account for transactional email, or any other SMTP server.
- Docker installed on your host machine to create secrets
- Account configured on Cloudmos Deploy
Setup Overview:
- Create secrets/keys locally and configure Mailjet for a domain/email.
- Update required variables in YAML
- Deploy in Cloudmos
On your local machine
We need to first create secrets and vapid keys before deploying. Start by copy and pasting the YAML below into your favorite text editor. We need to update the variables.
To create secrets you need to run a Dockerfile locally:
docker run --rm -it --entrypoint /bin/bash lscr.io/linuxserver/mastodon generate-secret
Create 3 secrets and fill in PASSWORD=, SECRET_KEY_BASE=, and OTP_SECRET=
Now, for Vapid Keys Run
docker run --rm -it --entrypoint /bin/bash lscr.io/linuxserver/mastodon generate-vapid
and fill in VAPID_PRIVATE_KEY= and VAPID_PUBLIC_KEY= with the values.
Mailjet
You need to setup a free Mailjet account to enable the SMTP server as configured below. Once you account is created, add a domain and verify it. Then get your API key credentials and update them in the YAML as required. You cannot register/verify a user without a working SMTP server! Update SMTP_FROM_ADDRESS=, SMTP_LOGIN=, and SMTP_PASSWORD=.
Cloudmos Deploy
Create Deployment
Using Cloudmos Deploy create a new blank deployment and copy and paste the YAML with the updated variables into the online editor.
First Run
When you run the app for the first time, it will create the databases and start the web server. However, a configuration change is needed, and it may take up to three minutes for the process to complete. Please be patient and let the process finish. If you click on the URI at this point you will see in the logs :
mastodon: [ActionDispatch::HostAuthorization::DefaultResponseApp] Blocked host: o0ido8nb6lc8v04816ipu8vhss.ingress.america.computer
Go to Cloudmos Deploy and find the deployment URI. This URI will be used to update the LOCAL_DOMAIN= and WEB_DOMAIN= environmental variables.
Edit the deployment YAML and locate the LOCAL_DOMAIN= and WEB_DOMAIN= environmental variables.
Update these variables with the full URI you copied from Cloudmos Deploy.
Click on “Update” to apply the changes to your deployment. Wait for the pod to be restarted. This may take a couple of minutes, so please be patient. Once the pod is restarted, try to access the URI. You may see an HTTPS warning, but it is safe to ignore it and proceed to the app. Finally, configure your DNS settings to point your domain to the URI.
version: "2.0" services: mastodon: image: linuxserver/mastodon expose: - port: 443 as: 443 to: - global: true - port: 80 as: 80 to: - global: true env: - PUID=1000 - PGID=1000 - AWS_ACCESS_KEY_ID= - AWS_SECRET_ACCESS_KEY= - DB_HOST=db - DB_NAME=mastodon - DB_PASS=mastodon - DB_POOL=5 - DB_PORT=5432 - DB_USER=mastodon - ES_ENABLED=false - ES_HOST=es - ES_PASS=elastic - ES_PORT=9200 - ES_USER=elastic - PASSWORD="" #Generated from (docker run --rm -it --entrypoint /bin/bash lscr.io/linuxserver/mastodon generate-secret) - LOCAL_DOMAIN= #Full URI used after deployment - OTP_SECRET="" #Generated from (docker run --rm -it --entrypoint /bin/bash lscr.io/linuxserver/mastodon generate-secret) - REDIS_HOST=redis - REDIS_PORT=6379 - S3_ALIAS_HOST= - S3_BUCKET= - S3_ENABLED=false - SECRET_KEY_BASE= - SIDEKIQ_DEFAULT=false - SIDEKIQ_ONLY=false - SIDEKIQ_QUEUE= - SIDEKIQ_THREADS=5 - SMTP_FROM_ADDRESS=mastodon@test.com #Signup for mailjet.com and setup email - SMTP_LOGIN= #mailjet API key - SMTP_PASSWORD= #mailjet secret - SMTP_PORT=25 - SMTP_SERVER=in-v3.mailjet.com - TZ=Etc/UTC - VAPID_PRIVATE_KEY="" #Generated from auth container (docker run --rm -it --entrypoint /bin/bash lscr.io/linuxserver/mastodon generate-vapid) - VAPID_PUBLIC_KEY="" #Generated from auth container command - WEB_DOMAIN= #Full URI used after deployment depends_on: - db - redis redis: image: redis:7-alpine expose: - port: 6379 proto: tcp to: - service: mastodon db: image: postgres:14-alpine expose: - port: 5432 proto: tcp to: - service: mastodon env: - POSTGRES_HOST_AUTH_METHOD=trust - POSTGRES_PASSWORD=mastodon - POSTGRES_DB=mastodon - POSTGRES_USER=mastodon profiles: compute: mastodon: resources: cpu: units: 4.0 memory: size: 2.5Gi storage: size: 16Gi redis: resources: cpu: units: 1 memory: size: 1Gi storage: - size: 1Gi db: resources: cpu: units: 1 memory: size: 1Gi storage: - size: 1Gi placement: akash: attributes: host: akash signedBy: anyOf: - "akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63" - "akash18qa2a2ltfyvkyj0ggj3hkvuj6twzyumuaru9s4" pricing: mastodon: denom: uakt amount: 100000 redis: denom: uakt amount: 1000 db: denom: uakt amount: 1000 deployment: mastodon: akash: profile: mastodon count: 1 redis: akash: profile: redis count: 1 db: akash: profile: db count: 1