Go to file
2024-04-06 11:00:15 -04:00
src Add Dockerfile 2024-04-06 09:55:50 -04:00
.gitignore Implement get 2024-04-05 22:41:10 -04:00
Cargo.lock Implement post 2024-04-06 09:19:28 -04:00
Cargo.toml Implement post 2024-04-06 09:19:28 -04:00
Dockerfile Add Dockerfile 2024-04-06 09:55:50 -04:00
flake.lock Implement get 2024-04-05 22:41:10 -04:00
flake.nix Implement get 2024-04-05 22:41:10 -04:00
README.md Add README.md 2024-04-06 11:00:15 -04:00

Chela

Chela is a minimal URL shortener built in Rust. It is named after the small claw on crustaceans.

Usage

You can create a redirect by navigating to the /create page and filling out the form. By default, every path passed to Chela will treated as a redirect except / and /create.

Install and Run

With Docker

CLI

docker run -d \
    -p 3000:3000 \
    -e DATABASE_URL=postgres://chela:password@dbhost/postgres?sslmode=disable \
    -e CHELA_HOST=example.com \
    secondsmiles/chela

Docker Compose

services:
    chela-postgres:
        image: postgres:15
        environment:
            - POSTGRES_USER=chela
            - POSTGRES_PASSWORD=password
        volumes:
            - chela-db:/var/lib/postgresql/data
    chela:
        image: secondsmiles/chela
        ports:
            - 3000:3000
        environment:
            - DATABASE_URL=postgres://chela:password@dbhost/postgres?sslmode=disable
            - CHELA_HOST=example.com
        depends_on:
            - chela_postgres

volumes:
    chela-db:

Environment Variables

DATABASE_URL

Used to define the database connection for Chela to use.

CHELA_HOST

The hostname that Chela should refer to itself as. Defaults to localhost

Manually

Build

$ git clone https://github.com/secondary-smiles/chela.git
$ cd chela
$ cargo build -r

Run

$ export DATABASE_URL=postgres://chela:password@dbhost/postgres?sslmode=disable
$ export CHELA_HOST=example.com
$ ./target/release/chela

Hosting

Chela uses the axum to manage HTTP requests, so it is possible to expose it directly to the outer internet. However, there is no authentication for the /create endpoint so anyone will be able to create redirects.

If you would prefer to be the only one able to create redirects, then you can proxy Chela through Nginx with http-basic-auth. Refer to this documentation for more information.

server {
    server_name example.com;
    
    location / {
        proxy_pass http://localhost:3000/;
    }

    location /create {
        proxy_pass http://localhost:3000/create;

        limit_except GET HEAD {
            auth_basic 'Restricted';
            auth_basic_user_file /path/to/your/.htpasswd;
        }
    }
}