1
0
Fork 0
mirror of https://github.com/SinTan1729/chhoto-url synced 2024-12-25 23:28:37 -06:00
A simple, blazingly fast, selfhosted URL shortener with no unnecessary features; written in Rust. https://hub.docker.com/r/sintan1729/chhoto-url
Find a file
Przemek Dragańczuk 7caec171c3
Non-code changes to make GitHub stuff better
* Modified README.md

* Add issue templates
2020-06-18 20:09:43 +02:00
.github/ISSUE_TEMPLATE Non-code changes to make GitHub stuff better 2020-06-18 20:09:43 +02:00
.settings Base api works 2020-02-13 23:52:33 +01:00
gradle/wrapper - Published to Docker HUB; 2020-05-23 19:54:27 +02:00
src/main - Published to Docker HUB; 2020-05-23 19:54:27 +02:00
.classpath Base api works 2020-02-13 23:52:33 +01:00
.gitattributes Base api works 2020-02-13 23:52:33 +01:00
.gitignore Sqlite as storage backend (#1) 2020-03-24 09:07:25 +01:00
.project Base api works 2020-02-13 23:52:33 +01:00
build.gradle Sqlite as storage backend (#1) 2020-03-24 09:07:25 +01:00
docker-compose.yml - Published to Docker HUB; 2020-05-23 19:54:27 +02:00
Dockerfile - Published to Docker HUB; 2020-05-23 19:54:27 +02:00
gradlew Base api works 2020-02-13 23:52:33 +01:00
gradlew.bat Base api works 2020-02-13 23:52:33 +01:00
LICENSE Create LICENSE 2020-02-14 22:37:43 +01:00
README.md Non-code changes to make GitHub stuff better 2020-06-18 20:09:43 +02:00
screenshot.png Added a screenshot 2020-02-16 14:50:49 +01:00
settings.gradle Base api works 2020-02-13 23:52:33 +01:00

Docker Pulls Docker Cloud Build Status GitHub issues

What is it?

A simple selfhosted URL shortener with no unnecessary features.

If you feel like a feature is missing, please let me know by creating an issue using the "feature request" template.

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.

Features

  • Shortens URLs of any length to a fixed length, randomly generated string
  • (Optional) Allows you to specify the shortened URL instead of the generated one (Missing in a surprising number of alternatives)
  • 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 apparently it's not)
  • Provides a simple API for adding new short links
  • Links are stored in an SQLite database
  • Available as a Docker container
  • Backend written in Java using Spark Java, frontend written in plain HTML and vanilla JS, using Pure CSS for styling

Bloat that will not be implemented

  • Logging, tracking or spying of any kind. The only logs that still exist are errors printed to stderr and the default SLF4J warning.
  • User management. If you need a shortener for your whole organisation, 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 whatever reason), you can message me through Github issues or via email. github@draganczuk.tk

I might add one of those "fork me on github" thingies in the corner, though I doubt I will

Screenshot

Screenshot

Usage

Clone this repository

git clone https://github.com/draganczukp/simply-shorten

Building from source

Gradle 6.x.x and JDK 11 are required. Other versions are not tested

1. Build the .jar file

gradle build --no-daemon

The --no-daemon option means that gradle should exit as soon as the build is finished. Without it, gradle would still be running in the background in order to speed up future builds.

2. Set environment variables

# Required for authentication
export username=<api username>
export password=<api password>
# Sets where the database exists. Can be local or remote (optional)
export db_url=<url> # Default: './urls.sqlite'

3. Run it

java -jar build/libs/url.jar

You can optionally set the port the server listens on by appending --port=[port]

Running with docker

docker run method

  1. (Only if you really want to) Build the image
docker build . -t simply-shorten:latest
  1. Run the image
docker run -p 4567:4567
    -d url:latest
    -e username="username"
    -e password="password"
    -d simply-shorten:latest

1.a Make the database file available to host (optional)

touch ./urls.sqlite
docker run -p 4567:4567 \
    -e username="username" \
    -e password="password" \
    -v ./urls.sqlite:/urls.sqlite \
    -e db_url=/urls.sqlite \
    -d simply-shorten:latest

docker-compose

There is a sample docker-compose.yml 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 --build