Release selfhosted (#341)

* Optimize Dockerfile

* Update selfhosting documentation

* Remove unnecessary files

* Remove internal config stuff

* Update config

* WIP

* Use BASE_URL instead of HOST and SCHEME

* Add port to endpoint url config

* Make config/config.exs on par with config/releases.exs

* Add changelog entry

* Document configuration change
This commit is contained in:
Uku Taht 2020-10-05 15:01:54 +03:00 committed by GitHub
parent 431c02ad58
commit ead4a7d560
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 61 additions and 484 deletions

View File

@ -8,3 +8,8 @@ All notable changes to this project will be documented in this file.
### Changed
- Replace configuration parameters `CLICKHOUSE_DATABASE_{HOST,NAME,USER,PASSWORD}` with a single `CLICKHOUSE_DATABASE_URL` [plausible/analytics#317](https://github.com/plausible/analytics/pull/317)
- Disable subscriptions by default
- Remove `CLICKHOUSE_DATABASE_POOLSIZE`, `DATABASE_POOLSIZE` and `DATABASE_TLS_ENABLED` parameters. Use query parameters in `CLICKHOUSE_DATABASE_URL` and `DATABASE_URL` instead.
- Remove `HOST` and `SCHEME` parameters in favor of a single `BASE_URL` parameter.
- Make `Bamboo.SMTPAdapter` the default as opposed to `Bamboo.PostmarkAdapter`
- Disable subscription flow by default

View File

@ -37,11 +37,6 @@ RUN set -x \
&& gosu --version \
&& gosu nobody true
COPY config ./config
COPY assets ./assets
COPY tracker ./tracker
COPY priv ./priv
COPY lib ./lib
COPY mix.exs ./
COPY mix.lock ./
RUN mix local.hex --force && \
@ -49,10 +44,20 @@ RUN mix local.hex --force && \
mix deps.get --only prod && \
mix deps.compile
COPY assets/package.json assets/package-lock.json ./assets/
COPY tracker/package.json tracker/package-lock.json ./tracker/
RUN npm audit fix --prefix ./assets && \
npm install --prefix ./assets && \
npm run deploy --prefix ./assets && \
npm install --prefix ./tracker && \
npm install --prefix ./trackerc
COPY assets ./assets
COPY tracker ./tracker
COPY config ./config
COPY priv ./priv
COPY lib ./lib
RUN npm run deploy --prefix ./assets && \
npm run deploy --prefix ./tracker && \
mix phx.digest priv/static

View File

@ -1,212 +0,0 @@
---
status: Beta
---
# Plausible Analytics
Self-hosting is possible based on the docker images and are automatically pushed into [Dockerhub](https://hub.docker.com/r/plausible/analytics) registry for all commits on `master` branch. At the moment, `latest` is the only tag on DockerHub as we haven't reached a stable release of self-hosted Plausible yet.
### Architecture
Plausible runs as a single server, backed by two databases: PostgreSQL for user data and ClickhouseDB for the stats. When you
download and run the docker image you also need to provide connection details for these two databases.
Most hosting providers will offer a managed PostgreSQL instance, but it's not as simple with Clickhouse.
You can [install Clickhouse on a VPS](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-clickhouse-on-ubuntu-18-04),
run it using their [official Docker image](https://hub.docker.com/r/yandex/clickhouse-server/), or use a managed service provided by
[Yandex Cloud](https://cloud.yandex.com/services/managed-clickhousec). [Aiven has announced](https://landing.aiven.io/2020-upcoming-aiven-services-webinar) that they are planning offer a managed ClickHouse service in the future and more hosting providers are following suit.
As of June 2020, here's the setup of the official cloud version of Plausible for reference:
* Web server: Digital Ocean Droplet w/ 1vCPU & 2GB RAM. Managed via the [official Docker app](https://marketplace.digitalocean.com/apps/docke://marketplace.digitalocean.com/apps/docker).
* User database: Digital Ocean Managed PostgreSQL w/ 1vCPU & 1GB RAM.
* Stats database: Digital Ocean Droplet w/ 6vCPU & 16GB RAM. Installed on Ubuntu 18.04 using the [official tutorial](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-clickhouse-on-ubuntu-18-04)
Total cost: $105/mo
### Building Docker image
Besides the DockerHub registry, one can build docker image from [Dockerfile](./Dockerfile).
#### Up and Running
The repo supplies with a [Docker Compose](./docker-compose.yml) file and the sample [environment variables](./plausible-variables.sample.env) , this serves as a sample for running Plausible with Docker.
- Running the setup takes care of the initial migration steps, this needs to be executed only once, on the first run.
```bash
docker-compose run --rm setup
docker-compose down
```
- After the setup, you can start plausible as --
```bash
docker-compose up -d plausible
```
after a successful startup (can take upto 5 mins), `plausible` is available at port `80`, navigate to [`http://localhost`](http://localhost).
- stopping plausible --
```bash
docker-compose down
```
- purging and removing everything --
```bash
docker-compose down
docker volume rm plausible_event-data -f
docker volume rm plausible_db-data -f
```
Note:
- #1 you need to stop plausible and restart plausible if you change the environment variables.
- #2 With docker-compose, you need to remove the existing container and rebuild if you want your changes need to be reflected:
```bash
docker rmi -f plausible_plausible:latest
docker-compose up -d plausible
```
### Non-docker building
It is possible to create a release artifact by running a release.
```elixir
MIX_ENV=prod mix release plausible
```
the release will create the pre-packed artifact at `_build/prod/rel/plausible/bin/plausible`, the release will also create a tarball at `_build/prod/` for convenience.
Note, that you have to feed in the related environment variables (see below `Environment Variables`)
## Database Migration
On the initial setup, a migration step is necessary to create database and table schemas needed for initial bootup.
Normally, this done by mix aliases like `ecto.setup` defined in the `mix.exs`. As this not available in "released" artifact, [`plausible_migration.ex`](./lib/plausible_migration.ex) facilitates this process.
The overlay [scripts](./rel/overlays) take care of these.
After the release, these are available under `_build/prod/rel/plausible` --
```bash
_build/prod/rel/plausible/createdb.sh
_build/prod/rel/plausible/init-admin.sh
_build/prod/rel/plausible/migrate.sh
_build/prod/rel/plausible/rollback.sh
_build/prod/rel/plausible/seed.sh
```
the same is available in the docker images as follows --
```bash
docker run plausible:master-12add db createdb
docker run plausible:master-12add db init-admin
docker run plausible:master-12add db migrate
docker run plausible:master-12add db rollback
docker run plausible:master-12add db seed
```
## Environment Variables
Plausible relies on the several services for operating, the expected environment variables are explaiend below.
### Server
Following are the variables that can be used to configure the availability of the server.
- HOST (*String*)
- The hosting address of the server. For running on local system, this can be set to **localhost**. In production systems, this can be your ingress host.
- SCHEME (*String*)
- The scheme of the URL, either `http` or `https`. When using a reverse proxy with https, it'll be required to set this. _defaults to `http`_
- PORT (*Number*)
- The port on which the server is available.
- SECRET_KEY_BASE (*String*)
- An internal secret key used by [Phoenix Framework](https://www.phoenixframework.org/). Follow the [instructions](https://hexdocs.pm/phoenix/Mix.Tasks.Phx.Gen.Secret.html#content) to generate one.
- ENVIRONMENT (*String*)
- The current running environment. _defaults to **prod**_
- APP_VERSION (*String*)
- The version of the app running. _defaults to current docker tag_
- DISABLE_AUTH (*Boolean String*)
- Disables authentication completely, no registration, login will be shown. _defaults to `false`_
- Note: This option is **not recommended** for production deployments.
- DISABLE_REGISTRATION
- Disables registration of new users, keep your admin credentials handy ;) _defaults to `false`_
- DISABLE_SUBSCRIPTION
- Disables changing of subscription and removes the trial notice banner (use with caution!) _defaults to `false`_
### Default User Generation
For self-hosting, a default user can be generated using the `db init-admin` command. To be noted that, a default user is a user whose trial period expires in 100 Years ;).
It is *highly* recommended that you configure these parameters.
- ADMIN_USER_NAME
- The default ("admin") username. _if not provided, one will be generated for you_
- ADMIN_USER_EMAIL
- The default ("admin") user email. _if not provided, one will be generated for you_
- ADMIN_USER_PWD
- The default ("admin") user password. _if not provided, one will be generated for you_
### Mailer/SMTP Setup
- MAILER_ADAPTER (*String*)
- The adapter used for sending out e-mails. Available: `Bamboo.PostmarkAdapter` / `Bamboo.SMTPAdapter`
- MAILER_EMAIL (*String*)
- The email id to use for as _from_ address of all communications from Plausible.
In case of `Bamboo.SMTPAdapter` you need to supply the following variables:
- SMTP_HOST_ADDR (*String*)
- The host address of your smtp server.
- SMTP_HOST_PORT (*Number*)
- The port of your smtp server.
- SMTP_USER_NAME (*String*)
- The username/email for smtp auth.
- SMTP_USER_PWD (*String*)
- The password for smtp auth.
- SMTP_HOST_SSL_ENABLED (*Boolean String*)
- If ssl is enabled for connecting to Smtp, _defaults to `false`_
- SMTP_RETRIES (*Number*)
- Number of retries to make until mailer gives up. _defaults to `2`_
- SMTP_MX_LOOKUPS_ENABLED (*Boolean String*)
- If MX lookups should be done before sending out emails. _defaults to `false`_
### Database
Plausible uses [postgresql as database](https://www.tutorialspoint.com/postgresql/postgresql_environment.htm) for storing all the user-data. Use the following variables to configure it.
- DATABASE_URL (*String*)
- The repo Url as dictated [here](https://hexdocs.pm/ecto/Ecto.Repo.html#module-urls)
- DATABASE_POOL_SIZE (*Number*)
- A default pool size for connecting to the database, defaults to *10*, a higher number is recommended for a production system.
- DATABASE_TLS_ENABLED (*Boolean String*)
- A flag that says whether to connect to the database via TLS, read [here](https://www.postgresql.org/docs/10/ssl-tcp.html)
For performance reasons, all the analytics events are stored in [clickhouse](https://clickhouse.tech/docs/en/getting-started/tutorial/):
- CLICKHOUSE_DATABASE_URL (*String*)
- Connection string for Clickhouse. The protocol is either `http` or `https` depending on your setup.
- CLICKHOUSE_DATABASE_POOLSIZE (*Number*)
- A default pool size for connecting to the database, defaults to *10*, a higher number is recommended for a production system.
### IP Geolocation
Plausible uses the GeoLite2 database created by [MaxMind](https://www.maxmind.com) for enriching analytics data with visitor countries. Their
end-user license does not make it very easy to just package the database along with an open-source product. This is why, if you want
to get country data for your analytics, you need to create an account and download their **GeoLite2 Country** database.
Once you have the database, mount it on the Plausible docker image and configure the path of the database file:
- GEOLITE2_COUNTRY_DB (*String*)
To make this as easy as possible you can use the [`maxmindinc/geoipupdate`](https://hub.docker.com/r/maxmindinc/geoipupdate) Docker image.
You just need to add your account details, mount the database in the `plausible` container and let the image update the database automatically.
To run the complete setup including geoip see [`docker-compose-geoip.yml`](docker-compose-geoip.yml#L35).
If the Geolite database is not configured, no country data will be captured.
### External Services
- [Google Client](https://developers.google.com/api-client-library)
- GOOGLE_CLIENT_ID
- GOOGLE_CLIENT_SECRET
- [Sentry](https://sentry.io/)
- SENTRY_DSN
- [Paddle](https://paddle.com/)
- PADDLE_VENDOR_AUTH_CODE
- [PostMark](https://postmarkapp.com/), only in case of `Bamboo.PostmarkAdapter` mail adapter.
- POSTMARK_API_KEY
Apart from these, there are also the following integrations
- [Twitter](https://developer.twitter.com/en/docs)
- TWITTER_CONSUMER_KEY
- TWITTER_CONSUMER_SECRET
- TWITTER_ACCESS_TOKEN
- TWITTER_ACCESS_TOKEN_SECRET
- [Slack](https://api.slack.com/messaging/webhooks)
- SLACK_WEBHOOK

View File

@ -1,5 +1,8 @@
use Mix.Config
base_url = System.get_env("BASE_URL", "http://localhost:8000")
|> URI.parse
config :plausible,
admin_user: System.get_env("ADMIN_USER_NAME", "admin"),
admin_email: System.get_env("ADMIN_USER_EMAIL", "admin@plausible.local"),
@ -22,8 +25,9 @@ config :plausible, :selfhost,
# Configures the endpoint
config :plausible, PlausibleWeb.Endpoint,
url: [
host: System.get_env("HOST", "localhost"),
scheme: System.get_env("SCHEME", "http")
host: base_url.host,
scheme: base_url.scheme,
port: base_url.port
],
http: [
port: String.to_integer(System.get_env("PORT", "8000"))
@ -77,7 +81,6 @@ config :plausible, :paddle,
config :plausible, Plausible.ClickhouseRepo,
loggers: [Ecto.LogEntry],
pool_size: String.to_integer(System.get_env("CLICKHOUSE_DATABASE_POOLSIZE", "5")),
url: System.get_env(
"CLICKHOUSE_DATABASE_URL",
"http://127.0.0.1:8123/plausible_test"
@ -85,7 +88,6 @@ config :plausible, Plausible.ClickhouseRepo,
config :plausible,
Plausible.Repo,
pool_size: String.to_integer(System.get_env("DATABASE_POOLSIZE", "10")),
timeout: 300_000,
connect_timeout: 300_000,
handshake_timeout: 300_000,
@ -93,8 +95,7 @@ config :plausible,
System.get_env(
"DATABASE_URL",
"postgres://postgres:postgres@127.0.0.1:5432/plausible_dev?currentSchema=default"
),
ssl: String.to_existing_atom(System.get_env("DATABASE_TLS_ENABLED", "false"))
)
cron_enabled = String.to_existing_atom(System.get_env("CRON_ENABLED", "false"))
@ -159,7 +160,7 @@ case mailer_adapter do
password: System.fetch_env!("SMTP_USER_PWD"),
tls: :if_available,
allowed_tls_versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"],
ssl: System.get_env("SMTP_HOST_SSL_ENABLED") || true,
ssl: System.get_env("SMTP_HOST_SSL_ENABLED") || false,
retries: System.get_env("SMTP_RETRIES") || 2,
no_mx_lookups: System.get_env("SMTP_MX_LOOKUPS_ENABLED") || true,
auth: :if_available

View File

@ -5,33 +5,25 @@ import Config
# params are made optional to facilitate smooth release
port = System.get_env("PORT") || 8000
host = System.get_env("HOST", "localhost")
scheme = System.get_env("SCHEME", "http")
base_url = System.get_env("BASE_URL", "http://localhost:8000")
|> URI.parse
secret_key_base =
System.get_env(
"SECRET_KEY_BASE",
"/NJrhNtbyCVAsTyvtk1ZYCwfm981Vpo/0XrVwjJvemDaKC/vsvBRevLwsc6u8RCg"
)
db_pool_size = String.to_integer(System.get_env("DATABASE_POOLSIZE", "10"))
secret_key_base = System.get_env("SECRET_KEY_BASE")
db_url =
System.get_env(
"DATABASE_URL",
"postgres://postgres:postgres@127.0.0.1:5432/plausible_dev"
"postgres://postgres:postgres@plausible_db:5432/plausible_db"
)
db_tls_enabled? = String.to_existing_atom(System.get_env("DATABASE_TLS_ENABLED", "false"))
admin_user = System.get_env("ADMIN_USER_NAME")
admin_email = System.get_env("ADMIN_USER_EMAIL")
admin_pwd = System.get_env("ADMIN_USER_PWD")
env = System.get_env("ENVIRONMENT", "prod")
mailer_adapter = System.get_env("MAILER_ADAPTER", "Bamboo.PostmarkAdapter")
mailer_adapter = System.get_env("MAILER_ADAPTER", "Bamboo.SMTPAdapter")
mailer_email = System.get_env("MAILER_EMAIL", "hello@plausible.local")
app_version = System.get_env("APP_VERSION", "0.0.1")
ch_db_url = System.get_env("CLICKHOUSE_DATABASE_URL", "http://localhost:8123/plausible_dev")
ch_db_pool = String.to_integer(System.get_env("CLICKHOUSE_DATABASE_POOLSIZE", "10"))
ch_db_url = System.get_env("CLICKHOUSE_DATABASE_URL", "http://plausible_events_db:8123/plausible_events_db")
### Mandatory params End
sentry_dsn = System.get_env("SENTRY_DSN")
@ -63,7 +55,7 @@ config :plausible,
config :plausible, :selfhost,
disable_authentication: disable_auth,
disable_subscription: String.to_existing_atom(System.get_env("DISABLE_SUBSCRIPTION", "false")),
disable_subscription: String.to_existing_atom(System.get_env("DISABLE_SUBSCRIPTION", "true")),
disable_registration:
if(!disable_auth,
do: String.to_existing_atom(System.get_env("DISABLE_REGISTRATION", "false")),
@ -71,10 +63,8 @@ config :plausible, :selfhost,
)
config :plausible, PlausibleWeb.Endpoint,
url: [host: host, scheme: scheme],
http: [
port: port
],
url: [host: base_url.host, scheme: base_url.scheme, port: base_url.port],
http: [port: port],
secret_key_base: secret_key_base,
cache_static_manifest: "priv/static/cache_manifest.json",
check_origin: false,
@ -84,10 +74,8 @@ config :plausible, PlausibleWeb.Endpoint,
config :plausible,
Plausible.Repo,
pool_size: db_pool_size,
url: db_url,
adapter: Ecto.Adapters.Postgres,
ssl: db_tls_enabled?
adapter: Ecto.Adapters.Postgres
config :sentry,
dsn: sentry_dsn,
@ -106,8 +94,7 @@ config :plausible, :slack, webhook: slack_hook_url
config :plausible, Plausible.ClickhouseRepo,
loggers: [Ecto.LogEntry],
url: ch_db_url,
pool_size: ch_db_pool
url: ch_db_url
case mailer_adapter do
"Bamboo.PostmarkAdapter" ->
@ -118,17 +105,16 @@ case mailer_adapter do
"Bamboo.SMTPAdapter" ->
config :plausible, Plausible.Mailer,
adapter: :"Elixir.#{mailer_adapter}",
server: System.fetch_env!("SMTP_HOST_ADDR"),
hostname: System.get_env("HOST", "localhost"),
port: System.fetch_env!("SMTP_HOST_PORT"),
username: System.fetch_env!("SMTP_USER_NAME"),
password: System.fetch_env!("SMTP_USER_PWD"),
server: System.get_env("SMTP_HOST_ADDR", "mail"),
hostname: base_url.host,
port: System.get_env("SMTP_HOST_PORT", "25"),
username: System.get_env("SMTP_USER_NAME"),
password: System.get_env("SMTP_USER_PWD"),
tls: :if_available,
allowed_tls_versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"],
ssl: System.get_env("SMTP_HOST_SSL_ENABLED") || true,
ssl: System.get_env("SMTP_HOST_SSL_ENABLED") || false,
retries: System.get_env("SMTP_RETRIES") || 2,
no_mx_lookups: System.get_env("SMTP_MX_LOOKUPS_ENABLED") || true,
auth: :always
no_mx_lookups: System.get_env("SMTP_MX_LOOKUPS_ENABLED") || true
_ ->
raise "Unknown mailer_adapter; expected SMTPAdapter or PostmarkAdapter"

View File

@ -1,97 +0,0 @@
# NOTE:
# This Docker-compose file is created as a sample and should not be used directly for production
# You can adjust the settings as-per your environment
version: "3.3"
services:
# As it says, this service is a fake smtp server which accepts SMTP connections
# the inbox is available at localhost:8025, in actuality, you need to use a proper smtp server
fake_smtp:
image: mailhog/mailhog:v1.0.0
ports:
- 1025:1025
- 8025:8025
healthcheck:
test: echo | telnet 127.0.0.1 1025
plausible_db:
image: postgres:12
command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=plausible_db
- POSTGRES_USER=postgres
ports:
- 5432:5432
plausible_events_db:
image: yandex/clickhouse-server:latest
volumes:
- event-data:/var/lib/clickhouse
ports:
- 8123:8123
# optional, if you want to setup a geoip database and let it update automatically
# this requires an account at maxmind.com (https://www.maxmind.com/en/geolite2/signup)
geoip:
image: maxmindinc/geoipupdate
ports:
- 1080:1080
environment:
- GEOIPUPDATE_ACCOUNT_ID=<your-account-id>
- GEOIPUPDATE_LICENSE_KEY=<your-license-key>
- GEOIPUPDATE_EDITION_IDS=GeoLite2-Country
# update every 7 days
- GEOIPUPDATE_FREQUENCY=168
volumes:
- geoip:/usr/share/GeoIP
plausible:
build:
context: .
dockerfile: ./Dockerfile
command: sh -c "sleep 10 && /entrypoint.sh db migrate && /entrypoint.sh run"
depends_on:
- plausible_db
- plausible_events_db
- geoip
- fake_smtp
ports:
- 80:8080
links:
- plausible_db
- plausible_events_db
- geoip
- fake_smtp
env_file:
- plausible-variables.sample.env
# only if you use the geioip container
environment:
- GEOLITE2_COUNTRY_DB=/geoip/GeoLite2-Country.mmdb
volumes:
- geoip:/geoip:ro
setup:
build:
context: .
dockerfile: ./Dockerfile
command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh db init-admin"
depends_on:
- plausible_db
- plausible_events_db
- geoip
links:
- plausible_db
- plausible_events_db
- geoip
env_file:
- plausible-variables.sample.env
volumes:
db-data:
driver: local
event-data:
driver: local
geoip:
driver: local

View File

@ -1,76 +0,0 @@
# NOTE:
# This Docker-compose file is created as a sample and should not be used directly for production
# You can adjust the settings as-per your environment
version: "3.3"
services:
# As it says, this service is a fake smtp server which accepts SMTP connections
# the inbox is available at localhost:8025, in actuality, you need to use a proper smtp server
fake_smtp:
image: mailhog/mailhog:v1.0.0
ports:
- 1025:1025
- 8025:8025
healthcheck:
test: echo | telnet 127.0.0.1 1025
plausible_db:
image: postgres:12
command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=plausible_db
- POSTGRES_USER=postgres
ports:
- 5432:5432
plausible_events_db:
image: yandex/clickhouse-server:latest
volumes:
- event-data:/var/lib/clickhouse
ports:
- 8123:8123
plausible:
build:
context: .
dockerfile: ./Dockerfile
command: sh -c "sleep 10 && /entrypoint.sh db migrate && /entrypoint.sh run"
depends_on:
- plausible_db
- plausible_events_db
- fake_smtp
ports:
- 80:8080
links:
- plausible_db
- plausible_events_db
- fake_smtp
env_file:
- plausible-variables.sample.env
environment:
- GEOLITE2_COUNTRY_DB=/geoip/GeoLite2-Country.mmdb
setup:
build:
context: .
dockerfile: ./Dockerfile
command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh db init-admin"
depends_on:
- plausible_db
- plausible_events_db
links:
- plausible_db
- plausible_events_db
env_file:
- plausible-variables.sample.env
volumes:
db-data:
driver: local
event-data:
driver: local

View File

@ -148,6 +148,6 @@ defmodule Plausible.Google.Api do
end
defp redirect_uri() do
PlausibleWeb.Endpoint.clean_url() <> "/auth/google/callback"
PlausibleWeb.Endpoint.url() <> "/auth/google/callback"
end
end

View File

@ -50,8 +50,11 @@ defmodule Plausible.Release do
end
def createdb do
prepare()
do_create_db()
:ok = Application.load(@app)
for repo <- repos() do
:ok = ensure_repo_created(repo)
end
IO.puts("Creation of Db successful!")
end
@ -116,12 +119,6 @@ defmodule Plausible.Release do
{:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true))
end
defp do_create_db do
for repo <- repos() do
:ok = ensure_repo_created(repo)
end
end
defp ensure_repo_created(repo) do
IO.puts("create #{inspect(repo)} database if it doesn't exist")

View File

@ -31,7 +31,7 @@ defmodule PlausibleWeb.AuthController do
case Ecto.Changeset.apply_action(user, :insert) do
{:ok, user} ->
token = Auth.Token.sign_activation(user.name, user.email)
url = PlausibleWeb.Endpoint.clean_url() <> "/claim-activation?token=#{token}"
url = PlausibleWeb.Endpoint.url() <> "/claim-activation?token=#{token}"
Logger.info(url)
email_template = PlausibleWeb.Email.activation_email(user, url)
Plausible.Mailer.send_email(email_template)
@ -101,7 +101,7 @@ defmodule PlausibleWeb.AuthController do
if user do
token = Auth.Token.sign_password_reset(email)
url = PlausibleWeb.Endpoint.clean_url() <> "/password/reset?token=#{token}"
url = PlausibleWeb.Endpoint.url() <> "/password/reset?token=#{token}"
Logger.debug("PASSWORD RESET LINK: " <> url)
email_template = PlausibleWeb.Email.password_reset_email(email, url)
Plausible.Mailer.deliver_now(email_template)

View File

@ -50,6 +50,6 @@ defmodule PlausibleWeb.TrackerController do
end
defp base_url() do
PlausibleWeb.Endpoint.clean_url()
PlausibleWeb.Endpoint.url()
end
end

View File

@ -41,15 +41,4 @@ defmodule PlausibleWeb.Endpoint do
plug CORSPlug
plug PlausibleWeb.Router
def clean_url() do
url = PlausibleWeb.Endpoint.url()
case Application.get_env(:plausible, :environment) do
# do not truncate the port in case of dev or test environment
env when env in ["dev", "test"] -> url
# in most deployments, there's a layer above the above
_ -> URI.parse(url) |> Map.put(:port, nil) |> URI.to_string()
end
end
end

View File

@ -33,7 +33,7 @@ defmodule PlausibleWeb.AuthView do
end
def plausible_url do
PlausibleWeb.Endpoint.clean_url()
PlausibleWeb.Endpoint.url()
end
def subscription_quota(subscription) do

View File

@ -10,7 +10,7 @@ defmodule PlausibleWeb.BillingView do
end
def plausible_url do
PlausibleWeb.Endpoint.clean_url()
PlausibleWeb.Endpoint.url()
end
def present_date(date) do

View File

@ -6,7 +6,7 @@ defmodule PlausibleWeb.EmailView do
end
def plausible_url do
PlausibleWeb.Endpoint.clean_url()
PlausibleWeb.Endpoint.url()
end
def base_domain() do

View File

@ -10,7 +10,7 @@ defmodule PlausibleWeb.LayoutView do
end
def plausible_url do
PlausibleWeb.Endpoint.clean_url()
PlausibleWeb.Endpoint.url()
end
def home_dest(conn) do

View File

@ -10,6 +10,6 @@ defmodule PlausibleWeb.PageView do
end
def plausible_url do
PlausibleWeb.Endpoint.clean_url()
PlausibleWeb.Endpoint.url()
end
end

View File

@ -6,7 +6,7 @@ defmodule PlausibleWeb.SiteView do
end
def plausible_url do
PlausibleWeb.Endpoint.clean_url()
PlausibleWeb.Endpoint.url()
end
def base_domain() do

View File

@ -10,7 +10,7 @@ defmodule PlausibleWeb.StatsView do
end
def plausible_url do
PlausibleWeb.Endpoint.clean_url()
PlausibleWeb.Endpoint.url()
end
def large_number_format(n) do

View File

@ -11,7 +11,7 @@ defmodule Plausible.Workers.SendEmailReport do
for email <- site.weekly_report.recipients do
unsubscribe_link =
PlausibleWeb.Endpoint.clean_url() <>
PlausibleWeb.Endpoint.url() <>
"/sites/#{URI.encode_www_form(site.domain)}/weekly-report/unsubscribe?email=#{email}"
send_report(email, site, "Weekly", unsubscribe_link, query)
@ -37,7 +37,7 @@ defmodule Plausible.Workers.SendEmailReport do
for email <- site.monthly_report.recipients do
unsubscribe_link =
PlausibleWeb.Endpoint.clean_url() <>
PlausibleWeb.Endpoint.url() <>
"/sites/#{URI.encode_www_form(site.domain)}/monthly-report/unsubscribe?email=#{email}"
send_report(email, site, Timex.format!(last_month, "{Mfull}"), unsubscribe_link, query)

View File

@ -1,21 +0,0 @@
ENVIRONMENT=production
PORT=8080
SECRET_KEY_BASE=iYb1mP5cnmY+gUxo7C/h6XMigossPhzwd8/ic6LFnQ9Y58Fl1xduSWaPq0fHDdbn
SIGNING_SALT=PL/THF0VMOzuv1bOcldjDzYFBLryvXNs
HOST=localhost
DATABASE_URL=postgres://postgres:postgres@plausible_db:5432/plausible_db
DATABASE_TLS_ENABLED=false
CLICKHOUSE_DATABASE_URL=http://default:@plausible_events_db/plausible_events_db
ADMIN_USER_NAME=admin
ADMIN_USER_EMAIL=admin@plausible.local
ADMIN_USER_PWD=admin@1234!
APP_VERSION=test
MAILER_ADAPTER=Bamboo.SMTPAdapter
SMTP_HOST_ADDR=fakesmtp_server
SMTP_HOST_PORT=1025
SMTP_USER_NAME=fakeuser@plausible.local
SMTP_USER_PWD=password
SMTP_HOST_SSL_ENABLED=false
SMTP_MX_LOOKUPS_ENABLED=false
DISABLE_AUTH=false
DISABLE_REGISTRATION=false