mirror of
https://github.com/SinTan1729/chhoto-url
synced 2024-12-26 23:58:35 -06:00
- Published to Docker HUB;
- Updated to Java 14 - A bunch of changes I wanted to do earlier
This commit is contained in:
parent
218f2fa368
commit
e9cf90cea7
6 changed files with 34 additions and 52 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
40
README.md
40
README.md
|
@ -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
|
||||||
```
|
```
|
||||||
|
|
|
@ -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:
|
||||||
|
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
5
gradle/wrapper/gradle-wrapper.properties
vendored
5
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue