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: ...

29 September 2025 · 4 min · 698 words · Shafiq Alibhai

How to test AA and AAA batteries using a multimeter

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. 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 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

29 September 2025 · 1 min · 87 words · Shafiq Alibhai

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 Feature Iceraven IronFox Privacy & Telemetry Reduced telemetry, customisable123 Strongly privacy-hardened, all telemetry removed456 Add-ons/Extensions Extensive support, larger list than stock Firefox178 Supports Firefox Android extensions6 Customization About:config, more desktop-like options127 Advanced privacy defaults, stripped-down interface456 Speed & Performance Comparable to Brave/Chrome; resource-optimised89 Lightweight, slightly faster than stock Firefox6 Main Focus Customization, extension and power-user features12 Privacy, de-bloated and anti-tracking465 Updates Community-driven, slower but steady210 Active, responsive to user issues54 Official Channels Github APK releases, not on Play Store128 F-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 ...

29 September 2025 · 2 min · 355 words · Shafiq Alibhai

List of some self hosted services you can setup on your homelab

Communication & Collaboration Matrix.org - A decentralized messaging platform. Zulip - An open source group chat application. Nextcloud - A cloud storage and collaboration suite. ownCloud - A self-hosted file sync and share server. Mattermost - An open-source team collaboration hub. Freenode - Internet Relay Chat (IRC) network for open source projects. GitLab - Web-based Git repository manager with CI/CD pipeline features. GitPod - A code ide that spins up dev environments with one click. Social Media & Forums Mastodon - A decentralized social network based on the GNU social/G+/Twitter microblogging platform software. Friendica - An open-source distributed communication and social networking platform. Flarum - A forum software that focuses on simplicity, speed, elegance, and usability. Discourse - A modern, open, and versatile discussion platform. phpBB - A popular open-source forum package. Fluentd - A data collection tool for collecting events from various data sources to a variety of destinations. Logstash - An open-source data processing pipeline that can collect data from diverse sources and channel it into a unified format. Kibana - An open source data visualization and exploration tool built on top of Elasticsearch. Developer Tools Docker - A platform for developing, shipping, and running applications. Jenkins - An extensible continuous integration server. GitLab CI/CD - Continuous Integration/Continuous Deployment. Travis CI - A cloud-based continuous integration service for GitHub and Bitbucket projects. JIRA - Project management software that includes scrum, sprint planning, backlog prioritization, release tracking features. Redmine - A free project management web application. Tuleap - An integrated project management tool combining the best practices in IT project management with modern and open-source tools. Email & Calendaring Roundcube - A web-based mail client. Horde Groupware Web Application Framework - A groupware suite. Zimbra - An email, calendar, and collaboration system. Sogo - A combination of a webserver component for iCalendar, vCard, and SMTP access and client libraries for various IMAP and CalDAV clients. DuckDuckGo Privacy Browser - A privacy-oriented browser based on Firefox. Data Management Elasticsearch - A distributed, RESTful search and analytics engine. Kibana - For visualizing Elasticsearch data in real time. PostgreSQL - A powerful, open-source object-relational database system. MongoDB - An open-source document-oriented database. Redis - An in-memory key-value store used as a database, cache and message broker. Memcached - A general-purpose distributed memory caching system. Neo4j - A graph database that allows for flexible queries using Cypher query language. InfluxDB - An open-source time series database. Office & Productivity LibreOffice - An open-source office suite. OnlyOffice - A platform that combines online text editors, document and project management, file storage in a single solution. Apache OpenOffice - Another free and open-source office suite. Zimbra Collaboration Suite - An email and calendar server with an optional desktop client. Infrastructure & Monitoring Nagios - A monitoring system for systems, networks, and infrastructure. Zabbix - An enterprise-class open source distributed monitoring solution. Prometheus - A monitoring system and time series database. InfluxDB - For storing and analysing metrics. Kubernetes - An open-source container-orchestration system for automating computer containers. OpenVPN - A robust and highly configurable VPN solution. NGINX - A high performance web server and reverse proxy server. Traefik - A modern HTTP reverse proxy and load balancer. HAProxy - A reliable, efficient, and flexible load balancing solution. Multimedia & Entertainment Plex - A client-server media management and streaming platform. Emby - An extensible media server and player with rich metadata capabilities. Radarr - A companion application to Sonarr for downloading new episodes of TV shows. Sonarr - An index based, TV show downloader that uses NZB files. Jackett - An indexing engine that searches many different websites. Deluge - A lightweight and feature-rich BitTorrent client. Rutorrent - An easy-to-use bittorrent client with a lot of features. Lidarr - An automated music indexer that can automatically download your favourite albums. E-commerce Magento Open Source - A flexible e-commerce platform for businesses of all sizes. PrestaShop - An open-source e-commerce solution. OpenCart - A free, open-source shopping cart system. WooCommerce - A WordPress plugin that turns your site into a fully-fledged online store. Security fail2ban - A network security tool that analyses log files for failed login attempts and then bans the IP addresses of those who succeed in multiple unsuccessful login attempts. Cryptography - Tools and libraries for encryption and decryption. OSSEC - A powerful open-source host-based intrusion detection system. Pulse Secure Virtual Desktop - A secure access service edge (SASE) platform that enables organizations to deliver integrated, cloud-first application and network access security. ClamAV - An open-source antivirus engine for detecting Trojans, viruses, malware, and other malicious threats. Cloud & Storage OpenStack - A cloud operating system for delivering various cloud services. Cloudflare - An internet performance and security company that provides a network of distributed servers to protect websites from cyber attacks. Nextcloud - Already listed earlier, but worth mentioning again as it’s also a full-fledged cloud service. OpenVPN - For creating secure remote access to your home lab. Web Servers Apache HTTP Server - The world’s most widely used web server. NGINX - A high performance HTTP and reverse proxy server. Caddy - An automated web server with automatic HTTPS. Developer Tools & IDEs Visual Studio Code - A code editor redefined and optimised for building and debugging modern web and cloud applications. Eclipse - An open-source integrated development environment (IDE). IntelliJ IDEA - A powerful IDE for JVM-based languages like Java, Kotlin, Scala and Android. Learning & Educational Resources Khan Academy - Provides free online education for a variety of subjects. Moodle - An open-source course management system that can be used to create an online learning environment. Canvas - A cloud-based learning management system (LMS). edX - An online learning platform founded by Harvard University and the Massachusetts Institute of Technology. Game Servers Minecraft Server - To run your own Minecraft server. SteamCMD - Steam’s content delivery tool to help manage game updates on dedicated servers. ARK: Survival Evolved Server - To host a survival multiplayer game server for ARK. File Storage & Backup BorgBackup - A deduplicating backup program that supports file and block storage. Bacula - An open-source enterprise-level data protection, restore, and recovery system. Rclone - A tool to sync directories between cloud storage providers. Media Streaming & DVR Emby - For centralized media streaming within your network. MediaPortal - A free open source media centre software for Microsoft Windows. DVR-PC - A complete TV recording, streaming and live TV viewing solution that runs on Linux (and Windows) PCs. Other Tools Mattermost - Team communication tool, which also has a collaboration suite component. GitPod - A web-based code server with pre-configured tools for full-stack development environments. GitBucket - An easily installable GitHub compatible Git server written in Scala. Zabbix - For monitoring your infrastructure and applications.

9 March 2024 · 6 min · 1128 words · Shafiq Alibhai

How to reduce the file size of a pdf file in linux cli

Install Ghostscript: If it’s not already installed, you can install Ghostscript using your distribution’s package manager. For Debian-based systems like Ubuntu, use: sudo apt-get update sudo apt-get install ghostscript For Red Hat-based systems like Fedora, use: sudo dnf install ghostscript Compress the PDF: Once Ghostscript is installed, you can compress your PDF file using the following command: gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf In this command: ...

8 March 2024 · 2 min · 320 words · Shafiq Alibhai

Shutdown Proxmox VM using CLI

If you’re looking to shut down a virtual machine running on a Proxmox Virtual Environment (PVE), you can use the Proxmox command-line interface (CLI) to accomplish this task quite effectively. The command for shutting down a VM in Proxmox is qm shutdown, followed by the ID of the virtual machine you’d like to shut down. Here’s how to do it: Access the Server: First, log in to your Proxmox server via SSH. ...

17 October 2023 · 2 min · 226 words · Me

Mastering Ansible: A Step-by-Step Tutorial

We’ll be diving straight into the core concepts and components that will help you become proficient in Ansible. This tutorial assumes that you have already installed Ansible on your system and have a basic understanding of what Ansible is. Setting Up the Environment SSH Key Generation If you haven’t already, generate an SSH key pair on your Ansible control node. ssh-keygen -t rsa SSH Key Distribution Copy the SSH public key to all your target nodes. ...

8 September 2023 · 3 min · 629 words · Me

How to count number of words in a pdf file from Linux cli

Using pdftotext: Installation: If it’s not installed, you’ll need to install the poppler-utils package which includes pdftotext. sudo apt install poppler-utils or yum install poppler-utils depending on your distribution. Usage: Once installed, you can convert a PDF to text and then count the words as follows: pdftotext input.pdf - | wc -w Here, input.pdf is your source PDF file, and wc -w counts the number of words. The - in pdftotext specifies that the output should be sent to stdout, which is then piped into wc. ...

5 September 2023 · 3 min · 528 words · Me

How to install Postgresql Client using Homebrew

Psql is a command-line interface for interacting with PostgreSQL, a powerful and open source relational database system. Brew is a package manager for macOS that makes it easy to install and manage software. Here are the steps to install psql with brew: First, install the brew package manager if you don’t have it already. You can do this by running the following command in your terminal: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" Second, update brew by running the following commands: brew doctor brew update Third, install libpq by running the command: brew install libpq Libpq is a library that contains psql and other PostgreSQL client utilities. ...

26 July 2023 · 1 min · 176 words · Me

How to avoid other pods from being scheduled on your node in Kubernetes

Kubernetes is a powerful platform for managing containerized applications across a cluster of nodes. However, sometimes you may want to have more control over which pods are scheduled on which nodes, for various reasons such as performance, security, or cost. What are taints and tolerations? Taints and tolerations are a feature of Kubernetes that allow you to mark nodes with certain attributes or conditions, and then specify which pods can or cannot be scheduled on those nodes based on those attributes or conditions. Taints are applied to nodes, and tolerations are applied to pods. ...

13 July 2023 · 4 min · 650 words · Me