Minimal URL Shortener https://github.com/secondary-smiles/chela
494
Chela is a minimal URL shortener built in Rust. It is named after the small claw on crustaceans.
You can create a redirect by navigating to the /create page and filling out the form. By default, every path passed to Chela will be treated as a redirect except / and /create.
Chela also supports basic analytics for shortened URLs. This page is available at /tracking, and /tracking/<URL ID>.
$ docker run -d \
-p 3000:3000 \
-e DATABASE_URL=postgres://chela:password@dbhost/postgres?sslmode=disable \
-e CHELA_HOST=a.com \
secondsmiles/chela
services:
chela-postgres:
image: postgres:15
environment:
- POSTGRES_USER=chela
- POSTGRES_PASSWORD=password
volumes:
- chela-db:/var/lib/postgresql/data
restart: unless-stopped
chela:
image: secondsmiles/chela
ports:
- 3000:3000
environment:
- DATABASE_URL=postgres://chela:password@chela-postgres/postgres?sslmode=disable
- CHELA_HOST=a.com
- CHELA_MAIN_PAGE_REDIRECT='https://example.com'
- CHELA_BEHIND_PROXY=1
depends_on:
- chela-postgres
restart: unless-stopped
volumes:
chela-db:
DATABASE_URLUsed to define the database connection for Chela to use.
CHELA_HOSTThe hostname that Chela should refer to itself as. Defaults to localhost.
CHELA_LISTEN_ADDRESSThe address that Chela should listen on. Defaults to 0.0.0.0.
CHELA_MAIN_PAGE_REDIRECTA page that Chela will redirect to when / is requested instead of replying with the default homepage.
CHELA_BEHIND_PROXYIf this variable is set, Chela will use the X-Real-IP header as the client IP address rather than the connection address.
CHELA_UNIX_SOCKETIf you would like Chela to listen for HTTP requests over a Unix socket, set this variable to the socket path that it should use. By default, Chela will listen via a Tcp socket.
CHELA_ALPHABETIf this variable is set, Chela will use the characters in CHELA_ALPHABET to create IDs for URLs. The default alphabet is abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. See here for more information on Sqids alphabets.
CHELA_USES_HTTPSIf this variable is set, Chela will refer to itself as https://$CHELA_HOST instead of the default http://$CHELA_HOST.
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 or /tracking endpoints so anyone will be able to create redirects and view analytics.
If you would prefer to be the only one able to access these pages, then you can proxy Chela through Nginx with http-basic-auth. Refer to this documentation for more information.
server {
server_name a.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Real-IP $remote_addr;
limit_except GET HEAD {
auth_basic 'Restricted';
auth_basic_user_file /path/to/your/.htpasswd;
}
}
location /tracking {
proxy_pass http://localhost:3000$request_uri;
auth_basic 'Restricted';
auth_basic_user_file /path/to/your/.htpasswd;
}
}
Content type
Image
Digest
sha256:a73ddf314…
Size
13.8 MB
Last updated
over 1 year ago
docker pull secondsmiles/chela