I'm on the socials!! GoToSocial is my private portal to the Fediverse!

I've been looking into hosting my own Mastodon instance for the longest time now, and it always felt a bit of a challenge and a resource hungry hobby to follow. A few weeks ago Martin Wimpress of Linux Matters Podcast fame suggested that GoToSocial is a great answer to the need for a self controlled, one-man-show, lightweight, fediverse hub, so I spun up my own instance to try it out.

social.kastanis.gr is where I will be posting snippets of my small tech projects, cool AliExpress finds, docker apps that I never get around to reviewing on this very blog, along with old man yelling at cloud ramblings.

You can visit the informational instance of GoToSocial and deploy it with a single docker-compose file. It uses sane defaults so there's no need for extensive configuration. A few environment variables on the compose file, and you're done.

services:
  gotosocial:
    image: superseriousbusiness/gotosocial:latest
    container_name: gotosocial
    user: 1000:1000
    networks:
      - nginx
    environment:
      # Change this to your actual host value.
      GTS_HOST: social.kastanis.gr
      GTS_DB_TYPE: sqlite
      # Path in the GtS Docker container where
      # the sqlite.db file will be stored.
      GTS_DB_ADDRESS: /gotosocial/storage/sqlite.db
      # Change this to true if you're not running
      # GoToSocial behind a reverse proxy.
      GTS_LETSENCRYPT_ENABLED: "false"
      # Set your email address here if you
      # want to receive letsencrypt notices.
      GTS_LETSENCRYPT_EMAIL_ADDRESS: ""
      # Path in the GtS Docker container where the
      # Wazero compilation cache will be stored.
      GTS_WAZERO_COMPILATION_CACHE: /gotosocial/.cache
      ## For reverse proxy setups:
      # GTS_TRUSTED_PROXIES: "172.x.x.x"
      ## Set the timezone of your server:
      TZ: Europe/Athens
      GTS_CONFIG_PATH: /gotosocial/config.yml
      # ports:
      #   - "443:8080"
      ## For letsencrypt:
      #- "80:80"
      ## For reverse proxy setups:
      #- "127.0.0.1:8080:8080"
    volumes:
      # Your data volume, for your
      # sqlite.db file and media files.
      - /docker/gotosocial/data:/gotosocial/storage
      # OPTIONAL: To mount volume for the WAZERO
      # compilation cache, for speedier restart
      # times, uncomment the below line:
      - /docker/gotosocial/.cache:/gotosocial/.cache
      - /docker/gotosocial/config.yml:/gotosocial/config.yml:ro
    restart: "unless-stopped"

networks:
  nginx:
    external: true

I use the above compose file that you can use as reference but keep in mind that I pass the traffic through a reverse proxy defined in networks so that's why port mapping is disabled. I use a very short external config.yml file that I map in volumes and will expand upon in the future in order to fine-tune the instance features.

Do also keep in mind that you need a Mastodon compatible client in order to interact with your instance. I chose Tusky for that. You will need to make your user admin in order to access some gui settings available server side. Everything is laid out in the documentation.