Compare commits

...

20 Commits

Author SHA1 Message Date
Sambo Chea 148519fb43 add heroku 2020-04-16 13:43:37 +07:00
CrazyMax 568e2d961e
Switch to Open Container Specification labels as label-schema.org ones are deprecated 2020-04-07 19:58:43 +02:00
CrazyMax b6570cbf4a
Settings 2020-02-12 23:11:03 +01:00
CrazyMax d128133e79
JetBrains License Server 22218
AdoptOpenJDK JRE 13
2020-02-04 18:36:29 +01:00
CrazyMax 61df733099
Updte bug report tpl 2020-02-04 18:36:03 +01:00
CrazyMax 62de4c614c
Fix timezone 2019-12-07 16:09:30 +01:00
CrazyMax 6f91dbf64c
Proxy type defaults to https
More unset
2019-11-28 18:28:07 +01:00
CrazyMax 737f2bd964
Update README 2019-11-28 17:23:59 +01:00
CrazyMax 3cef833bde
Add env vars to set proxy settings (#21) 2019-11-28 17:12:56 +01:00
CrazyMax fd6895097c
Dedicated example for Traefik 2019-11-17 07:25:30 +01:00
CrazyMax 171e0c32f1
Allow to set custom PUID/PGID 2019-11-17 07:15:23 +01:00
CrazyMax fdb28342f3
Update README 2019-11-13 17:10:49 +01:00
CrazyMax 7f5f161300
Update workflows 2019-11-13 17:10:42 +01:00
CrazyMax bfcb34f6f4
Update README 2019-10-26 20:01:34 +02:00
CrazyMax 89ffc880f9
JetBrains License Server 21137 (#19) 2019-10-24 18:45:50 +02:00
CrazyMax f6aca1ead3
Update labels workflow 2019-10-24 18:41:57 +02:00
CrazyMax 8f4d76fb7f
Final labels 2019-10-20 05:19:03 +02:00
CrazyMax cf603f0736
Fix Docker labels 2019-10-20 05:18:58 +02:00
CrazyMax 13cec3d9a9
Add ghaction-github-labeler 2019-10-20 01:19:39 +02:00
CrazyMax 6359aa45f0
Optimize layers 2019-10-10 16:37:50 +02:00
20 changed files with 373 additions and 129 deletions

1
.github/CODEOWNERS vendored Normal file
View File

@ -0,0 +1 @@
* @crazy-max

2
.github/FUNDING.yml vendored
View File

@ -1,2 +1,2 @@
patreon: crazymax
github: crazy-max
custom: https://www.paypal.me/crazyws

View File

@ -24,6 +24,7 @@ about: Create a report to help us improve
* Docker version (type `docker --version`) :
* Docker compose version if applicable (type `docker-compose --version`) :
* Platform (Debian 9, Ubuntu 18.04, ...) :
* System info (type `uname -a`) :
* Include all necessary configuration files : `docker-compose.yml`, `.env`, ...
### Docker info

69
.github/labels.yml vendored Normal file
View File

@ -0,0 +1,69 @@
## https://github.com/crazy-max/ghaction-github-labeler
- # bot
name: ":robot: bot"
color: "69cde9"
description: ""
- # bug
name: ":bug: bug"
color: "b60205"
description: ""
- # documentation
name: ":memo: documentation"
color: "c5def5"
description: ""
- # duplicate
name: ":busts_in_silhouette: duplicate"
color: "cccccc"
description: ""
- # enhancement
name: ":sparkles: enhancement"
color: "0054ca"
description: ""
- # feature request
name: ":bulb: feature request"
color: "0e8a16"
description: ""
- # feedback
name: ":mega: feedback"
color: "03a9f4"
description: ""
- # future maybe
name: ":rocket: future maybe"
color: "fef2c0"
description: ""
- # good first issue
name: ":hatching_chick: good first issue"
color: "7057ff"
description: ""
- # help wanted
name: ":pray: help wanted"
color: "4caf50"
description: ""
- # hold
name: ":hand: hold"
color: "24292f"
description: ""
- # invalid
name: ":no_entry_sign: invalid"
color: "e6e6e6"
description: ""
- # maybe bug
name: ":interrobang: maybe bug"
color: "ff5722"
description: ""
- # needs more info
name: ":thinking: needs more info"
color: "795548"
description: ""
- # question
name: ":question: question"
color: "3f51b5"
description: ""
- # upstream
name: ":eyes: upstream"
color: "fbca04"
description: ""
- # wontfix
name: ":coffin: wontfix"
color: "ffffff"
description: ""

View File

@ -1,11 +1,13 @@
name: build
on:
pull_request:
branches: 'master'
push:
branches: 'master'
tags: '*'
paths:
- '.github/workflows/build.yml'
- 'Dockerfile'
- 'entrypoint.sh'
jobs:
build:
@ -41,9 +43,9 @@ jobs:
run: |
docker buildx build --platform ${{ steps.prepare.outputs.docker_platforms }} \
--output "type=image,push=false" \
--label "org.label-schema.build-date=${{ steps.prepare.outputs.build_date }}" \
--label "org.label-schema.version=${{ steps.prepare.outputs.version }}" \
--label "org.label-schema.vcs-ref=${GITHUB_SHA::8}" \
--build-arg "BUILD_DATE=${{ steps.prepare.outputs.build_date }}" \
--build-arg "VCS_REF=${GITHUB_SHA::8}" \
--build-arg "VERSION=${{ steps.prepare.outputs.version }}" \
--tag "${{ steps.prepare.outputs.docker_image }}:latest" \
--tag "${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }}" \
--file Dockerfile .
@ -60,9 +62,9 @@ jobs:
run: |
docker buildx build --platform ${{ steps.prepare.outputs.docker_platforms }} \
--output "type=image,push=true" \
--label "org.label-schema.build-date=${{ steps.prepare.outputs.build_date }}" \
--label "org.label-schema.version=${{ steps.prepare.outputs.version }}" \
--label "org.label-schema.vcs-ref=${GITHUB_SHA::8}" \
--build-arg "BUILD_DATE=${{ steps.prepare.outputs.build_date }}" \
--build-arg "VCS_REF=${GITHUB_SHA::8}" \
--build-arg "VERSION=${{ steps.prepare.outputs.version }}" \
--tag "${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }}" \
--tag "${{ steps.prepare.outputs.docker_image }}:latest" \
--file Dockerfile .

25
.github/workflows/labels.yml vendored Normal file
View File

@ -0,0 +1,25 @@
name: labels
on:
push:
branches:
- 'master'
paths:
- '.github/labels.yml'
- '.github/workflows/labels.yml'
jobs:
labeler:
runs-on: ubuntu-latest
steps:
-
# https://github.com/actions/checkout
name: Checkout
uses: actions/checkout@v1
-
# https://github.com/crazy-max/ghaction-github-labeler
name: Run Labeler
if: success()
uses: crazy-max/ghaction-github-labeler@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -3,8 +3,16 @@ name: test
on:
pull_request:
branches: master
paths:
- '.github/workflows/test.yml'
- 'Dockerfile'
- 'entrypoint.sh'
push:
branches: master
paths:
- '.github/workflows/test.yml'
- 'Dockerfile'
- 'entrypoint.sh'
jobs:
test:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 956 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 956 B

View File

@ -1,5 +1,36 @@
# Changelog
## 22218-RC1 (2020/02/04)
* JetBrains License Server 22218
* AdoptOpenJDK JRE 13
## 21137-RC5 (2019/12/07)
* Fix timezone
## 21137-RC4 (2019/11/28)
* Proxy type defaults to `https`
* More unset
## 21137-RC3 (2019/11/28)
* Add env vars to set proxy settings (#21)
* Unset sensitive vars
## 21137-RC2 (2019/11/17)
* Allow to set custom `PUID`/`PGID`
## 21137-RC1 (2019/10/24)
* JetBrains License Server 21137
## 20308-RC4 (2019/10/10)
* Optimize layers
## 20308-RC3 (2019/10/10)
* Multi-platform Docker image

View File

@ -1,22 +1,46 @@
# syntax=docker/dockerfile:experimental
FROM --platform=${TARGETPLATFORM:-linux/amd64} adoptopenjdk:12-jre-hotspot
FROM --platform=${TARGETPLATFORM:-linux/amd64} adoptopenjdk:13-jre-hotspot as suexec
ARG BUILD_DATE
ARG VCS_REF
ARG VERSION
ARG TARGETPLATFORM
ARG BUILDPLATFORM
RUN printf "I am running on ${BUILDPLATFORM:-linux/amd64}, building for ${TARGETPLATFORM:-linux/amd64}\n$(uname -a)\n"
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
gcc \
libc-dev \
&& curl -o /usr/local/bin/su-exec.c https://raw.githubusercontent.com/ncopa/su-exec/master/su-exec.c \
&& gcc -Wall /usr/local/bin/su-exec.c -o/usr/local/bin/su-exec \
&& chown root:root /usr/local/bin/su-exec \
&& chmod 0755 /usr/local/bin/su-exec
FROM --platform=${TARGETPLATFORM:-linux/amd64} adoptopenjdk:13-jre-hotspot
ARG BUILD_DATE
ARG VCS_REF
ARG VERSION
LABEL maintainer="CrazyMax" \
org.label-schema.name="jetbrains-license-server" \
org.label-schema.description="JetBrains License Server" \
org.label-schema.url="https://github.com/crazy-max/docker-jetbrains-license-server" \
org.label-schema.vcs-url="https://github.com/crazy-max/docker-jetbrains-license-server" \
org.label-schema.vendor="CrazyMax" \
org.label-schema.schema-version="1.0"
org.opencontainers.image.created=$BUILD_DATE \
org.opencontainers.image.url="https://github.com/crazy-max/docker-jetbrains-license-server" \
org.opencontainers.image.source="https://github.com/crazy-max/docker-jetbrains-license-server" \
org.opencontainers.image.version=$VERSION \
org.opencontainers.image.revision=$VCS_REF \
org.opencontainers.image.vendor="CrazyMax" \
org.opencontainers.image.title="JetBrains License Server" \
org.opencontainers.image.description="JetBrains License Server" \
org.opencontainers.image.licenses="MIT"
ENV JLS_PATH="/opt/jetbrains-license-server" \
JLS_VERSION="20308" \
JLS_SHA256="15cd436d41b1af8e273b8f8b037d654a9e9d9ca8a5f188e08426ca1024ba143a" \
TZ="UTC"
JLS_VERSION="22218" \
JLS_SHA256="f68027a8b2b4f2d9b03fe0b0fef4a9ffc0fdfaf2657ab26d545777973311b601" \
TZ="UTC" \
PUID="1000" \
PGID="1000"
RUN apt-get update \
&& apt-get install -y \
@ -24,24 +48,22 @@ RUN apt-get update \
curl \
zip \
tzdata \
&& mkdir -p /data "$JLS_PATH" \
&& curl -L "https://download.jetbrains.com/lcsrv/license-server-installer.zip" -o "/tmp/jls.zip" \
&& echo "$JLS_SHA256 /tmp/jls.zip" | sha256sum -c - | grep OK \
&& unzip "/tmp/jls.zip" -d "$JLS_PATH" \
&& rm -f "/tmp/jls.zip" \
&& chmod a+x "$JLS_PATH/bin/license-server.sh" \
&& ln -sf "$JLS_PATH/bin/license-server.sh" "/usr/local/bin/license-server" \
&& groupadd -f -g ${PGID} jls \
&& useradd -o -s /bin/bash -d /data -u ${PUID} -g jls -m jls \
&& chown -R jls. /data "$JLS_PATH" \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
COPY --from=suexec /usr/local/bin/su-exec /usr/local/bin/su-exec
COPY entrypoint.sh /entrypoint.sh
RUN mkdir -p /data "$JLS_PATH" \
&& chmod a+x /entrypoint.sh \
&& groupadd -f -g 1000 jls \
&& useradd -o -s /bin/bash -d /data -u 1000 -g 1000 -m jls \
&& chown -R jls. /data "$JLS_PATH"
USER jls
RUN chmod a+x /entrypoint.sh
EXPOSE 8000
WORKDIR /data

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2018-2019 CrazyMax
Copyright (c) 2018-2020 CrazyMax
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,4 +1,4 @@
<p align="center"><a href="https://github.com/crazy-max/docker-jetbrains-license-server" target="_blank"><img height="128"src="https://raw.githubusercontent.com/crazy-max/docker-jetbrains-license-server/master/.res/docker-jetbrains-license-server.jpg"></a></p>
<p align="center"><a href="https://github.com/crazy-max/docker-jetbrains-license-server" target="_blank"><img height="128" src="https://raw.githubusercontent.com/crazy-max/docker-jetbrains-license-server/master/.res/docker-jetbrains-license-server.jpg"></a></p>
<p align="center">
<a href="https://hub.docker.com/r/crazymax/jetbrains-license-server/tags?page=1&ordering=last_updated"><img src="https://img.shields.io/github/v/tag/crazy-max/docker-jetbrains-license-server?label=version&style=flat-square" alt="Latest Version"></a>
@ -6,7 +6,7 @@
<a href="https://hub.docker.com/r/crazymax/jetbrains-license-server/"><img src="https://img.shields.io/docker/stars/crazymax/jetbrains-license-server.svg?style=flat-square" alt="Docker Stars"></a>
<a href="https://hub.docker.com/r/crazymax/jetbrains-license-server/"><img src="https://img.shields.io/docker/pulls/crazymax/jetbrains-license-server.svg?style=flat-square" alt="Docker Pulls"></a>
<a href="https://www.codacy.com/app/crazy-max/docker-jetbrains-license-server"><img src="https://img.shields.io/codacy/grade/eb420bc3e6ed49ff97cc261602228efa.svg?style=flat-square" alt="Code Quality"></a>
<br /><a href="https://www.patreon.com/crazymax"><img src="https://img.shields.io/badge/donate-patreon-f96854.svg?logo=patreon&style=flat-square" alt="Support me on Patreon"></a>
<br /><a href="https://github.com/sponsors/crazy-max"><img src="https://img.shields.io/badge/sponsor-crazy--max-181717.svg?logo=github&style=flat-square" alt="Become a sponsor"></a>
<a href="https://www.paypal.me/crazyws"><img src="https://img.shields.io/badge/donate-paypal-00457c.svg?logo=paypal&style=flat-square" alt="Donate Paypal"></a>
</p>
@ -19,9 +19,11 @@ If you are interested, [check out](https://hub.docker.com/r/crazymax/) my other
## Features
* Run as non-root user
* Multi-platform image
* License server completely customizable via environment variables
* Registration data and configuration in a single directory
* [Traefik](https://github.com/containous/traefik-library-image) as reverse proxy and creation/renewal of Let's Encrypt certificates
* [Traefik](https://github.com/containous/traefik-library-image) as reverse proxy and creation/renewal of Let's Encrypt certificates (see [this template](examples/traefik))
## Docker
@ -42,57 +44,62 @@ Image: crazymax/jetbrains-license-server:latest
### Environment variables
* `TZ` : The timezone assigned to the container (default `UTC`)
* `JLS_VIRTUAL_HOSTS` : [Virtual hosts](https://www.jetbrains.com/help/license_server/setting_host_and_port.html#d1010e63) where license server will be available (comma delimited for several hosts)
* `JLS_CONTEXT` : [Context path](https://www.jetbrains.com/help/license_server/setting_host_and_port.html#d1010e63) used by the license server (default `/`)
* `JLS_ACCESS_CONFIG` : JSON file to configure [user restrictions](https://www.jetbrains.com/help/license_server/configuring_user_restrictions.html) (default `/data/access-config.json`)
* `JLS_STATS_RECIPIENTS` : [Reports recipients](https://www.jetbrains.com/help/license_server/detailed_server_usage_statistics.html#d461e40) email addresses for stats (comma delimited)
* `JLS_REPORT_OUT_OF_LICENSE` : [Warn about lack of licenses](https://www.jetbrains.com/help/license_server/detailed_server_usage_statistics.html#d461e40) every hour following the percentage threshold (default `0`)
* `JLS_SMTP_SERVER` : SMTP server host to use for sending [stats](https://www.jetbrains.com/help/license_server/detailed_server_usage_statistics.html) (stats disabled if empty)
* `JLS_SMTP_PORT` : SMTP server port (default `25`)
* `JLS_SMTP_USERNAME` : SMTP username (auth disabled if empty)
* `JLS_SMTP_PASSWORD` : SMTP password (auth disabled if empty)
* `JLS_STATS_FROM` : [From address](https://www.jetbrains.com/help/license_server/detailed_server_usage_statistics.html#d461e40) for stats emails
* `JLS_STATS_TOKEN` : Enables an auth token for the [stats API](https://www.jetbrains.com/help/license_server/detailed_server_usage_statistics.html#d461e312) at `/reportApi` (HTTP POST)
* `TZ`: The timezone assigned to the container (default `UTC`)
* `PUID`: JLS UID (default `1000`)
* `PGID`: JLS GID (default `1000`)
* `JLS_VIRTUAL_HOSTS`: [Virtual hosts](https://www.jetbrains.com/help/license_server/setting_host_and_port.html#d1010e63) where license server will be available (comma delimited for several hosts)
* `JLS_CONTEXT`: [Context path](https://www.jetbrains.com/help/license_server/setting_host_and_port.html#d1010e63) used by the license server (default `/`)
* `JLS_PROXY_TYPE`: Type of [proxy](https://www.jetbrains.com/help/license_server/configuring_proxy_settings.html) to use. Can be `http` or `https` (default `https`)
* `JLS_PROXY_HOST`: The host name of your proxy server
* `JLS_PROXY_PORT`: The port number that the proxy server listens to
* `JLS_PROXY_USER`: Username to connect to the proxy server (no auth if empty)
* `JLS_PROXY_PASSWORD`: Password to connect to the proxy server (no auth if empty)
* `JLS_ACCESS_CONFIG`: JSON file to configure [user restrictions](https://www.jetbrains.com/help/license_server/configuring_user_restrictions.html) (default `/data/access-config.json`)
* `JLS_STATS_RECIPIENTS`: [Reports recipients](https://www.jetbrains.com/help/license_server/detailed_server_usage_statistics.html#d461e40) email addresses for stats (comma delimited)
* `JLS_REPORT_OUT_OF_LICENSE`: [Warn about lack of licenses](https://www.jetbrains.com/help/license_server/detailed_server_usage_statistics.html#d461e40) every hour following the percentage threshold (default `0`)
* `JLS_SMTP_SERVER`: SMTP server host to use for sending [stats](https://www.jetbrains.com/help/license_server/detailed_server_usage_statistics.html) (stats disabled if empty)
* `JLS_SMTP_PORT`: SMTP server port (default `25`)
* `JLS_SMTP_USERNAME`: SMTP username (auth disabled if empty)
* `JLS_SMTP_PASSWORD`: SMTP password (auth disabled if empty)
* `JLS_STATS_FROM`: [From address](https://www.jetbrains.com/help/license_server/detailed_server_usage_statistics.html#d461e40) for stats emails
* `JLS_STATS_TOKEN`: Enables an auth token for the [stats API](https://www.jetbrains.com/help/license_server/detailed_server_usage_statistics.html#d461e312) at `/reportApi` (HTTP POST)
### Volumes
* `/data` : Contains [registration data](https://www.jetbrains.com/help/license_server/migrate.html) and configuration
* `/data`: Contains [registration data](https://www.jetbrains.com/help/license_server/migrate.html) and configuration
> :warning: Note that the volume should be owned by uid `1000` and gid `1000`. If you don't give the volume correct permissions, the container may not start.
> :warning: Note that the volumes should be owned by the user/group with the specified `PUID` and `PGID`. If you don't give the volume correct permissions, the container may not start.
### Ports
* `8000` : Jetbrains License Server HTTP port
* `8000`: Jetbrains License Server HTTP port
## Use this image
### Docker Compose
Docker compose is the recommended way to run this image. Copy the content of folder [examples/compose](examples/compose) in `/var/jls/` on your host for example. Edit the compose and env files with your preferences and run the following commands :
Docker compose is the recommended way to run this image. Copy the content of folder [examples/compose](examples/compose) in `/var/jls/` on your host for example. Edit the compose and env files with your preferences and run the following commands:
```bash
touch acme.json
chmod 600 acme.json
docker-compose up -d
docker-compose logs -f
```
### Command line
You can also use the following minimal command :
You can also use the following minimal command:
```bash
$ docker run -d -p 8000:8000 --name jetbrains_license_server \
-e TZ="Europe/Paris" \
-e JLS_VIRTUAL_HOSTS=jetbrains-license-server.example.com \
-e JLS_VIRTUAL_HOSTS=jls.example.com \
-v $(pwd)/data:/data \
crazymax/jetbrains-license-server:latest
```
## Update
Recreate the container whenever i push an update :
Recreate the container whenever I push an update:
```bash
docker-compose pull
@ -115,12 +122,9 @@ That's because the license server is running behind a reverse proxy. Please conf
## How can I help ?
All kinds of contributions are welcome :raised_hands:!<br />
The most basic way to show your support is to star :star2: the project, or to raise issues :speech_balloon:<br />
But we're not gonna lie to each other, I'd rather you buy me a beer or two :beers:!
All kinds of contributions are welcome :raised_hands:! The most basic way to show your support is to star :star2: the project, or to raise issues :speech_balloon: You can also support this project by [**becoming a sponsor on GitHub**](https://github.com/sponsors/crazy-max) :clap: or by making a [Paypal donation](https://www.paypal.me/crazyws) to ensure this journey continues indefinitely! :rocket:
[![Support me on Patreon](.res/patreon.png)](https://www.patreon.com/crazymax)
[![Paypal Donate](.res/paypal.png)](https://www.paypal.me/crazyws)
Thanks again for your support, it is much appreciated! :pray:
## License

View File

@ -1,64 +1,105 @@
#!/bin/sh
TZ=${TZ:-UTC}
JLS_PATH="/opt/jetbrains-license-server"
JLS_LISTEN_ADDRESS="0.0.0.0"
JLS_PORT=8000
JLS_CONTEXT=${JLS_CONTEXT:-/}
JLS_ACCESS_CONFIG=${JLS_ACCESS_CONFIG:-/data/access-config.json}
JLS_PROXY_TYPE=${JLS_PROXY_TYPE:-https}
if [ -n "${PGID}" ] && [ "${PGID}" != "$(id -g jls)" ]; then
echo "Switching to PGID ${PGID}..."
sed -i -e "s/^jls:\([^:]*\):[0-9]*/jls:\1:${PGID}/" /etc/group
sed -i -e "s/^jls:\([^:]*\):\([0-9]*\):[0-9]*/jls:\1:\2:${PGID}/" /etc/passwd
fi
if [ -n "${PUID}" ] && [ "${PUID}" != "$(id -u jls)" ]; then
echo "Switching to PUID ${PUID}..."
sed -i -e "s/^jls:\([^:]*\):[0-9]*:\([0-9]*\)/jls:\1:${PUID}:\2/" /etc/passwd
fi
# Timezone
echo "Setting timezone to ${TZ}..."
ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime
echo ${TZ} > /etc/timezone
# Init
echo "Initializing files and folders..."
touch "/data/access-config.json"
su-exec jls:jls touch "/data/access-config.json"
# https://www.jetbrains.com/help/license_server/setting_host_and_port.html
echo "Configuring Jetbrains License Server..."
license-server configure --listen ${JLS_LISTEN_ADDRESS} --port ${JLS_PORT} --context ${JLS_CONTEXT}
su-exec jls:jls license-server configure --listen ${JLS_LISTEN_ADDRESS} --port ${JLS_PORT} --context ${JLS_CONTEXT}
# https://www.jetbrains.com/help/license_server/setting_host_and_port.html
if [ ! -z "$JLS_VIRTUAL_HOSTS" ] ; then
if [ ! -z "$JLS_VIRTUAL_HOSTS" ]; then
echo "Following virtual hosts will be used:"
for JLS_VIRTUAL_HOST in $(echo ${JLS_VIRTUAL_HOSTS} | tr "," "\n"); do
echo "-> ${JLS_VIRTUAL_HOST}"
done
license-server configure --jetty.virtualHosts.names=${JLS_VIRTUAL_HOSTS}
su-exec jls:jls license-server configure --jetty.virtualHosts.names=${JLS_VIRTUAL_HOSTS}
fi
# https://www.jetbrains.com/help/license_server/configuring_proxy_settings.html
if [ ! -z "$JLS_PROXY_HOST" -a ! -z "$JLS_PROXY_PORT" ]; then
echo "Setting ${JLS_PROXY_TYPE} proxy to $JLS_PROXY_HOST:$JLS_PROXY_PORT..."
su-exec jls:jls license-server configure \
-J-D${JLS_PROXY_TYPE}.proxyHost=${JLS_PROXY_HOST} \
-J-D${JLS_PROXY_TYPE}.proxyPort=${JLS_PROXY_PORT}
if [ ! -z "$JLS_PROXY_USER" -a ! -z "$JLS_PROXY_PASSWORD" ]; then
echo "Setting ${JLS_PROXY_TYPE} proxy credentials..."
su-exec jls:jls license-server configure \
-J-D${JLS_PROXY_TYPE}.proxyUser=${JLS_PROXY_USER} \
-J-D${JLS_PROXY_TYPE}.proxyPassword=${JLS_PROXY_PASSWORD}
fi
fi
unset JLS_PROXY_USER
unset JLS_PROXY_PASSWORD
# https://www.jetbrains.com/help/license_server/configuring_user_restrictions.html
if [ -s "$JLS_ACCESS_CONFIG" ]; then
echo "Enabling user restrictions access from $JLS_ACCESS_CONFIG..."
license-server configure --access.config=file:${JLS_ACCESS_CONFIG}
su-exec jls:jls license-server configure --access.config=file:${JLS_ACCESS_CONFIG}
fi
# https://www.jetbrains.com/help/license_server/detailed_server_usage_statistics.html
if [ ! -z "$JLS_SMTP_SERVER" -a ! -z "$JLS_STATS_RECIPIENTS" ] ; then
if [ ! -z "$JLS_SMTP_SERVER" -a ! -z "$JLS_STATS_RECIPIENTS" ]; then
JLS_SMTP_PORT=${JLS_SMTP_PORT:-25}
echo "Enabling User Reporting via SMTP at $JLS_SMTP_SERVER:$JLS_SMTP_PORT..."
license-server configure --smtp.server ${JLS_SMTP_SERVER} --smtp.server.port ${JLS_SMTP_PORT}
su-exec jls:jls license-server configure --smtp.server ${JLS_SMTP_SERVER} --smtp.server.port ${JLS_SMTP_PORT}
if [ ! -z "$JLS_SMTP_USERNAME" -a ! -z "$JLS_SMTP_PASSWORD" ] ; then
if [ ! -z "$JLS_SMTP_USERNAME" -a ! -z "$JLS_SMTP_PASSWORD" ]; then
echo "Using SMTP username $JLS_SMTP_USERNAME with password..."
license-server configure --smtp.server.username ${JLS_SMTP_USERNAME}
license-server configure --smtp.server.password ${JLS_SMTP_PASSWORD}
su-exec jls:jls license-server configure --smtp.server.username ${JLS_SMTP_USERNAME}
su-exec jls:jls license-server configure --smtp.server.password ${JLS_SMTP_PASSWORD}
fi
unset JLS_SMTP_USERNAME
unset JLS_SMTP_PASSWORD
if [ ! -z "$JLS_STATS_FROM" ] ; then
if [ ! -z "$JLS_STATS_FROM" ]; then
echo "Setting stats sender to $JLS_STATS_FROM..."
license-server configure --stats.from ${JLS_STATS_FROM}
su-exec jls:jls license-server configure --stats.from ${JLS_STATS_FROM}
fi
if [ "$JLS_REPORT_OUT_OF_LICENSE" -gt 0 ]; then
echo "Setting report out of licence to $JLS_REPORT_OUT_OF_LICENSE%..."
license-server configure --reporting.out.of.license.threshold ${JLS_REPORT_OUT_OF_LICENSE}
su-exec jls:jls license-server configure --reporting.out.of.license.threshold ${JLS_REPORT_OUT_OF_LICENSE}
fi
echo "Stats recipients: $JLS_STATS_RECIPIENTS..."
license-server configure --stats.recipients ${JLS_STATS_RECIPIENTS}
su-exec jls:jls license-server configure --stats.recipients ${JLS_STATS_RECIPIENTS}
fi
# https://www.jetbrains.com/help/license_server/detailed_server_usage_statistics.html
if [ ! -z "$JLS_STATS_TOKEN" ] ; then
if [ ! -z "$JLS_STATS_TOKEN" ]; then
echo "Enabling stats via API at /$JLS_STATS_TOKEN..."
license-server configure --reporting.token ${JLS_STATS_TOKEN}
su-exec jls:jls license-server configure --reporting.token ${JLS_STATS_TOKEN}
fi
unset JLS_STATS_TOKEN
exec "$@"
echo "Fixing perms..."
chown -R jls:jls /data "$JLS_PATH"
exec su-exec jls:jls "$@"

View File

@ -1,63 +1,18 @@
version: "3.2"
services:
traefik:
image: traefik:1.7-alpine
container_name: traefik
command:
- "--logLevel=INFO"
- "--defaultentrypoints=http,https"
- "--entryPoints=Name:http Address::80 Redirect.EntryPoint:https"
- "--entryPoints=Name:https Address::443 TLS"
- "--docker"
- "--docker.exposedbydefault=false"
- "--docker.domain=example.com"
- "--acme=false"
- "--acme.acmelogging=true"
- "--acme.email=webmaster@example.com"
- "--acme.storage=acme.json"
- "--acme.entryPoint=https"
- "--acme.onhostrule=true"
- "--acme.httpchallenge=true"
- "--acme.httpchallenge.entrypoint=http"
ports:
- target: 80
published: 80
protocol: tcp
- target: 443
published: 443
protocol: tcp
volumes:
- "./acme.json:/acme.json"
- "/var/run/docker.sock:/var/run/docker.sock"
restart: always
app:
jls:
image: crazymax/jetbrains-license-server:latest
container_name: jetbrains_license_server
depends_on:
- traefik
container_name: jls
ports:
- target: 8000
published: 8000
protocol: tcp
volumes:
- "jetbrains-license-server:/data"
labels:
- "traefik.enable=true"
- "traefik.backend=jetbrains-license-server"
- "traefik.port=8000"
- "traefik.frontend.rule=Host:jetbrains-license-server.example.com,an-other-host.example.com"
environment:
- "TZ=Europe/Paris"
- "JLS_VIRTUAL_HOSTS=jetbrains-license-server.example.com,an-other-host.example.com"
- "JLS_CONTEXT=/"
- "JLS_ACCESS_CONFIG=/data/access-config.json"
- "JLS_STATS_RECIPIENTS=webmaster@example.com,an-other-address@example.com"
- "JLS_REPORT_OUT_OF_LICENSE=90"
- "JLS_SMTP_SERVER=smtp.example.com"
- "JLS_SMTP_PORT=25"
- "JLS_SMTP_USERNAME=smtp@example.com"
- "JLS_SMTP_PASSWORD="
- "JLS_STATS_FROM=jetbrains@example.com"
- "JLS_STATS_TOKEN=0123456789ABCDEF"
- "jls:/data"
env_file:
- "./jls.env"
restart: always
volumes:
jetbrains-license-server:
jls:

12
examples/compose/jls.env Normal file
View File

@ -0,0 +1,12 @@
TZ=Europe/Paris
JLS_VIRTUAL_HOSTS=127.0.0.1,jls.example.com
JLS_CONTEXT=/
JLS_ACCESS_CONFIG=/data/access-config.json
JLS_STATS_RECIPIENTS=webmaster@example.com,an-other-address@example.com
JLS_REPORT_OUT_OF_LICENSE=90
JLS_SMTP_SERVER=smtp.example.com
JLS_SMTP_PORT=25
JLS_SMTP_USERNAME=smtp@example.com
JLS_SMTP_PASSWORD=
JLS_STATS_FROM=jetbrains@example.com
JLS_STATS_TOKEN=0123456789ABCDEF

View File

@ -0,0 +1,8 @@
## Usage
```bash
touch acme.json
chmod 600 acme.json
docker-compose up -d
docker-compose logs -f
```

View File

@ -0,0 +1,50 @@
version: "3.2"
services:
traefik:
image: traefik:1.7-alpine
container_name: traefik
command:
- "--logLevel=INFO"
- "--defaultentrypoints=http,https"
- "--entryPoints=Name:http Address::80 Redirect.EntryPoint:https"
- "--entryPoints=Name:https Address::443 TLS"
- "--docker"
- "--docker.exposedbydefault=false"
- "--docker.domain=example.com"
- "--acme=false"
- "--acme.acmelogging=true"
- "--acme.email=webmaster@example.com"
- "--acme.storage=acme.json"
- "--acme.entryPoint=https"
- "--acme.onhostrule=true"
- "--acme.httpchallenge=true"
- "--acme.httpchallenge.entrypoint=http"
ports:
- target: 80
published: 80
protocol: tcp
- target: 443
published: 443
protocol: tcp
volumes:
- "./acme.json:/acme.json"
- "/var/run/docker.sock:/var/run/docker.sock"
restart: always
jls:
image: crazymax/jetbrains-license-server:latest
container_name: jls
volumes:
- "jls:/data"
labels:
- "traefik.enable=true"
- "traefik.backend=jls"
- "traefik.port=8000"
- "traefik.frontend.rule=Host:jls.example.com,an-other-host.example.com"
env_file:
- "./jls.env"
restart: always
volumes:
jls:

12
examples/traefik/jls.env Normal file
View File

@ -0,0 +1,12 @@
TZ=Europe/Paris
JLS_VIRTUAL_HOSTS=jls.example.com,an-other-host.example.com
JLS_CONTEXT=/
JLS_ACCESS_CONFIG=/data/access-config.json
JLS_STATS_RECIPIENTS=webmaster@example.com,an-other-address@example.com
JLS_REPORT_OUT_OF_LICENSE=90
JLS_SMTP_SERVER=smtp.example.com
JLS_SMTP_PORT=25
JLS_SMTP_USERNAME=smtp@example.com
JLS_SMTP_PASSWORD=
JLS_STATS_FROM=jetbrains@example.com
JLS_STATS_TOKEN=0123456789ABCDEF

3
heroku.yml Normal file
View File

@ -0,0 +1,3 @@
build:
docker:
web: Dockerfile