2026-10-12 07:51:29 +02:00
2023-08-18 12:22:23 +02:00

Rezervovator Logo

Rezervovator

Simple application for booking sport or service facilities.

Building project

You will need cargo-leptos tool:

cargo install cargo-leptos

The wasm-bindgen command line tool must be exactly the same version as the wasm-bindgen dependency pinned in Cargo.toml:

cargo install -f wasm-bindgen-cli --version 0.2.129

Running project

cargo leptos watch

Configuration

The server reads config.toml from the working directory, or from the path given with -c. Use config_sample.toml as a template.

The file contains the database and SMTP passwords and the session key. Keep it outside the site directory (target/site): everything in there is served as static files. The server refuses to start when the config file is inside it.

Database connections

Each instance opens database connections on demand, up to max_connections in the [database] section of the config (10 by default), and closes the ones that stay idle. When many instances share one PostgreSQL server, the sum of their limits must stay below the server's own max_connections (100 by default): lower the limit per instance, raise it on the server, or put PgBouncer in front of PostgreSQL.

First admin account

On the first start, when the database has no admin account, the server creates the user admin. Its password must be given, at least 8 characters, in one of these ways:

  • the REZERVATOR_ADMIN_PASSWORD environment variable, or
  • initial_password in the [admin] section of the config.

Without it the server refuses to start. Once an admin account exists the value is not used any more and should be removed.

Older versions created admin with the password admin. The server logs a warning on start while that password is still in use.

Data directory

Files created while the application runs (the uploaded banner and the styles generated for it) are stored in the data directory and served under /data. By default it is data in the working directory; change it with data_dir in the [storage] section of the config. Keep this directory when you upgrade the application and include it in backups. Never put the config file into it.

When upgrading from a version that kept these files in target/site/data, move the banner image to the data directory. The style for it is generated again on start.

Running in Docker

Mount the config file to /app/config/config.toml and a persistent volume for the data directory to /app/data:

docker run -p 3000:3000 -v /path/to/config-dir:/app/config -v rezervator-data:/app/data rezervator

Set bind_ip = '0.0.0.0' in the config so the server is reachable from outside the container.

Older versions of the image expected the config in /app/target/site/data/config.toml, where it could be downloaded from /data/config.toml. If you ran such a container, move the file and change the database password, the SMTP password and the session key.

Health check

GET /health returns 200 when the server can reach its database and 503 otherwise. rezervator --healthcheck asks the running server on this machine and exits with 0 or 1; the Docker image uses it as its health check.

Hosting many customers

The application serves one company per instance. deploy/ contains a Docker Compose setup and a script for running one container per customer behind a reverse proxy, including upgrades, backups and restores. See deploy/README.md.

Running tests

cargo test --features ssr

Executing a Server on a Remote Machine Without the Toolchain

After running a cargo leptos build --release the minimum files needed are:

  1. The server binary located in target/server/release
  2. The site directory and all files within located in target/site

Copy these files to your remote server. The directory structure should be:

leptos_start
site/

Set the following environment variables (updating for your project as needed):

export LEPTOS_OUTPUT_NAME="leptos_start"
export LEPTOS_SITE_ROOT="site"
export LEPTOS_SITE_PKG_DIR="pkg"
export LEPTOS_SITE_ADDR="127.0.0.1:3000"
export LEPTOS_RELOAD_PORT="3001"

Finally, run the server binary.

Notes about SSG and Trunk:

Although it is not recommended, you can also run your project without server integration using the feature csr and trunk serve:

trunk serve --open --features csr

This may be useful for integrating external tools which require a static site, e.g. tauri.

S
Description
No description provided
Readme MIT
5.6 MiB
Languages
Rust 87.5%
Shell 7.3%
CSS 2.5%
SCSS 1.2%
TypeScript 0.9%
Other 0.6%