2.5 KiB
Contributing
Development setup
The easiest way to get up and running is to install and use Docker for running both Postgres and Clickhouse.
Make sure Docker, Elixir, Erlang and Node.js are all installed on your development machine. The .tool-versions
file is available to use with asdf or similar tools.
Start the environment:
- Run both
make postgres
andmake clickhouse
.- If you are using Apple Silicon (any of the M1 or similar SoC variants),
make clickhouse-arm
offers a development-only substitute that will work on your local machine. Not intended for production.
- If you are using Apple Silicon (any of the M1 or similar SoC variants),
- You can set up everything with
make install
, alternatively run each command separately:- Run
mix deps.get
. This will download the required Elixir dependencies. - Run
mix ecto.create
. This will create the required databases in both Postgres and Clickhouse. - Run
mix ecto.migrate
to build the database schema. - Run
npm ci --prefix assets
to install the required node dependencies. - Run
mix download_country_database
to fetch geolocation database
- Run
- Run
make server
ormix phx.server
to start the Phoenix server. - The system is now available on
localhost:8000
.
Creating an account
- Navigate to
http://localhost:8000/register
and fill in the form. - Fill in the rest of the forms and for the domain use
dummy.site
- Skip the JS snippet and click start collecting data.
- Run
make dummy_event
from the terminal to generate a fake pageview event for the dummy site. - You should now be all set!
Stopping Docker containers
- Stop and remove the Postgres container with
make postgres-stop
. - Stop and remove the Clickhouse container with
make clickhouse-stop
.
Volumes are preserved. You'll find that the Postgres and Clickhouse state are retained when you bring them up again the next time: no need to re-register and so on.
Note: Since we are deleting the containers, be careful when deleting volumes with docker volume prune
. You might accidentally delete the database and would have to go through re-registration process.
Pre-commit hooks
pre-commit
requires Python to be available locally and covers Elixir, JavaScript, and CSS. Set up with pip install --user pre-commit
followed by pre-commit install
. Conversely, if the prompts are far too bothersome, remove with pre-commit uninstall
.