mirror of
https://github.com/BillyOutlast/posthog.com.git
synced 2026-02-04 03:11:21 +01:00
K8s Sunsetting - Docs, Site & Blog Changes (#5183)
* Pricing page, product page, case studies, homepage * Partner removal * Updates marketing content for self-host changes * Update best-hipaa-compliant-analytics-tools.md * Fixing a table * remove partners pages and add hideLastUpdated to schema * casing * Remove references to partner page * Remove partners from nav * change icon, anchor for self-hosting section of product page * swap homepage carousel item (self-hosting → open source) * swap product nav menu feature * add link to status page * remove enterprise self-hosting option * move snippets to _snippets * add sunset message to a bunch of pages * shuffle some pages around * begin writing migration guide * add images * small rewrites * update date in sunset disclaimer * Fix typos * Remove Momentum Case study * Update contents/customers/hasura.mdx * update sunset disclaimer Co-authored-by: Joe Martin <84011561+joethreepwood@users.noreply.github.com> * Replacing WittyWorks quote * Docker Compose updates * Adds partner pages back in * Partner nav restore * Adding Tagiticians * Update taleno-digital.md * Update taleno-digital.md * Fix typos * Product page tweaks --------- Co-authored-by: Andy Vandervell <92976667+andyvan-ph@users.noreply.github.com> Co-authored-by: Eli Kinsey <eli@ekinsey.dev> Co-authored-by: Cory Watilo <cww@watilo.com> Co-authored-by: Paul Hultgren <pjhultgren5@gmail.com> Co-authored-by: PostHog <hey@posthog.com> Co-authored-by: Paul Hultgren <39424187+pjhul@users.noreply.github.com>
This commit is contained in:
@@ -65,7 +65,7 @@ PostHog is especially helpful for product teams that want to understand how user
|
||||
- **EU Cloud Hosting:** <span className="text-green text-lg">✔</span>
|
||||
- **Cookieless Tracking:** <span className="text-green text-lg">✔</span>
|
||||
|
||||
PostHog can be deployed onto your own infrastructure, so you retain full control over who your data is shared with and where it is hosted. Alternatively, you can use [PostHog Cloud EU](/eu), a fully-managed service with servers hosted in Frankfurt, Germany.
|
||||
Smaller projects can self-host PostHog Open Source using Docker Compose, but [PostHog Cloud EU](/eu), a fully-managed service with servers hosted in Frankfurt, Germany, is the best option for most users.
|
||||
|
||||
While PostHog uses cookies by default, it can be [configured not to use cookies](/tutorials/cookieless-tracking). To use PostHog without cookies, data is stored in a Javascript object in `memory` that only lasts the duration of the pageview.
|
||||
|
||||
@@ -105,7 +105,7 @@ Plausible is made and hosted in the EU. It collects no personally identifiable i
|
||||
|
||||
#### How much does Plausible cost?
|
||||
|
||||
Plausible charges by pageview with 1 million pageviews costing €69 per month – approx. $71. Paying annually grants you two free months per year – i.e. €69 per month becomes €690 per year. The open source version is free to self-host via Docker.
|
||||
Plausible charges by pageview with 1 million pageviews costing €69 per month – approx. $71. Paying annually grants you two free months per year – i.e. €69 per month becomes €690 per year. The open source version is free to self-host via Docker Compose.
|
||||
|
||||
### 3. Fathom
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ tags:
|
||||
- Guides
|
||||
---
|
||||
|
||||
HIPAA, which stands for the Health Insurance Portability and Accountability Act, is a piece of legislation which was first introduced in 1996. Its main goal is to ensure that personally identifiable information is protected, with $1M+ fines and 10+ year prison sentences used to enforce adherence.
|
||||
Passed in 1996, HIPAA (aka Health Insurance Portability and Accountability Act) defines the legal requirements for securing and handling health information, and the severe penalties for failing to do so.
|
||||
|
||||
Data protected under HIPAA is called Protected Health Information (PHI), or ePHI if it is digitized. It includes any data which can be used to identify the past, current or future health status of an individual. This obviously includes test results and diagnoses, but it can also cover birthdays, ethnicity, gender and other information. Even your IP address can be considered ePHI under HIPAA.
|
||||
|
||||
@@ -36,11 +36,9 @@ It's worth noting that, because BAAs expose third-parties to increased risk and
|
||||
|
||||

|
||||
|
||||
PostHog is an all-in-one analytics platform which gives you everything you need to understand your users and build better products. It’s also completely open-source and [can be self-hosted on your own infrastructure](/docs/self-host), so that you never have to share data with anyone — including PostHog.
|
||||
PostHog is an all-in-one analytics platform which gives you everything you need to understand your users and build better products. It’s also open source and [can be self-hosted on your own infrastructure](/docs/self-host), so that you never have to share data with anyone — including PostHog.
|
||||
|
||||
We may be biased in claiming the top spot, but we believe the combination of features such as [session recording](/docs/user-guides/recordings), [feature flags](/docs/user-guides/feature-flags), [A/B testing](/docs/user-guides/experimentation) and [group analytics](/docs/user-guides/group-analytics) is one that few other platforms can match. PostHog isn’t just a HIPAA-compliant analytics platform, it’s also a [powerful alternative to tools like Amplitude](/blog/posthog-vs-amplitude) for those who _don’t_ need to comply with HIPAA.
|
||||
|
||||
PostHog is also entirely self-serve, with features such as event auto-capture, which make it perfect for less technical users who don’t want to write reams of SQL. Technical users can meanwhile cater the platform to their needs or integrate with internal tools via [PostHog’s open source repos](https://github.com/PostHog).
|
||||
We may be biased in claiming the top spot, but we believe the combination of [session recording](/docs/user-guides/recordings), [feature flags](/docs/user-guides/feature-flags), [A/B testing](/docs/user-guides/experimentation) and [group analytics](/docs/user-guides/group-analytics) is one that few other platforms can match. PostHog isn’t just a HIPAA-compliant analytics platform, it’s also a [powerful alternative to tools like Amplitude](/blog/posthog-vs-amplitude) for those who _don’t_ need to comply with HIPAA.
|
||||
|
||||
### Features & benefits
|
||||
|
||||
@@ -54,12 +52,10 @@ PostHog is also entirely self-serve, with features such as event auto-capture, w
|
||||
|
||||
### Is PostHog HIPAA compliant?
|
||||
|
||||
Yes. Unlike platforms such as Mixpanel or Amplitude, PostHog enables you to deploy onto your own infrastructure so that data doesn’t need to be sent to any third parties. This means you maintain full control and don’t need to set up a Business Associate Agreement (BAA) with PostHog, because we never handle any PHI or ePHI. It's also one of the few [HIPAA-compliant A/B testing tools](/blog/best-hipaa-compliant-ab-testing-tools) on the market.
|
||||
Yes. Unlike platforms such as Mixpanel or Amplitude, you can deploy PostHog onto your own infrastructure so that data doesn’t need to be sent to any third parties. This means you maintain full control and don’t need to set up a Business Associate Agreement (BAA) with PostHog, because we never handle any PHI or ePHI. It's also one of the few [HIPAA-compliant A/B testing tools](/blog/best-hipaa-compliant-ab-testing-tools) on the market.
|
||||
|
||||
You _may_ need to create a BAA with your hosting provider if one doesn’t already exist, but major providers such as Google and AWS offer these for free. Read our [HIPAA compliance guidance](/docs/privacy/hipaa-compliance) for more information on using PostHog.
|
||||
|
||||
> [Try PostHog for free](/signup) today or [schedule a demo](/book-a-demo) to learn more about using PostHog.
|
||||
|
||||
## 2. [Countly](https://count.ly/)
|
||||
|
||||

|
||||
|
||||
@@ -24,11 +24,11 @@ Here, we’re sharing our guide to the best free and [open-source tools](/blog/b
|
||||
|
||||

|
||||
|
||||
PostHog is an [all-in-one product analytics suite](/product) that integrates all of the essential features you need to understand your users. It collects and visualizes data on how people are using your products, provides insights into trends and retention, and helps to remove bottlenecks and reduce churn.
|
||||
PostHog is an [all-in-one analytics suite](/product) that integrates all the essential features you need to understand your users. It collects and visualizes data on how people are using your products, provides insights into trends and retention, and helps to remove bottlenecks and reduce churn.
|
||||
|
||||
Our A/B testing features, which we call our Experimentation suite, are complemented by other tools like [Feature Flags](/product/feature-flags), [Session Recording](/product/session-recording), [Heatmaps](/product/heatmaps), [User Paths](/product/user-paths) and more, making it one of the most comprehensive analytics platforms around – open source, or otherwise.
|
||||
Our A/B testing features, which we call our experimentation suite, are complemented by other tools like [feature flags](/product/feature-flags), [session recording](/product/session-recording), [heatmaps](/product/heatmaps), [user paths](/product/user-paths) and more, making it one of the most comprehensive analytics platforms around – open source, or otherwise.
|
||||
|
||||
[PostHog’s Experimentation suite](https://posthog.com/docs/user-guides/experimentation) allows you to flexibly test your hypotheses. PostHog will automatically estimate the number of users exposed, and we use Bayesian analysis to calculate the results and ensure they're significant.
|
||||
[PostHog’s experimentation suite](https://posthog.com/docs/user-guides/experimentation) allows you to flexibly test your hypotheses. PostHog will automatically estimate the number of users exposed, and we use Bayesian analysis to calculate the results and ensure they're significant.
|
||||
|
||||
### Who is PostHog for?
|
||||
|
||||
@@ -46,7 +46,7 @@ PostHog is a great choice for any team that wants a complete view of how people
|
||||
|
||||
### How much does it cost?
|
||||
|
||||
While Experimentation isn't currently part open source release, it's [free to use up to 1 million events per month](/pricing) on PostHog Cloud when you enter a card. You can set billing limits so you don't get any surprise bills.
|
||||
While Experimentation isn't currently part of the open source release, it's [free to use up to 1 million events per month](/pricing) on PostHog Cloud when you enter a card. You can set billing limits to prevent surprise bills.
|
||||
|
||||
### Open source license
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ hideAnchor: true
|
||||
author:
|
||||
- joe-martin
|
||||
- andy-vandervell
|
||||
featuredImage: ../images/blog/product-people.png
|
||||
featuredImage: ../images/blog/posthog-company-culture-blog.png
|
||||
featuredImageType: full
|
||||
featuredVideo: https://www.youtube-nocookie.com/embed/vN-aGs5M2k4
|
||||
category: General
|
||||
@@ -18,7 +18,7 @@ tags:
|
||||
- Comparisons
|
||||
---
|
||||
|
||||
It's a truth universally acknowledged that every business reliant on a monolithic enterprise product has need of an open source alternative... probably.
|
||||
It's a truth universally acknowledged that every business reliant on an outmoded enterprise product has need of an open source alternative... probably.
|
||||
|
||||
In this guide we're looking at open-source analytics tools, which we've split into two broad categories:
|
||||
|
||||
@@ -41,16 +41,16 @@ This section is dedicated to tools that actively collect data on user behavior.
|
||||
### PostHog
|
||||

|
||||
|
||||
- **GitHub Stars:** 8.9k
|
||||
- **GitHub Stars:** 10.8k
|
||||
- **Language(s):** TypeScript (53%) and Python (42%)
|
||||
- **Alternative to:** Mixpanel, Amplitude, Hotjar, FullStory, LaunchDarkly
|
||||
- [PostHog on GitHub](https://github.com/PostHog/posthog)
|
||||
|
||||
[PostHog](https://posthog.com/) is an all-in-one analytics platform designed to give engineers, product managers and data scientists a complete view of user behavior. It's built on the highly-scalable ClickHouse OLAP database.
|
||||
[PostHog](https://posthog.com/) is an all-in-one platform designed to give engineers, product managers and data scientists a complete view of user behavior. It's built on the highly-scalable ClickHouse OLAP database.
|
||||
|
||||
Features include a comprehensive product analytics suite (e.g. trend analysis, dashboards, funnels, path analysis, retention tracking etc.), feature flags for feature control, experimentation (A/B and multivariate testing), session recording, heatmaps and [more](/product).
|
||||
|
||||
It’s entirely self-serve, with the ability to auto-capture event information out of the box. PostHog can also be self-hosted on your existing infrastructure, making it ideal if you don't want to share data with third parties. It's a good option if you're after an [open-source session recording tool](/blog/best-open-source-session-replay-tools), too.
|
||||
It’s entirely self-serve, with the ability to auto-capture event information out of the box. PostHog can also be self-hosted on your existing infrastructure using Docker Compose, making it ideal if you don't want to share data with third parties. It's a good option if you're after an [open-source session recording tool](/blog/best-open-source-session-replay-tools), too.
|
||||
|
||||
#### Who is PostHog for?
|
||||
PostHog is useful for engineering, data science, and product teams. As an all-in-one platform, it can replace multiple tools (e.g. Mixpanel, LaunchDarkly, Hotjar) so you can simplify your tech stack. [PostHog customers](/customers) include the likes of [Hasura](/customers/hasura), [Netdata](/customers/netdata), and [Phantom](/customers/phantom).
|
||||
@@ -63,13 +63,13 @@ PostHog is useful for engineering, data science, and product teams. As an all-in
|
||||
- Multivariate experimentation suite for testing ideas
|
||||
- Session recording for gathering insights
|
||||
- Event pipelines to integrate with data warehouses
|
||||
- Built on highly-scalable ClickHouse OLAP database
|
||||
- Built on ultra-fast ClickHouse OLAP database
|
||||
|
||||
#### Open source license and monetization
|
||||
|
||||
[PostHog Open Source](https://github.com/PostHog/posthog) is free to use for life and is distributed under an MIT license. The open source version includes the core product analytics, feature flag, and session recording features, but has a one project limit. There's also a [FOSS edition](https://github.com/PostHog/posthog-foss) that removes all proprietary code.
|
||||
|
||||
Paid versions remove the project limit and add numerous paid-only features, including experimentation, correlation analysis, group analytics for tracking organizations, and advanced cohorts. All paid features are [free up to 1 million events per month](/pricing) on both self-hosted and cloud plans.
|
||||
Subscribing to PostHog Cloud removes the project limit and adds numerous paid-only features, including experimentation, correlation analysis, group analytics for tracking organizations, and advanced cohorts. PostHog Cloud is [free up to 1 million events per month](/pricing).
|
||||
|
||||
### Matomo
|
||||

|
||||
@@ -164,7 +164,7 @@ Plausible is intended for marketing teams and website owners who want to track t
|
||||
- No cookies required, GDPR compliant out of the box
|
||||
|
||||
#### Open source license and monetization
|
||||
Plausible Analytics is available under a AGPLv3 license and can be self-hosted via Docker. Pricing for its hosted version starts at €9 per month for 10,000 monthly pageviews.
|
||||
Plausible Analytics is available under a AGPLv3 license and can be self-hosted via Docker Compose. Pricing for its hosted version starts at €9 per month for 10,000 monthly pageviews.
|
||||
|
||||
> **Also consider:** Plausible is one of a large subset of privacy-first analytics products that have proven popular in the wake of GDPR and less permissive attitudes to user tracking. [Umami](https://umami.is/) is another popular, open-source product in this space. Read our [GDPR analytics guide](/blog/best-gdpr-compliant-analytics-tools) for more options.
|
||||
|
||||
|
||||
@@ -36,13 +36,13 @@ If you want to run experiments as well, we recommend reading our guide to the [b
|
||||
|
||||

|
||||
|
||||
PostHog is an all-in-one [product analytics platform](https://posthog.com/product) that captures and visualizes all of the data your team needs in one place. Complete with Session Recording, Heatmaps, Path analysis, Funnels and more, it’s a great choice if you want to build a comprehensive, data-driven product strategy, fast.
|
||||
PostHog is an all-in-one [Product OS](https://posthog.com/product) that captures and visualizes all of the data your team needs in one place. Complete with product analytics, feature flags, session recording, heatmaps, funnels and more, it’s a great choice if you want to build a comprehensive, data-driven product strategy, fast.
|
||||
|
||||
As well as [Feature Flags](https://posthog.com/docs/user-guides/feature-flags), you can take advantage of the toggles in the [Experimentation suite](https://posthog.com/docs/user-guides/experimentation) to test hypotheses on product changes with A/B tests or define user segments for feature access. [Multivariate flags](https://posthog.com/docs/user-guides/feature-flags#multivariate-feature-flags-beta) allow you to test several variants of the same interchangeable content.
|
||||
PostHog's [feature flags](https://posthog.com/docs/user-guides/feature-flags) also power its [experimentation suite](https://posthog.com/docs/user-guides/experimentation), so you can test product changes with A/B tests or define user segments for feature access. [Multivariate flags](https://posthog.com/docs/user-guides/feature-flags#multivariate-feature-flags-beta) allow you to test several variants of the same interchangeable elements.
|
||||
|
||||
### Who is PostHog for?
|
||||
|
||||
PostHog is built primarily for engineers and other product-minded teams. With all of your analytics in one place, everyone in the organization is empowered to examine and act on user data. You can also self-host PostHog, which is ideal for any company with stringent data privacy needs.
|
||||
PostHog is built primarily for engineers and other product-minded teams. With all of your analytics in one place, everyone in the organization is empowered to examine and act on user data. You can also self-host PostHog Open Source, which is ideal for any company with stringent data privacy needs.
|
||||
|
||||
### Strengths
|
||||
|
||||
@@ -57,11 +57,11 @@ PostHog is built primarily for engineers and other product-minded teams. With al
|
||||
|
||||
### How much does it cost?
|
||||
|
||||
Feature flags are a core feature of all editions, including the open source release. While multivariate feature flags are limited to paid plans, PostHog's paid plans are [free up to 1 million events every month](/pricing).
|
||||
Feature flags are a core feature of all editions, including the open source release. While multivariate feature flags are limited to paid plans, PostHog Cloud is [free up to 1 million events every month](/pricing).
|
||||
|
||||
### Open source license
|
||||
|
||||
PostHog open source is available under an MIT license. Read more about [self-hosting PostHog](https://posthog.com/docs/self-host) in our docs.
|
||||
PostHog Open Source is available under an MIT license.
|
||||
|
||||
<ArrayCTA />
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ This context can help you to optimize user experience, build user-led products a
|
||||
**Bottom line:** session recording is an essential tool for making better products.
|
||||
|
||||
### Why self-host your session recording?
|
||||
Most popular session recording tools, such as Hotjar, FullStory and LogRocket, are exclusively cloud-based. This is convenient, but comes with several drawbacks:
|
||||
Most popular session recording tools, such as Hotjar, FullStory and LogRocket, are exclusively cloud-based. This is convenient, but comes with several drawbacks:
|
||||
|
||||
1. They're expensive
|
||||
2. You don't control your user data
|
||||
@@ -47,23 +47,20 @@ Self-hosting your session recording eliminates these drawbacks and allows you to
|
||||
|
||||
If that sounds good to you, coming up are the best open source (or self-hosted) session recording tools right now.
|
||||
|
||||
> Think we've missed a good open source session recording tool? Open an issue on [our website repo](https://github.com/PostHog/posthog.com) to make a suggestion.
|
||||
|
||||
## 1. [PostHog](https://posthog.com/)
|
||||

|
||||
|
||||
PostHog is an all-in-one, [open-source product analytics](/blog/best-open-source-analytics-tools) platform that offers all the tools required to build better products, including but not limited to [Session Recording](/product/session-recording). Other features include [Feature Flags](/product/feature-flags), [Funnels](/product/funnels), [Heatmaps](/product/heatmaps), [Experimentation](/product/experimentation-suite), [Trends](/product/trends) and [much more](/product). All of PostHog’s tools work together natively, offering extensive, actionable user insights beyond what's possible with standalone session replay tools.
|
||||
PostHog is an all-in-one, [open-source Product OS](/blog/best-open-source-analytics-tools) that offers all the tools required to build better products, including but not limited to [session recording](/product/session-recording). Other features include product analytics, [feature flags](/product/feature-flags), [funnels](/product/funnels), [heatmaps](/product/heatmaps), [experimentation](/product/experimentation-suite), [trends](/product/trends) and [much more](/product). All of PostHog’s tools work together natively, offering extensive, actionable user insights beyond what's possible with standalone session replay tools.
|
||||
|
||||
### Who is PostHog for?
|
||||
|
||||
We think PostHog is the best tool for product-minded developers, data engineers and product teams. The fully comprehensive suite of analytics tools make it an ideal choice for any company that wants to gain wide-ranging insights into their usage and engagement metrics, while keeping all of their data in one manageable platform.
|
||||
We think PostHog is the best tool for product-minded developers, data engineers and product teams. The comprehensive suite of analytics tools make it an ideal choice for any company that wants to gain wide-ranging insights into their usage and engagement metrics, while keeping all of their data in one manageable platform.
|
||||
|
||||
Are we biased here? Yes. Are we wrong? We'll let you be the judge. As we're open source, you can [self-host PostHog for free](/pricing) to find out for yourself.
|
||||
Are we biased here? Yes. Are we wrong? We'll let you be the judge. As we're open source, you can [self-host PostHog](/docs/self-host) to find out for yourself.
|
||||
|
||||
### Strengths
|
||||
|
||||
- Fully-featured product analytics suite
|
||||
- Unlimited scaling
|
||||
- Front-end events captured out of the box
|
||||
- CSS selectors block sensitive data to protect user privacy
|
||||
- Customisable data retention
|
||||
@@ -73,15 +70,11 @@ Are we biased here? Yes. Are we wrong? We'll let you be the judge. As we're open
|
||||
|
||||
### How much does it cost?
|
||||
|
||||
PostHog (self-hosted and cloud) is free up to 1 million captured events each month when you enter card details.
|
||||
|
||||
[Session recording](/docs/user-guides/recordings) is **included at no extra cost** in all plans.
|
||||
PostHog Cloud is free up to 1 million captured events and 10,000 recordings per month when you enter a card. You can set billing limits to avoid surprise bills.
|
||||
|
||||
### Is it open source?
|
||||
|
||||
Yes! PostHog’s open source plans are available under an MIT license. Find out more about [PostHog’s self-hosting plans](/pricing).
|
||||
|
||||
<ArrayCTA />
|
||||
Yes! PostHog Open Source is available under an MIT license and can be deployed with Docker Compose.
|
||||
|
||||
**Further reading:**
|
||||
- [The best free and open source A/B testing tools](/blog/best-open-source-ab-testing-tools)
|
||||
|
||||
@@ -62,9 +62,9 @@ The following GA4 alternatives all solve one or more of these issues. Some provi
|
||||
- **GDPR compliance:** <span className="text-green text-lg">✔</span> (via self-hosting or EU Cloud)
|
||||
- **GA data import:** <span className="text-red text-lg">✖</span>
|
||||
|
||||
PostHog is an [all-in-one suite](/product) of product and data tools that includes product analytics, session recording and A/B testing – pretty much everything you need to track user behavior in an app or website, basically. Like GA4, PostHog is an event-based platform. It's priced on per event used, though it offers a generous [1 million events for free](/pricing) each month, so most smaller users can use it for free.
|
||||
PostHog is an [all-in-one Product OS](/product) that includes product analytics, session recording and A/B testing – pretty much everything you need to track user behavior in an app or website, basically. Like GA4, PostHog is an event-based platform. It's priced on per event used, though it offers a generous [1 million events for free](/pricing) each month, so most smaller users can use it for free.
|
||||
|
||||
As an open source product, you can see exactly what the team is working on via the [PostHog repo on GitHub](https://github.com/PostHog/posthog). This open source approach also affords a wide degree of flexibility. PostHog can be [self-hosted on your infrastructure](/docs/self-host), which is ideal for keeping control of data and compliance with privacy regulations. PostHog Cloud is available for those who want a managed SaaS experience, and there's an [EU hosting option](/eu) if you need to keep data in the EU for GDPR compliance.
|
||||
As an open source product, you can see exactly what the team is working on via the [PostHog's public roadmap](/roadmap). Small projects can self-host PostHog to keep complete control of their data, while PostHog Cloud (with US and EU hosting options) is available for those who want a managed SaaS experience.
|
||||
|
||||
#### PostHog vs Google Analytics 4
|
||||
|
||||
|
||||
@@ -16,10 +16,6 @@ tags:
|
||||
- Comparisons
|
||||
---
|
||||
|
||||
PostHog and Amplitude are both offer product analytics. That means they tell you where users are coming from and how they interact with your product, so that you can find ways to make it better.
|
||||
|
||||
But we think PostHog is a more powerful tool for building better products. Not only does PostHog offer more features and tools for engineers to understand their users, it's an [open-source analytics platform](/blog/best-open-source-analytics-tools) you can self-host and customize to your needs.
|
||||
|
||||
**Contents:**
|
||||
|
||||
- [How is PostHog different to Amplitude?](#how-is-posthog-different-from-amplitude)
|
||||
@@ -31,10 +27,10 @@ But we think PostHog is a more powerful tool for building better products. Not o
|
||||
|
||||
## How is PostHog different from Amplitude?
|
||||
|
||||
Let's start with the core differences. Over 10,000 companies already use PostHog, and many have switched from Amplitude. Here are a few reasons why.
|
||||
Over 10,000 companies already use PostHog, and many have switched from Amplitude. Here are a few reasons why.
|
||||
|
||||
### 1. It's an all-in-one platform
|
||||
PostHog is more than a product analytics tool, it's an all-in-one platform that replaces multiple tools in your data stack. You could run Amplitude for analytics, LaunchDarkly for feature flagging, Hotjar for session recording, and Optimizely for A/B testing, or you could just use PostHog for everything. One platform, one price: seamless integration.
|
||||
PostHog is more than a product analytics tool, it's an all-in-one Product OS that replaces multiple tools in your data stack. You could run Amplitude for analytics, LaunchDarkly for feature flagging, Hotjar for session recording, and Optimizely for A/B testing, or you could just use PostHog for everything. One platform, one price: seamless integration.
|
||||
|
||||
### 2. It's built for engineers
|
||||
Unlike Amplitude, PostHog is built for software developers. PostHog autocaptures data, so you don't have to spend time instrumenting events every time you update your app or website – we also offer robust tools for capturing custom events and actions when you need to. Our pricing is transparent, and we're entirely self-serve. You can setup PostHog and start paying us without ever speaking to a sales rep, but we have an [awesome customer success team](/get-in-touch#contact) if you have questions.
|
||||
@@ -44,7 +40,7 @@ Our MIT License isn’t just for show. You can access [our source code](https://
|
||||
|
||||
## Feature comparison
|
||||
|
||||
This table compares the Amplitude Analytics 'Growth' plan to PostHog Cloud, our fully-managed SaaS offering, and [PostHog Self-Hosted](/pricing). Single sign-on and multitenancy are available as bolt-ons to all plans.
|
||||
This table compares the Amplitude Analytics 'Growth' plan to PostHog Cloud, our fully-managed SaaS offering.
|
||||
|
||||
<div className="overflow-x-auto -mx-5 px-5">
|
||||
<table className="w-full mt-4" style="min-width: 600px;">
|
||||
@@ -53,7 +49,6 @@ This table compares the Amplitude Analytics 'Growth' plan to PostHog Cloud, our
|
||||
<td className="w-3/12"></td>
|
||||
<td className="w-3/12 text-center"><strong>Amplitude Analytics</strong></td>
|
||||
<td className="w-3/12 text-center"><strong>PostHog Cloud</strong></td>
|
||||
<td className="w-3/12 text-center"><strong>PostHog Self-Hosted</strong></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -61,157 +56,126 @@ This table compares the Amplitude Analytics 'Growth' plan to PostHog Cloud, our
|
||||
<td><strong>Platform</strong></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Host yourself</td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Transparent pricing</td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>100% self-serve</td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>1st-party cookies</td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Custom plugins</td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Multi-site</td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unlimited users</td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Event autocapture</td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GDPR compliance</td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>HIPAA compliance</td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Features</strong></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Funnel analysis</td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cohort analysis</td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Conversion tracking</td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Retention tracking</td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Revenue tracking</td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>UTM tracking</td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Event tracking</td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Feature Flags</td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span>*</td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Heatmaps</td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Session Recording</td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Experimentation</td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span>*</td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Predictive analytics</td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hedgehogs</td>
|
||||
<td className="text-center"><span className="text-red text-lg">✖</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
<td className="text-center"><span className="text-green text-lg">✔</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td className="text-center"><a href="/pricing">Learn more</a></td>
|
||||
<td className="text-center"><a href="/pricing">Learn more</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -346,14 +310,6 @@ Both Amplitude and PostHog integrate with a large number of data sources. The ta
|
||||
|
||||

|
||||
|
||||
### Hosting flexibility and privacy
|
||||
|
||||
PostHog offers the option to either [self-host your analytics](/docs/self-host) or use a managed cloud service, whereas Amplitude is strictly a cloud-only platform. While self-hosting isn't for everyone, it's often the best solution for a number of use cases.
|
||||
|
||||
Cloud platforms are incompatible with any business who values user privacy – many PostHog users use us because they handle sensitive client data – or those who need to comply with privacy legislation, such as HIPAA in the US.
|
||||
|
||||
HIPAA requires that any third-party handling personal health information enter into a legal agreement, but Amplitude doesn't offer this option. Self-hosting PostHog doesn't require any additional legal agreements as data never leaves your infrastructure. Read our [HIPAA guidance](/docs/privacy/hipaa-compliance) for more information.
|
||||
|
||||
### Integrated session recording
|
||||
While Amplitude and PostHog share many features, PostHog has [Session Recording](/product/session-recording) built in as standard.
|
||||
|
||||
@@ -399,14 +355,9 @@ We ship weirdly fast. Here's a quick snapshot of what we're working on right now
|
||||
- PostHog Customer Data Platform
|
||||
- See Users & Recordings linked to feature flags ([GitHub issue](https://github.com/PostHog/posthog/issues/12360))
|
||||
- Direct access to data via SQL ([GitHub issue](https://github.com/PostHog/posthog/issues/12352))
|
||||
- Universal search for people, recordings, cohorts, events, and groups ([GitHub issue](https://github.com/PostHog/posthog/issues/7963))
|
||||
|
||||
And what we're considering working on next:
|
||||
|
||||
- Feature flags platform for Android, iOS and Flutter
|
||||
- Mobile session recordings
|
||||
- Interlinking recordings and analytics
|
||||
- Session recording playlists
|
||||
|
||||
You can view and vote on issues on [our public roadmap](/roadmap).
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ PostHog and Matomo are both [open-source analytics platforms](/blog/best-open-so
|
||||
|
||||
Matomo is primarily pitched as a Google Analytics alternative for marketing analytics, and offers useful tools for migrating GA data into Matomo for a seamless transition. Its focus on session tracking makes it ideal for running analytics on large content and e-commerce websites
|
||||
|
||||
In contrast, PostHog is a product analytics platform designed to show you what your users do in your product. PostHog is event-based, so it tracks not just what pages users are visiting and how they got there, but also helps you detect, understand and fix user experience problems.
|
||||
In contrast, PostHog is a comprhensive Product OS that includes product analytics, session recording, feature flags, experimentation, and much more.
|
||||
|
||||
**Contents:**
|
||||
|
||||
@@ -32,7 +32,7 @@ In contrast, PostHog is a product analytics platform designed to show you what y
|
||||
|
||||
## How is PostHog different from Matomo?
|
||||
|
||||
### 1. It's an all-in-one product analytics platform
|
||||
### 1. It's an all-in-one platform
|
||||
Matomo charges extra for product analytics features like funnel analysis, cohorts, path analysis, and session recording, and they're not tightly integrated. In PostHog, these are core features in all editions, including the open source release, while [Experimentation](/product/experimentation-suite) is [free up to 1 million events per month](/pricing).
|
||||
|
||||
### 2. Seamless integration with modern data stacks
|
||||
@@ -43,13 +43,13 @@ PostHog is about giving engineering and product teams the tools they need to bui
|
||||
|
||||
## Feature comparison
|
||||
|
||||
This table compares three self-hosted plans: Matomo On-Premise, PostHog Open Source, and PostHog Self-Host – our paid self-hosted plan.
|
||||
This table compares three self-hosted plans: Matomo On-Premise, PostHog Open Source, and PostHog Cloud.
|
||||
|
||||
Matomo On-Premise ships with a robust set of core web analytics features, while advanced product analytics features are available at various prices from the Matomo On-Premise Marketplace.
|
||||
|
||||
All features in PostHog Open Source are totally free, including core product analytics tools.
|
||||
|
||||
PostHog Self-Hosted is a paid edition that adds [Experimentation](/product/experimentation-suite), [Group Analytics](/docs/user-guides/group-analytics), support for multiple projects, and numerous team management tools. It's priced on a per event basis and is free up to 1 million events per month.
|
||||
PostHog Cloud adds [experimentation](/product/experimentation-suite), [group analytics](/docs/user-guides/group-analytics), and support for multiple projects. It's free to use up to 1 million events per month.
|
||||
|
||||
<div className="overflow-x-auto -mx-5 px-5">
|
||||
<table className="w-full mt-4" style="min-width: 600px;">
|
||||
@@ -58,7 +58,7 @@ PostHog Self-Hosted is a paid edition that adds [Experimentation](/product/exper
|
||||
<td className="w-3/12"></td>
|
||||
<td className="w-3/12 text-center"><strong>Matomo On-Premise</strong></td>
|
||||
<td className="w-3/12 text-center"><strong>PostHog Open Source</strong></td>
|
||||
<td className="w-3/12 text-center"><strong>PostHog Self-Hosted</strong></td>
|
||||
<td className="w-3/12 text-center"><strong>PostHog Cloud</strong></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -376,9 +376,9 @@ In addition to extensive selection of dedicated integrations, PostHog [offers tw
|
||||
|
||||

|
||||
|
||||
### Combining Feature Flags and product analytics
|
||||
### Combining feature flags and product analytics
|
||||
|
||||
Feature Flags are at the core what makes PostHog a great tool for product-lead businesses. They're especially useful for gradually rolling out new features, and quickly rolling back if you detect problems, but they can be used in other creative ways.
|
||||
Feature flags are at the core what makes PostHog a great tool for product-lead businesses. They're especially useful for gradually rolling out new features, and quickly rolling back if you detect problems, but they can be used in other creative ways.
|
||||
|
||||
Need feedback on a design change? Roll it out to internal users first to gather feedback. Need to optimize messaging for different regions or demographics? Use a feature flag targeted on user properties. Want to change something without the CEO noticing? Create a flag just for them. Ok, we don't actually recommend the latter, but you get the idea.
|
||||
|
||||
@@ -388,21 +388,13 @@ Feature flags also integrate with other analytics insights, so you can breakdown
|
||||
|
||||
PostHog and Matomo both support event tracking, but PostHog goes one step further by autocapturing events so you don't have to instrument every single thing before you start tracking it. This means you start capturing useful data from the moment you deploy PostHog, but it also makes rolling out updates much easier as you don't have to define your events each time.
|
||||
|
||||
### Privacy compliance
|
||||
|
||||
Self-hosting PostHog means data never leaves your infrastructure, which makes protecting user privacy a breeze. GDPR and HIPAA compliance are vastly simplified this way, and you can go one step further by [running PostHog without any cookies](/docs/integrate/client/js#persistence) and therefore without the need for cookie banners.
|
||||
|
||||
## Strengths of Matomo
|
||||
|
||||

|
||||
|
||||
### E-commerce and marketing analytics
|
||||
|
||||
Matomo is especially well-suited to content and e-commerce websites. Unlike Google Analytics, it doesn't employ any data sampling, and it offers a wide-range of features specifically designed to aid marketing teams. For example, Matomo's Multi Channel Conversion Attribution reports (a paid feature) allow marketing teams to understand how all their activities impacted a conversion, not just the last interaction.
|
||||
|
||||
### Privacy compliance and optional cookie-less tracking
|
||||
|
||||
Like PostHog, Matomo is a good option for anyone seeking a privacy-respecting analytics platform. While by default it uses cookies, it also offers the option for cookie-less tracking, and features a built-in GDPR Manager utility to help simplify and monitor your compliance. The European Union uses a forked version of Matomo on all its websites.
|
||||
Matomo is especially well-suited to content and e-commerce websites. Unlike Google Analytics, it doesn't employ any data sampling, and it offers a wide-range of features specifically designed to aid marketing teams. For example, Matomo's Multi Channel Conversion Attribution reports (a paid feature) allow marketing teams to understand how all their activities impacted a conversion, not just the last interaction.
|
||||
|
||||
### Integration with popular content management systems
|
||||
|
||||
@@ -417,13 +409,9 @@ We ship weirdly fast. Here's a quick snapshot of what we're working on right now
|
||||
- See Users & Recordings linked to feature flags ([GitHub issue](https://github.com/PostHog/posthog/issues/12360))
|
||||
- Direct access to data via SQL ([GitHub issue](https://github.com/PostHog/posthog/issues/12352))
|
||||
- Universal search for people, recordings, cohorts, events, and groups ([GitHub issue](https://github.com/PostHog/posthog/issues/7963))
|
||||
|
||||
And what we're considering working on next:
|
||||
|
||||
- Feature flags platform for Android, iOS and Flutter
|
||||
- Mobile session recordings
|
||||
- Interlinking recordings and analytics
|
||||
- Session recording playlists
|
||||
|
||||
You can view and vote on issues on [our public roadmap](/roadmap).
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ Want to know how PostHog and Mixpanel are different? If you remember nothing els
|
||||
|
||||
1. Mixpanel is a product analytics tool.
|
||||
|
||||
2. PostHog is an all-in-one platform that _includes_ product analytics **and** a whole bunch more.
|
||||
2. PostHog is an all-in-one Product OS that _includes_ product analytics **and** a whole bunch more.
|
||||
|
||||
In this guide, we will compare:
|
||||
|
||||
@@ -925,15 +925,9 @@ Mixpanel and PostHog both support popular messaging apps and automation platform
|
||||
- [How much does Mixpanel cost?](#how-much-does-mixpanel-cost)
|
||||
- [How do PostHog and Mixpanel compare to Amplitude?](#how-do-posthog-and-mixpanel-compare-to-amplitude)
|
||||
|
||||
### Who should self-host PostHog?
|
||||
|
||||
We recommend 95% of companies use [PostHog Cloud](/pricing) – it's fully-managed by us and you can choose [PostHog Cloud EU](/eu) if you need to keep data within the EU. The most common reasons for choosing to self-host PostHog are companies that handle very sensitive data, such as medical or defense information.
|
||||
|
||||
Enterprises looking to self-host will require an infrastructure team knowledgeable in Kubernetes and ClickHouse. See our [enterprise self-hosted docs](/docs/self-host/enterprise/overview) and [book a call](book-a-demo) to discuss your options and whether self-hosting is right for you. We also have a [partner directory](/partners) includes third-party specialists who can support self-hosted deployments.
|
||||
|
||||
### How long does it take to deploy PostHog?
|
||||
|
||||
When using PostHog Cloud, mere minutes. All you need to do is include a tracking snippet in your product or website and (thanks to autocapture) you're immediately capturing events. Once up and running, you can enable session recording via your project settings.
|
||||
Deploying PostHog Cloud takes mere minutes. All you need to do is include a tracking snippet in your product or website and (thanks to autocapture) you're immediately capturing events. Once up and running, you can enable session recording via your project settings.
|
||||
|
||||
See our guide to [getting started on PostHog Cloud](/docs/getting-started/cloud) for more info.
|
||||
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
---
|
||||
date: 2022-01-14
|
||||
title: The 3 critical reasons companies choose self-hosted analytics
|
||||
rootPage: /blog
|
||||
sidebar: Blog
|
||||
showTitle: true
|
||||
hideAnchor: true
|
||||
featuredImage: ../images/blog/posthog-release-notes-blog.png
|
||||
featuredImageType: full
|
||||
author:
|
||||
- andy-vandervell
|
||||
category: Using PostHog
|
||||
tags:
|
||||
- Explainers
|
||||
---
|
||||
|
||||
PostHog is a self-hosted, [open-source analytics tool](/blog/best-open-source-analytics-tools). Transparency is one of our [core values](/handbook/company/culture) and we believe self-hosting is the best solution for many businesses, especially large enterprises with complex needs. But, why? Why do we believe in this idea when the likes of Mixpanel, Amplitude and Heap are busy doing the exact opposite?
|
||||
|
||||
This is a question we're always interrogating. As a business it's important we're on the right path and part of that journey is constantly talking to and listening to our customers, whether they're paying or open-source users.
|
||||
|
||||
Those conversations never end, but through them we've found there are three fundamental reasons companies choose to self-host. If any of them apply to you, PostHog might be the product analytics platform you need.
|
||||
|
||||
## 1) Data privacy
|
||||
|
||||
General Data Protection Regulation - four mundane words with huge consequences. Introduced in May 2018, the EU's GDPR is changing the shape of privacy globally. Why? Not only is it one of the toughest, most comprehensive privacy regulations in the world, its rules are extraterritorial. It doesn't matter if your company isn't based in the EU, if you want to process the data of EU citizens then you have to comply.
|
||||
|
||||
Failure to comply is costly. Under its provisions, regulators can fine companies the greater of €20 million or 4% of global turnover. Amazon and WhatsApp were [fined €746 million](https://www.wired.co.uk/article/amazon-gdpr-fine) and [€225 million](https://www.bbc.co.uk/news/technology-58422465) respectively in 2021. Other nations, notably Japan, South Korea, Israel, Brazil and Canada have either introduced GDPR-like regulations or amended existing legislation to match, while California introduced the [CCPA](https://oag.ca.gov/privacy/ccpa) to protect residents of California.
|
||||
|
||||
<BorderWrapper>
|
||||
<Quote
|
||||
imageSource="/images/customers/rikin.png"
|
||||
size="md"
|
||||
name="Rikin Kachhia"
|
||||
title="Software Engineer, Hasura"
|
||||
quote={`“No other tools we looked at offered self-hosted deployments. Some of our systems deal with sensitive data and we didn’t want to get into compliance issues with third parties. Self-hosting just took that whole problem away.”`}
|
||||
/>
|
||||
</BorderWrapper>
|
||||
|
||||
This wave of regulation has big consequences for anyone tracking user behavior, doubly so in sectors like health and finance with additional data protections. While cloud-based product analytics is convenient, third-party data processing brings with it an additional level of risk, complexity and legal administration. And that complexity is magnified if your company is handling client data.
|
||||
|
||||
[Mention Me](/customers/mention-me), a marketing platform whose clients include global brands like Puma, FarFetch and Zipcar, had exactly this problem when choosing a product analytics provider.
|
||||
|
||||
“We knew we needed to keep everything on our infrastructure," says Joe Saunderson, Software Engineer at Mention Me. "Our clients’ privacy is very important to us and we have obligations to store their data safely.”
|
||||
|
||||
They investigated third-party providers, but found their approach to data privacy unclear, making self-hosting the best option.
|
||||
|
||||
[Pry](/customers/pry), a financial planning platform for small businesses, faced a similar problem in keeping control of the sensitive financial information of its clients. Co-founder Tiffany Wong concluded self-hosting was the answer as she can be "confident that our data is safe and shared with as few platforms as possible".
|
||||
|
||||
Issues around data portability are particularly crucial for healthcare companies. Any product capturing health information in the US is subject to HIPAA, which regulates how companies use protected health information (PHI). Companies need to use [HIPAA compliant analytics providers](/blog/hipaa-compliant-analytics) and sign a Business Associate Agreement (BAA) before any user tracking can occur. By self-hosting, companies keep control of their data and avoid the legal expense, time and energy drained in dealing with legal agreements.
|
||||
|
||||
> Looking for an alternative to Google Analytics? Read our [guide to the best GDPR-compliant analytics](/blog/best-gdpr-compliant-analytics-tools) tools on the market.
|
||||
|
||||
## 2) More reliable data
|
||||
|
||||
Cloud-based and self-hosted analytics do the same thing, so surely they collect the same data? Wrong.
|
||||
|
||||
Knowledge-sharing tool Saga ran a side-by-side comparison between Mixpanel and a self-hosted instance of PostHog and found a huge difference in the number of tracked events.
|
||||
|
||||
"For one event we defined, Mixpanel reported 6,343 occurrences last month," explains Filip Stanev, co-founder of Saga. "PostHog reported what we know to be the true figure, 8,169 — almost 30% more than Mixpanel.”
|
||||
|
||||
So what's going on here?
|
||||
|
||||
Again, it's related to privacy, as our CTO and co-founder, Tim Glaser, explains:
|
||||
|
||||
"Event tracking is typically prevented by ad blockers, which block tracking that originates from third-party domains. Self-hosting your analytics avoids this problem as you’re just sending the data to your own server.
|
||||
|
||||
"This behavior isn't limited to ad blockers, either. VPNs and privacy browsers, which aren't explicitly positioned as ad blockers, will generally block third-party trackers by default."
|
||||
|
||||
Data quality is a critical issue for businesses who are now recognising the competitive advantage of data-driven product decisions. A [recent analysis](https://mikkeldengsoe.substack.com/p/data-to-engineers) of the top 50 European tech companies indicates high-growth startups are hiring data analysts at a higher rate than ever - banking app Monzo more than doubled the size of its data team in the last two years, while food delivery app Glovo has 74 open data roles compared to 102 open engineering roles.
|
||||
|
||||
## 3) It's a principle
|
||||
|
||||
Sometimes, a company's demands are philosophical rather than practical. We believe in transparency. That's why our product is open source and it's why everything about how we run the business, from [how we conduct meetings](/handbook/getting-started/meetings) or our [compensation calculator](/handbook/people/compensation), is available for everyone to see in our [company handbook](/handbook).
|
||||
|
||||
PostHog customers frequently tell us that controlling their data through self-hosting is simply a core value of their business. They don't want to share their data with Google, Facebook or any other large third-party, both to protect their users but also the value of their proprietary data. For many this isn't a new desire, but until recently the option to self-host a powerful, fully-featured product analytics suite didn't exist.
|
||||
|
||||
## We get it, self-hosting is great, does that mean everyone should do it?
|
||||
|
||||
We are self-hosting evangelists and [deploying PostHog](/docs/self-host) is a quick and easy process, but we also recognise not everyone wants, needs or is ready to self-host. That's why we [also offer PostHog Cloud](/signup), a version of PostHog hosted and managed by us with automatic upgrades, and minimal setup.
|
||||
|
||||
We often find customers prefer to start on PostHog Cloud and we make it easy to migrate to self-hosting if they desire. You can start using PostHog Cloud immediately and it's free to use up to 1 million events per month. Moreover, unlike other SaaS providers, our source code is open.
|
||||
|
||||
If data privacy isn't a priority and you just need reliable analytics as quickly as possible, cloud-hosting is always a sensible option.
|
||||
|
||||
> PostHog is an open source analytics platform you can host yourself. We help you build better products faster, without user data ever leaving your infrastructure.
|
||||
|
||||
<ArrayCTA />
|
||||
@@ -13,7 +13,6 @@ users:
|
||||
- Marketing
|
||||
toolsUsed:
|
||||
- Experimentation
|
||||
- Self-hosted
|
||||
- Insights
|
||||
- Apps
|
||||
---
|
||||
|
||||
@@ -13,7 +13,6 @@ users:
|
||||
toolsUsed:
|
||||
- Funnel analysis
|
||||
- Session recording
|
||||
- Self-hosting
|
||||
---
|
||||
|
||||
[Hasura](https://hasura.io/) is an open source GraphQL engine which provides instant, realtime GraphQL APIs over PostgreSQL, with webhook triggers and remote schemas for business logic. Since launching in 2018, it’s been adopted by tens of thousands of teams, from hobbyist developers to global companies such as Airbus, Atlassian, and Netlify.
|
||||
@@ -28,7 +27,7 @@ Initially, Hasura used Google Analytics to gather data on how users were interac
|
||||
size="md"
|
||||
name="Rikin Kachhia"
|
||||
title="Software Engineer, Hasura"
|
||||
quote={`“No other tools we looked at offered self-hosted deployments. Some of our systems deal with sensitive data and we didn’t want to get into compliance issues with third parties. Self-hosting on PostHog just took that whole problem away.”`}
|
||||
quote={`“Like every company, we need to look at conversion funnels. But we also want to use heatmaps, path analysis, and more. PostHog has it all, so is very useful across the board.”`}
|
||||
/>
|
||||
</BorderWrapper>
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ users:
|
||||
toolsUsed:
|
||||
- Funnel analysis
|
||||
- Session recording
|
||||
- Self-hosting
|
||||
---
|
||||
|
||||
<FloatedImage image="/images/customers/model.png" />
|
||||
@@ -38,7 +37,7 @@ With a variety of product analytics platforms to choose from, Mention Me hoped t
|
||||
|
||||
“We [looked at Amplitude](/blog/posthog-vs-amplitude), Mixpanel and Pendo and not only were they far too expensive but it was also very unclear how they worked in terms of data privacy,” said Joe Saunderson, Software Engineer at Mention Me. “We knew we needed to keep everything on our infrastructure because our clients’ privacy is very important to us and we have obligations to store their data safely.”
|
||||
|
||||
Unwilling to compromise on security, Mention Me continued searching until they found PostHog, which [enabled them to self-host](/docs/self-host). This meant all data would stay on their existing systems and not even PostHog would be able to access client information. Self-hosting also meant Mention Me could tailor PostHog’s open source platform to suit their individual needs.
|
||||
Unwilling to compromise on security, Mention Me continued searching until they found PostHog.
|
||||
|
||||
“The fact that PostHog is open source was really helpful,” said Lleo Harress, Software Engineer at Mention Me. “The cloud formation templates made deployment easy and we were up and running within a day, and because it’s open source we can also open the codebase and figure things out if needed. We’ve iterated and built out an entire stack for ourselves since launching PostHog.”
|
||||
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
---
|
||||
title: How Momentum Dash analyzes 2 million users, with help from Altinity
|
||||
customer: Momentum Dash
|
||||
logo: ../images/customers/momentumdash/momentum_dash_logo.svg
|
||||
featuredImage: ../images/customers/momentumdash/featured_momentumdash.jpeg
|
||||
industries:
|
||||
- SaaS
|
||||
- Browser extension
|
||||
users:
|
||||
- Product
|
||||
- Engineering
|
||||
toolsUsed:
|
||||
- Partners
|
||||
- Apps
|
||||
---
|
||||
|
||||
Enjoyed by over 2 million users, [Momentum Dash](https://momentumdash.com/) turns your browser's ‘New Tab’ page into a center for focus so that you become more productive, inspired, and purposeful. The team is driven by a desire to build a product that people truly love — and product analytics has given them a strategic advantage in the pursuit of this goal.
|
||||
|
||||
However, when analytics play such an essential role in the business it’s crucial that you’re able to trust the results — and for Momentum Dash that hasn’t always been the case.
|
||||
|
||||
“We used to use [Mixpanel](/blog/why-i-ditched-google-analytics-for-posthog), but it was so extremely expensive that we had to downsample very aggressively,” said Engineering Manager & Tech Lead Joe Trollo. “In turn, the downsampling created artifacts in our reports and we spent a lot of time confirming whether or not they were real.”
|
||||
|
||||
“Eventually, we were too skeptical of the reports for them to be effective. We were frustrated by the lost time and lack of insights, and started to look for another solution — which thankfully led us to PostHog.”
|
||||
|
||||

|
||||
|
||||
## A managed ClickHouse service with Altinity
|
||||
PostHog seemed like the perfect solution for Momentum Dash as the team could self-host in order to keep costs down and retain ownership — and trust — of data. The Engineering team was also familiar with most of the components required to maintain a self-hosted instance, such as Postgres, Redis and Kafka.
|
||||
|
||||
ClickHouse, however, was a complete unknown. In order to make sure everything was deployed correctly, Momentum Dash reached out to ClickHouse experts [Altinity](https://altinity.com/) via the [PostHog partner directory](https://posthog.com/partners) and signed up for [Alinity.Cloud](https://altinity.com/cloud-database/), which provides a fully managed ClickHouse service to backend PostHog.
|
||||
|
||||
“Altinity was extremely helpful and the team was very proactive,” says Joe. “They helped provision a test cluster, diagnose and solve issues, and even helped us [materialize some columns](https://posthog.com/blog/clickhouse-materialized-columns) to improve performance.”
|
||||
|
||||
“Even now, Altinity is monitoring our ClickHouse instance for any slow queries and working with PostHog to optimize them.”
|
||||
|
||||
<BorderWrapper>
|
||||
<Quote
|
||||
imageSource="/images/customers/joe_trollo.jpeg"
|
||||
size="md"
|
||||
name="Joe Trollo"
|
||||
title="Engineering Manager & Tech Lead, Momentum Dash"
|
||||
quote={`“Right now we're looking at funnels and conversion rates to see what motivates people to sign-up. We're doing experimentation around onboarding too, to teach users about the product.”`}
|
||||
/>
|
||||
</BorderWrapper>
|
||||
|
||||
## Creating a modern data stack with PostHog
|
||||
After a short prototyping period in which Altinity helped test development clusters, Momentum Dash made the decision to migrate from Mixpanel to PostHog. The team now ingests over 16 million events into ClickHouse every day and all of it is accessible in PostHog’s open source platform.
|
||||
|
||||
“The fact that PostHog is open source is extremely helpful because we can build on top of it when needed,” said Joe. In fact, the Momentum Dash team has now contributed to PostHog’s codebase several times, developing their own bespoke apps and even improving the way PostHog works with tools such as Confluent.
|
||||
|
||||
“Early last year we had done an evaluation because we were encountering problems with Mixpanel. We initially decided to stay with Mixpanel because we didn’t think the landscape had changed. Luckily for us, then PostHog started publishing helm charts!”
|
||||
@@ -10,7 +10,6 @@ users:
|
||||
- Engineering
|
||||
toolsUsed:
|
||||
- Experimentation
|
||||
- Self-hosted
|
||||
- Plugins
|
||||
- Apps
|
||||
---
|
||||
|
||||
@@ -18,7 +18,7 @@ toolsUsed:
|
||||
|
||||
Initially, the team built their own tool for gathering product data, writing a JSON file into the file system for every event observed. Eventually, this proved unscalable.
|
||||
|
||||
“We crashed the production platform due to having too many files in the system,” said CTO and Co-founder Lukas Smith. “We considered switching to Google Analytics, but there were a lot of concerns around GDPR and I wanted something that could be self-hosted. That’s what led me to PostHog.”
|
||||
After searching for a new solution which could track data at scale, Witty Works found PostHog - and, at that point, the teams' hands-on approach and ability to create their own tools became very useful.
|
||||
|
||||
## Creating apps to connect systems and protect user privacy
|
||||
Once Witty Works’ Engineering team had deployed PostHog internally, other teams began using the platform too. Marketing, for example, wanted to use PostHog to track onboarding funnels and understand when users updated [the Witty browser extension](https://chrome.google.com/webstore/detail/witty-your-inclusive-writ/meojhlodfiihbjkcnehkdcgncnhgagog?hl=en). As a result, Witty Works used [PostHog's app system](/docs/apps) to integrate with many tools in its stack.
|
||||
|
||||
@@ -42,22 +42,3 @@ Follow the instructions on the [PostHog migrate metadata repo](https://github.co
|
||||
```
|
||||
|
||||
For more information on the options see the [repo's readme](https://github.com/PostHog/posthog-migrate-meta)
|
||||
|
||||
## Migrating your custom apps if you are moving from self-hosted to cloud
|
||||
|
||||
If the app was previously extracting events using the [scheduled tasks api](/docs/apps/build/reference#scheduled-tasks):
|
||||
1. (fastest option) you could move this logic from the app into scheduled tasks on your server potentially using a cron job
|
||||
2. If you can make your app generalizable enough that others can benefit then [submit your app](https://posthog.com/docs/apps/build/tutorial#submitting-your-app) to the store.
|
||||
- To make it generalizable you'll want to convert anything specific to your configuration into a plugin.json config value
|
||||
|
||||
If the app was transforming events before ingestion:
|
||||
1. (fastest option) you could move this logic from the app into your client before you send the event
|
||||
2. If you can make your app generalizable enough that others can benefit then [submit your app](https://posthog.com/docs/apps/build/tutorial#submitting-your-app) to the store.
|
||||
- To make it generalizable you'll want to convert anything specific to your configuration into a plugin.json config value
|
||||
|
||||
If the app was used to send events to a custom destination:
|
||||
1. (fastest option) Convert your app to work as a webhook. We are soon releasing a webhook destination. You can subscribe for updates on the [roadmap](https://github.com/PostHog/posthog/issues/13989)
|
||||
2. If you can make your app generalizable enough that others can benefit then [submit your app](https://posthog.com/docs/apps/build/tutorial#submitting-your-app) to the store.
|
||||
- To make it generalizable you'll want to convert anything specific to your configuration into a plugin.json config value
|
||||
|
||||
If the options above don't work and you were previously paying a substantial amount self-hosting then email us at [hey@posthog.com](mailto:hey@posthog.com) with a link to the public github repo and we can see if it's appropriate as a private cloud app.
|
||||
|
||||
104
contents/docs/migrate/migrate-to-cloud.mdx
Normal file
104
contents/docs/migrate/migrate-to-cloud.mdx
Normal file
@@ -0,0 +1,104 @@
|
||||
---
|
||||
title: Migrate from self-hosted to PostHog Cloud
|
||||
sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
import MigratingEvents from "./snippets/migrating-events.mdx"
|
||||
|
||||
> If you're attempting this migration, feel free to ask questions and provide feedback via the [PostHog Communty Slack workspace](/slack) or [a GitHub issue](https://github.com/PostHog/posthog.com/issues).
|
||||
|
||||
## Requirements
|
||||
|
||||
- An existing PostHog instance running at least `1.30.0` (For upgrade instructions, take a look at [this guide](/docs/runbook/upgrading-posthog))
|
||||
- A new project on [PostHog Cloud](/docs/quickstart)
|
||||
|
||||
## Approach
|
||||
|
||||
This migration has two parts:
|
||||
|
||||
1. [Migrate your events](#migrate-your-events), this will also create the necessary person, person distinct ID, and related records.
|
||||
2. [Migrate your metadata](#migrate-your-metadata) (projects, dashboards, insights, actions, cohorts, feature flags, experiments, annotations).
|
||||
|
||||
## Migrate your events
|
||||
|
||||
To migrate your events, we'll be using the [PostHog Replicator app](/docs/apps/replicator),
|
||||
which allows us to stream both incoming and historical events to PostHog Cloud
|
||||
|
||||
> **Note**: Before starting, make sure to deactivate the GeoIP plugin on Cloud
|
||||
|
||||
### Installing the Replicator
|
||||
|
||||
Start by logging in to your existing self-hosted instance and navigating to the 'Apps' tab. Next, search for the 'Replicator' app and install it if it isn't already.
|
||||
|
||||

|
||||
|
||||
For the configuration:
|
||||
- **Host**: either app.posthog.com for US or eu.posthog.com for EU
|
||||
- **Project API Key**: the API key for the project in Cloud
|
||||
|
||||
After clicking save and activating it (toggle on the left side), the Replicator will begin forwarding incoming events to Cloud. Note that it may take around 15-20 minutes for the first events to arrive.
|
||||
|
||||
### Exporting historical events
|
||||
|
||||
Now that the Replicator is sending new events, we'll set up a batch job to export past events.
|
||||
First, go back to the configuration menu and click the gear next to "Export historical events" under "Jobs", which will open the following popup.
|
||||
|
||||

|
||||
|
||||
Select a start and end date on the calendar for the range you would like to export.
|
||||
Once you've chosen a date range, click "Run job now" to start the export.
|
||||
|
||||
Depending on the amount of data you have stored, this may take a fair amount of time. You can monitor the progress by clicking the "App metrics" button (graph) and going to the "Historical exports" tab.
|
||||
|
||||
## Switching tracking in you product
|
||||
|
||||
Now that our export is running, the next step is to switch over tracking within your product to direct any new events to Cloud. First, ensure that the Replicator app is still running on your self-hosted instance. Next, begin swapping out the API key and host within all the areas of your product that you track. Since we still have the replicator app installed, any events sent to the old instance will be forwarded, while any events using the new API key will go directly to our Cloud instance.
|
||||
|
||||
Once this is complete and you've double-checked that no more events are coming to the old instance and that all historical exports have finished, you can deactivate the Replicator app.
|
||||
|
||||
## Migrate your metadata
|
||||
|
||||
Follow the instructions on the [PostHog migrate metadata repo](https://github.com/PostHog/posthog-migrate-meta):
|
||||
|
||||
> **Note**
|
||||
> This process has the following caveats:
|
||||
> 1. Project API Key. You'll need to replace the API key in your code with the new API key.
|
||||
> 2. "created by" information. Every object will appear as if it was created by you.
|
||||
> 3. "created at" information. Every object will appear as if it was created on the time you ran this script.
|
||||
|
||||
1. Clone the repo and cd into it
|
||||
```bash
|
||||
git clone https://github.com/PostHog/posthog-migrate-meta
|
||||
cd posthog-migrate-meta
|
||||
```
|
||||
2. Install the dependencies by running `yarn`
|
||||
3. Run the script
|
||||
```bash
|
||||
ts-node --source [posthog instance you want to migrate from] --sourcekey [personal api key for that instance] --destination [posthog instance you want to migrate to.] --destinationkey [personal api key for destination instance]
|
||||
```
|
||||
|
||||
For more information on the options see the [repo's readme](https://github.com/PostHog/posthog-migrate-meta)
|
||||
|
||||
## Migrating your custom apps
|
||||
|
||||
If the app was previously extracting events using the [scheduled tasks api](/docs/apps/build/reference#scheduled-tasks):
|
||||
|
||||
1. (fastest option) you could move this logic from the app into scheduled tasks on your server potentially using a cron job
|
||||
2. If you can make your app generalizable enough that others can benefit then [submit your app](https://posthog.com/docs/apps/build/tutorial#submitting-your-app) to the store.
|
||||
- To make it generalizable you'll want to convert anything specific to your configuration into a plugin.json config value
|
||||
|
||||
If the app was transforming events before ingestion:
|
||||
|
||||
1. (fastest option) you could move this logic from the app into your client before you send the event
|
||||
2. If you can make your app generalizable enough that others can benefit then [submit your app](https://posthog.com/docs/apps/build/tutorial#submitting-your-app) to the store.
|
||||
- To make it generalizable you'll want to convert anything specific to your configuration into a plugin.json config value
|
||||
|
||||
If the app was used to send events to a custom destination:
|
||||
|
||||
1. (fastest option) Convert your app to work as a webhook. We are soon releasing a webhook destination. You can subscribe for updates on the [roadmap](https://github.com/PostHog/posthog/issues/13989)
|
||||
2. If you can make your app generalizable enough that others can benefit then [submit your app](https://posthog.com/docs/apps/build/tutorial#submitting-your-app) to the store.
|
||||
|
||||
- To make it generalizable you'll want to convert anything specific to your configuration into a plugin.json config value
|
||||
|
||||
If the options above don't work and you were previously paying a substantial amount self-hosting then email us at [hey@posthog.com](mailto:hey@posthog.com) with a link to the public github repo and we can see if it's appropriate as a private cloud app.
|
||||
@@ -11,4 +11,4 @@ To migrate your events, we'll be using the [PostHog Replicator app](/docs/apps/r
|
||||
7. After clicking save and activating it (toggle on the left side), the Replicator will start to run. Any events added to your old instance will be replicated in your new instance. It can take a little while (15-20 minutes) for the first events to show up.
|
||||
8. Once the Replicator is activated, go back to the configuration menu and click the gear next to "Export historical events" under "Jobs." On the calendar, select a start and end date, then click "Run job now." This will begin the process of historical events being import (and might take a while). You can see the progress in logs or by clicking the "App metrics" button (graph) and going to the "Historical exports" tab.
|
||||
9. To track progress of the export you can click the graph icon next to the Replicator app and then click on the "Historical Exports" tab
|
||||
10. Re-enable the GeoIP plugin of your new PostHog instance
|
||||
10. Re-enable the GeoIP plugin of your new PostHog instance
|
||||
|
||||
0
contents/docs/migrate/touch
Normal file
0
contents/docs/migrate/touch
Normal file
@@ -4,6 +4,10 @@ sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
import Sunset from "../../../self-host/\_snippets/sunset-disclaimer.mdx"
|
||||
|
||||
<Sunset />
|
||||
|
||||
import ResizeDiskRequirementsSnippet from '../../snippets/resize-disk-requirements.mdx'
|
||||
|
||||
<ResizeDiskRequirementsSnippet/>
|
||||
|
||||
@@ -4,13 +4,19 @@ sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
import Sunset from "../../../self-host/\_snippets/sunset-disclaimer.mdx"
|
||||
|
||||
<Sunset />
|
||||
|
||||
#### How to scale ClickHouse vertically
|
||||
|
||||
Currently the easiest way to scale up a ClickHouse environment hosted by our helm chart config is to set the affinity for which node ClickHouse is deployed to and scale that node up in terms of the resources it has available to it. This is very easy to do in practice. Let's get down to the nuts and bolts of how to get this done!
|
||||
- Create a node instance or group with more CPU and memory in your K8s cluster with a [label](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/) of `clickhouse:true` set on it (this will be used to target that node for ClickHouse deployment). There are a few ways to create a node group and most are implementation specific to your kubernetes platform. A few references for how to create an manage node groups can be found for [GKE](https://cloud.google.com/kubernetes-engine/docs/concepts/node-pools), [EKS](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html), and [DigitalOcean](https://docs.digitalocean.com/products/kubernetes/#worker-nodes-and-node-pools).
|
||||
- Essentially if you know the node that you want ClickHouse to be installed on you can run `kubectl label nodes <desired-clickhouse-node-name> clickhouse=true`
|
||||
- To restrict other pods from not using that node we can add a taint via `kubectl taint nodes <desired-clickhouse-node-name> dedicated=clickhouse:NoSchedule`
|
||||
- Update your `values.yaml`:
|
||||
|
||||
- Create a node instance or group with more CPU and memory in your K8s cluster with a [label](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/) of `clickhouse:true` set on it (this will be used to target that node for ClickHouse deployment). There are a few ways to create a node group and most are implementation specific to your kubernetes platform. A few references for how to create an manage node groups can be found for [GKE](https://cloud.google.com/kubernetes-engine/docs/concepts/node-pools), [EKS](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html), and [DigitalOcean](https://docs.digitalocean.com/products/kubernetes/#worker-nodes-and-node-pools).
|
||||
- Essentially if you know the node that you want ClickHouse to be installed on you can run `kubectl label nodes <desired-clickhouse-node-name> clickhouse=true`
|
||||
- To restrict other pods from not using that node we can add a taint via `kubectl taint nodes <desired-clickhouse-node-name> dedicated=clickhouse:NoSchedule`
|
||||
- Update your `values.yaml`:
|
||||
|
||||
```
|
||||
clickhouse:
|
||||
nodeSelector:
|
||||
@@ -21,6 +27,7 @@ clickhouse:
|
||||
operator: "Equal"
|
||||
effect: "NoSchedule"
|
||||
```
|
||||
- You might need to trigger the reallocation for the clickhouse pod, e.g. run `kubectl delete pod chi-posthog-posthog-0-0-0`
|
||||
|
||||
- You might need to trigger the reallocation for the clickhouse pod, e.g. run `kubectl delete pod chi-posthog-posthog-0-0-0`
|
||||
|
||||
You can find more information about optional settings like that [here](https://github.com/PostHog/charts-clickhouse/blob/main/charts/posthog/values.yaml) and also more about [`nodeSelectors`](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) and [`taints` and `tolerations`](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/).
|
||||
|
||||
@@ -4,6 +4,10 @@ sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
import Sunset from "../../../self-host/\_snippets/sunset-disclaimer.mdx"
|
||||
|
||||
<Sunset />
|
||||
|
||||
import ResizeDiskRequirementsSnippet from '../../snippets/resize-disk-requirements'
|
||||
|
||||
<ResizeDiskRequirementsSnippet/>
|
||||
|
||||
@@ -4,6 +4,10 @@ sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
import Sunset from "../../../self-host/\_snippets/sunset-disclaimer.mdx"
|
||||
|
||||
<Sunset />
|
||||
|
||||
import ResizeDiskRequirementsSnippet from '../../snippets/resize-disk-requirements'
|
||||
|
||||
<ResizeDiskRequirementsSnippet/>
|
||||
|
||||
@@ -4,19 +4,23 @@ sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
ZooKeeper is a centralized service for maintaining configuration information, naming,
|
||||
import Sunset from "../../../self-host/\_snippets/sunset-disclaimer.mdx"
|
||||
|
||||
<Sunset />
|
||||
|
||||
ZooKeeper is a centralized service for maintaining configuration information, naming,
|
||||
providing distributed synchronization, and providing group services.
|
||||
|
||||
At PostHog we use it to store metadata information for [ClickHouse](./clickhouse)
|
||||
At PostHog we use it to store metadata information for [ClickHouse](./clickhouse)
|
||||
and [Kafka](./kafka).
|
||||
|
||||
## Failure modes
|
||||
|
||||
### Disk space usage increases rapidly
|
||||
|
||||
It has been observed that Zookeepers can suddenly increase it's disk usage, after
|
||||
being in a stable state for some time. This can sometimes be resolved by ensuring
|
||||
that old Zookeeper snapshots are cleared. If you experience this issue you can
|
||||
It has been observed that Zookeepers can suddenly increase it's disk usage, after
|
||||
being in a stable state for some time. This can sometimes be resolved by ensuring
|
||||
that old Zookeeper snapshots are cleared. If you experience this issue you can
|
||||
validate this solution by running [zkCleanup.sh](https://github.com/apache/zookeeper/blob/master/zookeeper-docs/src/main/resources/markdown/zookeeperTools.md#zkCleanup):
|
||||
|
||||
```bash
|
||||
@@ -25,23 +29,23 @@ kubectl exec -it -n posthog posthog-posthog-zookeeper -- /opt/bitnami/zookeeper/
|
||||
kubectl exec -it -n posthog posthog-posthog-zookeeper -- df -h /bitnami/zookeeper
|
||||
```
|
||||
|
||||
This will remove all snapshots aside from the last three, printing out the disk
|
||||
This will remove all snapshots aside from the last three, printing out the disk
|
||||
usage before and after.
|
||||
|
||||
In newer versions of our [Helm chart](https://github.com/PostHog/charts-clickhouse) we
|
||||
run snapshot cleanups periodically every hour. If you experience Zookeeper space issues
|
||||
and are on chart 18.2.0 or below, you can update to a later version to enable this.
|
||||
Alternatively you can specify the Helm value `zookeeper.autopurge.purgeInterval=1` which
|
||||
In newer versions of our [Helm chart](https://github.com/PostHog/charts-clickhouse) we
|
||||
run snapshot cleanups periodically every hour. If you experience Zookeeper space issues
|
||||
and are on chart 18.2.0 or below, you can update to a later version to enable this.
|
||||
Alternatively you can specify the Helm value `zookeeper.autopurge.purgeInterval=1` which
|
||||
will cause the clean up job to run every hour.
|
||||
|
||||
If you wish to further debug what is being added to your cluster, you can inspect
|
||||
If you wish to further debug what is being added to your cluster, you can inspect
|
||||
a snapshot diff by running [zhSnapshotComparer.sh](https://github.com/apache/zookeeper/blob/master/zookeeper-docs/src/main/resources/markdown/zookeeperTools.md#zkSnapshotComparer) e.g.:
|
||||
|
||||
```bash
|
||||
kubectl exec -it -n posthog posthog-posthog-zookeeper -- /opt/bitnami/zookeeper/bin/zkSnapshotComparer.sh -l /bitnami/zookeeper/data/version-2/snapshot.fe376 -r /bitnami/zookeeper/data/version-2/snapshot.ff8c0 -b 2 -n 1
|
||||
```
|
||||
|
||||
This will give you a breakdown of the number of nodes in each snapshot, as well as
|
||||
This will give you a breakdown of the number of nodes in each snapshot, as well as
|
||||
the exact node difference between the two. For example:
|
||||
|
||||
```bash
|
||||
@@ -90,4 +94,5 @@ Node /clickhouse/tables/0/posthog.events/blocks/202203_10072597193275699042_5516
|
||||
```
|
||||
|
||||
### Useful links
|
||||
- [Official documentation](https://zookeeper.apache.org/doc/current/)
|
||||
|
||||
- [Official documentation](https://zookeeper.apache.org/doc/current/)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import ExpandableVolumeSnippet from '../../self-host/deploy/snippets/expandable-volume.mdx'
|
||||
import ExpandableVolumeSnippet from '../../self-host/\_snippets/expandable-volume.mdx'
|
||||
|
||||
### Requirements
|
||||
|
||||
|
||||
@@ -4,12 +4,15 @@ sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
import Sunset from "../self-host/\_snippets/sunset-disclaimer.mdx"
|
||||
|
||||
<Sunset />
|
||||
|
||||
### 30.0.0
|
||||
|
||||
Self-hosted users must run async migrations 0005-0007 before updating to PostHog version 1.42.0.
|
||||
Self-hosted users must run async migrations 0005-0007 before updating to PostHog version 1.42.0.
|
||||
|
||||
If you haven't run async migrations 0005-0007 yet, or if they aren't available on your current version, we recommend upgrading to PostHog version 1.41.4 first, _then_ running the async migrations, then upgrading to 1.42.0.
|
||||
If you haven't run async migrations 0005-0007 yet, or if they aren't available on your current version, we recommend upgrading to PostHog version 1.41.4 first, _then_ running the async migrations, then upgrading to 1.42.0.
|
||||
|
||||
Note: for async migration 0007 disable the post checks in the advanced options when kicking off the async migration (otherwise you might see them fail and need to re-run the migration with them disabled).
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
---
|
||||
title: Upgrading PostHog
|
||||
sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
We want to make sure upgrading PostHog is as smooth as possible. We use a synchronous and an asynchronous migration framework to make sure database migrations are easy to be deployed, rolled back and safe to run.
|
||||
|
||||
Because some data migrations require touching tables that can get very large for some PostHog installation, some migrations are a little more involved. We will explicitly mention this in our changelog. We aim to minimize these types of migrations as much as possible, and their frequency will decrease.
|
||||
|
||||
If you need help, feel free to create an issue, or [join our Slack](/slack).
|
||||
|
||||
## Upgrade instructions
|
||||
|
||||
Find the relevant upgrade instructions in the corresponding deployment info page:
|
||||
- [AWS](/docs/self-host/deploy/aws#upgrading-the-chart)
|
||||
- [Azure](/docs/self-host/deploy/azure#upgrading-the-chart)
|
||||
- [DigitalOcean](/docs/self-host/deploy/digital-ocean#upgrading-the-chart)
|
||||
- [Google Cloud Platform](/docs/self-host/deploy/gcp#upgrading-the-chart)
|
||||
- [Hobby](/docs/self-host/deploy/hobby#upgrading)
|
||||
- [Other platforms](/docs/self-host/deploy/other#upgrading-the-chart)
|
||||
43
contents/docs/runbook/upgrading-posthog.mdx
Normal file
43
contents/docs/runbook/upgrading-posthog.mdx
Normal file
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: Upgrading PostHog
|
||||
sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
import Sunset from '../self-host/\_snippets/sunset-disclaimer.mdx'
|
||||
import CommandHelmGetRepoSnippet from '../self-host/\_snippets/command-helm-get-repo.mdx'
|
||||
import CommandHelmUpgradeSnippet from '../self-host/\_snippets/command-helm-upgrade.mdx'
|
||||
|
||||
<Sunset />
|
||||
|
||||
We want to make sure upgrading PostHog is as smooth as possible.
|
||||
We use a synchronous and an asynchronous migration framework to make sure database migrations are easy to be deployed, rolled back and safe to run.
|
||||
|
||||
Because some data migrations require touching tables that can get very large for some PostHog installation, some migrations are a little more involved.
|
||||
|
||||
For more information on any extra steps needed when updating to specific versions, check out our [upgrade notes](/docs/runbook/upgrade-notes).
|
||||
|
||||
If you need help, feel free to [join our community Slack](/slack) for further assistance.
|
||||
|
||||
## 1. Get and update the Helm repo
|
||||
|
||||
To upgrade the [Helm](https://helm.sh/) release `posthog` in the `posthog` namespace:
|
||||
|
||||
<CommandHelmGetRepoSnippet />
|
||||
|
||||
## 2. Follow the upgrade notes
|
||||
|
||||
```shell
|
||||
helm list -n posthog
|
||||
helm search repo posthog
|
||||
```
|
||||
|
||||
Take note of the numbers of the **Helm chart version** (in the format `posthog-{major}.{minor}.{patch}` - for example, `posthog-19.15.1`) when running the commands above.
|
||||
|
||||
Make sure to check the [upgrade notes](/docs/runbook/upgrade-notes) for the new version, along with all the prior versions before moving forward\*\*.
|
||||
|
||||
## 3. Run the upgrade
|
||||
|
||||
<CommandHelmUpgradeSnippet />
|
||||
|
||||
Check the Helm [documentation](https://helm.sh/docs/helm/helm_upgrade/) for more info about the `helm upgrade` command.
|
||||
18
contents/docs/self-host/_snippets/sunset-disclaimer.mdx
Normal file
18
contents/docs/self-host/_snippets/sunset-disclaimer.mdx
Normal file
@@ -0,0 +1,18 @@
|
||||
<blockquote>
|
||||
<p>🌇 <b>Sunsetting Kubernetes Deployments</b></p>
|
||||
|
||||
<p>
|
||||
This page covers our PostHog Kubernetes deployment, which we are currently in the <a href="/blog/sunsetting-helm-support-posthog">process of sunsetting</a>.
|
||||
Existing customers will receive support until May 31, 2023 and we will continue to provide security updates for the next year.
|
||||
</p>
|
||||
|
||||
<details>
|
||||
<summary class="text-sm font-bold">For existing customers</summary>
|
||||
<div>We highly recommend migrating to PostHog Cloud (US or EU). Take a look at <a href="/docs/migrate/migrate-to-cloud">this guide</a> for more information on the migration process.</div>
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary class="text-sm font-bold">Looking to continue self-hosting?</summary>
|
||||
<div>We still maintain our Open-source Docker Compose deployment. Instructions for deploying can be found <a href="/docs/self-host/open-source/deployment">here</a>.</div>
|
||||
</details>
|
||||
</blockquote>
|
||||
@@ -5,6 +5,9 @@ showTitle: true
|
||||
hideAnchor: true
|
||||
---
|
||||
|
||||
import Sunset from "../\_snippets/sunset-disclaimer.mdx"
|
||||
|
||||
<Sunset />
|
||||
|
||||
As of [PostHog 1.33.0](/blog/the-posthog-array-1-33-0) some settings can now be managed directly in the app, without having to connect to your cluster and/or redeploy. If you are on version 1.33.0 or newer, please review [Instance settings](/docs/self-host/configure/instance-settings) first.
|
||||
|
||||
@@ -16,81 +19,79 @@ Rows with a missing 'Default Value' usually default to an empty string. This is
|
||||
|
||||
Some variables here are default Django variables. This [Django Docs page](https://docs.djangoproject.com/en/3.2/ref/settings/) has more information about them.
|
||||
|
||||
|
||||
| Variable | Description | Default Value |
|
||||
| :------------------------ | :------------------------------------ | :------------------- |
|
||||
| `SECRET_KEY` | **❗️ Always required.** [Used by Django for cryptography](https://docs.djangoproject.com/en/2.2/ref/settings/#secret-key). Helps secure cookies, sessions, hashes, etc. Custom value required in production. | `<randomly generated secret key>`
|
||||
| `SITE_URL` - should be an absolute URL and include the protocol (e.g. `https://posthog.your-domain.com`) | **❗️ Always required.** Principal/canonical URL of your PostHog instance. Needed for emails, webhooks and SSO to work properly. We currently do not support subpaths in this URL. | `http://localhost:8000`
|
||||
| `SECURE_COOKIES` | Determines if Django should use [secure cookies](https://docs.djangoproject.com/en/2.2/ref/settings/#session-cookie-secure). Insecure cookies do not work without HTTPS. | `False` if PostHog is running in DEBUG or TEST mode, else `True`
|
||||
| `SENTRY_DSN` | Used to integrate with [Sentry](https://sentry.io/welcome/) error and event tracking. Ignored when running tests. | `None`
|
||||
| `IS_BEHIND_PROXY` | Specifies if PostHog is running behind a proxy like Apache, NGINX or ELB. Be sure to properly set [trusted proxies](/docs/self-host/configure/running-behind-proxy#trusted-proxies). | `False`
|
||||
| `ALLOWED_IP_BLOCKS` | Specifies IP blocks allowed to connect to the PostHog instance for management (events will still be allowed from anywhere). Make sure to properly [configure your proxy](/docs/self-host/configure/running-behind-proxy) if running behind a proxy. | _Empty_
|
||||
| `TRUSTED_PROXIES` | Specifies the IPs of proxies that can be trusted. | `None`
|
||||
| `TRUST_ALL_PROXIES` | Determines if all proxies can be trusted. | `False`
|
||||
| `ALLOWED_HOSTS` | A list of strings representing the host/domain names that Django can serve. [More info](https://docs.djangoproject.com/en/3.1/ref/settings/#allowed-hosts). | `*` (all)
|
||||
| `SKIP_SERVICE_VERSION_REQUIREMENTS`| Set this to True if you want to disable checking for dependent service version requirements. | `False`
|
||||
| `ACTION_EVENT_MAPPING_INTERVAL_SECONDS`| Specify how often (in seconds) PostHog should run a job to match events to actions. | `300`
|
||||
| `ASYNC_EVENT_ACTION_MAPPING`| If set to `False`, actions will be matched to events as they come. Otherwise, the matching will happen in batches through a periodic Celery task. Should only be toggled on by high load instances. | `False`
|
||||
| `CAPTURE_INTERNAL_METRICS` | Send some internal instrumentation to your own posthog instance, exposed via `/instance/status` page. For EE only. | `False`
|
||||
| `DATABASE_URL`| [Database URL](https://github.com/jacobian/dj-database-url#url-schema) pointing to your PostgreSQL instance. | `postgres://localhost:5432/posthog` if PostHog is running in DEBUG or TEST mode, must be specified otherwise.
|
||||
| `DEBUG_QUERIES`| Whether debugging queries (ClickHouse) is enabled in the Command Palette.| `False`
|
||||
| `DEBUG` | Determines if PostHog should run in [DEBUG mode](https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-DEBUG). You can set this to a truthy value when developing, but disable this in production! | `False` |
|
||||
| `CLICKHOUSE_DISABLE_EXTERNAL_SCHEMAS` | If set, disables using ProtoBuf schemas for kafka communication. Needs to be set when using an external ClickHouse service provider during initial deploy. | `False`
|
||||
| `DISABLE_PAID_FEATURE_SHOWCASING`| Whether any showcasing of a paid feature should be disabled. Useful if running a free open source version of PostHog and are not interested in premium functionality. | `False`
|
||||
| `DISABLE_SECURE_SSL_REDIRECT` | Disables automatic redirect from port 80 (HTTP) to port 443 (HTTPS). | `False`
|
||||
| `GITHUB_TOKEN`| GitHub personal access token, used to prevent rate limiting when using apps and to allow installation of apps from private repos | `None`
|
||||
| `GITLAB_TOKEN`| GitLab personal access token, used to prevent rate limiting when using apps and to allow installation of apps from private repos | `None`
|
||||
| `JS_URL` | URL used by Webpack for loading external resources like images and files. | `http://localhost:8234` if PostHog is running in DEBUG mode, must be specified otherwise.
|
||||
| `KAFKA_URL` | Address used by the application to contact kafka | `kafka://kafka`
|
||||
| `KAFKA_URL_FOR_CLICKHOUSE` | Address used by ClickHouse to read from kafka. Falls back to `KAFKA_URL` | `None`
|
||||
| `MATERIALIZE_COLUMNS_ANALYSIS_PERIOD_HOURS` | Diagnostic for what columns to materialize | `168`
|
||||
| `MATERIALIZE_COLUMNS_BACKFILL_PERIOD_DAYS` | How far back backfill materialized columns | `90`
|
||||
| `MATERIALIZE_COLUMNS_MAX_AT_ONCE` | How many columns to materialize at once | `10`
|
||||
| `MATERIALIZE_COLUMNS_MINIMUM_QUERY_TIME` | Diagnostic for what columns to materialize | `3000`
|
||||
| `MATERIALIZE_COLUMNS_SCHEDULE_CRON` | How frequently to run clickhouse column materialization. | `0 5 * * SAT`
|
||||
| `MULTI_ORG_ENABLED` | Allows creating multiple organizations in your instance (multi-tenancy). **Requires a premium license.** | `False`
|
||||
| `NPM_TOKEN`| [Access token for npm](https://docs.npmjs.com/about-access-tokens), used to allow installation of apps released as a private npm package | `None`
|
||||
| `OPT_OUT_CAPTURING` | Disable sending product usage data to PostHog. | `False`
|
||||
| `POSTHOG_DB_NAME`| Database name. | Must be specified when `DATABASE_URL` is not set.
|
||||
| `POSTHOG_DB_PASSWORD`| Database password. | `""` if PostHog is running in DEBUG or TEST mode. Must be specified when `DATABASE_URL` is not set.
|
||||
| `POSTHOG_DB_USER`| Database username. | `postgres` if PostHog is running in DEBUG or TEST mode. Must be specified when `DATABASE_URL` is not set.
|
||||
| `POSTHOG_POSTGRES_CLI_SSL_CA`| Location of the SSL root certificate file for PostgreSQL. [More info.](https://www.postgresql.org/docs/current/ssl-tcp.html) | `None`
|
||||
| `POSTHOG_POSTGRES_CLI_SSL_CRT`| Location of the SSL certificate file for PostgreSQL. [More info.](https://www.postgresql.org/docs/current/ssl-tcp.html) | `None`
|
||||
| `POSTHOG_POSTGRES_CLI_SSL_KEY`| Location of the SSL key file for PostgreSQL. [More info.](https://www.postgresql.org/docs/current/ssl-tcp.html) | `None`
|
||||
| `POSTHOG_POSTGRES_HOST`| Host pointing to your PostgreSQL instance. | `localhost` if PostHog is running in DEBUG or TEST mode. Must be specified when `DATABASE_URL` is not set.
|
||||
| `POSTHOG_POSTGRES_PORT`| Port pointing to your PostgreSQL instance. | `5432` if PostHog is running in DEBUG or TEST mode. Must be specified when `DATABASE_URL` is not set.
|
||||
| `POSTHOG_POSTGRES_SSL_MODE`| PostgreSQL SSL mode. [More info.](https://www.postgresql.org/docs/9.1/libpq-ssl.html#LIBQ-SSL-CERTIFICATES) | `None`
|
||||
| `REDIS_URL`| [Redis URL](https://redis-py.readthedocs.io/en/stable/#redis.ConnectionPool.from_url) pointing to your Redis instance. | `redis://localhost/` if PostHog is running in DEBUG or TEST mode, must be specified otherwise.
|
||||
| `SOCIAL_AUTH_GITHUB_KEY` | GitHub key for allowing [sign up with GitHub](/docs/user-guides/sso#github). | _Empty_
|
||||
| `SOCIAL_AUTH_GITHUB_SECRET`| GitHub secret for allowing [sign up with GitHub](/docs/user-guides/sso#github). | _Empty_
|
||||
| `SOCIAL_AUTH_GITLAB_API_URL`| Endpoint to be used for [GitLab authentication](/docs/user-guides/sso#gitlab). Changing this is only relevant for self-host GitLab users. | `https://gitlab.com`
|
||||
| `SOCIAL_AUTH_GITLAB_KEY` | GitLab key for allowing [sign up with GitLab](/docs/user-guides/sso#gitlab). | _Empty_
|
||||
| `SOCIAL_AUTH_GITLAB_SECRET`| GitLab secret for allowing [sign up with GitLab](/docs/user-guides/sso#gitlab). | _Empty_
|
||||
| `SOCIAL_AUTH_GOOGLE_OAUTH2_KEY` | Google client ID for allowing [SSO with Google](/docs/user-guides/sso#google). | _Empty_
|
||||
| `SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET`| Google client secret for allowing [SSO with Google](/docs/user-guides/sso#google).| _Empty_
|
||||
| `STATSD_HOST` | Host of a running StatsD daemon (e.g. 127.0.0.1) | `None`
|
||||
| `STATSD_PORT` | Port for the running StatsD daemon | `8125`
|
||||
| `STATSD_PREFIX` | Prefix to be prepended to all stats used by StatsD. Useful for distinguishing environments using the same server. | _Empty_
|
||||
| `CLEAR_CLICKHOUSE_REMOVED_DATA_SCHEDULE_CRON` | When data is (asynchronously) deleted from the events table | `0 5 * * SAT`
|
||||
|
||||
| Variable | Description | Default Value |
|
||||
| :------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------ |
|
||||
| `SECRET_KEY` | **❗️ Always required.** [Used by Django for cryptography](https://docs.djangoproject.com/en/2.2/ref/settings/#secret-key). Helps secure cookies, sessions, hashes, etc. Custom value required in production. | `<randomly generated secret key>` |
|
||||
| `SITE_URL` - should be an absolute URL and include the protocol (e.g. `https://posthog.your-domain.com`) | **❗️ Always required.** Principal/canonical URL of your PostHog instance. Needed for emails, webhooks and SSO to work properly. We currently do not support subpaths in this URL. | `http://localhost:8000` |
|
||||
| `SECURE_COOKIES` | Determines if Django should use [secure cookies](https://docs.djangoproject.com/en/2.2/ref/settings/#session-cookie-secure). Insecure cookies do not work without HTTPS. | `False` if PostHog is running in DEBUG or TEST mode, else `True` |
|
||||
| `SENTRY_DSN` | Used to integrate with [Sentry](https://sentry.io/welcome/) error and event tracking. Ignored when running tests. | `None` |
|
||||
| `IS_BEHIND_PROXY` | Specifies if PostHog is running behind a proxy like Apache, NGINX or ELB. Be sure to properly set [trusted proxies](/docs/self-host/configure/running-behind-proxy#trusted-proxies). | `False` |
|
||||
| `ALLOWED_IP_BLOCKS` | Specifies IP blocks allowed to connect to the PostHog instance for management (events will still be allowed from anywhere). Make sure to properly [configure your proxy](/docs/self-host/configure/running-behind-proxy) if running behind a proxy. | _Empty_ |
|
||||
| `TRUSTED_PROXIES` | Specifies the IPs of proxies that can be trusted. | `None` |
|
||||
| `TRUST_ALL_PROXIES` | Determines if all proxies can be trusted. | `False` |
|
||||
| `ALLOWED_HOSTS` | A list of strings representing the host/domain names that Django can serve. [More info](https://docs.djangoproject.com/en/3.1/ref/settings/#allowed-hosts). | `*` (all) |
|
||||
| `SKIP_SERVICE_VERSION_REQUIREMENTS` | Set this to True if you want to disable checking for dependent service version requirements. | `False` |
|
||||
| `ACTION_EVENT_MAPPING_INTERVAL_SECONDS` | Specify how often (in seconds) PostHog should run a job to match events to actions. | `300` |
|
||||
| `ASYNC_EVENT_ACTION_MAPPING` | If set to `False`, actions will be matched to events as they come. Otherwise, the matching will happen in batches through a periodic Celery task. Should only be toggled on by high load instances. | `False` |
|
||||
| `CAPTURE_INTERNAL_METRICS` | Send some internal instrumentation to your own posthog instance, exposed via `/instance/status` page. For EE only. | `False` |
|
||||
| `DATABASE_URL` | [Database URL](https://github.com/jacobian/dj-database-url#url-schema) pointing to your PostgreSQL instance. | `postgres://localhost:5432/posthog` if PostHog is running in DEBUG or TEST mode, must be specified otherwise. |
|
||||
| `DEBUG_QUERIES` | Whether debugging queries (ClickHouse) is enabled in the Command Palette. | `False` |
|
||||
| `DEBUG` | Determines if PostHog should run in [DEBUG mode](https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-DEBUG). You can set this to a truthy value when developing, but disable this in production! | `False` |
|
||||
| `CLICKHOUSE_DISABLE_EXTERNAL_SCHEMAS` | If set, disables using ProtoBuf schemas for kafka communication. Needs to be set when using an external ClickHouse service provider during initial deploy. | `False` |
|
||||
| `DISABLE_PAID_FEATURE_SHOWCASING` | Whether any showcasing of a paid feature should be disabled. Useful if running a free open source version of PostHog and are not interested in premium functionality. | `False` |
|
||||
| `DISABLE_SECURE_SSL_REDIRECT` | Disables automatic redirect from port 80 (HTTP) to port 443 (HTTPS). | `False` |
|
||||
| `GITHUB_TOKEN` | GitHub personal access token, used to prevent rate limiting when using apps and to allow installation of apps from private repos | `None` |
|
||||
| `GITLAB_TOKEN` | GitLab personal access token, used to prevent rate limiting when using apps and to allow installation of apps from private repos | `None` |
|
||||
| `JS_URL` | URL used by Webpack for loading external resources like images and files. | `http://localhost:8234` if PostHog is running in DEBUG mode, must be specified otherwise. |
|
||||
| `KAFKA_URL` | Address used by the application to contact kafka | `kafka://kafka` |
|
||||
| `KAFKA_URL_FOR_CLICKHOUSE` | Address used by ClickHouse to read from kafka. Falls back to `KAFKA_URL` | `None` |
|
||||
| `MATERIALIZE_COLUMNS_ANALYSIS_PERIOD_HOURS` | Diagnostic for what columns to materialize | `168` |
|
||||
| `MATERIALIZE_COLUMNS_BACKFILL_PERIOD_DAYS` | How far back backfill materialized columns | `90` |
|
||||
| `MATERIALIZE_COLUMNS_MAX_AT_ONCE` | How many columns to materialize at once | `10` |
|
||||
| `MATERIALIZE_COLUMNS_MINIMUM_QUERY_TIME` | Diagnostic for what columns to materialize | `3000` |
|
||||
| `MATERIALIZE_COLUMNS_SCHEDULE_CRON` | How frequently to run clickhouse column materialization. | `0 5 * * SAT` |
|
||||
| `MULTI_ORG_ENABLED` | Allows creating multiple organizations in your instance (multi-tenancy). **Requires a premium license.** | `False` |
|
||||
| `NPM_TOKEN` | [Access token for npm](https://docs.npmjs.com/about-access-tokens), used to allow installation of apps released as a private npm package | `None` |
|
||||
| `OPT_OUT_CAPTURING` | Disable sending product usage data to PostHog. | `False` |
|
||||
| `POSTHOG_DB_NAME` | Database name. | Must be specified when `DATABASE_URL` is not set. |
|
||||
| `POSTHOG_DB_PASSWORD` | Database password. | `""` if PostHog is running in DEBUG or TEST mode. Must be specified when `DATABASE_URL` is not set. |
|
||||
| `POSTHOG_DB_USER` | Database username. | `postgres` if PostHog is running in DEBUG or TEST mode. Must be specified when `DATABASE_URL` is not set. |
|
||||
| `POSTHOG_POSTGRES_CLI_SSL_CA` | Location of the SSL root certificate file for PostgreSQL. [More info.](https://www.postgresql.org/docs/current/ssl-tcp.html) | `None` |
|
||||
| `POSTHOG_POSTGRES_CLI_SSL_CRT` | Location of the SSL certificate file for PostgreSQL. [More info.](https://www.postgresql.org/docs/current/ssl-tcp.html) | `None` |
|
||||
| `POSTHOG_POSTGRES_CLI_SSL_KEY` | Location of the SSL key file for PostgreSQL. [More info.](https://www.postgresql.org/docs/current/ssl-tcp.html) | `None` |
|
||||
| `POSTHOG_POSTGRES_HOST` | Host pointing to your PostgreSQL instance. | `localhost` if PostHog is running in DEBUG or TEST mode. Must be specified when `DATABASE_URL` is not set. |
|
||||
| `POSTHOG_POSTGRES_PORT` | Port pointing to your PostgreSQL instance. | `5432` if PostHog is running in DEBUG or TEST mode. Must be specified when `DATABASE_URL` is not set. |
|
||||
| `POSTHOG_POSTGRES_SSL_MODE` | PostgreSQL SSL mode. [More info.](https://www.postgresql.org/docs/9.1/libpq-ssl.html#LIBQ-SSL-CERTIFICATES) | `None` |
|
||||
| `REDIS_URL` | [Redis URL](https://redis-py.readthedocs.io/en/stable/#redis.ConnectionPool.from_url) pointing to your Redis instance. | `redis://localhost/` if PostHog is running in DEBUG or TEST mode, must be specified otherwise. |
|
||||
| `SOCIAL_AUTH_GITHUB_KEY` | GitHub key for allowing [sign up with GitHub](/docs/user-guides/sso#github). | _Empty_ |
|
||||
| `SOCIAL_AUTH_GITHUB_SECRET` | GitHub secret for allowing [sign up with GitHub](/docs/user-guides/sso#github). | _Empty_ |
|
||||
| `SOCIAL_AUTH_GITLAB_API_URL` | Endpoint to be used for [GitLab authentication](/docs/user-guides/sso#gitlab). Changing this is only relevant for self-host GitLab users. | `https://gitlab.com` |
|
||||
| `SOCIAL_AUTH_GITLAB_KEY` | GitLab key for allowing [sign up with GitLab](/docs/user-guides/sso#gitlab). | _Empty_ |
|
||||
| `SOCIAL_AUTH_GITLAB_SECRET` | GitLab secret for allowing [sign up with GitLab](/docs/user-guides/sso#gitlab). | _Empty_ |
|
||||
| `SOCIAL_AUTH_GOOGLE_OAUTH2_KEY` | Google client ID for allowing [SSO with Google](/docs/user-guides/sso#google). | _Empty_ |
|
||||
| `SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET` | Google client secret for allowing [SSO with Google](/docs/user-guides/sso#google). | _Empty_ |
|
||||
| `STATSD_HOST` | Host of a running StatsD daemon (e.g. 127.0.0.1) | `None` |
|
||||
| `STATSD_PORT` | Port for the running StatsD daemon | `8125` |
|
||||
| `STATSD_PREFIX` | Prefix to be prepended to all stats used by StatsD. Useful for distinguishing environments using the same server. | _Empty_ |
|
||||
| `CLEAR_CLICKHOUSE_REMOVED_DATA_SCHEDULE_CRON` | When data is (asynchronously) deleted from the events table | `0 5 * * SAT` |
|
||||
|
||||
## Instance settings
|
||||
|
||||
The following settings should mainly be managed with [Instance settings](/docs/self-host/configure/instance-settings). However, if you can still set them via environment variables if you prefer. Please be mindful that if these settings are overridden in the settings page, the overridden values will prevail.
|
||||
|
||||
| Variable | Description | Default Value | Managed with Instance Settings |
|
||||
| :------------------------ | :------------------------------------ | :------------------- | :------------------- |
|
||||
| `EMAIL_DEFAULT_FROM` | Please see [configuring email] for details.| Please see [configuring email] for details. | ✅ Yes
|
||||
| `EMAIL_ENABLED` | Please see [configuring email] for details.| Please see [configuring email] for details. | ✅ Yes
|
||||
| `EMAIL_HOST_PASSWORD` | Please see [configuring email] for details. | Please see [configuring email] for details. | ✅ Yes
|
||||
| `EMAIL_HOST_USER` | Please see [configuring email] for details. | Please see [configuring email] for details. | ✅ Yes
|
||||
| `EMAIL_HOST` | Please see [configuring email] for details. | Please see [configuring email] for details. | ✅ Yes
|
||||
| `EMAIL_PORT` | Please see [configuring email] for details. | Please see [configuring email] for details. | ✅ Yes
|
||||
| `EMAIL_USE_TLS` | Please see [configuring email] for details. | Please see [configuring email] for details. | ✅ Yes
|
||||
| `EMAIL_USE_TLS` | Please see [configuring email] for details. | Please see [configuring email] for details. | ✅ Yes
|
||||
| `SLACK_APP_CLIENT_ID` | Please see [configuring slack] for details. | Please see [configuring slack] for details. | ✅ Yes
|
||||
| `SLACK_APP_CLIENT_SECRET` | Please see [configuring slack] for details. | Please see [configuring slack] for details. | ✅ Yes
|
||||
| `SLACK_APP_SIGNING_SECRET` | Please see [configuring slack] for details. | Please see [configuring slack] for details. | ✅ Yes
|
||||
| Variable | Description | Default Value | Managed with Instance Settings |
|
||||
| :------------------------- | :------------------------------------------ | :------------------------------------------ | :----------------------------- |
|
||||
| `EMAIL_DEFAULT_FROM` | Please see [configuring email] for details. | Please see [configuring email] for details. | ✅ Yes |
|
||||
| `EMAIL_ENABLED` | Please see [configuring email] for details. | Please see [configuring email] for details. | ✅ Yes |
|
||||
| `EMAIL_HOST_PASSWORD` | Please see [configuring email] for details. | Please see [configuring email] for details. | ✅ Yes |
|
||||
| `EMAIL_HOST_USER` | Please see [configuring email] for details. | Please see [configuring email] for details. | ✅ Yes |
|
||||
| `EMAIL_HOST` | Please see [configuring email] for details. | Please see [configuring email] for details. | ✅ Yes |
|
||||
| `EMAIL_PORT` | Please see [configuring email] for details. | Please see [configuring email] for details. | ✅ Yes |
|
||||
| `EMAIL_USE_TLS` | Please see [configuring email] for details. | Please see [configuring email] for details. | ✅ Yes |
|
||||
| `EMAIL_USE_TLS` | Please see [configuring email] for details. | Please see [configuring email] for details. | ✅ Yes |
|
||||
| `SLACK_APP_CLIENT_ID` | Please see [configuring slack] for details. | Please see [configuring slack] for details. | ✅ Yes |
|
||||
| `SLACK_APP_CLIENT_SECRET` | Please see [configuring slack] for details. | Please see [configuring slack] for details. | ✅ Yes |
|
||||
| `SLACK_APP_SIGNING_SECRET` | Please see [configuring slack] for details. | Please see [configuring slack] for details. | ✅ Yes |
|
||||
|
||||
[configuring email]: /docs/self-host/configure/email#general-configuration
|
||||
[configuring slack]: /docs/self-host/configure/slack
|
||||
|
||||
@@ -4,6 +4,10 @@ sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
import Sunset from "../\_snippets/sunset-disclaimer.mdx"
|
||||
|
||||
<Sunset />
|
||||
|
||||
When self-hosting PostHog there are several instance settings that can be adjusted according to your needs. These settings are available as of [PostHog 1.33.0](/blog/the-posthog-array-1-33-0), if you're running an older version, settings can only be set using [Environment variables][env-vars].
|
||||
|
||||
Instance settings can be managed by [staff users](#staff-users) by visiting the _Instance settings_ page (`/instance/status/configuration`). Some setting configurations cannot be managed this way, and in particular, settings that determine how PostHog should behave at runtime must be set using [Environment variables][env-vars]. Please review the [Environment variables][env-vars] list for further details.
|
||||
@@ -26,12 +30,12 @@ If you don't have any staff users (e.g. if you deployed PostHog before version 1
|
||||
|
||||
> To connect to your pod, follow [these instructions](https://posthog.com/docs/self-host/deploy/troubleshooting#how-do-i-connect-to-the-web-servers-shell)
|
||||
|
||||
|
||||
```bash
|
||||
python manage.py shell_plus
|
||||
```
|
||||
|
||||
Once you access the Django interactive shell,
|
||||
|
||||
```python
|
||||
user = User.objects.get(email="email_of_the_user_to_add@example.com")
|
||||
user.is_staff = True
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
title: Monitoring with Prometheus and Grafana
|
||||
---
|
||||
|
||||
*Only relevant for [PostHog Enterprise Self-Hosted](/docs/self-host/enterprise/overview) deployed with Kubernetes*
|
||||
import Sunset from "../\_snippets/sunset-disclaimer.mdx"
|
||||
|
||||
<Sunset />
|
||||
|
||||
This guide covers how to configure monitoring of your self-hosted deployment through Grafana.
|
||||
If you are targeting a production use-case, we _highly_ recommend setting up all of these options.
|
||||
|
||||
@@ -9,41 +9,40 @@ If you're running PostHog behind a proxy, there are a few more things you need t
|
||||
## Setup
|
||||
|
||||
If PostHog is running behind a proxy, you need to do the following:
|
||||
- Set the `IS_BEHIND_PROXY` environment variable to `True`. This will make sure the client's IP address is properly calculated, and SSL is properly handled (e.g. for OAuth requests).
|
||||
- Set your [trusted proxies](#trusted-proxies) configuration.
|
||||
- Depending on your setup, you might also need to set the `ALLOWED_HOSTS` [environment variable](/docs/self-host/configure/environment-variables). If you don't allow all hosts (i.e. you are whitelisting specific hosts), you will need to set the address(es) of your proxy here.
|
||||
|
||||
- Set the `IS_BEHIND_PROXY` environment variable to `True`. This will make sure the client's IP address is properly calculated, and SSL is properly handled (e.g. for OAuth requests).
|
||||
- Set your [trusted proxies](#trusted-proxies) configuration.
|
||||
- Depending on your setup, you might also need to set the `ALLOWED_HOSTS` [environment variable](/docs/self-host/configure/environment-variables). If you don't allow all hosts (i.e. you are whitelisting specific hosts), you will need to set the address(es) of your proxy here.
|
||||
|
||||
<div class='note-block'><b>Note:</b> It is suggested to set up the proxy separately from PostHog's Docker Compose definition.</div>
|
||||
|
||||
### Trusted proxies
|
||||
|
||||
Trusted proxies are used to determine which proxies to consider as valid from the `X-Forwarded-For` HTTP header included in all requests to determine the end user's real IP address. Specifically whitelisting your proxy server's address prevents spoofing of the end user's IP address while ensuring your service works as expected. There are two ways of setting up trusted proxies.
|
||||
- **Recommended**. Set a list of trusted IP addresses for your proxies via the `TRUSTED_PROXIES` environment variable (comma-separated list of IP addresses).
|
||||
- Trust all proxies by setting `TRUST_ALL_PROXIES` environment variable to `True` (_not recommended unless you have a strong reason for which whitelisting specific addresses wouldn't work for you_).
|
||||
|
||||
- **Recommended**. Set a list of trusted IP addresses for your proxies via the `TRUSTED_PROXIES` environment variable (comma-separated list of IP addresses).
|
||||
- Trust all proxies by setting `TRUST_ALL_PROXIES` environment variable to `True` (_not recommended unless you have a strong reason for which whitelisting specific addresses wouldn't work for you_).
|
||||
|
||||
### Common issues
|
||||
|
||||
- Some users have reported getting infinite redirects when running behind a proxy. Make sure the `X-Forwarded-Proto` header is set to `https` if you have HTTPS enabled. Alternatively, you can set the `DISABLE_SECURE_SSL_REDIRECT` variable to make PostHog run using HTTP.
|
||||
- If you use a load balancer, it is recommended to terminate the SSL connection at the load balancer (remember to set `DISABLE_SECURE_SSL_REDIRECT` to `True`) and connect via HTTP to your PostHog container (make sure your container is behind a firewall or VPC to prevent unauthorized connections), you would then enforce SSL/TLS connections at the load balancer level.
|
||||
- If you have IP blocks that are not working and you're running behind a proxy, your instance may be misconfigured, preventing PostHog from determining the connecting IP address.
|
||||
- Some users have reported getting infinite redirects when running behind a proxy. Make sure the `X-Forwarded-Proto` header is set to `https` if you have HTTPS enabled. Alternatively, you can set the `DISABLE_SECURE_SSL_REDIRECT` variable to make PostHog run using HTTP.
|
||||
- If you use a load balancer, it is recommended to terminate the SSL connection at the load balancer (remember to set `DISABLE_SECURE_SSL_REDIRECT` to `True`) and connect via HTTP to your PostHog container (make sure your container is behind a firewall or VPC to prevent unauthorized connections), you would then enforce SSL/TLS connections at the load balancer level.
|
||||
- If you have IP blocks that are not working and you're running behind a proxy, your instance may be misconfigured, preventing PostHog from determining the connecting IP address.
|
||||
|
||||
### Public endpoints
|
||||
|
||||
If you're setting up a proxy to protect your PostHog instance and prevent access only through an authorized connection, you should consider there are some endpoints that must always be publicly accessible in order for event ingestion, session recording and feature flags to work properly. These endpoints are listed below.
|
||||
|
||||
| Path | Description |
|
||||
| ---- | ---- |
|
||||
| `/batch` | Endpoint for ingesting/capturing events. |
|
||||
| `/decide` | Endpoint that enables autocapture, session recording, feature flags & compression on events. |
|
||||
| `/capture` | Endpoint for ingesting/capturing events. |
|
||||
| `/e` | Endpoint for ingesting/capturing events. |
|
||||
| `/engage` | Endpoint for ingesting/capturing events. |
|
||||
| `/s` | Endpoint for capturing session recordings. |
|
||||
| `/static/array.js` | Frontend javascript code that loads `posthog-js`. |
|
||||
| `/track` | Endpoint for ingesting/capturing events. |
|
||||
|
||||
|
||||
| Path | Description |
|
||||
| ------------------ | -------------------------------------------------------------------------------------------- |
|
||||
| `/batch` | Endpoint for ingesting/capturing events. |
|
||||
| `/decide` | Endpoint that enables autocapture, session recording, feature flags & compression on events. |
|
||||
| `/capture` | Endpoint for ingesting/capturing events. |
|
||||
| `/e` | Endpoint for ingesting/capturing events. |
|
||||
| `/engage` | Endpoint for ingesting/capturing events. |
|
||||
| `/s` | Endpoint for capturing session recordings. |
|
||||
| `/static/array.js` | Frontend javascript code that loads `posthog-js`. |
|
||||
| `/track` | Endpoint for ingesting/capturing events. |
|
||||
|
||||
## NGINX config (Recommended)
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ title: Securing PostHog
|
||||
sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
import Disclaimer from '../deploy/snippets/disclaimer'
|
||||
|
||||
## Restrict access by IP
|
||||
|
||||
@@ -18,9 +17,11 @@ If you try to access your PostHog instance with a different IP, you will get an
|
||||
This restriction does not apply to the endpoints used to send events, like `batch`, `capture` etc.
|
||||
|
||||
If you're behind a proxy, you need to either set trusted proxies:
|
||||
|
||||
```bash
|
||||
TRUSTED_PROXIES=ip1,ip2
|
||||
```
|
||||
|
||||
Or you can implicitly trust all proxies:
|
||||
|
||||
```bash
|
||||
@@ -58,21 +59,24 @@ openssl rand -hex 32
|
||||
This `SECRET_KEY` must be passed to PostHog as an environment variable.
|
||||
|
||||
## Securing PostHog Deployments
|
||||
|
||||
import Sunset from '../\_snippets/sunset-disclaimer.mdx'
|
||||
|
||||
<Sunset />
|
||||
|
||||
As part of self-hosting PostHog by deploying it to a Kubernetes cluster, we need to
|
||||
make it is secure to threat actors. As every installation is unique, we provide
|
||||
in our documentation some general guidelines regarding how to make it secure but
|
||||
it is then up to each instance admin to make sure all the best practices are followed.
|
||||
|
||||
<Disclaimer />
|
||||
|
||||
1. make sure your Kubernetes cluster is provisioned and configured using industries
|
||||
best practices
|
||||
1. encrypt data at rest and in transit
|
||||
1. minimize access to worker nodes
|
||||
1. deploy workers onto private subnets
|
||||
1. enable Kubernetes audit logs
|
||||
1. employ least privileged access for all the resources
|
||||
1. ...
|
||||
best practices
|
||||
1. encrypt data at rest and in transit
|
||||
1. minimize access to worker nodes
|
||||
1. deploy workers onto private subnets
|
||||
1. enable Kubernetes audit logs
|
||||
1. employ least privileged access for all the resources
|
||||
1. ...
|
||||
1. make sure your installation is regularly maintained and up-to-date
|
||||
1. for specific Helm chart configuration
|
||||
guidelines, take a look [here](/docs/self-host/deploy/configuration)
|
||||
guidelines, take a look [here](/docs/self-host/deploy/configuration)
|
||||
|
||||
@@ -4,18 +4,20 @@ sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
*Only relevant for [PostHog Enterprise Self-Hosted](/docs/self-host/enterprise/overview) deployed with Kubernetes*
|
||||
import Sunset from "../\_snippets/sunset-disclaimer.mdx"
|
||||
|
||||
<Sunset />
|
||||
|
||||
This document outlines how to deploy PostHog using Altinity Cloud ClickHouse clusters.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Altinity.Cloud ClickHouse cluster:
|
||||
- Minimum ClickHouse version: 21.8.13
|
||||
- Single shard and no data replication
|
||||
- No dashes (`-`) in cluster name
|
||||
- PostHog helm chart version >= 16.1.1
|
||||
- PostHog version >= 1.33.0
|
||||
- Altinity.Cloud ClickHouse cluster:
|
||||
- Minimum ClickHouse version: 21.8.13
|
||||
- Single shard and no data replication
|
||||
- No dashes (`-`) in cluster name
|
||||
- PostHog helm chart version >= 16.1.1
|
||||
- PostHog version >= 1.33.0
|
||||
|
||||
## Deployment instructions
|
||||
|
||||
@@ -25,27 +27,27 @@ PostHog uses Kafka to send data from the app to ClickHouse. For that reason, Kaf
|
||||
|
||||
```yaml
|
||||
env:
|
||||
- name: CLICKHOUSE_DISABLE_EXTERNAL_SCHEMAS
|
||||
value: "1"
|
||||
- name: CLICKHOUSE_DISABLE_EXTERNAL_SCHEMAS
|
||||
value: '1'
|
||||
|
||||
kafka:
|
||||
enabled: false
|
||||
enabled: false
|
||||
|
||||
externalKafka:
|
||||
brokers:
|
||||
- "broker-1.posthog.kafka.us-east-1.amazonaws.com:9094"
|
||||
- "broker-2.posthog.kafka.us-east-1.amazonaws.com:9094"
|
||||
- "broker-3.posthog.kafka.us-east-1.amazonaws.com:9094"
|
||||
brokers:
|
||||
- 'broker-1.posthog.kafka.us-east-1.amazonaws.com:9094'
|
||||
- 'broker-2.posthog.kafka.us-east-1.amazonaws.com:9094'
|
||||
- 'broker-3.posthog.kafka.us-east-1.amazonaws.com:9094'
|
||||
|
||||
clickhouse:
|
||||
enabled: false
|
||||
enabled: false
|
||||
|
||||
externalClickhouse:
|
||||
host: "somecluster.demo.altinity.cloud"
|
||||
user: "admin"
|
||||
password: "password"
|
||||
cluster: "clustername"
|
||||
secure: true
|
||||
host: 'somecluster.demo.altinity.cloud'
|
||||
user: 'admin'
|
||||
password: 'password'
|
||||
cluster: 'clustername'
|
||||
secure: true
|
||||
```
|
||||
|
||||
Read more about how to configure external Kafka in the chart [in our deployment documentation](https://posthog.com/docs/self-host/deploy/configuration#kafka).
|
||||
@@ -58,47 +60,46 @@ To deploy using a version of Kafka managed by the PostHog Helm chart, follow the
|
||||
|
||||
```yaml
|
||||
kafka:
|
||||
enabled: true
|
||||
externalAccess:
|
||||
enabled: true
|
||||
service:
|
||||
type: LoadBalancer
|
||||
ports:
|
||||
external: 9094
|
||||
autoDiscovery:
|
||||
enabled: true
|
||||
serviceAccount:
|
||||
create: true
|
||||
rbac:
|
||||
create: true
|
||||
|
||||
externalAccess:
|
||||
enabled: true
|
||||
service:
|
||||
type: LoadBalancer
|
||||
ports:
|
||||
external: 9094
|
||||
autoDiscovery:
|
||||
enabled: true
|
||||
serviceAccount:
|
||||
create: true
|
||||
rbac:
|
||||
create: true
|
||||
|
||||
clickhouse:
|
||||
enabled: false
|
||||
enabled: false
|
||||
|
||||
redis:
|
||||
enabled: false
|
||||
enabled: false
|
||||
|
||||
postgresql:
|
||||
enabled: false
|
||||
enabled: false
|
||||
|
||||
pgbouncer:
|
||||
enabled: false
|
||||
enabled: false
|
||||
|
||||
plugins:
|
||||
enabled: false
|
||||
enabled: false
|
||||
|
||||
worker:
|
||||
enabled: false
|
||||
enabled: false
|
||||
|
||||
web:
|
||||
enabled: false
|
||||
enabled: false
|
||||
|
||||
events:
|
||||
enabled: false
|
||||
enabled: false
|
||||
|
||||
migrate:
|
||||
enabled: false
|
||||
enabled: false
|
||||
```
|
||||
|
||||
2. Get the external Kafka IP via `kubectl get svc -n posthog | grep kafka-0-external`
|
||||
@@ -107,33 +108,33 @@ migrate:
|
||||
|
||||
```yaml
|
||||
env:
|
||||
- name: KAFKA_URL_FOR_CLICKHOUSE
|
||||
value: "kafka://KAFKA_IP:9094"
|
||||
- name: CLICKHOUSE_DISABLE_EXTERNAL_SCHEMAS
|
||||
value: "1"
|
||||
- name: KAFKA_URL_FOR_CLICKHOUSE
|
||||
value: 'kafka://KAFKA_IP:9094'
|
||||
- name: CLICKHOUSE_DISABLE_EXTERNAL_SCHEMAS
|
||||
value: '1'
|
||||
|
||||
clickhouse:
|
||||
enabled: false
|
||||
enabled: false
|
||||
|
||||
externalClickhouse:
|
||||
host: "somecluster.demo.altinity.cloud"
|
||||
user: "admin"
|
||||
password: "password"
|
||||
cluster: "clustername"
|
||||
secure: true
|
||||
host: 'somecluster.demo.altinity.cloud'
|
||||
user: 'admin'
|
||||
password: 'password'
|
||||
cluster: 'clustername'
|
||||
secure: true
|
||||
|
||||
kafka:
|
||||
enabled: true
|
||||
externalAccess:
|
||||
enabled: true
|
||||
service:
|
||||
type: LoadBalancer
|
||||
ports:
|
||||
external: 9094
|
||||
autoDiscovery:
|
||||
enabled: true
|
||||
serviceAccount:
|
||||
create: true
|
||||
rbac:
|
||||
create: true
|
||||
externalAccess:
|
||||
enabled: true
|
||||
service:
|
||||
type: LoadBalancer
|
||||
ports:
|
||||
external: 9094
|
||||
autoDiscovery:
|
||||
enabled: true
|
||||
serviceAccount:
|
||||
create: true
|
||||
rbac:
|
||||
create: true
|
||||
```
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
---
|
||||
title: Deploying to AWS
|
||||
sidebarTitle: AWS
|
||||
sidebar: Docs
|
||||
showTitle: true
|
||||
tags:
|
||||
- aws
|
||||
---
|
||||
|
||||
import ClusterRequirementsSnippet from './snippets/cluster-requirements'
|
||||
import InstallingSnippet from './snippets/installing'
|
||||
import GetInstallationAddress from './snippets/get-installation-address'
|
||||
import UpgradingSnippet from './snippets/upgrading'
|
||||
import UninstallingSnippet from './snippets/uninstalling'
|
||||
import SetupDNS from './snippets/setup-dns'
|
||||
import NextSteps from './snippets/next-steps'
|
||||
|
||||
First, we need to set up a Kubernetes cluster (see the official AWS [documentation](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) for more info). Follow the "Managed nodes - Linux" guide.
|
||||
|
||||
<ClusterRequirementsSnippet />
|
||||
|
||||
> Note: in order to reduce the overhead of managing stateful services like PostgreSQL, Kafka, Redis and ClickHouse by yourself, we suggest you to run them _outside_ Kubernetes and offload their provisioning, building and maintenance operations:
|
||||
>
|
||||
> - for PostgreSQL, take a look at [AWS Aurora](https://aws.amazon.com/rds/aurora/)
|
||||
> - for Apache Kafka, take a look at [AWS MSK](https://aws.amazon.com/msk/) and [Confluent Cloud](https://www.confluent.io/confluent-cloud/)
|
||||
> - for Redis, take a look at [AWS ElastiCache for Redis](https://aws.amazon.com/elasticache/redis) and [Redis Enterprise Cloud](https://redis.com/redis-enterprise-cloud/overview/)
|
||||
> - for ClickHouse, take a look at [Altinity Cloud](https://altinity.com/cloud-database/)
|
||||
|
||||
## Chart configuration
|
||||
|
||||
Here's the minimal required `values.yaml` that we'll be using later. You can find an overview of the parameters that can be configured during installation under [chart configuration](/docs/self-host/deploy/configuration).
|
||||
|
||||
```yaml file=values.yaml
|
||||
cloud: 'aws'
|
||||
ingress:
|
||||
hostname: <your-hostname>
|
||||
nginx:
|
||||
enabled: true
|
||||
cert-manager:
|
||||
enabled: true
|
||||
```
|
||||
|
||||
Note: if you are planning to use our [GeoIP integration](/apps/geoip-enrichment), please also add the snippet below
|
||||
to enable proxy protocol support in the load balancer and in the `nginx` ingress controller:
|
||||
|
||||
```yaml file=values.yaml
|
||||
#
|
||||
# For AWS ELB in L4 (TCP) mode, we need to enable some additional config
|
||||
# in the ingress controller in order to get the proper IP address forwarded
|
||||
# to our app. Otherwise we'll get the load balancer nodes addresses instead.
|
||||
#
|
||||
# ref:
|
||||
# - https://kubernetes.github.io/ingress-nginx/user-guide/miscellaneous/#source-ip-address
|
||||
# - https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/enable-proxy-protocol.html
|
||||
#
|
||||
ingress-nginx:
|
||||
controller:
|
||||
config:
|
||||
use-proxy-protocol: true
|
||||
service:
|
||||
annotations:
|
||||
service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*"
|
||||
```
|
||||
|
||||
## Installing the chart
|
||||
|
||||
<InstallingSnippet />
|
||||
|
||||
## Lookup the address of the installation
|
||||
|
||||
<GetInstallationAddress />
|
||||
|
||||
## Setting up DNS
|
||||
|
||||
<SetupDNS />
|
||||
|
||||
### Upgrading the chart
|
||||
|
||||
<UpgradingSnippet />
|
||||
|
||||
### Uninstalling the chart
|
||||
|
||||
<UninstallingSnippet />
|
||||
|
||||
## Next steps
|
||||
|
||||
<NextSteps />
|
||||
@@ -1,67 +0,0 @@
|
||||
---
|
||||
title: Deploying to Azure
|
||||
sidebarTitle: Azure
|
||||
sidebar: Docs
|
||||
showTitle: true
|
||||
tags:
|
||||
- azure
|
||||
---
|
||||
|
||||
import ClusterRequirementsSnippet from './snippets/cluster-requirements'
|
||||
import InstallingSnippet from './snippets/installing'
|
||||
import GetInstallationAddress from './snippets/get-installation-address'
|
||||
import UpgradingSnippet from './snippets/upgrading'
|
||||
import UninstallingSnippet from './snippets/uninstalling'
|
||||
import SetupDNS from './snippets/setup-dns'
|
||||
import NextSteps from './snippets/next-steps'
|
||||
|
||||
> Note: This deployment option is in Beta. See alternative deployment options [here](/docs/self-host#deployment-options).
|
||||
|
||||
First, we need to set up a Kubernetes cluster (see the official Azure [documentation](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough-portal#create-an-aks-cluster) for more info).
|
||||
|
||||
<ClusterRequirementsSnippet />
|
||||
|
||||
> Note: in order to reduce the overhead of managing stateful services like PostgreSQL, Kafka, Redis and ClickHouse by yourself, we suggest you to run them _outside_ Kubernetes and offload their provisioning, building and maintenance operations:
|
||||
>
|
||||
> - for PostgreSQL, take a look at [Azure Database for PostgreSQL](https://docs.microsoft.com/en-us/azure/postgresql)
|
||||
> - for Apache Kafka, take a look at [Apache Kafka in Azure HDInsight](https://docs.microsoft.com/en-us/azure/hdinsight/kafka/apache-kafka-introduction) and [Confluent Cloud](https://www.confluent.io/confluent-cloud/)
|
||||
> - for Redis, take a look at [Azure Cache for Redis](https://azure.microsoft.com/en-us/services/cache/) and [Redis Enterprise Cloud](https://redis.com/redis-enterprise-cloud/overview/)
|
||||
> - for ClickHouse, take a look at [Altinity Cloud](https://altinity.com/cloud-database/)
|
||||
|
||||
## Chart configuration
|
||||
|
||||
Here's the minimal required `values.yaml` that we'll be using later. You can find an overview of the parameters that can be configured during installation under [chart configuration](/docs/self-host/deploy/configuration).
|
||||
|
||||
```yaml file=values.yaml
|
||||
cloud: 'azure'
|
||||
ingress:
|
||||
hostname: <your-hostname>
|
||||
nginx:
|
||||
enabled: true
|
||||
cert-manager:
|
||||
enabled: true
|
||||
```
|
||||
|
||||
## Installing the chart
|
||||
|
||||
<InstallingSnippet />
|
||||
|
||||
## Lookup the address of the installation
|
||||
|
||||
<GetInstallationAddress />
|
||||
|
||||
## Setting up DNS
|
||||
|
||||
<SetupDNS />
|
||||
|
||||
### Upgrading the chart
|
||||
|
||||
<UpgradingSnippet />
|
||||
|
||||
### Uninstalling the chart
|
||||
|
||||
<UninstallingSnippet />
|
||||
|
||||
## Next steps
|
||||
|
||||
<NextSteps />
|
||||
@@ -5,7 +5,9 @@ sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
*Only relevant for [PostHog Enterprise Self-Hosted](/docs/self-host/enterprise/overview) deployed with Kubernetes*
|
||||
import Sunset from '../\_snippets/sunset-disclaimer.mdx'
|
||||
|
||||
<Sunset />
|
||||
|
||||
This document outlines the most important configuration options available in the chart.
|
||||
|
||||
|
||||
@@ -1,217 +0,0 @@
|
||||
---
|
||||
title: Deploying to DigitalOcean
|
||||
sidebarTitle: DigitalOcean
|
||||
sidebar: Docs
|
||||
showTitle: true
|
||||
tags:
|
||||
- do
|
||||
- digitalocean
|
||||
---
|
||||
|
||||
import GetInstallationAddress from './snippets/get-installation-address'
|
||||
import DOIPAddress from './snippets/do-ip-address'
|
||||
import CommandHelmGetRepoSnippet from './snippets/command-helm-get-repo'
|
||||
import CommandHelmUpgradeSnippet from './snippets/command-helm-upgrade'
|
||||
import SetupDNS from './snippets/setup-dns'
|
||||
import ClusterRequirementsSnippet from './snippets/cluster-requirements'
|
||||
import InstallingSnippet from './snippets/installing'
|
||||
import UpgradingSnippet from './snippets/upgrading'
|
||||
import UninstallingSnippet from './snippets/uninstalling'
|
||||
import InstallClusterIssuer from './snippets/install-cluster-issuer'
|
||||
import NextSteps from './snippets/next-steps'
|
||||
|
||||
[DigitalOcean](https://digitalocean.com) is one of the most well-established Cloud Providers.
|
||||
Compared to AWS, GCP and Azure where the amount of options and configuration can be overwhelming,
|
||||
DigitalOcean is generally simpler to use and faster to get running.
|
||||
|
||||
The first thing you'll need is a get a DigitalOcean account. You can click on the badge below to
|
||||
get US$100 in credit over 60 days (i.e. run PostHog for free for ~2 months).
|
||||
|
||||
<center>
|
||||
<a href="https://www.digitalocean.com/?refcode=6a26a2c395b0&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge" title="DigitalOcean Referral">
|
||||
<img alt="DigitalOcean Referral Badge" src="https://web-platforms.sfo2.cdn.digitaloceanspaces.com/WWW/Badge%201.svg" />
|
||||
</a>
|
||||
</center>
|
||||
|
||||
Then you can either follow the [1-click install](https://marketplace.digitalocean.com/apps/posthog-1) or the [manual install](#manual-install).
|
||||
|
||||
## 1-click install
|
||||
|
||||
[Click here to deploy PostHog using the 1-click install](https://marketplace.digitalocean.com/apps/posthog-1). The DigitalOcean UI will ask you if you want to install PostHog on an already provisioned Kubernetes cluster or if you want to create a new one.
|
||||
|
||||
Once the setup is completed, you can pick one of those two methods to fetch the URL of your fresh new PostHog installation:
|
||||
|
||||
<DOIPAddress />
|
||||
|
||||
> Note: before using PostHog in production remember to [secure your 1-click installation](#securing-your-1-click-install). Without securing your instance you will only be able to test web apps on HTTP such as those running on `localhost`.
|
||||
|
||||
### Securing your 1-click install
|
||||
|
||||
It's unfortunately [not yet possible to provide parameters to DigitalOcean 1-click installations](https://github.com/digitalocean/marketplace-kubernetes/issues/230), so we need a post-install step to enable TLS. In order to do this you will need [kubectl](https://kubernetes.io/docs/tasks/tools/) and [Helm](https://helm.sh/) installed and have [configured your `kubectl` access](https://docs.digitalocean.com/products/kubernetes/how-to/connect-to-cluster/).
|
||||
|
||||
#### 1. Update PostHog
|
||||
|
||||
Create a `values.yaml` file in the current directory with the following content:
|
||||
|
||||
```yaml file=values.yaml
|
||||
cloud: 'do'
|
||||
ingress:
|
||||
hostname: <your-hostname>
|
||||
nginx:
|
||||
enabled: true
|
||||
cert-manager:
|
||||
enabled: true
|
||||
```
|
||||
|
||||
Note: if you are planning to use our [GeoIP integration](https://posthog.com/apps/geoip-enrichment), please also add the snippet below
|
||||
to enable proxy protocol support in the load balancer and in the `nginx` ingress controller:
|
||||
|
||||
```yaml file=values.yaml
|
||||
#
|
||||
# For DigitalOcean LB (TCP) mode, we need to enable some additional config
|
||||
# in the ingress controller in order to get the proper IP address forwarded
|
||||
# to our app. Otherwise we'll get the load balancer nodes addresses instead.
|
||||
#
|
||||
# ref:
|
||||
# - https://kubernetes.github.io/ingress-nginx/user-guide/miscellaneous/#source-ip-address
|
||||
# - https://docs.digitalocean.com/products/networking/load-balancers/
|
||||
#
|
||||
#
|
||||
# Additionally we'll also enable pod communication through the Load Balancer
|
||||
# to ensure Let's Encrypt can reach the cert-manager Pod validating our domain.
|
||||
#
|
||||
# ref:
|
||||
# - https://github.com/kubernetes/ingress-nginx/issues/3996
|
||||
# - https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes#step-5-%E2%80%94-enabling-pod-communication-through-the-load-balancer-optional
|
||||
#
|
||||
ingress-nginx:
|
||||
controller:
|
||||
config:
|
||||
use-proxy-protocol: true
|
||||
service:
|
||||
annotations:
|
||||
service.beta.kubernetes.io/do-loadbalancer-hostname: <your-hostname>
|
||||
service.beta.kubernetes.io/do-loadbalancer-enable-proxy-protocol: 'true'
|
||||
```
|
||||
|
||||
and since you started with the one-click deploy you'll need the Helm chart locally, so run:
|
||||
|
||||
<CommandHelmGetRepoSnippet />
|
||||
|
||||
now you can upgrade your cluster with the new values:
|
||||
|
||||
<CommandHelmUpgradeSnippet />
|
||||
|
||||
#### 2. Install `ClusterIssuer`
|
||||
|
||||
<InstallClusterIssuer />
|
||||
|
||||
#### 3. Lookup the address of the installation
|
||||
|
||||
<GetInstallationAddress />
|
||||
|
||||
Note: due to a limitation in the DigitalOcean ingress controller, the second method will not work if you have enabled the settings to support the GeoIP integration.
|
||||
Please use the web UI to get your IP address.
|
||||
|
||||
#### 4. Setting up DNS
|
||||
|
||||
<SetupDNS />
|
||||
|
||||
## Install via doctl
|
||||
|
||||
If you have [doctl](https://github.com/digitalocean/doctl) already configured you can simply run:
|
||||
|
||||
```shell
|
||||
doctl kubernetes cluster create \
|
||||
posthog-cluster \
|
||||
--count=2 \
|
||||
--size="s-2vcpu-4gb" \
|
||||
--1-clicks=posthog
|
||||
```
|
||||
|
||||
This will also configure your `kubectl` access.
|
||||
|
||||
## Manual install
|
||||
|
||||
First, we need to set up a Kubernetes cluster (see the official DigitalOcean [documentation](https://docs.digitalocean.com/products/kubernetes/quickstart/) for more info).
|
||||
|
||||
<ClusterRequirementsSnippet />
|
||||
|
||||
> Note: in order to reduce the overhead of managing stateful services like PostgreSQL, Kafka, Redis and ClickHouse by yourself, we suggest you to run them _outside_ Kubernetes and offload their provisioning, building and maintenance operations:
|
||||
>
|
||||
> - for PostgreSQL, take a look at [DigitalOcean managed databases](https://www.digitalocean.com/products/managed-databases-postgresql/)
|
||||
> - for Apache Kafka, take a look at [Confluent Cloud](https://www.confluent.io/confluent-cloud/)
|
||||
> - for Redis, take a look at [Redis Enterprise Cloud](https://redis.com/redis-enterprise-cloud/overview/)
|
||||
> - for ClickHouse, take a look at [Altinity Cloud](https://altinity.com/cloud-database/)
|
||||
|
||||
#### 1. Chart configuration
|
||||
|
||||
Here's the minimal required `values.yaml` that we'll be using later. You can find an overview of the parameters that can be configured during installation under [configuration](/docs/self-host/deploy/configuration).
|
||||
|
||||
```yaml file=values.yaml
|
||||
cloud: 'do'
|
||||
ingress:
|
||||
hostname: <your-hostname>
|
||||
nginx:
|
||||
enabled: true
|
||||
cert-manager:
|
||||
enabled: true
|
||||
```
|
||||
|
||||
Note: if you are planning to use our [GeoIP integration](https://posthog.com/apps/geoip-enrichment), please also add the snippet below
|
||||
to enable proxy protocol support in the load balancer and in the `nginx` ingress controller:
|
||||
|
||||
```yaml file=values.yaml
|
||||
#
|
||||
# For DigitalOcean LB (TCP) mode, we need to enable some additional config
|
||||
# in the ingress controller in order to get the proper IP address forwarded
|
||||
# to our app. Otherwise we'll get the load balancer nodes addresses instead.
|
||||
#
|
||||
# ref:
|
||||
# - https://kubernetes.github.io/ingress-nginx/user-guide/miscellaneous/#source-ip-address
|
||||
# - https://docs.digitalocean.com/products/networking/load-balancers/
|
||||
#
|
||||
#
|
||||
# Additionally we'll also enable pod communication through the Load Balancer
|
||||
# to ensure Let's Encrypt can reach the cert-manager Pod validating our domain.
|
||||
#
|
||||
# ref:
|
||||
# - https://github.com/kubernetes/ingress-nginx/issues/3996
|
||||
# - https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes#step-5-%E2%80%94-enabling-pod-communication-through-the-load-balancer-optional
|
||||
#
|
||||
ingress-nginx:
|
||||
controller:
|
||||
config:
|
||||
use-proxy-protocol: true
|
||||
service:
|
||||
annotations:
|
||||
service.beta.kubernetes.io/do-loadbalancer-hostname: <your-hostname>
|
||||
service.beta.kubernetes.io/do-loadbalancer-enable-proxy-protocol: "true"
|
||||
```
|
||||
|
||||
#### 2. Install the chart
|
||||
|
||||
<InstallingSnippet />
|
||||
|
||||
#### 3. Lookup the address of the installation
|
||||
|
||||
<GetInstallationAddress />
|
||||
|
||||
Note: due to a limitation in the DigitalOcean ingress controller, the second method will not work if you have enabled the settings to support the GeoIP integration.
|
||||
Please use the web UI to get your IP address.
|
||||
|
||||
#### 4. Setting up DNS
|
||||
|
||||
<SetupDNS />
|
||||
|
||||
## Upgrading the chart
|
||||
|
||||
<UpgradingSnippet />
|
||||
|
||||
## Uninstalling the chart
|
||||
|
||||
<UninstallingSnippet />
|
||||
|
||||
## Next steps
|
||||
|
||||
<NextSteps />
|
||||
@@ -1,147 +0,0 @@
|
||||
---
|
||||
title: Deploying to Google Cloud Platform
|
||||
sidebarTitle: Google Cloud Platform
|
||||
sidebar: Docs
|
||||
showTitle: true
|
||||
tags:
|
||||
- gcp
|
||||
---
|
||||
|
||||
import ClusterRequirementsSnippet from './snippets/cluster-requirements'
|
||||
import InstallingSnippet from './snippets/installing'
|
||||
import UpgradingSnippet from './snippets/upgrading'
|
||||
import UninstallingSnippet from './snippets/uninstalling'
|
||||
import SetupDNS from './snippets/setup-dns'
|
||||
import NextSteps from './snippets/next-steps'
|
||||
|
||||
First, we need to set up a Kubernetes cluster (see the official GCP [documentation](https://cloud.google.com/kubernetes-engine/) for more info).
|
||||
|
||||
<ClusterRequirementsSnippet />
|
||||
|
||||
> Note: in order to reduce the overhead of managing stateful services like PostgreSQL, Kafka, Redis and ClickHouse by yourself, we suggest you to run them _outside_ Kubernetes and offload their provisioning, building and maintenance operations:
|
||||
>
|
||||
> - for PostgreSQL, take a look at [Google Cloud SQL for PostgreSQL](https://cloud.google.com/sql/docs/postgres)
|
||||
> - for Apache Kafka, take a look at [Confluent Cloud](https://www.confluent.io/confluent-cloud/)
|
||||
> - for Redis, take a look at [Google Cloud Memorystore](https://cloud.google.com/memorystore) and [Redis Enterprise Cloud](https://redis.com/redis-enterprise-cloud/overview/)
|
||||
> - for ClickHouse, take a look at [Altinity Cloud](https://altinity.com/cloud-database/)
|
||||
|
||||
## Chart configuration
|
||||
|
||||
Here's the minimal required `values.yaml` that we'll be using later. You can find an overview of the parameters that can be configured during installation under [configuration](/docs/self-host/deploy/configuration).
|
||||
|
||||
```yaml
|
||||
cloud: 'gcp'
|
||||
ingress:
|
||||
hostname: <your-hostname>
|
||||
```
|
||||
|
||||
## Installing the chart
|
||||
|
||||
<InstallingSnippet />
|
||||
|
||||
## Set up a static IP
|
||||
|
||||
**Important** - This must be a `Global` IP address. GKE will not be able to find a `Region` IP address and assign it to the ingress controller's LB.
|
||||
|
||||
### In GCP web console
|
||||
|
||||
1. Open the Google Cloud Console
|
||||
1. Go to VPC Networks > [External IP addresses](https://console.cloud.google.com/networking/addresses/list)
|
||||
1. Add a new **global** static IP with the name `posthog`
|
||||
|
||||
### From gcloud CLI
|
||||
|
||||
1. `gcloud compute addresses create posthog --global`
|
||||
|
||||
## Setting up DNS
|
||||
|
||||
<SetupDNS />
|
||||
|
||||
## Next steps
|
||||
|
||||
<NextSteps />
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### I cannot connect to my PostHog instance after creation
|
||||
|
||||
If DNS has been updated properly, check whether the SSL certificate was created successfully.
|
||||
|
||||
This can be done via the following command:
|
||||
|
||||
```shell
|
||||
gcloud beta --project yourproject compute ssl-certificates list
|
||||
```
|
||||
|
||||
If running the command shows the SSL cert as `PROVISIONING`, that means that the certificate is still being created. [Read more on how to troubleshoot Google SSL certificates here](https://cloud.google.com/load-balancing/docs/ssl-certificates/troubleshooting).
|
||||
|
||||
As a troubleshooting tool, you can allow HTTP access by setting `ingress.gcp.forceHttps` and `web.secureCookies` both to false, but we recommend always accessing PostHog via https.
|
||||
|
||||
### Upgrading the chart
|
||||
|
||||
<UpgradingSnippet />
|
||||
|
||||
### Uninstalling the chart
|
||||
|
||||
<UninstallingSnippet />
|
||||
|
||||
## Clickhouse Configuration
|
||||
|
||||
By default clickhouse is provisioned with standard gcp persistent disk. If you want to specify your own persistent volume claim or switch to a different type of disk
|
||||
you can specify the volume claim within `values.yaml`.
|
||||
|
||||
### To manually provision a disk
|
||||
|
||||
Using the gcloud cli tool for provisioning a disk:
|
||||
|
||||
```
|
||||
gcloud compute disks create pvc-clickhouse --type=pd-ssd --size=2048GB --zone=us-central1-c
|
||||
```
|
||||
|
||||
### Create the claim
|
||||
|
||||
In order to provide the disk to the clickhouse deployment you must first create a persistent volume and claim within the posthog namespace.
|
||||
|
||||
```
|
||||
# This creates a volume claim using the same name specified within the clickhouse values file
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: clickhouse-volume
|
||||
spec:
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
storageClassName: ""
|
||||
capacity:
|
||||
storage: 2048Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
gcePersistentDisk:
|
||||
pdName: pvc-clickhouse
|
||||
fsType: ext4
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: clickhouse-pvc
|
||||
spec:
|
||||
# It's necessary to specify "" as the storageClassName
|
||||
# so that the default storage class won't be used, see
|
||||
# https://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1
|
||||
storageClassName: ""
|
||||
volumeName: clickhouse-volume
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 2048Gi
|
||||
```
|
||||
|
||||
### Provide the claim to the helm chart
|
||||
|
||||
Add the following to your `values.yaml` & run `helm install` or `upgrade`:
|
||||
|
||||
```
|
||||
clickhouse:
|
||||
# -- Optional: Used to manually specify a persistent volume claim. When specified the cloud specific storage class will not be provisioned
|
||||
persistentVolumeClaim: "clickhouse-pvc"
|
||||
```
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: Hosting in EU
|
||||
sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
For most EU customers, the [EU version](/eu) of Posthog Cloud enables you to quickly get started quickly and compliantly. The servers are hosted on AWS in the `eu-central-1` region based in Frankfurt, Germany.
|
||||
|
||||
However, for some EU users with stringent data control requirements using a US-based cloud hosting company (such as AWS) might not be appropriate, even if the servers are physically located within the EU. This list of providers is a good place to start if you fall into this camp. The following are all EU-based cloud companies that you could self-host PostHog on.
|
||||
|
||||
- [Leaseweb](https://www.leaseweb.com)
|
||||
- [OVH](https://www.ovhcloud.com/en/datacenters-ovhcloud/)
|
||||
- [Scaleway](https://www.scaleway.com/en/)
|
||||
- [Hetzner](https://www.hetzner.com/)
|
||||
- [Vultr](https://www.vultr.com/)
|
||||
- [Packet](https://www.packet.com/)
|
||||
- [IBM Cloud (SoftLayer)](https://www.ibm.com/cloud/)
|
||||
@@ -1,63 +0,0 @@
|
||||
---
|
||||
title: Deploying with helm directly
|
||||
sidebarTitle: Other
|
||||
sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
import ClusterRequirementsSnippet from './snippets/cluster-requirements'
|
||||
import InstallingSnippet from './snippets/installing'
|
||||
import UpgradingSnippet from './snippets/upgrading'
|
||||
import UninstallingSnippet from './snippets/uninstalling'
|
||||
import GetInstallationAddress from './snippets/get-installation-address'
|
||||
import SetupDNS from './snippets/setup-dns'
|
||||
import NextSteps from './snippets/next-steps'
|
||||
|
||||
> **Note:** This deployment option is in Beta. See alternative deployment options [here](/docs/self-host#deployment-options).
|
||||
|
||||
For all the other platforms, setup your Kubernetes cluster (see the documentation of your platform for more info). Note that many platforms default to non-expandable volumes.
|
||||
|
||||
<ClusterRequirementsSnippet />
|
||||
|
||||
> Note: in order to reduce the overhead of managing stateful services like PostgreSQL, Kafka, Redis and ClickHouse by yourself, we suggest you to run them _outside_ Kubernetes and offload their provisioning, building and maintenance operations:
|
||||
>
|
||||
> - for PostgreSQL, take a look at [AWS Aurora](https://aws.amazon.com/rds/aurora/), [Azure Database for PostgreSQL](https://docs.microsoft.com/en-us/azure/postgresql), [DigitalOcean managed databases](https://www.digitalocean.com/products/managed-databases-postgresql/), [Google Cloud SQL for PostgreSQL](https://cloud.google.com/sql/docs/postgres)
|
||||
> - for Apache Kafka, take a look at [Confluent Cloud](https://www.confluent.io/confluent-cloud/)
|
||||
> - for Redis, take a look at [Redis Enterprise Cloud](https://redis.com/redis-enterprise-cloud/overview/)
|
||||
> - for ClickHouse, take a look at [Altinity Cloud](https://altinity.com/cloud-database/)
|
||||
|
||||
## Installing the chart
|
||||
|
||||
Here's the minimal required `values.yaml` that we'll be using later. You can find an overview of the parameters that can be configured during installation under [configuration](/docs/self-host/deploy/configuration).
|
||||
|
||||
```yaml
|
||||
cloud: <your-deployment-platform>
|
||||
ingress:
|
||||
hostname: <your-hostname>
|
||||
nginx:
|
||||
enabled: true
|
||||
cert-manager:
|
||||
enabled: true
|
||||
```
|
||||
|
||||
<InstallingSnippet />
|
||||
|
||||
#### Lookup the address of the installation
|
||||
|
||||
<GetInstallationAddress />
|
||||
|
||||
## Setting up DNS
|
||||
|
||||
<SetupDNS />
|
||||
|
||||
### Upgrading the chart
|
||||
|
||||
<UpgradingSnippet />
|
||||
|
||||
### Uninstalling the chart
|
||||
|
||||
<UninstallingSnippet />
|
||||
|
||||
## Next steps
|
||||
|
||||
<NextSteps />
|
||||
@@ -4,6 +4,10 @@ sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
import Sunset from "../_snippets/sunset-disclaimer.mdx"
|
||||
|
||||
<Sunset />
|
||||
|
||||
If you are looking for routine procedures and operations to manage PostHog installations like begin, stop, supervise, and debug a PostHog infrastructure, please take a look at the [runbook](/docs/runbook) section.
|
||||
|
||||
## Troubleshooting
|
||||
@@ -78,9 +82,9 @@ While deleting the namespace, if your Helm release uses `clickhouse.enabled: tru
|
||||
|
||||
This is a [known behavior](https://github.com/Altinity/clickhouse-operator/issues/1043) of the `clickhouse-operator` finalizer. Workaround:
|
||||
|
||||
* patch CHI removing the finalizer: `kubectl patch chi posthog -n posthog -p '{"metadata":{"finalizers":null}}' --type=merge`
|
||||
- patch CHI removing the finalizer: `kubectl patch chi posthog -n posthog -p '{"metadata":{"finalizers":null}}' --type=merge`
|
||||
|
||||
* delete CHI: `kubectl delete chi posthog -n posthog`
|
||||
- delete CHI: `kubectl delete chi posthog -n posthog`
|
||||
|
||||
## FAQ
|
||||
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
---
|
||||
title: Hosting costs
|
||||
sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
Charges on various platforms can be confusing to understand as loadbalancers (which we have 1 in the default configuration) and storage (default configuration has 64Gi) are often charged separately from compute. Plus potential network utilization or other miscellaneous costs.
|
||||
|
||||
## DigitalOcean
|
||||
|
||||
See [DigitalOcean Kubernetes pricing](https://www.digitalocean.com/pricing#kubernetes).
|
||||
|
||||
At the time of writing the suggested default setup is as follows:
|
||||
1. $48 for compute (2x basic nodes of 4GB & 2vcpu each)
|
||||
1. $6.4 for storage (64Gi block storage)
|
||||
1. $10 for load balancer (1x small LB)
|
||||
|
||||
Making the total \~$65 / month
|
||||
|
||||
## AWS
|
||||
|
||||
At the time of writing the suggested default setup is as follows:
|
||||
1. $70 for compute (2x m5.large). Note that reserved instances are about 40% cheaper if you can commit to a year.
|
||||
1. $6.4 for storage (64Gi block storage). Note that potentially you'll get charged for snapshots extra.
|
||||
1. $20 for load balancer (18.25 + 0.008 / GB of data was processed)
|
||||
|
||||
Making the total around \~$100 per month for a minimum viable setup.
|
||||
|
||||
## Infrastructure costs at higher event volumes
|
||||
|
||||
How much will it cost to run PostHog at 1M / 10M / 100M / 1B events per month?
|
||||
|
||||
We often get asked to estimate the infrastructure costs at a given event volume, however in practice this is extremely difficult. This is because ballpark numbers depend many factors, such as:
|
||||
|
||||
- Cloud provider pricing (most have usage discounts, so if you're already using other services, adding more is cheaper)
|
||||
- Type of instance and setup used
|
||||
|
||||
A few examples should help to illustrate why:
|
||||
|
||||
- An installation running services on dedicated nodes will cost significantly more than one on non-dedicated hardware, etc.
|
||||
- External (managed) services will cost significantly more than using self-hosted services, etc.
|
||||
- Running an installation at 90% CPU or on slow disks will result in very slow UI and response times, but it will cost way less than a fast installation with responsive UI. (You can set up [monitoring](https://github.com/PostHog/charts-clickhouse/blob/554ecd8ccb63098d77002051ecd6912de9f554d2/charts/posthog/Chart.yaml#L56-L60) in your PostHog install to monitor this)
|
||||
|
||||
Given the nearly limitless possible infrastructure configurations, it's impossible to provide a single estimate based on event volume alone, however if you hop into our [community Slack](/slack), an engineer from our infrastructure team can help chat through this quickly.
|
||||
|
||||
We recommend taking your planned configuration and plugging it into the pricing calculator for your hosting provider:
|
||||
|
||||
- [Google Cloud Pricing Calculator](https://cloud.google.com/products/calculator)
|
||||
- [AWS Pricing Calculator](https://calculator.aws/#/)
|
||||
- [Azure Pricing Calculator](https://azure.microsoft.com/pricing/calculator/)
|
||||
- [DigitalOcean Pricing Calculator](https://www.digitalocean.com/pricing/calculator)
|
||||
|
||||
## Help us make this guide better
|
||||
|
||||
If you've deployed PostHog on platforms not listed here or are seeing different costs, please let us know how much you're roughly spending so we can improve this guide.
|
||||
|
||||
You can contact us at _[hey@posthog.com](mailto:hey@posthog.com)_ or submit a pull request to our [Docs repository](https://github.com/PostHog/posthog.com).
|
||||
@@ -1,39 +0,0 @@
|
||||
---
|
||||
title: PostHog Enterprise Self-Hosted
|
||||
sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
Built for large companies with significant data isolation requirements. Requires a minimum contract of $5,000/month.
|
||||
|
||||
[Book a call](/book-a-demo) with our customer success team to get started with PostHog Enterprise.
|
||||
|
||||
## Deployment options
|
||||
|
||||
- Deploy PostHog using Kubernetes on your own cloud
|
||||
- This requires knowledge of Kubernetes and your engineering team's time for deployment and ongoing maintenance. We are happy to provide reasonable [support](/docs/self-host/enterprise/support).
|
||||
- [Enterprise deployment](/docs/self-host/enterprise/overview) contains the information you need to get set up - we recommend you get a license key first.
|
||||
- To get the license key [book a call](/book-a-demo) with our customer success team.
|
||||
- Work with a PostHog partner to deploy PostHog on to your own cloud
|
||||
- Several of our [partners](/partners) might be an option for more involved support. We can direct you on the call to who is best suited.
|
||||
- PostHog Cloud Enterprise
|
||||
- For most customers, the Enterprise version of [PostHog Cloud](/pricing) will satisfy their compliance and privacy needs.
|
||||
|
||||
## Guides to deploy PostHog Enterprise on your own cloud
|
||||
|
||||
- [DigitalOcean](/docs/self-host/deploy/digital-ocean)
|
||||
- [AWS](/docs/self-host/deploy/aws)
|
||||
- [Google Cloud Platform](/docs/self-host/deploy/gcp)
|
||||
- [Azure](/docs/self-host/deploy/azure) - _in beta_
|
||||
- [Other platforms](/docs/self-host/deploy/other)
|
||||
|
||||
## Configuration
|
||||
|
||||
There are various ways to configure and personalize your PostHog instance to better suit your needs. In this section you will find all the information you need about settings and options you can configure to get what you need out of PostHog.
|
||||
|
||||
- [Monitoring with Grafana](/docs/self-host/configure/monitoring-with-grafana)
|
||||
- [Environment variables](/docs/self-host/configure/environment-variables)
|
||||
- [Upgrading PostHog](/docs/runbook/upgrading-posthog)
|
||||
- [Securing PostHog](/docs/self-host/configure/securing-posthog)
|
||||
- [Running behind proxy](/docs/self-host/configure/running-behind-proxy)
|
||||
- [Email configuration](/docs/self-host/configure/email)
|
||||
@@ -1,24 +0,0 @@
|
||||
---
|
||||
title: Enterprise Self-Hosted Support
|
||||
sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
PostHog Enterprise Self-Hosted Support is delivered over a shared Slack channel or email.
|
||||
|
||||
Enterprise Self-hosted Support is provided to self-hosted customers with a minimum contract of $5k/month.
|
||||
|
||||
Our support covers reasonable assistance with production issues for the PostHog services, along with other key stack components:
|
||||
|
||||
- Answering "how to" questions about PostHog services and infrastructure
|
||||
- Best practices to help you successfully deploy, and manage your PostHog installation
|
||||
- Troubleshooting Helm chart issues
|
||||
- Troubleshooting operational or systemic problems with the self-hosted PostHog setup
|
||||
- Troubleshooting problems detected by PostHog built-in monitoring
|
||||
|
||||
Support **does not include**:
|
||||
|
||||
- Custom code development
|
||||
- Debugging custom software
|
||||
- Debugging custom PostHog installation (example: setup not following our documentation, supported versions, etc)
|
||||
- Performing system administration or maintenance tasks
|
||||
@@ -5,7 +5,7 @@ sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
import Disclaimer from './deploy/snippets/disclaimer'
|
||||
import Disclaimer from './\_snippets/disclaimer.mdx'
|
||||
|
||||
The fastest and most reliable way to get started with PostHog is to use [PostHog Cloud](/docs/getting-started/cloud).
|
||||
|
||||
@@ -17,34 +17,4 @@ However, if you're a large company with the need to self-host or an engineer loo
|
||||
|
||||
The core of PostHog is open-source and always will be.
|
||||
|
||||
It is not possible to upgrade from PostHog Open-Source to Enterprise within the same instance. It requires setting up a new instance of PostHog and then performing a [full migration](/docs/migrate/migrate-between-posthog-instances).
|
||||
|
||||
For more information on deployment go to [open-source deployment](/docs/self-host/open-source/deployment).
|
||||
|
||||
## PostHog Enterprise
|
||||
|
||||
PostHog Enterprise is built for large companies with significant data isolation requirements. It requires a minimum contract of $5,000/month, which includes 40 million events and 80,000 sessions each month, and dedicated support.
|
||||
|
||||
Before committing to self-hosting, however, we recommend exploring [PostHog Cloud Enterprise](/pricing). It satisfies the compliance and privacy needs of most customers, including the option to host in the EU for GDPR compliance.
|
||||
|
||||
All Enterprise plans include:
|
||||
|
||||
- SAML-based single sign-on
|
||||
- Advanced permissions, including private projects
|
||||
- A dedicated Slack support channel
|
||||
|
||||
You have two options if self-hosting PostHog Enterprise is the best solution for you:
|
||||
|
||||
### 1. Deploy PostHog using Kubernetes on your own cloud
|
||||
|
||||
- This requires knowledge of Kubernetes and your engineering team's time for deployment and ongoing maintenance. We are happy to provide reasonable [support](/docs/self-host/enterprise/support).
|
||||
|
||||
- [Enterprise deployment](/docs/self-host/enterprise/overview) contains the information you need to get set up – we recommend you get a license key first.
|
||||
|
||||
- To get the license key, [book a call](/book-a-demo) with our customer success team.
|
||||
|
||||
### 2. Work with a PostHog partner
|
||||
|
||||
- Several of our [partners](/partners) offer self-hosted PostHog as a managed service on your own cloud, and dedicated deployment support.
|
||||
|
||||
- [Book a call](/book-a-demo) with our customer success team where we can direct you to the ideal partner for you, and get you started on PostHog Enterprise.
|
||||
|
||||
@@ -5,7 +5,7 @@ sidebar: Docs
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
import Disclaimer from '../deploy/snippets/disclaimer'
|
||||
import Disclaimer from '../_snippets/disclaimer.mdx'
|
||||
|
||||
<Disclaimer />
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ sidebarTitle: Support
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
import Disclaimer from '../deploy/snippets/disclaimer'
|
||||
import Disclaimer from '../\_snippets/disclaimer.mdx'
|
||||
|
||||
<Disclaimer />
|
||||
|
||||
@@ -21,11 +21,11 @@ For troubleshooting your own problems the [troubleshooting guide](https://postho
|
||||
|
||||
If you aren't able to fix the problem yourself here are some other options:
|
||||
|
||||
- Migrate from the self-hosted PostHog to PostHog Cloud
|
||||
- [Guide on how to migrate here](https://posthog.com/docs/migrate/migrate-between-posthog-instances)
|
||||
- If you have any problems migrating feel free to message us in [Slack](https://posthog.com/slack) or send us an email at [hey@posthog.com](mailto:hey@posthog.com) and we will be happy to help
|
||||
- 3rd party support
|
||||
- Reach out to a relevant [PostHog partner](https://posthog.com/partners). Several customers have had a good experience with [Altinity](https://posthog.com/partners/altinity) for Clickhouse and Kubernetes issues
|
||||
- Work with a software engineering contractor
|
||||
- Upgrade to PostHog Enterprise
|
||||
- [Book a call](https://posthog.com/book-a-demo) or send us an email at [hey@posthog.com](mailto:hey@posthog.com)
|
||||
- Migrate from the self-hosted PostHog to PostHog Cloud
|
||||
- [Guide on how to migrate here](https://posthog.com/docs/migrate/migrate-between-posthog-instances)
|
||||
- If you have any problems migrating feel free to message us in [Slack](https://posthog.com/slack) or send us an email at [hey@posthog.com](mailto:hey@posthog.com) and we will be happy to help
|
||||
- 3rd party support
|
||||
- Reach out to a relevant [PostHog partner](https://posthog.com/partners). Several customers have had a good experience with [Altinity](https://posthog.com/partners/altinity) for Clickhouse and Kubernetes issues
|
||||
- Work with a software engineering contractor
|
||||
- Upgrade to PostHog Enterprise
|
||||
- [Book a call](https://posthog.com/book-a-demo) or send us an email at [hey@posthog.com](mailto:hey@posthog.com)
|
||||
|
||||
@@ -10,7 +10,7 @@ showTitle: true
|
||||
|
||||
PostHog is a product analytics suite built for the modern enterprise, with the differentiators of being open source and having a broader view of the tools needed to make a product successful.
|
||||
|
||||
As a result, PostHog **can be deployed on your own infrastructure** and provides a large set of tools to help improve your product, such as session recording, heatmaps, and feature flags, that are unique to PostHog in the product analytics space.
|
||||
As a result, PostHog has an open-source version which can be deployed on your own infrastructure, or can be run in the Cloud with either EU or US hosting options. We provide a large set of tools to help improve your product, such as session recording, heatmaps, and feature flags, that are unique to PostHog in the product analytics space.
|
||||
|
||||
### What does it do?
|
||||
|
||||
@@ -91,18 +91,18 @@ Additionally, if your company has a very large userbase and you need help with s
|
||||
|
||||
### Can I self-host?
|
||||
|
||||
Yes. You can have full access to [PostHog's code](https://github.com/PostHog/posthog), so it's fully flexible how you run the software.
|
||||
Yes, the open source version of PostHog can be deployed with Docker Compose and is available with no event limits. We believe it's an ideal solution for hobby projects or users who need to track up to 100k events per month. You have full access to [PostHog's code](https://github.com/PostHog/posthog), so it's fully flexible how you run the software.
|
||||
|
||||
### How do I deploy?
|
||||
|
||||
There are two options:
|
||||
|
||||
1. [PostHog Cloud](https://app.posthog.com/signup)
|
||||
2. [Self hosted](/docs/deployment)
|
||||
1. [PostHog Cloud, with either US or EU hosting](https://app.posthog.com/signup)
|
||||
2. [Self hosting the open source version](/docs/deployment)
|
||||
|
||||
### Can I get it live with my favorite hosting method?
|
||||
|
||||
We provide 1-click deployments for AWS, Azure, DigitalOcean and Google Cloud, as well as have tutorials deploy using Docker, Kubernetes, or straight from source. Furthermore, we offer detailed deployment instructions for how to deploy on all the main cloud providers. See our [Deployment page](/docs/deployment) for more information.
|
||||
See our [Deployment page](/docs/deployment) for more information about how to deploy PostHog's open source version.
|
||||
|
||||
Want to set it up differently? [Raise an issue](https://github.com/PostHog/posthog/issues) in the repo.
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ I live just outside of London. I'm passionate about punk music, videogame preser
|
||||
|
||||
In Q4 2022 I focused on improving announcements, growing word of mouth and collaborating with Growth to improve onboarding. Projects in these areas included [the launch of PostHog EU](/eu), scaling up our investment in [our G2 profile](https://www.g2.com/products/posthog/reviews), creating new case studies and migrating to Customer.io to create new first onboarding flow. Results and feedback across these project has been positive.
|
||||
|
||||
There were also projects which I failed to focus on, or chose to deprioritize. These included launching a PostHog ambassador program and doing deeper work with [our partners](/marketplace). I also completely failed to read any of the Product Design books I bought.
|
||||
There were also projects which I failed to focus on, or chose to deprioritize. These included launching a PostHog ambassador program and doing deeper work with our partners. I also completely failed to read any of the Product Design books I bought.
|
||||
|
||||
In the first half of 2023 I'm focusing on the same basic areas, but with new projects to support them.
|
||||
|
||||
|
||||
BIN
contents/images/docs/migrate/configure-exports.png
Normal file
BIN
contents/images/docs/migrate/configure-exports.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 169 KiB |
BIN
contents/images/docs/migrate/configure-replicator.png
Normal file
BIN
contents/images/docs/migrate/configure-replicator.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 68 KiB |
@@ -87,7 +87,7 @@ PostHog provides a free basic level of support to everyone via the community, wi
|
||||
</table>
|
||||
</div>
|
||||
|
||||
By default, the Scale plan does not include items marked with a '+'. However, we work with several partners that can offer a 'fully supported' experience for Scale customers - visit our [partner directory](/partners) to learn more.
|
||||
By default, the Scale plan does not include items marked with a '+'.
|
||||
|
||||
## Community Support
|
||||
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
---
|
||||
title: Altinity
|
||||
showTitle: true
|
||||
hideLastUpdated: true
|
||||
---
|
||||
|
||||
**[← Back to Partners](/partners)**
|
||||
|
||||
<img src="/images/partners/alinity.png" alt="Altinity Logo" width="100" style={{float: 'right', margin: '0 0 1rem 1rem'}} />
|
||||
|
||||
[Altinity](https://altinity.com) helps enterprises deliver real-time analytics based on ClickHouse anywhere and for any business purpose. Altinity covers everything needed from project inception to production operation.
|
||||
|
||||
1. Altinity.Cloud platform offering fully supported and managed ClickHouse clusters in AWS and GCP
|
||||
2. 24/7 enterprise support for ClickHouse in any environment
|
||||
3. Training for analytic developers and administrators
|
||||
4. Altinity Stable builds for ClickHouse
|
||||
|
||||
Altinity customers range from startups to Fortune 10 enterprises.
|
||||
|
||||
## Services offered
|
||||
|
||||
### Support
|
||||
- Enterprise support for users who prefer to operate ClickHouse in self-managed environments
|
||||
- Altinity.Cloud ClickHouse backends for PostHog users who prefer to use ClickHouse as a hands-off service. Find out more about using Altinity.Cloud to manage your self-hosted instance in [our deployment configuration docs.](/docs/self-host/configure/using-altinity-cloud).
|
||||
|
||||
## Contact
|
||||
|
||||
[Speak to Altinity](mailto:marketplace+altinity@posthog.com)
|
||||
@@ -1,22 +0,0 @@
|
||||
---
|
||||
title: ClickHouse
|
||||
showTitle: true
|
||||
hideLastUpdated: true
|
||||
---
|
||||
|
||||
**[← Back to Partners](/partners)**
|
||||
|
||||
<img src="/images/partners/clickhouse.svg" alt="Clickhouse Logo" width="100" style={{float: 'right', margin: '0 0 1rem 1rem'}} />
|
||||
|
||||
ClickHouse is an open-source column-oriented database management system. (Note: PostHog runs on ClickHouse!)
|
||||
|
||||
Host PostHog on your own infrastructure, but leave the ClickHouse database management to the same team who built ClickHouse! ClickHouse is actively developing a hosted version of their database that splits compute from storage so that you only pay for the resources that you use, when you use them.
|
||||
|
||||
## Services offered
|
||||
|
||||
- Managed ClickHouse
|
||||
- EU Data Locality
|
||||
|
||||
## Get in touch
|
||||
|
||||
[Email to get access to the beta](mailto:marketplace+clickhouse@posthog.com)
|
||||
@@ -15,54 +15,14 @@ If you've got a product or service built on PostHog, [get it listed](/partners/g
|
||||
|
||||
## Directory
|
||||
|
||||
<img src="/images/partners/alinity.png" alt="Alinity" width="100" style={{float: 'right', marginTop: '1rem', marginLeft: '1rem'}} />
|
||||
|
||||
#### [**Altinity**](../partners/altinity)
|
||||
|
||||
Altinity are experts in Clickhouse and data infrastructure.
|
||||
|
||||
They help large organizations to deploy, manage and scale their PostHog instance.
|
||||
|
||||
**Services:** PostHog as a managed service / deployment help
|
||||
|
||||
<hr />
|
||||
|
||||
<img src="/images/partners/clickhouse.svg" alt="ClickHouse" width="100" style={{float: 'right', marginTop: '1rem', marginLeft: '1rem'}} />
|
||||
|
||||
#### [**ClickHouse**](../partners/clickhouse)
|
||||
|
||||
ClickHouse is an open-source column-oriented database management system. (Note: PostHog runs on ClickHouse!)
|
||||
|
||||
**Services:** Managed ClickHouse / EU Data Locality
|
||||
|
||||
<hr />
|
||||
|
||||
<img src="/images/partners/restack.png" alt="Restack" width="100" style={{float: 'right', marginTop: '1rem', marginLeft: '1rem'}} />
|
||||
|
||||
#### [**Restack**](../partners/restack)
|
||||
|
||||
Restack are experts in deploying open-source software and provide a simple way to create open-source stacks.
|
||||
|
||||
With Restack, you can run PostHog on your own Kubernetes Cluster on AWS without worrying about EKS setup, k8s provisioning, networking, compliance or updates.
|
||||
|
||||
**Services:** PostHog as a managed service / GDPR, SOC 2 and HIPAA compliant deployment
|
||||
|
||||
<hr />
|
||||
|
||||
<img src="/images/partners/opsverse_icon.png" alt="OpsVerse" width="100" style={{float: 'right', marginTop: '1rem', marginLeft: '1rem'}} />
|
||||
|
||||
#### [**OpsVerse**](../partners/opsverse)
|
||||
|
||||
Get a fully managed PostHog instance in the cloud region of your choice, or within your own cloud.
|
||||
|
||||
**Services:** PostHog as a managed service / Data locality
|
||||
|
||||
<hr />
|
||||
|
||||
<img src="/images/partners/talenodigital.png" alt="taleno.digital" width="100" style={{float: 'right', marginTop: '1rem', marginLeft: '1rem'}} />
|
||||
|
||||
#### [**taleno.digital**](../partners/taleno-digital)
|
||||
|
||||
A data consultancy service for data warehousing and product analytics built on the modern data stack.
|
||||
|
||||
**Services:** Deployment support / Insight and dashboard creation expertise
|
||||
**Services:** Insight and dashboard creation expertise
|
||||
|
||||
#### [**Tagticians**](../partners/tagiticians)
|
||||
|
||||
Specialists in the implementation, configuration, and maintenance of data stack solutions and customer data platforms.
|
||||
|
||||
**Services:** Tracking, implementation and integration support
|
||||
@@ -1,26 +0,0 @@
|
||||
---
|
||||
title: OpsVerse
|
||||
showTitle: true
|
||||
hideLastUpdated: true
|
||||
---
|
||||
|
||||
**[← Back to Partners](/partners)**
|
||||
|
||||
<img src="/images/partners/opsverse_icon.png" alt="OpsVerse" width="175" style={{ float: 'right', margin: '0 0 1rem 1rem'}} />
|
||||
|
||||
[OpsVerse](https://opsverse.io) provides fully managed DevOps tools that can run in any cloud including in your own cloud account.
|
||||
|
||||
Get a fully managed PostHog instance in the cloud region of your choice, or within your own cloud.
|
||||
|
||||
## Services offered
|
||||
|
||||
- Managed PostHog open source
|
||||
- Data locality within the cloud region of your choice including EU
|
||||
- Data locality within your own cloud account
|
||||
|
||||
### App
|
||||
Launch and manage your PostHog instance from the OpsVerse admin console.
|
||||
|
||||
## Contact and pricing info
|
||||
|
||||
[Request access](mailto:marketplace+opsverse@posthog.com)
|
||||
@@ -1,43 +0,0 @@
|
||||
---
|
||||
title: Restack
|
||||
showTitle: true
|
||||
hideLastUpdated: true
|
||||
---
|
||||
|
||||
**[← Back to Partners](/partners)**
|
||||
|
||||
<img src="/images/partners/restack.png" alt="Restack logo" width="100" style={{borderRadius: '100px', float: 'right', margin: '0 0 1rem 1rem'}} />
|
||||
|
||||
[Restack](https://www.restack.io) enables you to run PostHog on your own Kubernetes Cluster on AWS.
|
||||
At Restack, we believe in open-source but also know the pain of hosting and maintaining them on your own servers.
|
||||
|
||||
That's why we provide you the experience of using a SaaS tool but with all the benefits of an open source tool.
|
||||
|
||||
## Services offered
|
||||
|
||||
### App
|
||||
|
||||
#### High Availability Deployment on AWS EKS
|
||||
- Easily, create an AWS cluster & deploy PostHog on your own cloud
|
||||
- Establish production-grade setup including Replicas, Autoscaling & Elastic Block Storage for Clickhouse
|
||||
|
||||
#### High Compliance in US & EU
|
||||
- Determine the region of your own AWS EKS cluster to comply with GDPR or CCPA
|
||||
- Restack Console ensures HIPAA, FISMA & SOC2 compliant deployment
|
||||
|
||||
#### Updates
|
||||
- Avoid downtime and missing tracking events
|
||||
- Update your PostHog Deployment seamlessly via Restack
|
||||
- Updates will be available from Q3 2022
|
||||
|
||||
<!-- #### Support -->
|
||||
|
||||
|
||||
### Pricing
|
||||
|
||||
Restack charges based on your cloud usage. The minimum cluster size to run PostHog is 2x m5.large.
|
||||
Approximate minimum monthly AWS costs: $200
|
||||
|
||||
## Contact
|
||||
|
||||
[Try Restack](https://www.restack.io/posthog-on-kubernetes)
|
||||
32
contents/partners/tagiticians.md
Normal file
32
contents/partners/tagiticians.md
Normal file
@@ -0,0 +1,32 @@
|
||||
---
|
||||
title: Tagticians
|
||||
showTitle: true
|
||||
hideLastUpdated: true
|
||||
---
|
||||
|
||||
**[← Back to Partners](/partners)**
|
||||
|
||||
<img src="https://tagticians.com/wp-content/uploads/2018/10/tagmatt-tagcians-png-square-only.png" alt="Tagticians Logo" width="100" style={{float: 'right', margin: '0 0 1rem 1rem'}} />
|
||||
|
||||
[Tagticians](https://tagticians.com) are specialists in the implementation, configuration, and maintenance of data stack solutions and customer data platforms.
|
||||
|
||||
1. Tracking plan design support to get you the data you need to make business decisions.
|
||||
2. Developer support during implementation phase of PostHog on all platforms and frameworks.
|
||||
3. Configuration support in PostHog to ensure your data is of the highest quality.
|
||||
4. Continuous support for extending PostHog implementations to help you leverage new requirements.
|
||||
|
||||
Tagticians customers range from small-medium to enterprise sized businessess in verticals such as FinTech, Fashion, Retail, and Banking. Our specialists are located in the Netherlands, but remote-work globally.
|
||||
|
||||
## Services offered
|
||||
|
||||
### Support
|
||||
- Full support for PostHog, from Proof of Concepts to fully managed PostHog projects.
|
||||
- Skilled in many SaaS solutions ranging from:
|
||||
- advertising platforms
|
||||
- customer data platforms
|
||||
- customer engagement platforms
|
||||
- digital analytics
|
||||
|
||||
## Contact
|
||||
|
||||
[Speak to Tagticians](mailto:matthew@tagticians.com)
|
||||
@@ -12,11 +12,11 @@ hideLastUpdated: true
|
||||
|
||||
### App
|
||||
|
||||
taleno.digital is your analytics engineer-as-a-service, so you don't need to hire an FTE.
|
||||
A data consultancy service for data warehousing and product analytics built on the modern data stack.
|
||||
|
||||
### Support
|
||||
|
||||
- Setup PostHog Cloud & Deployment
|
||||
- Setup PostHog Cloud
|
||||
- Handle issues / inconsistencies encountered with PostHog Cloud
|
||||
- Creation of actions, insights & dashboards
|
||||
|
||||
|
||||
@@ -67,14 +67,6 @@ subtitle: Keep teams informed. Subscribe for updates, or export to share anywher
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Self-hostable</td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cloud hosting</td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
|
||||
@@ -61,13 +61,6 @@ subtitle: Diagnose the why behind the what
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Self-hostable</td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cloud hosting</td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
|
||||
@@ -76,14 +76,6 @@ subtitle: Multivariate testing, with statistical significance included
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Self-hostable</td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cloud hosting</td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
|
||||
@@ -68,14 +68,6 @@ subtitle: Test, rinse, repeat. Roll out features safely.
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Self-hostable</td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cloud hosting</td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
|
||||
@@ -68,14 +68,6 @@ documentation: /manual/funnels
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Self-hostable</td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cloud hosting</td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
|
||||
@@ -63,14 +63,6 @@ subtitle: See what's clicking with users
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Self-hostable</td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cloud hosting</td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
|
||||
@@ -82,13 +82,6 @@ subtitle: Grab the popcorn. See how people really use your product.
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Self-hostable</td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cloud hosting</td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
|
||||
@@ -71,14 +71,6 @@ documentation: /manual/trends
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Self-hostable</td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cloud hosting</td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
|
||||
@@ -76,14 +76,6 @@ subtitle: See how visitors get from A to Z
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Self-hostable</td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="text-center"><span className="text-red text-lg"><Close /></span></td>
|
||||
<td className="bg-gray-accent bg-opacity-50 text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cloud hosting</td>
|
||||
<td className="text-center"><span className="text-green text-lg"><Check /></span></td>
|
||||
|
||||
@@ -8,4 +8,4 @@ Thank you for submitting your request!
|
||||
|
||||
We'll be in touch to schedule a demo.
|
||||
|
||||
In the mean time, you can try PostHog for free: [Self-deploy PostHog](/docs/deployment) now, or [create a hosted account](https://app.posthog.com/signup).
|
||||
In the mean time, you can [sign-up to PostHog Cloud](https://app.posthog.com/signup) to get started with up to 1 million free events, every month.
|
||||
|
||||
@@ -81,7 +81,7 @@ function AppsPage({ location }) {
|
||||
image={`/og-images/apps.jpeg`}
|
||||
/>
|
||||
<header className="py-12">
|
||||
<h2 className="m-0 text-center text-[2.75rem] leading-[2.75rem] md:text-6xl text-primary">
|
||||
<h2 className="m-0 text-center text-[2.75rem] leading-none md:text-6xl text-primary">
|
||||
Do more with your data with <br className="hidden lg:block" />
|
||||
<span className="text-blue">PostHog Apps</span>
|
||||
</h2>
|
||||
|
||||
@@ -357,6 +357,14 @@ export function Footer(): JSX.Element {
|
||||
© {new Date().getFullYear()} PostHog, Inc.
|
||||
</small>
|
||||
<ul className="m-0 p-0 list-none sm:ml-auto flex sm:space-x-8 space-x-4 mt-2 sm:mt-0">
|
||||
<li>
|
||||
<Link
|
||||
to="https://status.posthog.com"
|
||||
className="font-bold text-sm text-almost-black/70 hover:text-almost-black/90 dark:text-gray dark dark:hover:text-gray"
|
||||
>
|
||||
System status
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link
|
||||
to="/docs/contribute/code-of-conduct"
|
||||
|
||||
@@ -22,8 +22,8 @@ export default function HomeQuote() {
|
||||
<span>
|
||||
"PostHog is the first analytics platform that's excited me! It has multiple tools, so instead of
|
||||
using <span className="text-red">Google Analytics</span> and{' '}
|
||||
<span className="text-red">HotJar</span> and <span className="text-red">Intercom</span> and{' '}
|
||||
<span className="text-red">Mixpanel</span>, I can just use PostHog.
|
||||
<span className="text-red">HotJar</span> and <span className="text-red">Mixpanel</span>, I can just
|
||||
use PostHog.
|
||||
</span>
|
||||
}
|
||||
/>
|
||||
|
||||
@@ -102,16 +102,17 @@ export const DataWarehouse = ({ active }) => {
|
||||
)
|
||||
}
|
||||
|
||||
export const SelfHosting = ({ active }) => {
|
||||
export const OpenSource = ({ active }) => {
|
||||
return (
|
||||
<svg width="25" height="20" viewBox="0 0 25 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28">
|
||||
<path
|
||||
d="M21.9048 6.36655C22.0201 6.01954 22.0778 5.66062 22.0778 5.29572C22.0778 3.40855 20.5406 1.87346 18.6514 1.87346C18.037 1.87346 17.4464 2.03453 16.9224 2.34377C16.0802 0.908026 14.5232 0.000244141 12.8477 0.000244141C10.9815 0.000244141 9.2832 1.11682 8.5285 2.80906C8.38035 2.78918 8.2312 2.77923 8.08207 2.77923C6.26253 2.77923 4.77002 4.20803 4.66566 6.00473C2.37582 6.36567 0.6875 8.31644 0.6875 10.6729C0.6875 13.2799 2.8093 15.4017 5.4163 15.4017H7.6425V14.479C7.6425 13.5394 8.32558 12.7569 9.22043 12.6038V11.4862C9.22043 9.28292 11.0151 7.49026 13.2205 7.49026C15.4238 7.49026 17.2165 9.28297 17.2165 11.4862V12.6038C18.1133 12.7559 18.7984 13.5394 18.7984 14.479V15.4017H19.9587C22.5657 15.4017 24.6875 13.2809 24.6875 10.6729C24.6875 8.81363 23.5832 7.12813 21.9048 6.36655Z"
|
||||
fill={active ? '#8AB4DE' : 'rgba(0, 0, 0, .7)'}
|
||||
d="M14.002 12.339a1.662 1.662 0 0 0-.344 3.288v8.865c.114.004.228.009.344.009.115 0 .23-.005.343-.008v-8.866a1.662 1.662 0 0 0-.343-3.288Z"
|
||||
fill={active ? '#4CAF50' : 'rgba(0, 0, 0, .7)'}
|
||||
/>
|
||||
<path
|
||||
d="M16.8952 13.3046H16.4875V11.4861C16.4875 9.68245 15.0219 8.2168 13.2182 8.2168C11.4146 8.2168 9.94613 9.68237 9.94613 11.4861V13.3046H9.53847C8.89118 13.3046 8.36719 13.8316 8.36719 14.4789V18.5255C8.36719 19.1728 8.89118 19.6998 9.53847 19.6998H16.8941C17.5414 19.6998 18.0683 19.1728 18.0683 18.5255L18.0693 14.4789C18.0693 13.8316 17.5424 13.3046 16.8951 13.3046H16.8952ZM13.5821 16.9745C13.5821 17.1754 13.419 17.3385 13.2182 17.3385C13.0173 17.3385 12.8543 17.1754 12.8543 16.9745V16.1155C12.8543 15.9146 13.0173 15.7516 13.2182 15.7516C13.419 15.7516 13.5821 15.9146 13.5821 16.1155V16.9745ZM15.7606 13.3046H10.6739V11.4861C10.6739 10.0861 11.8154 8.94467 13.2193 8.94467C14.6232 8.94467 15.7607 10.0861 15.7607 11.4861L15.7606 13.3046Z"
|
||||
fill={active ? '#34A853' : 'rgba(0, 0, 0, 1)'}
|
||||
opacity=".7"
|
||||
d="M24.5 14c0-5.799-4.701-10.5-10.5-10.5S3.5 8.201 3.5 14c0 5.45 4.153 9.93 9.467 10.45v-.002c-.026-4.268-2.599-7.565-3.666-8.75 0 0-.438-.527-.19-1.157l1.944-4.93s.36-.911 1.158-.911h3.574c.799 0 1.158.912 1.158.912l1.944 4.93c.249.63-.19 1.156-.19 1.156-1.068 1.186-3.64 4.482-3.666 8.75v.001C20.347 23.93 24.5 19.45 24.5 14Z"
|
||||
fill={active ? '#4CAF50' : 'rgba(0, 0, 0, .7)'}
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
|
||||
@@ -499,30 +499,33 @@ export const SelfHosting = () => {
|
||||
animate={{ translateY: 0 }}
|
||||
>
|
||||
<StaticImage
|
||||
alt="A hedgehog dressed as a professor pointing at a chalkboard with a complex SQL statement written on it"
|
||||
alt="A hedgehog working on a laptop while standing, using some sort of internet link that connects to the stars..."
|
||||
placeholder="none"
|
||||
quality={100}
|
||||
objectFit="contain"
|
||||
className="w-full h-full"
|
||||
src="./images/self-hosting.png"
|
||||
src="./images/open-source.png"
|
||||
/>
|
||||
</motion.div>
|
||||
</ImageContainer>
|
||||
<ContentContainer>
|
||||
<Content>
|
||||
<Title title={'Self-hosting'} />
|
||||
<Subtitle className="text-[14px] md:text-[18px]" subtitle="Plus get full SQL access." />
|
||||
<Description description="Hosting on-prem or private cloud means customer data never has to leave your infrastructure." />
|
||||
<Title title={'Open source'} />
|
||||
<Subtitle className="text-[14px] md:text-[18px]" subtitle="Get full access to source code." />
|
||||
<p className="text-[16px] m-0 leading-tight text-primary/70">
|
||||
Audit the entire PostHog codebase for security or compliance on{' '}
|
||||
<a href="https://github.com/posthog/posthog">GitHub</a>. Or host your own hobby deployment.
|
||||
</p>
|
||||
|
||||
<CTA url="/docs/self-host" title="Learn more" />
|
||||
<CTA url="/docs/self-host" title="Learn more about self-hosting" />
|
||||
</Content>
|
||||
<div className="flex items-end mt-auto w-full">
|
||||
<div className="hidden md:block mb-3">
|
||||
<hr className="w-[20px] h-[3px] rounded-full" />
|
||||
<div className="text-primary/80 inline-block leading-tight text-[12px]">
|
||||
Deploy with <Link to="/docs/self-host/deploy/aws">AWS</Link>,{' '}
|
||||
<Link to="/docs/self-host/deploy/gcp">Google Cloud</Link>,{' '}
|
||||
<Link to="/docs/self-host/deploy/digital-ocean">DigitalOcean</Link>, and more.
|
||||
Spin up a hobby deployment with <Link to="/docs/self-host/deploy/aws">AWS</Link>,{' '}
|
||||
<Link to="/docs/self-host/deploy/gcp">Google Cloud</Link>, or{' '}
|
||||
<Link to="/docs/self-host/deploy/digital-ocean">DigitalOcean</Link>.
|
||||
</div>
|
||||
</div>
|
||||
<div className="md:relative w-3/4">
|
||||
|
||||
BIN
src/components/Home/Slider/images/open-source.png
Normal file
BIN
src/components/Home/Slider/images/open-source.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
@@ -4,7 +4,7 @@ import {
|
||||
DataWarehouse,
|
||||
EventPipelines,
|
||||
FeatureFlags,
|
||||
SelfHosting,
|
||||
OpenSource,
|
||||
SessionRecording,
|
||||
} from './Icons'
|
||||
|
||||
@@ -34,7 +34,7 @@ export const slideButtons = [
|
||||
Icon: DataWarehouse,
|
||||
},
|
||||
{
|
||||
title: 'Self-hosting',
|
||||
Icon: SelfHosting,
|
||||
title: 'Open source',
|
||||
Icon: OpenSource,
|
||||
},
|
||||
]
|
||||
|
||||
@@ -52,11 +52,6 @@ export default function Docs({ referenceElement }: { referenceElement: HTMLDivEl
|
||||
description: "See what we're building, and help us decide what to build next.",
|
||||
url: '/roadmap',
|
||||
},
|
||||
{
|
||||
title: 'Partner directory',
|
||||
description: 'Companies and products who can help with PostHog',
|
||||
url: '/partners',
|
||||
},
|
||||
{
|
||||
title: 'Contributors',
|
||||
description: 'Fix a bug, get credit for the merch store (and warm fuzzies)',
|
||||
|
||||
@@ -86,9 +86,9 @@ const leftColMenuItems: LeftColMenuItems[] = [
|
||||
url: '/product#apps',
|
||||
},
|
||||
{
|
||||
title: 'Self-hosting',
|
||||
title: 'Open source',
|
||||
icon: <SelfHosting />,
|
||||
url: '/product#self-hosting',
|
||||
url: '/product#open-source',
|
||||
},
|
||||
{
|
||||
title: 'API',
|
||||
|
||||
@@ -34,16 +34,16 @@ export default function UsingPosthog({ referenceElement }: { referenceElement: H
|
||||
description: 'See how PostHog is supporting industry leaders',
|
||||
url: '/customers',
|
||||
},
|
||||
{
|
||||
title: 'Partner directory',
|
||||
description: 'Companies and products who can help with PostHog',
|
||||
url: '/partners',
|
||||
},
|
||||
{
|
||||
title: 'Apps',
|
||||
description: 'Browse 50ish apps that help you get more out of PostHog',
|
||||
url: '/apps',
|
||||
},
|
||||
{
|
||||
title: 'Partner directory',
|
||||
description: 'Companies and products who can help with PostHog',
|
||||
url: '/partners',
|
||||
},
|
||||
{
|
||||
title: 'FAQ',
|
||||
description: 'Questions, but frequently asked',
|
||||
|
||||
@@ -55,7 +55,7 @@ const dataStack: IFeature[] = [
|
||||
]
|
||||
|
||||
const planAllowances: IFeature[] = [
|
||||
{ title: '1 million events included every month!' },
|
||||
{ title: '1 million events free every month!' },
|
||||
{ title: 'Unlimited tracked users' },
|
||||
{ title: 'Unlimited teammates' },
|
||||
{ title: 'Unlimited event tracking' },
|
||||
|
||||
@@ -84,9 +84,7 @@ export const Enterprise = ({ setOpen, hideActions, hideBadge, hideCalculator, cl
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p className="text-blue font-semibold mb-0 text-[14px]">
|
||||
First 1 million events included every month
|
||||
</p>
|
||||
<p className="text-blue font-semibold mb-0 text-[14px]">First 1 million events free every month</p>
|
||||
</div>
|
||||
<p className="text-[13px] text-black/50 mb-2">Self-Serve benefits plus...</p>
|
||||
<ul className="list-none p-0 m-0 grid gap-y-3 mb-6">
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user