draft is a project designed to help test IPA at scale. It contains two components:
Instructions for AWS Linux 2023
<ssh_key.pem>
) and add it to ~/.ssh
.~/.ssh/config
file:
Host ipa
Hostname <subdomain-name-for-helper>
User ec2-user
IdentityFile ~/.ssh/<ssh_key.pem>
draft/sidecar/ansible/inventory.ini
file to only include a single host. (Unless you are running all 4 servers.)ansible-playbook -i sidecar/ansible/inventory.ini sidecar/ansible/provision.yaml
To deploy new changes in draft, run: ansible-playbook -i sidecar/ansible/inventory.ini sidecar/ansible/deploy.yaml
You will need a domain name and TLS certificates for the sidecar to properly run over HTTPS. The following instructions assume your domain is example.com
, please replace with the domain you'd like to use. You will need to create two subdomains, sidecar.example.com
and helper.example.com
. (Note, you could also use a subdomain as your base domain, e.g., test.example.com
with two subdomains of that: sidecar.test.example.com
and helper.test.example.com
.)
sidecar.example.com
and helper.example.com
pointing to a server you control.certbot
: pip install certbot
sudo .venv/bin/certbot certonly --standalone -m cert-renewal@example.com -d "sidecar.example.com,helper.example.com"
.venv/bin/certbot
as sudo
does not operate in the virtualenv.For this stage, you'll need to know a few things about the other parties involved:
Once you know these:
mkdir config
cp local_dev/config/network.toml config/.
helper0.draft.test
and sidecar0.draft.test
with the respective domains for party with identity=0.sudo ln -s /etc/letsencrypt/live/sidecar.example.com/fullchain.pem config/cert.pem
and sudo ln -s /etc/letsencrypt/live/sidecar.example.com/privkey.pem key.pem
ipa
with cargo build --bin helper --features="web-app real-world-infra compact-gate stall-detection multi-threading" --no-default-features --release
target/release/helper keygen --name localhost --tls-key h1.key --tls-cert h1.pem --mk-public-key h1_mk.pub --mk-private-key h1_mk.key
(replace h1 with for each helper)network.toml
config/pub
(all helpers need all helper public keys).config
.draft start-helper-sidecar --identity <identity> --helper_domain helper.example.com --sidecar_domain sidecar.example.com --config_path config
This will start the sidecar in the background. To confirm, visit sidecar.example.com/status
.
draft
provides a fully functional local development setup to work on both the frontend web interface and the sidecar.
If draft
and the other prerequisites are already installed, run:
draft start-local-dev
You can follow the logs with:
draft follow-local-dev-logs
And you can view the front end at https://draft.test.
Requirements:
brew install python3 node supabase/tap/supabase traefik
Docker
There are multiple options to run Docker locally. One such option is colima.
brew install docker
brew install colima
ln -sf ~/.colima/docker.sock /var/run/docker.sock
The ln
at the end is because Supabase requires interacting with the local Docker API. See this Supabase issue and this colima issue. This likely requires sudo
.
Make sure the repo is cloned, and you're working in the root directory of the repo:
git clone https://github.com/private-attribution/draft.git
cd draft
Start colima and supabase:
colima start
supabase start --workdir server
In the output, you'll find an ANON_KEY
. Create the file server/.env.development.local
and add:
NEXT_PUBLIC_SUPABASE_ANON_KEY="<ANON_KEY>"
Add local draft.test domain to /etc/hosts
:
echo "#draft local domains\n127.0.0.1 draft.test\n127.0.0.1 sidecar0.draft.test\n127.0.0.1 sidecar1.draft.test\n127.0.0.1 sidecar2.draft.test\n127.0.0.1 sidecar3.draft.test \n127.0.0.1 helper1.draft.test\n127.0.0.1 helper2.draft.test\n127.0.0.1 helper3.draft.test" | sudo tee -a /etc/hosts
make local certs
install mkcert with
brew install mkcert
make the cert with
mkcert -cert-file "local_dev/config/cert.pem" -key-file "local_dev/config/key.pem" "draft.test" "*.draft.test"
If you get a warning about the cert not being installed (i.e., it's the first time you've used mkcert), make sure it's installed with the following command. This will likely require a browser restart.
mkcert -install
python -m venv .venv
source .venv/bin/activate
pip install --editable .
Github is set up to run pre-commit hooks specified in .pre-commit-config.yaml. If you want to use it locally, in the virtual environment, run pre-commit install
.
We check in self-signed certs that are only for local development (and are not secure! They are in a public repo!)
They will periodically expire. You can regenerate them with a compiled helper binary:
target/release/helper keygen --name helper1.draft.test --tls-key local_dev/config/h1.key --tls-cert local_dev/config/pub/h1.pem --mk-public-key local_dev/config/pub/h1_mk.pub --mk-private-key local_dev/config/h1_mk.key
target/release/helper keygen --name helper2.draft.test --tls-key local_dev/config/h2.key --tls-cert local_dev/config/pub/h2.pem --mk-public-key local_dev/config/pub/h2_mk.pub --mk-private-key local_dev/config/h2_mk.key
target/release/helper keygen --name helper3.draft.test --tls-key local_dev/config/h3.key --tls-cert local_dev/config/pub/h3.pem --mk-public-key local_dev/config/pub/h3_mk.pub --mk-private-key local_dev/config/h3_mk.key
The public content will also need to be pasted into local_dev/config/network.toml
for each helper.
By default, local authentication is turned off (technically, you're automatically logged in as a demo user.) If you want to test Github authentication locally, you'll need to create a new application for development. Visit https://github.com/settings/apps/new to create a new Github app using the following parameters:
Once you have created the app, you'll need to update server/.env.development.local
to include both the CLIENT_ID
and a generated CLIENT_SECRET
, and set the BYPASS_AUTH
flag.
SUPABASE_AUTH_GITHUB_CLIENT_ID="<CLIENT_ID>"
SUPABASE_AUTH_GITHUB_SECRET="<CLIENT_SECRET>"
BYPASS_AUTH=false