- Published to Docker HUB;

- Updated to Java 14
- A bunch of changes I wanted to do earlier
This commit is contained in:
Przemek Dragańczuk 2020-05-23 19:54:27 +02:00
parent 218f2fa368
commit e9cf90cea7
6 changed files with 34 additions and 52 deletions

View File

@ -1,9 +1,9 @@
FROM gradle:jdk11 AS build FROM gradle:jdk14 AS build
COPY --chown=gradle:gradle . /home/gradle/src COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src WORKDIR /home/gradle/src
RUN gradle build --no-daemon RUN gradle build --no-daemon
FROM openjdk:11-jre-slim FROM openjdk:14.0-slim
EXPOSE 4567 EXPOSE 4567

View File

@ -14,21 +14,21 @@ unnecessary features, or they didn't have all the features I wanted.
apparently it's not) apparently it's not)
- Provides a simple API for adding new short links - Provides a simple API for adding new short links
- Links are stored in an SQLite database - Links are stored in an SQLite database
- Available as a Docker container (there is no image on docker hub _yet_) - Available as a Docker container
- Backend written in Java using [Spark Java](http://sparkjava.com/), frontend - Backend written in Java using [Spark Java](http://sparkjava.com/), frontend
written in plain HTML and vanilla JS, using [Pure CSS](https://purecss.io/) written in plain HTML and vanilla JS, using [Pure CSS](https://purecss.io/)
for styling for styling
# Bloat that will not be implemented # Bloat that will not be implemented
- Logging, tracking or spying of any kind. The only logs that still exist are - Logging, tracking or spying of any kind. The only logs that still exist are
errors printed to stderr and the default SLF4J warning errors printed to stderr and the default SLF4J warning.
- User management. If you need a shortener for your whole organisation, either - User management. If you need a shortener for your whole organisation, either
run separate containers for everyone or use something else run separate containers for everyone or use something else.
- Cookies, newsletters, "we value your privacy" popups or any of the multiple - 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 other ways modern web shows how anti-user it is. We all hate those, and they're
not needed here not needed here.
- Paywalls or messages beging for donations. If you want to support me (for - 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 whatever reason), you can message me through Github issues or via email.
[github@draganczuk.tk](mailto:github@draganczuk.tk) [github@draganczuk.tk](mailto:github@draganczuk.tk)
I _might_ add one of those "fork me on github" thingies in the corner, though I I _might_ add one of those "fork me on github" thingies in the corner, though I
@ -37,11 +37,6 @@ doubt I will
# Screenshot # Screenshot
![Screenshot](./screenshot.png) ![Screenshot](./screenshot.png)
# Planned features for 1.0 (in order of importance
- Better deduplication
- Code cleanup
- Official Docker Hub image
# Usage # Usage
Clone this repository Clone this repository
``` ```
@ -63,7 +58,7 @@ in order to speed up future builds.
export username=<api username> export username=<api username>
export password=<api password> export password=<api password>
# Sets where the database exists. Can be local or remote (optional) # Sets where the database exists. Can be local or remote (optional)
export db.url=<url> # Default: './urls.sqlite' export db_url=<url> # Default: './urls.sqlite'
``` ```
### 3. Run it ### 3. Run it
@ -76,31 +71,32 @@ You can optionally set the port the server listens on by appending `--port=[port
## Running with docker ## Running with docker
### `docker run` method ### `docker run` method
1. Build the image 0. (Only if you really want to) Build the image
``` ```
docker build . -t shorten:latest docker build . -t simply-shorten:latest
``` ```
2. Run the image 1. Run the image
``` ```
docker run -p 4567:4567 docker run -p 4567:4567
-d url:latest -d url:latest
-e username="username" -e username="username"
-e password="password" -e password="password"
-d shorten:latest -d simply-shorten:latest
``` ```
2.a Make the database file available to host (optional) 1.a Make the database file available to host (optional)
``` ```
touch ./urls.sqlite touch ./urls.sqlite
docker run -p 4567:4567 \ docker run -p 4567:4567 \
-e username="username" \ -e username="username" \
-e password="password" \ -e password="password" \
-v ./urls.sqlite:/urls.sqlite \ -v ./urls.sqlite:/urls.sqlite \
-e db.url=/urls.sqlite \ -e db_url=/urls.sqlite \
-d shorten:latest -d simply-shorten:latest
``` ```
## `docker-compose` ## `docker-compose`
There is a sample `docker-compose.yml` file in this repository configured for Traefik. You can use it There is a sample `docker-compose.yml` file in this repository. It contains
as a base, modifying it as needed. Run it with 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 docker-compose up -d --build
``` ```

View File

@ -1,32 +1,19 @@
version: "3" version: "3"
services: services:
url: url:
# TODO: Publish to docker hub image: draganczukp/simply-shorten
build:
context: .
container_name: url container_name: url
environment: environment:
- db.url=/urls.sqlite # Change if you want to mount the database somewhere else
- username=${URL_LOGIN} # - db_url=/urls.sqlite
- password=${URL_PASSWORD} - username=admin
- password=$3CuReP4S$W0rD
volumes: volumes:
- ./urls.sqlite:/urls.sqlite - db:/urls.sqlite
networks: restart: unless-stopped
- ${NETWORK}
labels: volumes:
- "traefik.enable=true" db:
- "traefik.http.routers.url.entrypoints=http"
- "traefik.http.routers.url.rule=Host(`url.${TLD}`)"
- "traefik.http.middlewares.url-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.url.middlewares=url-https-redirect"
- "traefik.http.routers.url-secure.entrypoints=https"
- "traefik.http.routers.url-secure.rule=Host(`url.${TLD}`)"
- "traefik.http.routers.url-secure.tls=true"
- "traefik.http.routers.url-secure.tls.certresolver=http"
- "traefik.http.routers.url-secure.service=url"
- "traefik.http.services.url.loadbalancer.server.port=4567"
- "traefik.docker.network=proxy"
restart: ${RESTART}
networks: networks:
proxy: proxy:

Binary file not shown.

View File

@ -1,6 +1,5 @@
#Fri Feb 14 18:22:25 CET 2020
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@ -17,11 +17,11 @@ public class UrlRepository {
private static final String SELECT_FOR_SHORT_SQL = "SELECT long_url FROM urls WHERE short_url = ?"; private static final String SELECT_FOR_SHORT_SQL = "SELECT long_url FROM urls WHERE short_url = ?";
private static final String DELETE_ROW_SQL = "DELETE FROM urls WHERE short_url = ?"; private static final String DELETE_ROW_SQL = "DELETE FROM urls WHERE short_url = ?";
private String databaseUrl; private final String databaseUrl;
public UrlRepository() { public UrlRepository() {
String path = System.getenv().getOrDefault("db.url", "./urls.sqlite"); String path = System.getenv().getOrDefault("db_url", "/urls.sqlite");
databaseUrl = "jdbc:sqlite:" + path; databaseUrl = "jdbc:sqlite:" + path;