Self-host vs PostHog Cloud:
Self-hosting PostHog means managing the service yourself, taking care of upgrades, scaling, security etc.
If you are less technical or looking for a hands-off experience, and if you want to optimize your budget, we recommend PostHog Cloud.
PostHog Cloud is also considerably cheaper than paying for cloud hosting. You can find more information about PostHog Cloud's costs on the pricing page.
You can also find support partners to manage the service for you via the PostHog Marketplace.
We provide a PostHog "hobby deployment" option for those that want to try out self-hosted PostHog without having to spend a lot on infrastructure costs.
It should not be used as a production instance for tracking a product with any reasonable amount of scale.
Requirements
- You have deployed a Linux Ubuntu Virtual Machine.- An instance with 2GB of RAM can handle approximately 100k events spread over a month
- We highly recommend an instance with at least 4GB of RAM to handle any surges in event volume
- For volumes over 100K a month we'd recommend deploying using Kubernetes
 
- You have set up an Arecord to connect a custom domain to your instance.- PostHog will automatically create an SSL certificate for your domain using LetsEncrypt
 
Setting up the stack
To get started, all we need to do is run the following command, which will spin up a fresh PostHog deployment for us automatically!
You'll now be asked to provide the release tag you would like to use, as well as the domain you have connected to your instance.
Once everything has been setup, you should see the following message:
PostHog will wait here on a couple of tasks that need to be completed, which should only take a couple minutes.
Once this is complete, you should be able to see your PostHog dashboard on the domain you provided!
If you notice this step taking longer than 10 minutes, it's best to cancel it with
Ctrl+Cand take a look at the troubleshooting section.
Customizing your deployment (optional)
By default, the docker-compose.yml file that gets run comes with a series of default config values that should work for most deployments.
If you need to customize anything, you can take a look at the full list of environment variables.
After making any changes, simply restart the stack with docker-compose.
Additionally, if you would like to run a different version of PostHog, you can change the tag for the web, worker, and plugins services. Check out here for a list of all available tags.
Troubleshooting
If you have already run the one-step deployment command above and something went wrong, this section covers a number of steps you can take to debug issues.
Checking that all containers are running
We can use docker ps to check that all of our services are running.
You should see all the same containers as above. If any containers aren't showing up or show that they've restarted recently, it's worth checking their logs to see what the issue is.
Checking the logs of each container
We can use the following command to check the logs for each of our containers.
The best place to start looking is in the web container, which runs all the database migrations and will produce an error if any have failed.
Running into issues with deployment? Ask a question here or check out our Slack to get help.
Upgrading
To upgrade, you can run the upgrade-hobby script from the PostHog repo.
Warning: Before upgrading, make sure you have created back-ups of all your data!
Migrating
If you need to move into production or if your server is struggling, you can migrate to a production instance as follows:
- to PostHog Cloud for hands-off experience
- to a bigger self-hosted instance