## Bug description

The SITE_ENV variable, which is quite useful for PostHog to function properly, is not mentioned in any of the deployment guides and only alluded to in the [Configuring Email](https://posthog.com/docs/configuring-posthog/email) page.

Apparently upgrading from one version of posthog to another broke some links in invite e-mails. I'm not sure, but I assume the e-mail sending code went into an async task, and as of such the URL couldn't be taken from `request` anymore, but reverted to `SITE_URL` that was unset. The e-mail config docs say to set this variable, but it might be easy to skip. Not sure.

## Expected behavior

I'd expect the site to give me a warning if I'm visiting `https://posthog.mysite.com/` while the `SITE_URL` variable is set to `http://localhost:8000/` or even `https://posthog.othersite.com/`. 

In an ideal world, I would see a warning like "You're browsing posthog from https://posthog.newsite.com/ yet your SITE_URL variable is set to https://posthog.oldurl.com/. Would you like to update it?" and a button to update it directly. Alternatively it would send me to a page on the docs that would describe the situation.

## How to reproduce

1. Install PostHog.
2. Either use a webhook or setup e-mail and invite an user (but forget to update SITE_URL)
3. Be confused as to why the link doesn't work.

## Environment

- [ ] PostHog Cloud
- [ ] self-hosted PostHog, version/commit: _please provide_

## Additional context

Was raised in the users' slack.

#### *Thank you* for your bug report – we love squashing them!

posthog/views.py
base_handler = base_login_required(view)
    @wraps(view)
    def handler(request, *args, **kwargs):
        if not User.objects.exists():
            return redirect("/preflight")
        elif not request.user.is_authenticated and settings.AUTO_LOGIN:
            user = User.objects.first()
            login(request, user, backend="django.contrib.auth.backends.ModelBackend")
        return base_handler(request, *args, **kwargs)
    return handler
def health(request):
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
    plan = executor.migration_plan(executor.loader.graph.leaf_nodes())
    status = 503 if plan else 200
    if status == 503:
        err = Exception("Migrations are not up to date. If this continues migrations have failed")
        sentry_sdk.capture_exception(err)
        return HttpResponse("Migrations are not up to date", status=status, content_type="text/plain")
    if status == 200:
        return HttpResponse("ok", status=status, content_type="text/plain")
def stats(request):
    stats_response: Dict[str, Union[int, str]] = {}
    stats_response["worker_heartbeat"] = get_celery_heartbeat()
    return JsonResponse(stats_response)
@never_cache
@login_required
def system_status(request):