2022-11-09 17:46:43 -06:00
|
|
|
# ![Logo](src/main/resources/public/assets/favicon-32.png) <span style="font-size:42px">Simply Shorten</span>
|
|
|
|
|
2020-02-14 15:36:50 -06:00
|
|
|
# What is it?
|
2020-06-18 13:09:43 -05:00
|
|
|
A simple selfhosted URL shortener with no unnecessary features.
|
|
|
|
|
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
|
|
|
|
and fix every bug you report.
|
2020-06-18 13:09:43 -05:00
|
|
|
|
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.
|
|
|
|
|
|
|
|
# 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.
|
2020-02-14 15:36:50 -06:00
|
|
|
- Backend written in Java using [Spark Java](http://sparkjava.com/), frontend
|
|
|
|
written in plain HTML and vanilla JS, using [Pure CSS](https://purecss.io/)
|
2022-12-28 07:31:03 -06:00
|
|
|
for styling.
|
2020-05-23 12:16:27 -05:00
|
|
|
|
|
|
|
# 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
|
2020-05-23 12:54:27 -05:00
|
|
|
errors printed to stderr and the default SLF4J warning.
|
2020-05-23 12:16:27 -05:00
|
|
|
- User management. If you need a shortener for your whole organisation, either
|
2020-05-23 12:54:27 -05:00
|
|
|
run separate containers for everyone or use something else.
|
2020-05-23 12:16:27 -05:00
|
|
|
- Cookies, newsletters, "we value your privacy" popups or any of the multiple
|
2020-05-23 12:54:27 -05:00
|
|
|
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
|
2022-11-04 01:41:15 -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
|
2022-11-05 14:41:00 -05:00
|
|
|
## Using `docker compose` (Recommended method)
|
2022-11-14 23:12:26 -06:00
|
|
|
There is a sample `compose.yaml` file in this repository. It contains
|
2022-11-05 14:41:00 -05:00
|
|
|
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
|
|
|
|
place, resulting in an error.
|
2022-11-05 14:41:00 -05:00
|
|
|
## Building from source
|
2020-02-14 15:36:50 -06:00
|
|
|
Clone this repository
|
|
|
|
```
|
2022-11-04 01:41:15 -05:00
|
|
|
git clone https://gitlab.com/SinTan1729/simply-shorten
|
2020-02-14 15:36:50 -06:00
|
|
|
```
|
2022-11-05 14:41:00 -05:00
|
|
|
Note that Gradle 6.x.x and JDK 11 are required. Other versions are not tested
|
2020-02-16 08:51:00 -06:00
|
|
|
### 1. Build the `.jar` file
|
2020-02-14 15:36:50 -06:00
|
|
|
```
|
|
|
|
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.
|
|
|
|
|
2020-02-16 08:51:00 -06:00
|
|
|
### 2. Set environment variables
|
|
|
|
```bash
|
2020-03-24 03:07:25 -05:00
|
|
|
# Required for authentication
|
2020-02-16 08:51:00 -06:00
|
|
|
export username=<api username>
|
|
|
|
export password=<api password>
|
2020-03-24 03:07:25 -05:00
|
|
|
# Sets where the database exists. Can be local or remote (optional)
|
2020-05-23 12:54:27 -05:00
|
|
|
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>
|
2020-02-16 08:51:00 -06:00
|
|
|
```
|
|
|
|
|
|
|
|
### 3. Run it
|
2020-02-14 15:36:50 -06:00
|
|
|
```
|
|
|
|
java -jar build/libs/url.jar
|
|
|
|
```
|
2020-05-23 12:16:27 -05:00
|
|
|
You can optionally set the port the server listens on by appending `--port=[port]`
|
2020-02-16 08:51:00 -06:00
|
|
|
### 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
|
2020-05-23 12:54:27 -05:00
|
|
|
0. (Only if you really want to) Build the image
|
2020-02-14 15:36:50 -06:00
|
|
|
```
|
2020-05-23 12:54:27 -05:00
|
|
|
docker build . -t simply-shorten:latest
|
2020-02-14 15:36:50 -06:00
|
|
|
```
|
2020-05-23 12:54:27 -05:00
|
|
|
1. Run the image
|
2020-02-14 15:36:50 -06:00
|
|
|
```
|
2020-03-24 03:07:25 -05:00
|
|
|
docker run -p 4567:4567
|
|
|
|
-d url:latest
|
|
|
|
-e username="username"
|
|
|
|
-e password="password"
|
2020-05-23 12:54:27 -05:00
|
|
|
-d simply-shorten:latest
|
2020-02-14 15:36:50 -06:00
|
|
|
```
|
2020-05-23 12:54:27 -05: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 \
|
2020-03-24 03:07:25 -05:00
|
|
|
-e username="username" \
|
|
|
|
-e password="password" \
|
2020-04-18 15:53:01 -05:00
|
|
|
-v ./urls.sqlite:/urls.sqlite \
|
2020-05-23 12:54:27 -05:00
|
|
|
-e db_url=/urls.sqlite \
|
|
|
|
-d simply-shorten: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 username="username" \
|
|
|
|
-e password="password" \
|
|
|
|
-v ./urls.sqlite:/urls.sqlite \
|
|
|
|
-e db_url=/urls.sqlite \
|
|
|
|
-e site_url="https://www.example.com" \
|
|
|
|
-d simply-shorten:latest
|
|
|
|
```
|
2020-09-19 03:01:36 -05:00
|
|
|
|
|
|
|
## Disable authentication
|
|
|
|
As requested in #5, it is possible to completely disable the authentication.
|
|
|
|
This if not recommended, 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.
|
|
|
|
|
|
|
|
If you still want to do it, then you need to set an environment variable to
|
|
|
|
an exact value:
|
|
|
|
```
|
|
|
|
INSECURE_DISABLE_PASSWORD=I_KNOW_ITS_BAD
|
2020-02-14 15:36:50 -06:00
|
|
|
```
|
2020-09-19 03:01:36 -05:00
|
|
|
Any other value will not work.
|
2022-11-11 17:50:12 -06:00
|
|
|
|
|
|
|
## Notes
|
|
|
|
- This is a fork of [this project](https://gitlab.com/draganczukp/simply-shorten).
|
|
|
|
- The list of adjectives and names used for random short url generation is a modified
|
|
|
|
version of [this list used by docker](https://github.com/moby/moby/blob/master/pkg/namesgenerator/names-generator.go).
|