A multi-user issue tracking system built with Yew frontend and actix-web backend.
This is a project for learning. The app is in a working state, but it is relatively unstyled, does not yet display meaningful errors, and has little input verification.
- Create, edit, close, re-assign tickets
- Ticket list with sorting, filtering, and pagination
- Enter notes for a ticket
- Ticket event tracking (re-assignments, status changes, etc)
- Nested-document style wiki
- Markdown support for ticket descriptions, notes, and wiki
- Editing conflict handling with revision history
- Multi-user support
- Local authentication with Argon2 hashing and salting
- REST-style API
- Dark/light theme
- Localization support
These are some features I'm looking to add:
- Custom dashboard
- Projects
- Tasklists for tickets
- Show number of notes and tasks for a ticket in ticket list
- Show description preview for a ticket on ticket list
- Add On Hold status for tickets
- Time tracking
- Custom ticket tags
- Recycle bin for deleted items
- Contacts
- Access levels and disabled users
- Test coverage
- More logging and error handling
These are some features I'd like to see but will not get to at this stage:
- E-mail integration (updates, submit via-e-mail)
- Scheduled tickets
- Issue submission portal
- Asset tracking
- Reporting
- Optional OIDC authentication
- Custom Fields
- Generate and place certificates in ./certificates/ folder (cert.pem & key.pem). Sample command to generate self-signed cert:
openssl req -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365 -subj /CN=localhost
-
Set your environment variables in .env (refer to .env.sample).
-
Build the Docker image
docker build -f Dockerfile -t vgwidt/sumi .
- Modify docker-compose.yml as needed and run:
docker-compose up -d
Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Install diesel_cli dependencies:
- Linux
sudo apt-get install libpq-dev
- Windows Install PostgreSQL (don't need to include DB server if not using that for the instance). Add the following environment variables:
PQ_LIB_DIR = C:\Program Files\PostgreSQL\14\lib
PATH = C:\Program Files\PostgreSQL\14\bin
If you tried to build or run using cargo before adding the environment variables, run cargo clean. If in Windows and you get a Non-UTF-8 output error, install English language pack for VC build tools.
Windows: libintl-9.dll which ships with EDB is broken, get libintl-8.dll and put in debug folder (diesel-rs/diesel#2947)
Install diesel_cli
cargo install diesel_cli --no-default-features --features postgres
Install Docker (optional for quick PostgreSQL setup)
sudo apt -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl status docker
Install target for wasm
rustup target add wasm32-unknown-unknown
Install trunk
cargo install trunk
Other dependencies
cargo install --locked wasm-bindgen-cli
If running from Windows, you need to manually create the symlink. Run the following from the backend folder:
mklink /D dist ..\frontend\dist
Finally, create .env file in project root. Refer to .env.sample for required variables.
Note, in a clean Linux environment using Docker for Redis without reverse proxies where everything runs on the same server, localhost does not work. Use 127.0.0.1 instead.
Execute the following to check for and execute database migrations, compile the frontend with trunk, then run the backend:
diesel migration run --config-file ./backend/diesel.toml
trunk build -d dist ./frontend/index.html
cargo run --manifest-path ./backend/Cargo.toml
Default login is admin/password