Compare commits
19 Commits
Author | SHA1 | Date | |
---|---|---|---|
Sambo Chea | 148519fb43 | ||
CrazyMax | 568e2d961e | ||
CrazyMax | b6570cbf4a | ||
CrazyMax | d128133e79 | ||
CrazyMax | 61df733099 | ||
CrazyMax | 62de4c614c | ||
CrazyMax | 6f91dbf64c | ||
CrazyMax | 737f2bd964 | ||
CrazyMax | 3cef833bde | ||
CrazyMax | fd6895097c | ||
CrazyMax | 171e0c32f1 | ||
CrazyMax | fdb28342f3 | ||
CrazyMax | 7f5f161300 | ||
CrazyMax | bfcb34f6f4 | ||
CrazyMax | 89ffc880f9 | ||
CrazyMax | f6aca1ead3 | ||
CrazyMax | 8f4d76fb7f | ||
CrazyMax | cf603f0736 | ||
CrazyMax | 13cec3d9a9 |
|
@ -0,0 +1 @@
|
|||
* @crazy-max
|
|
@ -1,2 +1,2 @@
|
|||
patreon: crazymax
|
||||
github: crazy-max
|
||||
custom: https://www.paypal.me/crazyws
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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: ""
|
|
@ -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 .
|
||||
|
|
|
@ -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 }}
|
|
@ -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:
|
||||
|
|
BIN
.res/patreon.png
BIN
.res/patreon.png
Binary file not shown.
Before Width: | Height: | Size: 956 B |
BIN
.res/paypal.png
BIN
.res/paypal.png
Binary file not shown.
Before Width: | Height: | Size: 956 B |
27
CHANGELOG.md
27
CHANGELOG.md
|
@ -1,5 +1,32 @@
|
|||
# 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
|
||||
|
|
51
Dockerfile
51
Dockerfile
|
@ -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 \
|
||||
|
@ -31,17 +55,16 @@ RUN apt-get update \
|
|||
&& 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 1000 jls \
|
||||
&& useradd -o -s /bin/bash -d /data -u 1000 -g 1000 -m jls \
|
||||
&& 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 chmod a+x /entrypoint.sh
|
||||
|
||||
USER jls
|
||||
|
||||
EXPOSE 8000
|
||||
WORKDIR /data
|
||||
VOLUME [ "/data" ]
|
||||
|
|
2
LICENSE
2
LICENSE
|
@ -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
|
||||
|
|
62
README.md
62
README.md
|
@ -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
|
||||
|
||||
|
|
|
@ -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 "$@"
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
|
@ -0,0 +1,8 @@
|
|||
## Usage
|
||||
|
||||
```bash
|
||||
touch acme.json
|
||||
chmod 600 acme.json
|
||||
docker-compose up -d
|
||||
docker-compose logs -f
|
||||
```
|
|
@ -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:
|
|
@ -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
|
|
@ -0,0 +1,3 @@
|
|||
build:
|
||||
docker:
|
||||
web: Dockerfile
|
Loading…
Reference in New Issue
Block a user