FrostByte/README.md
2023-10-20 23:39:00 +02:00

75 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FrostByte Forum
A simple forum written in Rust and Typescript.
---
## Structure
- `server`: Contains the web server code
- `client-solid`: Contains the frontend client written in SolidJS
## Setup
- Install [Rust](https://www.rust-lang.org/) and [Node.js](https://nodejs.org/)
- Install [Just](https://just.systems/man/en/) and [Podman](https://podman.io/) (optional but recommended)
## Running the project
There are two ways to run this project. The simple way and the manual way.
### 1. The simple way (with aforementioned [Just](https://just.systems/man/en/) and [Podman](https://podman.io/))
To spin up a dev backend server, run:
``` bash
just dev
```
For a complete list of targets, run:
``` bash
just -l
```
Spin up a dev server with `just dev` or just `just`.
Keep in mind that this is just the development api server, served on port 8080 by default.
The client is served from the vite dev server as usual at `localhost:3000` by running `npm run dev`.
**Congrats, you're now ready to hack!**
For a project cleanup, you can run `just clean`. This will delete nore_modules and target directories etcetera. It will also stop and remove related images/containers.
For a more complete cleanup, you can run `just nuke`. This deletes everything related to this project AND **all containers and images on your system**. Use with caution.
### 2. The manual way
The client is a React application built with vite. `npm run dev` will start a dev server without a backend. ´npm run build´ will build the full application and drop it in the `client/dist` directory. This directory will then be served by the web server.
---
The server is a Rust application built with actix-web. `cargo run` will start a dev server with an in-memory database. `cargo build --release` will place a binary in `server/target/release` that can be run on a server. Note that the server binary will try to serve the client from `server/public` by default. This will be changable in the future.
```bash
# Local backend server
cd server
cargo run
# Dev client (vite)
cd client
npm run dev
```
### Production build
Essentially, you need to build the client and copy the files to the server's public directory. Then you need to build the server in release mode and run it.
This is all bundled in the Containerfile. You can build the container with:
```bash
just start-release
```
## Contributing
Contributions are welcome! Please read the [contributing guidelines](CONTRIBUTING.md) first.