1
0
Fork 0
mirror of https://github.com/SinTan1729/chhoto-url synced 2024-10-16 13:27:03 -05:00
chhoto-url/README.md

148 lines
6 KiB
Markdown
Raw Normal View History

[![docker-pulls](https://img.shields.io/docker/pulls/sintan1729/chhoto-url)](https://hub.docker.com/r/sintan1729/chhoto-url)
2023-04-09 21:35:51 -05:00
[![maintainer](https://img.shields.io/badge/maintainer-SinTan1729-blue)](https://github.com/SinTan1729)
![commit-since-latest-release](https://img.shields.io/github/commits-since/SinTan1729/chhoto-url/latest?sort=semver&label=commits%20since%20latest%20release)
2023-04-09 21:35:51 -05:00
# ![Logo](actix/resources/assets/favicon-32.png) <span style="font-size:42px">Chhoto URL</span>
2022-11-09 17:46:43 -06:00
2020-02-14 15:36:50 -06:00
# What is it?
2024-03-04 19:05:11 -06:00
A simple selfhosted URL shortener with no unnecessary features. Simplicity
and speed are the main foci of this project. The docker image is ~6 MB (compressed),
and it uses <5 MB of RAM under regular use.
2020-06-18 13:13:07 -05:00
Don't worry if you see no activity for a long time. I consider this project
to be complete, not dead. I'm unlikely to add any new features, but I will try
2024-03-04 19:05:11 -06:00
and fix every bug you report. I will also try to keep it updated in terms of
security vulnerabilities.
2020-06-18 13:13:07 -05:00
If you feel like a feature is missing, please let me know by creating an issue
using the "feature request" template.
2020-02-14 15:36:50 -06:00
## But why another URL shortener?
I've looked at a couple popular URL shorteners, however they either have
unnecessary features, or they didn't have all the features I wanted.
2024-02-10 18:44:15 -06:00
## What does the name mean?
2024-02-29 18:29:36 -06:00
Chhoto (ছোট, [IPA](https://en.wikipedia.org/wiki/Help:IPA/Bengali): /tʃʰoʈo/) is the Bangla word
for small. URL means, well... URL. So the name simply means Small URL.
2024-02-10 18:44:15 -06:00
2020-02-14 15:36:50 -06:00
# Features
2022-12-28 07:31:03 -06:00
- Shortens URLs of any length to a fixed length, randomly generated string.
2020-02-14 15:36:50 -06:00
- (Optional) Allows you to specify the shortened URL instead of the generated
2022-12-28 07:31:03 -06:00
one (Missing in a surprising number of alternatives).
2020-02-14 15:36:50 -06:00
- Opening the fixed length URL in your browser will instantly redirect you
to the correct long URL (you'd think that's a standard feature, but
2022-12-28 07:31:03 -06:00
apparently it's not).
- Provides a simple API for adding new short links.
2022-11-04 18:53:13 -05:00
- Counts number of hits for each short link in a privacy respecting way
2022-12-28 07:31:03 -06:00
i.e. only the hit is recorded, and nothing else.
- Allows setting the URL of your website, in case you want to conveniently
generate short links locally.
- Links are stored in an SQLite database.
- Available as a Docker container.
2023-04-03 13:52:01 -05:00
- Backend written in Rust using [Actix](https://actix.rs/), frontend
2020-02-14 15:36:50 -06:00
written in plain HTML and vanilla JS, using [Pure CSS](https://purecss.io/)
2022-12-28 07:31:03 -06:00
for styling.
2023-04-08 17:22:59 -05:00
- Uses very basic authentication using a provided password. It's not encrypted in transport.
I recommend using something like [Nginx Proxy Manager](https://nginxproxymanager.com/) to
encrypt the connection by SSL.
# Bloat that will not be implemented
2022-11-04 01:41:15 -05:00
- Tracking or spying of any kind. The only logs that still exist are
2023-04-10 11:51:20 -05:00
errors printed to stderr and the basic logging (only warnings) provided by the
[`env_logger`](https://crates.io/crates/env_logger) crate.
2023-04-09 21:35:51 -05:00
- User management. If you need a shortener for your whole organization, either
run separate containers for everyone or use something else.
- Cookies, newsletters, "we value your privacy" popups or any of the multiple
other ways modern web shows how anti-user it is. We all hate those, and they're
not needed here.
- Paywalls or messages begging for donations. If you want to support me (for
2023-04-09 21:35:51 -05:00
whatever reason), you can message me through GitHub issues.
2020-02-14 15:36:50 -06:00
2020-02-16 07:50:49 -06:00
# Screenshot
2022-11-12 18:50:10 -06:00
![Screenshot](screenshot.png)
2020-02-16 07:50:49 -06:00
2020-02-14 15:36:50 -06:00
# Usage
## Using `docker compose` (Recommended method)
There is a sample `compose.yaml` file in this repository. It contains
everything needed for a basic install. You can use it as a base, modifying
it as needed. Run it with
```
docker compose up -d
```
2022-11-05 14:44:15 -05:00
If you're using a custom location for the `db_url`, make sure to make that file
before running the docker image, as otherwise a directory will be created in its
2023-04-09 21:35:51 -05:00
place, resulting in possibly unwanted behavior.
## Building from source
2020-02-14 15:36:50 -06:00
Clone this repository
```
git clone https://github.com/SinTan1729/chhoto-url
2020-02-14 15:36:50 -06:00
```
### 2. Set environment variables
```bash
# Required for authentication
export password=<api password>
# Sets where the database exists. Can be local or remote (optional)
export db_url=<url> # Default: './urls.sqlite'
2022-11-10 20:17:39 -06:00
# Sets the url of website, so that it displays that even when accessed
# locally (optional, defaults to hostname you're accessing it on)
export site_url=<url>
```
2023-04-08 15:56:42 -05:00
### 3. Build and run it
2020-02-14 15:36:50 -06:00
```
2023-04-08 15:56:42 -05:00
cd actix
cargo run
2020-02-14 15:36:50 -06:00
```
2023-04-28 00:22:30 -05:00
You can optionally set the port the server listens on by appending `--port=[port]`.
### 4. Navigate to `http://localhost:4567` in your browser, add links as you wish.
2020-02-14 15:36:50 -06:00
## Running with docker
### `docker run` method
0. (Only if you really want to) Build the image
2020-02-14 15:36:50 -06:00
```
docker build . -t chhoto-url:latest
2020-02-14 15:36:50 -06:00
```
1. Run the image
2020-02-14 15:36:50 -06:00
```
docker run -p 4567:4567
-e password="password"
-d chhoto-url:latest
2020-02-14 15:36:50 -06:00
```
1.a Make the database file available to host (optional)
2020-02-14 15:36:50 -06:00
```
2020-04-18 15:53:01 -05:00
touch ./urls.sqlite
2020-02-14 15:36:50 -06:00
docker run -p 4567:4567 \
-e password="password" \
2020-04-18 15:53:01 -05:00
-v ./urls.sqlite:/urls.sqlite \
-e db_url=/urls.sqlite \
-d chhoto-url:latest
2020-02-14 15:36:50 -06:00
```
2022-11-10 20:17:39 -06:00
1.b Further, set the URL of your website (optional)
```
touch ./urls.sqlite
docker run -p 4567:4567 \
-e password="password" \
-v ./urls.sqlite:/urls.sqlite \
-e db_url=/urls.sqlite \
-e site_url="https://www.example.com" \
-d chhoto-url:latest
2022-11-10 20:17:39 -06:00
```
2023-04-28 00:22:30 -05:00
You can also set the redirect method to Permanent 308 (default) or Temporary 307 by setting
the `redirect_method` variable to `TEMPORARY` or `PERMANENT` (it's matched exactly).
## Disable authentication
2023-04-09 17:31:00 -05:00
If you do not define a password environment variable when starting the docker image, authentication
will be disabled.
2023-04-08 15:56:42 -05:00
This if not recommended in actual use however, as it will allow anyone to create new links and delete
old ones. This might not seem like a bad idea, until you have hundreds of links
pointing to illegal content. Since there are no logs, it's impossible to prove
that those links aren't created by you.
2022-11-11 17:50:12 -06:00
## Notes
- It started as a fork of [this project](https://gitlab.com/draganczukp/chhoto-url).
2022-11-11 17:50:12 -06:00
- The list of adjectives and names used for random short url generation is a modified
2024-03-04 19:05:11 -06:00
version of [this list used by docker](https://github.com/moby/moby/blob/master/pkg/namesgenerator/names-generator.go).