If you are like me, you are probably tired of the mounting costs of monthly subscriptions. Tools like Buffer, Hootsuite, or Typefully are great, but for a self-hoster and tech enthusiast, paying $20-$50 a month for something I can host myself feels unnecessary.
I recently switched my workflow to Postiz, and honestly, it’s a game-changer. It is an open-source, all-in-one social media scheduling tool that supports X (Twitter), LinkedIn, Facebook, Instagram, TikTok, Pinterest, YouTube, and even Reddit.
In this post, I want to share my experience deploying Postiz. Because the architecture involves complex components like Temporal and Redis, it can be a headache to set up manually. To solve this, I wrote an Automated Setup Script that gets the whole stack running on your server or Mac in one command.
Why I Switched to Postiz
Postiz is not just a cron job that fires off cURL requests; it is a proper scheduling platform designed to rival commercial tools. A few things stood out during real-world usage:
- Real multi-channel support
Postiz can schedule and manage content for X (Twitter), LinkedIn, Facebook, Instagram, TikTok, Pinterest, YouTube, Reddit, Discord, Mastodon, and more from one dashboard. This makes it a viable drop-in replacement for typical Buffer workflows. - Resilient scheduling with Temporal
Under the hood, Postiz uses Temporal to orchestrate jobs, which means scheduled posts survive transient issues such as container restarts or brief host outages and are retried automatically. This is a huge upgrade over fragile ad-hoc cron setups. - AI-assisted content creation
Postiz integrates with OpenAI, allowing you to generate or refine captions when you are low on inspiration. Instead of hopping between ChatGPT and your scheduler, you can keep the content loop in one place. - Data ownership and privacy
All drafts, analytics, and connected accounts live on your own server or home lab machine rather than a third-party cloud. For anyone already running services at home, adding a social scheduler to the stack fits the same philosophy of control and portability.
Environment and hardware used
Postiz is more demanding than a typical single-container app because it relies on ElasticSearch and Temporal in addition to the main web app and Postgres. In practice, the following setups work well:
- Home lab environment
- Machine: Mac Mini M4
- Virtualization: Docker Desktop or OrbStack (highly recommended on Apple Silicon; significantly lighter than Docker Desktop).
- Production environment
- VPS: Ubuntu 22.04+ (AMD64 or ARM64)
- Typical use case: internet-facing instance with a real domain and manual SSL termination (Reverse Proxy).
Baseline requirements:
- RAM: 4 GB as a minimum; 8 GB is recommended if you intend to run Postiz continuously alongside other services.
- CPU: 2 vCPU or better.
- Software:
- Docker Engine
- Docker Compose
- Network: An external Reverse Proxy (Nginx, Caddy, Cloudflare Tunnel) to handle SSL/HTTPS, as Postiz v3.0 runs internally on HTTP port 5000.
What the auto-install script does
To simplify deployment, the updated Bash script automates the complex setup logic. At a high level, it:
- Detects your OS architecture (macOS/Linux) and environment.
- Generates secure secrets (JWT, DB Passwords) automatically.
- Configures Temporal and Docker Compose with optimal settings.
- Installs everything into a standardized location:
~/self-hosted/postiz. - Creates a comprehensive
.envfile with templates for all supported integrations (Social APIs, Cloudflare R2, Stripe, etc.).
NOTE:
Unlike previous versions, the v3.0 script does not auto-configure Caddy. It focuses on setting up the application stack efficiently, leaving the Reverse Proxy choice to you (or a separate script).
5-minute installation walkthrough
Step 1 – Download and run the setup script
SSH into your VPS or open a terminal on your Mac, then run:
# Download the setup script
curl -O https://raw.githubusercontent.com/duynghien/auto/main/postiz/setup.sh
# Make it executable
chmod +x setup.sh
# Start the installation
./setup.shThis command pulls the latest script from the repository and starts the process. The script will automatically create the ~/self-hosted/postiz directory and prepare all configuration files there.
Step 2 – Configure Domain
The script has been streamlined to ask for just one piece of information:
- Domain: Enter the domain you plan to use (e.g.,
social.example.com). - The script uses this to configure internal API routes.
- Important: Since the script doesn’t install SSL, this domain must be pointed to your server’s IP via valid DNS records for the next step.
The installation will then pull all necessary Docker images (Postiz, Postgres 17, Redis, Temporal, ElasticSearch). This might take 2-5 minutes depending on your connection.
Important: Reverse Proxy Setup
After installation, Postiz will be running at http://localhost:5000. To make it accessible securely and enable Social Login features (OAuth), you must set up HTTPS.
You can use the Universal Proxy Script from the same repository to set this up easily:
# Download universal proxy installer (Nginx Proxy Manager / Cloudflare / Caddy)
curl -O https://raw.githubusercontent.com/duynghien/auto/main/proxies/setup.sh
chmod +x setup.sh
./setup.shOnce your proxy is running, configure it to forward traffic from your domain (https://social.example.com) to your server’s IP on port 5000.
Initial setup in the browser
With the stack running and SSL configured:
1. Create the admin account
Open your browser and navigate to your domain (e.g., https://social.addrom.com).
You will see the Postiz interface. Use the Sign up flow to create the first user, which will act as the admin account for the instance.
2. Connect social platforms (API keys)
Because this is self-hosted, you effectively become the “developer” for your own social integrations. For each platform you want to connect, you need to:
- Create an app on the platform’s developer portal.
- Obtain a Client ID and Client Secret.
- Configure the correct Callback URL in the provider’s portal.
The generated .env file includes placeholders for all these services.
Editing the .env file
The script generates a fully populated .env file at ~/self-hosted/postiz/.env. This file contains all the configuration variables you might need.
Open the file with your editor:
nano ~/self-hosted/postiz/.envLocate the Social Media APIs section. It will look like this:
# === Social Media APIs ===
X_API_KEY=""
X_API_SECRET=""
LINKEDIN_CLIENT_ID=""
LINKEDIN_CLIENT_SECRET=""
# ... and many moreFill in the keys for the platforms you want to use. You can also configure Cloudflare R2 here if you prefer cloud storage over local disk storage.
Save the file (Ctrl+O, Enter) and exit (Ctrl+X).
Manage the instance with postiz.sh
The installation creates a helper script postiz.sh in the installation directory (~/self-hosted/postiz). It simplifies common management tasks.
First, navigate to the directory:
cd ~/self-hosted/postizThen use the commands:
- Restart the stack (Required after editing
.env):
./postiz.sh restart- View logs:
./postiz.sh logs- Update Postiz:
./postiz.sh updateThis pulls the latest images and redeploys the stack, keeping you up to date with new features.
- Check status:
./postiz.sh statusPractical tips for self-hosting Postiz
A few operational considerations make running Postiz smoother long-term:
- Security: Never expose port 5000 directly to the internet. Always use a Reverse Proxy with SSL (HTTPS).
- Backups: The script sets up Docker volumes for data persistence (
postgres-data,postiz-uploads). Regularly back up these volumes, especially before major updates. - Resource Usage: ElasticSearch and Temporal are powerful but memory-hungry. Ensure your VPS has at least 4GB RAM (or local Swap configured) to avoid crashes.
Final thoughts
Self-hosting Postiz replaces an ongoing SaaS bill with a one-time setup and some light maintenance, while still providing a polished, multi-platform scheduling experience. With the v3.0 auto-install script, the barrier to entry is lower than ever—giving you full control over your data and social automation infrastructure.
If you are a developer or a creator looking to own your distribution channel, I highly recommend giving this stack a try.
You can find the full source code for my automation scripts on my GitHub.








