• Stars
    star
    278
  • Rank 148,454 (Top 3 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created over 6 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A React-based client application for Shlink

shlink-web-client

Build Status Code Coverage GitHub release Docker pulls GitHub license Twitter Mastodon Paypal Donate

A ReactJS-based progressive web application for Shlink.

shlink-web-client

If you are trying to find out how to run the project in development mode or how to provide contributions, read the CONTRIBUTING doc.

Installation

There are three ways in which you can use this application.

From app.shlink.io

The easiest way to use shlink-web-client is by just going to https://app.shlink.io.

The application runs 100% in the browser, so you can safely access any shlink instance from there.

Docker image

If you want to deploy shlink-web-client in a container-based cluster (kubernetes, docker swarm, etc), just pick the shlinkio/shlink-web-client image and do it.

It's a lightweight nginx:alpine image serving the static app on port 80.

Self-hosted

If you want to self-host it yourself, get the latest release and download the distributable zip file attached to it (shlink-web-client_X.X.X_dist.zip).

The package contains static files only, so just put it in a folder and serve it with the web server of your choice.

Considerations:

  • Provided dist files are configured to be served from the root of your domain. If you need to serve shlink-web-client from a subpath, you will have to build it yourself following these steps.
  • The app has a client-side router that handles dynamic paths. Because of that, you need to configure your web server to fall-back to the index.html file when requested files do not exist.
    • If you use Apache, you are covered, since the project includes an .htaccess file which already does this.
    • If you use nginx, you can see how it's done for the docker image and do the same.

Pre-configuring servers

The first time you access shlink-web-client from a browser, you will have to configure the list of shlink servers you want to manage, and they will be saved in the local storage.

Those servers can be exported and imported in other browsers, but if for some reason you need some servers to be there from the beginning, starting with shlink-web-client 2.1.0, you can provide a servers.json file in the project root folder (the same containing the index.html, favicon.ico, etc) with a structure like this:

[
  {
    "name": "Main server",
    "url": "https://s.test",
    "apiKey": "09c972b7-506b-49f1-a19a-d729e22e599c"
  },
  {
    "name": "Local",
    "url": "http://localhost:8080",
    "apiKey": "580d0b42-4dea-419a-96bf-6c876b901451"
  }
]

The list can contain as many servers as you need.

If you are using the shlink-web-client docker image, you can mount the servers.json file in a volume inside /usr/share/nginx/html, which is the app's document root inside the container.

docker run --name shlink-web-client -p 8000:80 -v ${PWD}/servers.json:/usr/share/nginx/html/servers.json shlinkio/shlink-web-client

Alternatively, you can mount a conf.d directory, which in turn contains the servers.json file, in a volume inside /usr/share/nginx/html. (since shlink-web-client 3.2.0).

docker run --name shlink-web-client -p 8000:80 -v ${PWD}/my-config/:/usr/share/nginx/html/conf.d/ shlinkio/shlink-web-client

If you want to pre-configure a single server, you can provide its config via env vars. When the container starts up, it will build the servers.json file dynamically based on them. (since shlink-web-client 3.2.0).

  • SHLINK_SERVER_URL: The fully qualified URL for the Shlink server.

  • SHLINK_SERVER_API_KEY: The API key.

  • SHLINK_SERVER_NAME: The name to be displayed. Defaults to Shlink if not provided.

    docker run \
        --name shlink-web-client \
        -p 8000:80 \
        -e SHLINK_SERVER_URL=https://s.test \
        -e SHLINK_SERVER_API_KEY=6aeb82c6-e275-4538-a747-31f9abfba63c \
        shlinkio/shlink-web-client

Be extremely careful when using this feature.

Due to shlink-web-client's client-side nature, the file needs to be accessible from the browser.

Because of that, make sure you use this only when you self-host shlink-web-client, and you know only trusted people will have access to it.

Failing to do this could cause your API keys to end up being exposed.

Serve project in subpath

Official distributable files have been built so that they are served from the root of a domain.

If you need to host shlink-web-client yourself and serve it from a subpath, follow these steps:

  • Download shlink-web-client source code for the version you want to build.
  • Decompress the file and cd into the resulting folder.
  • Open the package.json file in the root of the project, locate the homepage property and replace the value (which should be an empty string) by the path from which you want to serve shlink-web-client.
    • For example: "homepage": "/my-projects/shlink-web-client",.
  • Build the project:
    • For classic hosting:
      • Download node 10.15 or later.
      • Install project dependencies by running npm install.
      • Build the project by running npm run build.
      • Once the command finishes, you will have a build folder with all the static assets you need to run shlink-web-client. Just place them wherever you want them to be served from.
    • For docker image:
      • Download docker.
      • Build the docker image by running docker build . -t shlink-web-client.
      • Once the command finishes, you will have an image with the name shlink-web-client.

More Repositories

1

shlink

The definitive self-hosted URL shortener
PHP
3,003
star
2

shlink-docker-image

[DEPRECATED] A docker image to easily set up shlink on a container-based infrastructure
PHP
18
star
3

shlink.io

Shlink project website
SCSS
14
star
4

shlink-web-client-angularjs

An AngularJS client application for Shlink
JavaScript
9
star
5

shlink-js-sdk

A javascript Shlink's REST API client for the browser and node.js
TypeScript
8
star
6

shlink-installer

A PHP command line tool used to install shlink
PHP
7
star
7

shlink-ip-geolocation

Shlink module with tools to geolocate an IP address using different strategies
PHP
6
star
8

shlink-php-sdk

A PHP SDK to consume Shlink's REST API
PHP
4
star
9

shlink-importer

Collection of tools to import links from different sources and map them to a shlink-compliant format
PHP
4
star
10

shlink-mobile-app

[TO DO] A shlink mobile client for Android and iOS
4
star
11

php-coding-standard

Coding standard used by shlink PHP projects
Shell
3
star
12

shlink-event-dispatcher

Event dispatching using PSR-14, with async event listener that are executed in background jobs system
PHP
3
star
13

shlink-api-spec-ui

Swagger UI app which can be used to load shlink's Open API specs
TypeScript
2
star
14

deploy-preview-action

A github action to deploy preview environments for static apps using GitHub Pages
2
star
15

shlink-common

Common utilities for PHP projects used by shlink
PHP
2
star
16

js-coding-standard

Coding standard used by shlink JavaScript projects
JavaScript
2
star
17

shlink-dashboard

Next generation web application to interact with Shlink servers
TypeScript
2
star
18

data-manipulation

Userland implementations of some data manipulation helpers extracted from ramda
TypeScript
1
star
19

shlink-frontend-kit

React components and utilities for Shlink frontend projects
TypeScript
1
star
20

shlink-config

Utils to load, parse and work with configuration on Shlink project
PHP
1
star
21

shlink-web-component

Minimal UI to interact with Shlink on React applications
TypeScript
1
star
22

css-coding-standard

Coding standard used by shlink projects for stylesheets
JavaScript
1
star
23

shlink-test-utils

Provides convenient tools and helpers to run different kind of tests on shlink project
PHP
1
star
24

shlink-art

Images and other resources for Shlink project
PostScript
1
star