# magnetar

![Magnetar logo, an 8-pointed star with two symmetrical cones](./fe_calckey/frontend/assets/favicon.png)

A social networking server anyone can self-host

**This project is in early development.**

## Quick start

 1. Create a Postgres database
 2. Create a Redis instance
 3. Configure the required options in `config/default.toml`
 4. Build Magnetar: `cargo build --release --workspace --bins`
 5. Build the Magnetar Calckey frontend: `cd fe_calckey/frontend && pnpm install && pnpm run build`
 6. Run Magnetar: `./target/release/magnetar`
 7. Build and run [a modified version of Calckey](https://git.astolfo.cool/natty/calckey),
    pointed to the same database and Redis
 8. Start up the Magnetar frontend: `./target/release/magnetar_calckey_fe`
 9. Set up a reverse proxy based on `.dev/Caddyfile`

Read further for additional information.

## What's inside

Magnetar builds to two primary binaries:
 - magnetar -- The backend
 - magnetar_calckey_fe -- A web server hosting a self-contained frontend

The `fe_calckey/frontend` directory contains the 
[Calckey](https://codeberg.org/firefish/firefish)-based web frontend.

## Additional dependencies

Magnetar depends on a Postgres database, Redis instance, as well
as a modified [Calckey](https://git.astolfo.cool/natty/calckey) backend
running in tandem.

## Building

Magnetar can be built both as standalone binaries or OCI containers (Podman, Docker, ...).

### Native

Building the Magnetar backend requires:
 - latest stable Rust toolchain

Building the included Magnetar/Calckey frontend requires:
 - latest stable Rust toolchain
 - Node.js and npm

#### Steps

 1. Build both the frontend and the backend binaries:
    ```shell
    cargo build --release --workspace --bins
    ```
 2. Switch to the frontend directory:
    ```shell
    cd fe_calckey/frontend
    ```
 3. Install the frontend dependencies:
    ```shell
    pnpm install
    ```
 4. Build the frontend
    ```shell
    pnpm run build
    ```

### Container build

Magnetar can be built to a single monolithic OCI image using the provided Dockerfile,
containing the Magnetar binaries.

```shell
podman build -t magnetar .
# or
docker build -t magnetar .
```

## Running

Follow the steps from the "building" chapter.

### Native setup

Debug builds can be run using `cargo run --package magnetar --bin magnetar` and
`run --package magnetar_calckey_fe --bin magnetar_calckey_fe`.

### Monolithic container image

Choose between the backend and frontend using the `--entrypoint /magnetar/magnetar`
and `--entrypoint /magnetar/magnetar_calckey_fe` respectively.

Mount the directory in `/magnetar/config` to pass in configuration from the host machine.
Alternatively, see the `config/default.toml` file and pass in corresponding environment variables.

## Connecting all components

In order to connect all components of magnetar, a router/reverse proxy 
is necessary. See `.dev/Caddyfile` for a template configuration.

