How to set up Mastodon using Docker Compose

Prerequisites#

  • Docker and Docker Compose installed
  • Domain name pointing to your server

1. Create Project Directory#

mkdir mastodon
cd mastodon

2. Create Docker Compose File#

Create a docker-compose.yml file:

version: '3'
services:
  db:
    restart: always
    image: postgres:14-alpine
    shm_size: 256mb
    networks:
      - internal_network
    healthcheck:
      test: ['CMD', 'pg_isready', '-U', 'postgres']
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_HOST_AUTH_METHOD=trust

  redis:
    restart: always
    image: redis:7-alpine
    networks:
      - internal_network
    healthcheck:
      test: ['CMD', 'redis-cli', 'ping']
    volumes:
      - redis_data:/data

  web:
    restart: always
    image: tootsuite/mastodon:latest
    networks:
      - external_network
      - internal_network
    healthcheck:
      test: ['CMD-SHELL', 'wget -q --spider http://localhost:3000/health || exit 1']
      timeout: 10s
    depends_on:
      - db
      - redis
    environment:
      - DB_HOST=db
      - DB_USER=postgres
      - DB_NAME=postgres
      - DB_PASS=
      - REDIS_HOST=redis
      - LOCAL_DOMAIN=your-domain.com
      - SINGLE_USER_MODE=false
      - SMTP_SERVER=smtp.mailgun.org
      - SMTP_PORT=587
      - SMTP_LOGIN=your-smtp-login
      - SMTP_PASSWORD=your-smtp-password
      - SMTP_FROM_ADDRESS=notifications@your-domain.com
    volumes:
      - ./public/system:/mastodon/public/system
    ports:
      - "3000:3000"
    command: bash -c "rm -f /mastodon/tmp/pids/server.pid && bundle exec rails s -p 3000"

  streaming:
    restart: always
    image: tootsuite/mastodon:latest
    networks:
      - external_network
      - internal_network
    depends_on:
      - db
      - redis
    environment:
      - DB_HOST=db
      - DB_USER=postgres
      - DB_NAME=postgres
      - DB_PASS=
      - REDIS_HOST=redis
      - LOCAL_DOMAIN=your-domain.com
    volumes:
      - ./public/system:/mastodon/public/system
    ports:
      - "4000:4000"
    command: node ./streaming

  sidekiq:
    restart: always
    image: tootsuite/mastodon:latest
    networks:
      - internal_network
    depends_on:
      - db
      - redis
    environment:
      - DB_HOST=db
      - DB_USER=postgres
      - DB_NAME=postgres
      - DB_PASS=
      - REDIS_HOST=redis
      - LOCAL_DOMAIN=your-domain.com
    volumes:
      - ./public/system:/mastodon/public/system
    command: bundle exec sidekiq

networks:
  external_network:
  internal_network:
    internal: true

volumes:
  postgres_data:
  redis_data:

3. Create Environment File#

Create a .env.production file with your configuration:

How to test AA and AAA batteries using a multimeter

  1. Turn the dial to a higher voltage setting - Try the “200” setting in the DC voltage (V⎓) section. This will handle voltages up to 200V.

  2. Check your connections - Make sure:

    • The black probe is firmly in the “COM” port
    • The red probe is firmly in the “VΩmA” port
    • You’re making good contact with the battery terminals
  3. Verify the battery orientation - Make sure you’re touching:

    • Black probe to the negative (-) end of the battery
    • Red probe to the positive (+) end of the battery

Iceraven and Ironfox browser comparison

Iceraven and IronFox are both open-source browsers for Android, each offering privacy and customization features but with different emphases and user audiences.

Core Features#

FeatureIceravenIronFox
Privacy & TelemetryReduced telemetry, customisable123Strongly privacy-hardened, all telemetry removed456
Add-ons/ExtensionsExtensive support, larger list than stock Firefox178Supports Firefox Android extensions6
CustomizationAbout:config, more desktop-like options127Advanced privacy defaults, stripped-down interface456
Speed & PerformanceComparable to Brave/Chrome; resource-optimised89Lightweight, slightly faster than stock Firefox6
Main FocusCustomization, extension and power-user features12Privacy, de-bloated and anti-tracking465
UpdatesCommunity-driven, slower but steady210Active, responsive to user issues54
Official ChannelsGithub APK releases, not on Play Store128F-Droid/Accrescent, Github, not on Play Store46

Iceraven Browser#

  • Built on stable Firefox for Android, with a focus on more add-on availability and configuration options like about:config1112.
  • Appeals to users who want to replicate desktop Firefox’s customization and plugin experience on mobile111.
  • Releases and updates are maintained via Github and aren’t distributed via the Play Store128.
  • Some comments note the lack of warranties or guarantees for security; best used by power users familiar with browser internals12.

IronFox Browser#

  • Derived from Mull (itself a privacy-focused Firefox fork), with aggressive tracking and telemetry removal456.
  • Prioritizes user privacy, blocks telemetry by default, and comes with strict tracking-protection settings46.
  • Keeps features like Firefox Sync; disables or restricts features leaking data (such as WebGL, unless manually enabled)46.
  • Distributed via alternative app stores like F-Droid, Accrescent, and Github; not available on Play Store46.
  • Some advanced privacy features may result in compatibility issues with certain websites, especially those relying on features IronFox disables by default4.

Summary#

Iceraven is ideal for those wanting a “power-user” browser with deep customization and a broad add-on library, making it similar to desktop Firefox in spirit1117. IronFox is best for users who place privacy first, seeking a Firefox-based browser that automatically strips out telemetry and unnecessary features for a lightweight, secure experience54612. Both offer more control and privacy than standard Firefox for Android, but Iceraven focuses on flexibility while IronFox focuses on privacy hardening. 1314151617181920