2.3 KiB
doorman-api
The backend API for Doorman. It is resposible for managing Door state, configuring Door options and sending Discord Notifications.
dependency services
The Doorman API has hard dependencies:
- DynamoDB
- Discord (notify, edit, and onboarding)
- Cloudflare (only in Production)
- Twilio Functions (deployed compute in staging / prod)
It has some soft dependencies on other services, mostly self hosted monitoring solutions:
- Pushgateway (prometheus metrics)
- Loki (logs)
running locally
First install the necessary dependencies bun install.
When running locally, Doorman API will use DynamoDBLocal
You will likely need java installed on your machine and in your path in order for DynamoDBLocal to work.
To run the dev server: bun run start:local-db
On startup, the main "doorman" DDB table is created and seeded with the a test Door.
Note: DynamoDBLocal is configured to use in memory store only, so any changes will not persist when you exit the command.
The API will run on port 8080 and DynamoDBLocal will use port 5000.
You can verify the seeding worked by calling http://localhost:8080/api/door/info?door=test
If you need to test Discord or against real DDB, you should set those env vars in your environment in a seperate .env file and source it before running
troubleshooting
Port 5000 is already in use after restarting server
When exiting bun run start:local-db, we try to close the previous DDB local run, though this is best efforts it may have failed to close the child process. You can manually find and kill the forked process as follows:
ps -ef | grep DynamoDBLocal
martin 243091 243061 93 17:57 pts/4 00:00:13 java -Xrs -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -port 5000 -inMemory
kill 243091
or if you want to kill all java processes (likely only this DDB local thing)
kill $(pidof java)
deployment
this project deploys the UI and API to twilio functions https://doorman-6741-prod.twil.io
It uses DDB for the backend
After the twilio functions I have setup a cloudflare worker at https://doorman.chromart.cc to proxy the requests to the twilio lambda
The cloudflare worker just proxies requests so the endpoint is a bit nicer