View Source Running Lightning Locally
This guide provides instructions for running Lightning locally, either by installing dependencies on your machine or using Docker.
By Installing Dependencies
Setup
Postgres
Requires postgres 15
.
When running in dev
mode, the app will use the following credentials to authenticate:
PORT
:5432
USER
:postgres
PASSWORD
:postgres
DATABASE
:lightning_dev
This can however be overriden by specifying a DATABASE_URL
env var.
e.g. DATABASE_URL=postgresql://postgres:postgres@localhost:5432/lightning_dev
We recommend that you use docker for running postgres as you'll get an exact version that we use:
docker volume create lightning-postgres-data
docker create \
--name lightning-postgres \
--mount source=lightning-postgres-data,target=/var/lib/postgresql/data \
--publish 5432:5432 \
-e POSTGRES_PASSWORD=postgres \
postgres:15.3-alpine
docker start lightning-postgres
Elixir, NodeJS
We use asdf to configure our local
environments. Included in the repo is a .tool-versions
file that is read by
asdf in order to dynamically make the specified versions of Elixir, Erlang and NodeJs
available. You'll need asdf plugins for
Erlang,
NodeJs
Elixir and
k6.
Libsodium
We use libsodium for encoding values as required
by the
Github API.
You'll need to install libsodium
in order for the application to compile.
For Mac Users:
brew install libsodium
For Debian Users:
sudo apt-get install libsodium-dev
You can find more on how to install libsodium here
Compilation and Assets
asdf install # Install language versions
mix local.hex
mix deps.get
mix local.rebar --force
[[ $(uname -m) == 'arm64' ]] && CPATH=/opt/homebrew/include LIBRARY_PATH=/opt/homebrew/lib mix deps.compile enacl # Force compile enacl if on M1
[[ $(uname -m) == 'arm64' ]] && mix compile.rambo # Force compile rambo if on M1
mix lightning.install_runtime
mix lightning.install_schemas
mix lightning.install_adaptor_icons
mix ecto.create
mix ecto.migrate
npm install --prefix assets
In case you encounter errors running any of these commands, see the troubleshooting guide for known errors.
Running the App
To start the lightning server:
mix phx.server
Once the server has started, head to localhost:4000
in your browser.
By default, the worker
is started when run mix phx.server
in dev
mode. In case you
don't want to have your worker started in dev
, set RTM=false
:
RTM=false mix phx.server
Using Docker
There is an existing docker-compose.yaml
file in the project's root which has all the
services required. To start your services:
docker compose up
There 2 docker files in the root, Dockerfile
builds the app in prod
mode while Dockerfile-dev
runs it in dev
mode. It is important to note that mix commands
do not work in the prod
images.
For exmaple, to run migrations in dev
mode you run:
docker compose run --rm web mix ecto.migrate
While in prod
mode:
docker compose run --rm web /app/bin/lightning eval "Lightning.Release.migrate()"
Configuring the Worker
By default, lightning starts the worker
when running in dev
. This can also be configured using
RTM
env var. In case you don't want the hassle of configuring the worker in dev
, you can just
remove/comment out the worker
service from the docker-compose.yaml
file because lightning will
start it for you.
Learn more about configuring workers
Problems with Apple Silicon
You might run into some errors when running the docker containers on Apple Silicon. We have documented the known ones here