open-taffeta
open-taffeta copied to clipboard
Raspberry Pi-hosted website controlling access to a building
open-taffeta 
Raspberry Pi-hosted website controlling access to a building
The mobile App interfacing to this backend is hosted here.
Rust installation
Install Rust
curl https://sh.rustup.rs -sSf | sh
Select the custom setup and choose the nightly compiler (Rocket does not yet run on stable, see Caveats).
If you have already Rust installed (stable or beta), simply install the additional toolchain:
$ rustup toolchain install nightly
$ rustup override set nightly
Install sources (in case you want to use linting tools like racer or RLS):
rustup component add rust-src
Additional libraries
Install libssl-dev to compile OpenSSL, libmysqlclient-dev to install diesel-cli.
Additional tooling for this project
Install cargo-edit (to get cargo add superpowers) and cargo-deb.
Install the ORM (Diesel) cli:
cargo install diesel_cli --no-default-features --features sqlite
Performs DB setup and migrations
$ sh env.sh <ROCKET_ENV> (dev, staging, production)
$ diesel setup
$ diesel migration generate create_users
Write the SQL to create migrations (up.sql and down.sql)
Run both migrations to check if they are ok:
diesel migration run
Running tests
Integration tests need the server running, so first launch cargo run in a shell and cargo test --all in another one. Run one single test with ex. cargo test test_list_users or to run an entire directory of tests with ex. cargo test --test test_users.
To run test sequencially instead of parallelized (by default), use:
RUST_TEST_THREADS=1 cargo test
or
cargo test -- --test-threads=1
Running the server
cargo run
with different logging enabled:
Logging levels:
Application and every (!) library (don't do this):
RUST_LOG=debug cargo run
Whole Open-Taffeta application:
RUST_LOG=open_taffeta_lib=debug cargo run
Whole Open-Taffeta and Rocket INFO:
RUST_LOG=rocket::rocket=INFO,open_taffeta_lib=debug cargo run
DB module only:
RUST_LOG=open_taffeta_lib::db=debug cargo run
Deployment instructions
Install Rust nightly
$ curl https://sh.rustup.rs -sSf | sh
$ rustup toolchain install nightly
$ rustup override set nightly
$ cargo install diesel_cli
Get latest release package
https://github.com/apiraino/open-taffeta/releases/dpkg -i open-taffeta_x.y.z_amd64.deb- Configure
.env_devwith buzzer endpoint $ diesel setupsudo systemctl start open-taffeta
Testing the endpoint
curl "http://localhost:8000" -H "Content-Type: application/json"
The response should look like this JSON:
[{
"email": "[email protected]",
"id": 1,
"password": "123456",
"username": "apiraino"
}, {
"email": "[email protected]",
"id": 2,
"password": "654321",
"username": "kkom"
}]
As a Docker container
-
Dockerfile: recipe to build the image -
docker-build.sh: script to rebuild the image (~1.7gb currently, working on making it thinner) -
docker-run.sh: script to tun locally the container for test -
docker-compose -f docker-compose.yml up: raise the container using docker compose (adviced)
Endpoints
See Wiki
Caveats
Keeping track of past and current issues, not related to the codebase but to external Rust tooling.
See Wiki.