.. | ||
.cargo | ||
debian | ||
docs | ||
src | ||
static | ||
templates | ||
.gitignore | ||
.travis.yml | ||
Cargo.toml | ||
README.md | ||
Rocket.toml |
peach-web
Web Interface for PeachCloud
peach-web provides a web interface for the PeachCloud device. It serves static assets and exposes a JSON API for programmatic interactions.
Initial development is focused on administration of the device itself, beginning with networking functionality, with SSB-related administration to be integrated at a later stage.
The peach-web stack currently consists of Rocket (Rust web framework), Tera (Rust template engine), HTML, CSS and JavaScript.
Note: This is a work-in-progress.
Setup
Clone the peach-workspace
repo:
git clone https://git.coopcloud.tech/PeachCloud/peach-workspace
Move into the repo and compile:
cd peach-workspace/peach-web
cargo build --release
Run the tests:
cargo test
Move back to the peach-workspace
directory:
cd ..
Run the binary:
./target/release/peach-web
Note: Networking functionality requires peach-network microservice to be running.
Environment
The web application deployment mode is configured with the ROCKET_ENV
environment variable:
export ROCKET_ENV=stage
Other deployment modes are dev
and prod
. Read the Rocket Environment Configurations docs for further information.
Logging is made available with env_logger
:
export RUST_LOG=info
Other logging levels include debug
, warn
and error
.
Debian Packaging
A systemd
service file and Debian maintainer scripts are included in the debian
directory, allowing peach-web
to be easily bundled as a Debian package (.deb
). The cargo-deb
crate can be used to achieve this.
Install cargo-deb
:
cargo install cargo-deb
Move into the repo:
cd peach-web
Build the package:
cargo deb
The output will be written to target/debian/peach-web_0.3.0_arm64.deb
(or similar).
Install the package as follows:
sudo dpkg -i target/debian/peach-web_0.3.0_arm64.deb
The service will be automatically enabled and started.
Uninstall the service:
sudo apt-get remove peach-web
Remove configuration files (not removed with apt-get remove
):
sudo apt-get purge peach-web
Design
peach-web
is built on the Rocket webserver and Tera templating engine. It presents a web interface for interacting with the device. HTML is rendered server-side. Request handlers call JSON-RPC microservices and serve HTML and assets. A JSON API is exposed for remote calls and dynamic client-side content updates (via plain JavaScript following unobstructive design principles). Each Tera template is passed a context object. In the case of Rust, this object is a struct
and must implement Serialize
. The fields of the context object are available in the context of the template to be rendered.
Licensing
AGPL-3.0