Installation

IntegrateDB is an Elixir application based on Phoenix and Broadway.

You can install it using:

Postgres (prerequisite)

IntegrateDB requires that you are running a PostgreSQL database, version >= 10.0.

IntegrateDB only supports Postgres. It does not support other RDBMS systems like MySQL or SQL Server. It may possibly support other Postgres compatible databases but only if they support logical replication and schemas.

Enable logical replication

Your postgres must run with logical replication enabled. This can be enabled manually:

ALTER SYSTEM SET wal_level = 'logical'; # and then restart the db

Or by running the mix enable_logical_replication or mix db.setup tasks provided by IntegrateDB.

Provide necessary capabilities

Currently (this is a Known Issue) IntegrateDB needs to start with SUPERUSER permission in order to create a publication for all tables. This is a bug and will be fixed but for now, start with:

CREATE USER integratedb WITH SUPERUSER LOGIN PASSWORD '...';

Once you've run the initial migrations, you can downgrade to:

ALTER ROLE integratedb NOSUPERUSER CREATEROLE REPLICATION;

Install using Docker

From the repo root, build the docker image:

docker build -t integratedb .

You can then push or run locally with e.g.:

docker run -it \
    -e HOST="example.com" \
    -e PORT="4000" \
    -e DATABASE_URL="postgres//user:pwd@host:port/db" \
    -e SECRET_KEY_BASE="..." \
    integratedb:latest

You can see the required environment variables in config/runtime.exs. Note that the application is configured to enforce SSL / HSTS but is not configured to terminate SSL. As a result, it expects to be deployed behind a reverse proxy that is terminating the TLS (like Nginx, or a cluster ingress).

Install using mix release

As an Elixir app, you can build a standalone binary using mix release. The Dockerfile is a good example but in short, assuming your build machine has the same architecture as your deployment target:

MIX_ENV=prod mix do deps.get, deps.compile, compile, release
./_build/prod/rel/integratedb up

Install locally for development

See shell.nix.

Once you have a working environment, install the Elixir dependencies and ensure your Postgres has logical replication enabled (requires a db restart):

mix deps.get
mix db.setup

Run the migrations:

mix db.migrate

Run the tests:

mix test

Run the app:

mix phx.server

Next steps

See the Usage guide.