Compare commits
56 Commits
248c70a862
...
16f80cd78b
Author | SHA1 | Date | |
---|---|---|---|
16f80cd78b | |||
07aec53787 | |||
3e87820f63 | |||
a927e291b5 | |||
72054d30c4 | |||
00dc848083 | |||
78b6fe52c7 | |||
f82d73bb01 | |||
416df311b8 | |||
a6ea8241c2 | |||
e70f70d806 | |||
77be5772c4 | |||
6c1b05c66a | |||
a54411a957 | |||
90e0cb8e84 | |||
eecb59e2e4 | |||
4c0f65faec | |||
e41084f5c5 | |||
36d5b83fb8 | |||
11138c2191 | |||
ff9e85e32b | |||
cb6a089678 | |||
085186f82a | |||
f77d3feee1 | |||
f2721c7663 | |||
40cb5518cb | |||
021c0ac38d | |||
9c22628b4e | |||
966b421dad | |||
7f8752a93d | |||
30979fd18e | |||
72965cc879 | |||
1887cbc534 | |||
2e942f4553 | |||
3dda920a52 | |||
765a994d83 | |||
23488f94d4 | |||
f9341cdab4 | |||
cad81ad1d6 | |||
b07b7da2f3 | |||
1ef7dd82f6 | |||
5a1b1a5950 | |||
83f4b42f01 | |||
a3baaab26f | |||
aa4ebfce73 | |||
aa746feb13 | |||
fce0eb6d74 | |||
32806e5cca | |||
50eddeecfc | |||
092e6186ab | |||
acbe889fd9 | |||
05cad95c2a | |||
c9e36759e3 | |||
d116eec626 | |||
b1620154db | |||
4181095791 |
11
.DEBIAN/requirements-bookworm-12.txt
Normal file
11
.DEBIAN/requirements-bookworm-12.txt
Normal file
@ -0,0 +1,11 @@
|
||||
# https://packages.debian.org/hu/
|
||||
fastapi==0.92.0
|
||||
uvicorn[standard]==0.17.6
|
||||
python-jose[pycryptodome]==3.3.0
|
||||
pycryptodome==3.11.0
|
||||
python-dateutil==2.8.2
|
||||
sqlalchemy==1.4.46
|
||||
markdown==3.4.1
|
||||
python-dotenv==0.21.0
|
||||
jinja2==3.1.2
|
||||
httpx==0.23.3
|
10
.DEBIAN/requirements-ubuntu-23.04.txt
Normal file
10
.DEBIAN/requirements-ubuntu-23.04.txt
Normal file
@ -0,0 +1,10 @@
|
||||
# https://packages.ubuntu.com
|
||||
fastapi==0.91.0
|
||||
uvicorn[standard]==0.15.0
|
||||
python-jose[pycryptodome]==3.3.0
|
||||
pycryptodome==3.11.0
|
||||
python-dateutil==2.8.2
|
||||
sqlalchemy==1.4.46
|
||||
markdown==3.4.3
|
||||
python-dotenv==0.21.0
|
||||
jinja2==3.1.2
|
10
.DEBIAN/requirements-ubuntu-23.10.txt
Normal file
10
.DEBIAN/requirements-ubuntu-23.10.txt
Normal file
@ -0,0 +1,10 @@
|
||||
# https://packages.ubuntu.com
|
||||
fastapi==0.101.0
|
||||
uvicorn[standard]==0.23.2
|
||||
python-jose[pycryptodome]==3.3.0
|
||||
pycryptodome==3.11.0
|
||||
python-dateutil==2.8.2
|
||||
sqlalchemy==1.4.47
|
||||
markdown==3.4.4
|
||||
python-dotenv==1.0.0
|
||||
jinja2==3.1.2
|
@ -12,7 +12,7 @@ depends=('python' 'python-jose' 'python-starlette' 'python-httpx' 'python-fastap
|
||||
provider=("$pkgname")
|
||||
install="$pkgname.install"
|
||||
backup=('etc/default/fastapi-dls')
|
||||
source=('git+file:///builds/oscar.krause/fastapi-dls' # https://gitea.publichub.eu/oscar.krause/fastapi-dls.git
|
||||
source=("git+file://${CI_PROJECT_DIR}"
|
||||
"$pkgname.default"
|
||||
"$pkgname.service"
|
||||
"$pkgname.tmpfiles")
|
||||
|
@ -1,7 +1,9 @@
|
||||
version: "2"
|
||||
plugins:
|
||||
bandit:
|
||||
enabled: true
|
||||
sonar-python:
|
||||
enabled: true
|
||||
pylint:
|
||||
enabled: true
|
||||
config:
|
||||
tests_patterns:
|
||||
- test/**
|
||||
|
@ -8,6 +8,9 @@ include:
|
||||
cache:
|
||||
key: one-key-to-rule-them-all
|
||||
|
||||
variables:
|
||||
DOCKER_BUILDX_PLATFORM: "linux/amd64,linux/arm64"
|
||||
|
||||
build:docker:
|
||||
image: docker:dind
|
||||
interruptible: true
|
||||
@ -25,7 +28,7 @@ build:docker:
|
||||
script:
|
||||
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
||||
- IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHA
|
||||
- docker buildx build --progress=plain --platform linux/amd64,linux/arm64 --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE --push .
|
||||
- docker buildx build --progress=plain --platform $DOCKER_BUILDX_PLATFORM --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE --push .
|
||||
- docker buildx imagetools inspect $IMAGE
|
||||
- echo "CS_IMAGE=$IMAGE" > container_scanning.env
|
||||
artifacts:
|
||||
@ -123,16 +126,28 @@ build:pacman:
|
||||
- "*.pkg.tar.zst"
|
||||
|
||||
test:
|
||||
image: python:3.11-slim-bullseye
|
||||
image: python:3.11-slim-bookworm
|
||||
stage: test
|
||||
interruptible: true
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH
|
||||
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
||||
- if: $CI_COMMIT_TAG
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||
- if: $CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
|
||||
changes:
|
||||
- app/**/*
|
||||
- test/**/*
|
||||
variables:
|
||||
DATABASE: sqlite:///../app/db.sqlite
|
||||
parallel:
|
||||
matrix:
|
||||
- REQUIREMENTS:
|
||||
- requirements.txt
|
||||
- .DEBIAN/requirements-bookworm-12.txt
|
||||
- .DEBIAN/requirements-ubuntu-23.10.txt
|
||||
before_script:
|
||||
- pip install -r requirements.txt
|
||||
- apt-get update && apt-get install -y python3-dev gcc
|
||||
- pip install -r $REQUIREMENTS
|
||||
- pip install pytest httpx
|
||||
- mkdir -p app/cert
|
||||
- openssl genrsa -out app/cert/instance.private.pem 2048
|
||||
@ -190,7 +205,7 @@ test:debian:
|
||||
|
||||
test:ubuntu:
|
||||
extends: .test:linux
|
||||
image: ubuntu:22.10
|
||||
image: ubuntu:23.10
|
||||
|
||||
test:archlinux:
|
||||
image: archlinux:base
|
||||
@ -208,10 +223,13 @@ test:archlinux:
|
||||
- pacman -U --noconfirm *.pkg.tar.zst
|
||||
|
||||
code_quality:
|
||||
variables:
|
||||
SOURCE_CODE: app
|
||||
rules:
|
||||
- if: $CODE_QUALITY_DISABLED
|
||||
when: never
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
||||
|
||||
secret_detection:
|
||||
rules:
|
||||
@ -226,12 +244,25 @@ semgrep-sast:
|
||||
- if: $SAST_DISABLED
|
||||
when: never
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
||||
|
||||
test_coverage:
|
||||
extends: test
|
||||
# extends: test
|
||||
image: python:3.11-slim-bookworm
|
||||
allow_failure: true
|
||||
stage: test
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||
variables:
|
||||
DATABASE: sqlite:///../app/db.sqlite
|
||||
before_script:
|
||||
- apt-get update && apt-get install -y python3-dev gcc
|
||||
- pip install -r requirements.txt
|
||||
- pip install pytest httpx
|
||||
- mkdir -p app/cert
|
||||
- openssl genrsa -out app/cert/instance.private.pem 2048
|
||||
- openssl rsa -in app/cert/instance.private.pem -outform PEM -pubout -out app/cert/instance.public.pem
|
||||
- cd test
|
||||
script:
|
||||
- pip install pytest pytest-cov
|
||||
- coverage run -m pytest main.py
|
||||
@ -256,6 +287,7 @@ gemnasium-python-dependency_scanning:
|
||||
- if: $DEPENDENCY_SCANNING_DISABLED
|
||||
when: never
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
||||
|
||||
.deploy:
|
||||
rules:
|
||||
@ -263,24 +295,24 @@ gemnasium-python-dependency_scanning:
|
||||
|
||||
deploy:docker:
|
||||
extends: .deploy
|
||||
image: docker:dind
|
||||
stage: deploy
|
||||
tags: [ docker ]
|
||||
before_script:
|
||||
- echo "Building docker image for commit $CI_COMMIT_SHA with version $CI_COMMIT_REF_NAME"
|
||||
- docker buildx inspect
|
||||
- docker buildx create --use
|
||||
script:
|
||||
- echo "========== GitLab-Registry =========="
|
||||
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
||||
- IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_COMMIT_REF_NAME
|
||||
- docker build . --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:$CI_COMMIT_REF_NAME
|
||||
- docker build . --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:latest
|
||||
- docker push $IMAGE:$CI_COMMIT_REF_NAME
|
||||
- docker push $IMAGE:latest
|
||||
- IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH
|
||||
- docker buildx build --progress=plain --platform $DOCKER_BUILDX_PLATFORM --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:$CI_COMMIT_REF_NAME --push .
|
||||
- docker buildx build --progress=plain --platform $DOCKER_BUILDX_PLATFORM --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:latest --push .
|
||||
- echo "========== Docker-Hub =========="
|
||||
- docker login -u $PUBLIC_REGISTRY_USER -p $PUBLIC_REGISTRY_TOKEN
|
||||
- IMAGE=$PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME
|
||||
- docker build . --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:$CI_COMMIT_REF_NAME
|
||||
- docker build . --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:latest
|
||||
- docker push $IMAGE:$CI_COMMIT_REF_NAME
|
||||
- docker push $IMAGE:latest
|
||||
- docker buildx build --progress=plain --platform $DOCKER_BUILDX_PLATFORM --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:$CI_COMMIT_REF_NAME --push .
|
||||
- docker buildx build --progress=plain --platform $DOCKER_BUILDX_PLATFORM --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:latest --push .
|
||||
|
||||
deploy:apt:
|
||||
# doc: https://git.collinwebdesigns.de/help/user/packages/debian_repository/index.md#install-a-package
|
||||
@ -331,7 +363,6 @@ deploy:pacman:
|
||||
artifacts: true
|
||||
script:
|
||||
- source .PKGBUILD/PKGBUILD
|
||||
- source version.env
|
||||
# fastapi-dls-1.0-1-any.pkg.tar.zst
|
||||
- BUILD_NAME=${pkgname}-${CI_COMMIT_REF_NAME}-${pkgrel}-any.pkg.tar.zst
|
||||
- PACKAGE_NAME=${pkgname}
|
||||
|
@ -7,10 +7,10 @@ RUN echo -e "VERSION=$VERSION\nCOMMIT=$COMMIT" > /version.env
|
||||
COPY requirements.txt /tmp/requirements.txt
|
||||
|
||||
RUN apk update \
|
||||
&& apk add --no-cache --virtual build-deps gcc g++ python3-dev musl-dev \
|
||||
&& apk add --no-cache curl postgresql postgresql-dev mariadb-connector-c-dev sqlite-dev \
|
||||
&& apk add --no-cache --virtual build-deps gcc g++ python3-dev musl-dev pkgconfig \
|
||||
&& apk add --no-cache curl postgresql postgresql-dev mariadb-dev sqlite-dev \
|
||||
&& pip install --no-cache-dir --upgrade uvicorn \
|
||||
&& pip install --no-cache-dir psycopg2==2.9.5 mysqlclient==2.1.1 pysqlite3==0.5.0 \
|
||||
&& pip install --no-cache-dir psycopg2==2.9.6 mysqlclient==2.2.0 pysqlite3==0.5.1 \
|
||||
&& pip install --no-cache-dir -r /tmp/requirements.txt \
|
||||
&& apk del build-deps
|
||||
|
||||
|
59
README.md
59
README.md
@ -2,7 +2,7 @@
|
||||
|
||||
Minimal Delegated License Service (DLS).
|
||||
|
||||
Compatibility tested with official DLS 2.0.1.
|
||||
Compatibility tested with official NLS 2.0.1, 2.1.0, 3.1.0. For Driver compatibility see [here](#setup-client).
|
||||
|
||||
This service can be used without internet connection.
|
||||
Only the clients need a connection to this service on configured port.
|
||||
@ -25,8 +25,9 @@ Only the clients need a connection to this service on configured port.
|
||||
|
||||
- 256mb ram
|
||||
- 4gb hdd
|
||||
- *maybe IPv6 must be disabled*
|
||||
|
||||
Tested with Ubuntu 22.10 (from Proxmox templates), actually its consuming 100mb ram and 750mb hdd.
|
||||
Tested with Ubuntu 22.10 (EOL!) (from Proxmox templates), actually its consuming 100mb ram and 750mb hdd.
|
||||
|
||||
**Prepare your system**
|
||||
|
||||
@ -34,12 +35,12 @@ Tested with Ubuntu 22.10 (from Proxmox templates), actually its consuming 100mb
|
||||
|
||||
## Docker
|
||||
|
||||
Docker-Images are available here:
|
||||
Docker-Images are available here for Intel (x86), AMD (amd64) and ARM (arm64):
|
||||
|
||||
- [Docker-Hub](https://hub.docker.com/repository/docker/collinwebdesigns/fastapi-dls): `collinwebdesigns/fastapi-dls:latest`
|
||||
- [GitLab-Registry](https://git.collinwebdesigns.de/oscar.krause/fastapi-dls/container_registry): `registry.git.collinwebdesigns.de/oscar.krause/fastapi-dls/main:latest`
|
||||
- [GitLab-Registry](https://git.collinwebdesigns.de/oscar.krause/fastapi-dls/container_registry): `registry.git.collinwebdesigns.de/oscar.krause/fastapi-dls:latest`
|
||||
|
||||
The images include database drivers for `postgres`, `mysql`, `mariadb` and `sqlite`.
|
||||
The images include database drivers for `postgres`, `mariadb` and `sqlite`.
|
||||
|
||||
**Run this on the Docker-Host**
|
||||
|
||||
@ -65,7 +66,9 @@ docker run -e DLS_URL=`hostname -i` -e DLS_PORT=443 -p 443:443 -v $WORKING_DIR:/
|
||||
|
||||
**Docker-Compose / Deploy stack**
|
||||
|
||||
Goto [`docker-compose.yml`](docker-compose.yml) for more advanced example (with reverse proxy usage).
|
||||
See [`examples`](examples) directory for more advanced examples (with reverse proxy usage).
|
||||
|
||||
> Adjust *REQUIRED* variables as needed
|
||||
|
||||
```yaml
|
||||
version: '3.9'
|
||||
@ -99,9 +102,10 @@ volumes:
|
||||
dls-db:
|
||||
```
|
||||
|
||||
## Debian/Ubuntu (manual method using `git clone` and python virtual environment)
|
||||
## Debian/Ubuntu/macOS (manual method using `git clone` and python virtual environment)
|
||||
|
||||
Tested on `Debian 11 (bullseye)`, Ubuntu may also work.
|
||||
Tested on `Debian 11 (bullseye)`, `Debian 12 (bookworm)` and `macOS Ventura (13.6)`, Ubuntu may also work.
|
||||
**Please note that setup on macOS differs from Debian based systems.**
|
||||
|
||||
**Make sure you are logged in as root.**
|
||||
|
||||
@ -152,6 +156,8 @@ su - www-data -c "/opt/fastapi-dls/venv/bin/uvicorn main:app --app-dir=/opt/fast
|
||||
|
||||
**Create config file**
|
||||
|
||||
> Adjust `DLS_URL` as needed (accessing from LAN won't work with 127.0.0.1)
|
||||
|
||||
```shell
|
||||
mkdir /etc/fastapi-dls
|
||||
cat <<EOF >/etc/fastapi-dls/env
|
||||
@ -254,10 +260,11 @@ su - ${SERVICE_USER} -c "${BASE_DIR}/venv/bin/uvicorn main:app --app-dir=${BASE_
|
||||
|
||||
**Create config file**
|
||||
|
||||
> Adjust `DLS_URL` as needed (accessing from LAN won't work with 127.0.0.1)
|
||||
|
||||
```shell
|
||||
BASE_DIR=/opt/fastapi-dls
|
||||
cat <<EOF >/etc/fastapi-dls/env
|
||||
# Adjust DSL_URL as needed (accessing from LAN won't work with 127.0.0.1)
|
||||
DLS_URL=127.0.0.1
|
||||
DLS_PORT=443
|
||||
LEASE_EXPIRE_DAYS=90
|
||||
@ -311,7 +318,9 @@ Packages are available here:
|
||||
Successful tested with:
|
||||
|
||||
- Debian 12 (Bookworm)
|
||||
- Ubuntu 22.10 (Kinetic Kudu)
|
||||
- Ubuntu 22.10 (Kinetic Kudu) (EOL: July 20, 2023)
|
||||
- Ubuntu 23.04 (Lunar Lobster) (EOL: January 2024)
|
||||
- Ubuntu 23.10 (Mantic Minotaur) (EOL: July 2024)
|
||||
|
||||
Not working with:
|
||||
|
||||
@ -332,6 +341,7 @@ apt-get install -f --fix-missing
|
||||
```
|
||||
|
||||
Start with `systemctl start fastapi-dls.service` and enable autostart with `systemctl enable fastapi-dls.service`.
|
||||
Now you have to edit `/etc/fastapi-dls/env` as needed.
|
||||
|
||||
## ArchLinux (using `pacman`)
|
||||
|
||||
@ -353,6 +363,7 @@ pacman -U --noconfirm fastapi-dls.pkg.tar.zst
|
||||
```
|
||||
|
||||
Start with `systemctl start fastapi-dls.service` and enable autostart with `systemctl enable fastapi-dls.service`.
|
||||
Now you have to edit `/etc/default/fastapi-dls` as needed.
|
||||
|
||||
## unRAID
|
||||
|
||||
@ -415,8 +426,13 @@ client has 19.2 hours in which to re-establish connectivity before its license e
|
||||
|
||||
Successfully tested with this package versions:
|
||||
|
||||
| vGPU Suftware | vGPU Manager | Linux Driver | Windows Driver | Release Date |
|
||||
|---------------|--------------|--------------|----------------|---------------|
|
||||
| vGPU Suftware | Linux vGPU Manager | Linux Driver | Windows Driver | Release Date |
|
||||
|---------------|--------------------|--------------|----------------|---------------|
|
||||
| `16.3` | `535.154.02` | `535.154.05` | `538.15` | January 2024 |
|
||||
| `16.2` | `535.129.03` | `535.129.03` | `537.70` | October 2023 |
|
||||
| `16.1` | `535.104.06` | `535.104.05` | `537.13` | August 2023 |
|
||||
| `16.0` | `535.54.06` | `535.54.03` | `536.22` | July 2023 |
|
||||
| `15.3` | `525.125.03` | `525.125.06` | `529.11` | June 2023 |
|
||||
| `15.2` | `525.105.14` | `525.105.17` | `528.89` | March 2023 |
|
||||
| `15.1` | `525.85.07` | `525.85.05` | `528.24` | January 2023 |
|
||||
| `15.0` | `525.60.12` | `525.60.13` | `527.41` | December 2022 |
|
||||
@ -425,6 +441,11 @@ Successfully tested with this package versions:
|
||||
|
||||
- https://docs.nvidia.com/grid/index.html
|
||||
|
||||
*To get the latest drivers, visit Nvidia or search in Discord-Channel `GPU Unlocking` (Server-ID: `829786927829745685`) on channel `licensing` `biggerthanshit`
|
||||
|
||||
|
||||
https://archive.biggerthanshit.com/NVIDIA/ (nvidia / b1gg3rth4nsh1t)
|
||||
|
||||
## Linux
|
||||
|
||||
Download *client-token* and place it into `/etc/nvidia/ClientConfigToken`:
|
||||
@ -502,6 +523,9 @@ Done. For more information check [troubleshoot section](#troubleshoot).
|
||||
|
||||
# Endpoints
|
||||
|
||||
<details>
|
||||
<summary>show</summary>
|
||||
|
||||
### `GET /`
|
||||
|
||||
Redirect to `/-/readme`.
|
||||
@ -553,11 +577,18 @@ Generate client token, (see [installation](#installation)).
|
||||
### Others
|
||||
|
||||
There are many other internal api endpoints for handling authentication and lease process.
|
||||
</details>
|
||||
|
||||
# Troubleshoot
|
||||
|
||||
**Please make sure that fastapi-dls and your guests are on the same timezone!**
|
||||
|
||||
Maybe you have to disable IPv6 on the machine you are running FastAPI-DLS.
|
||||
|
||||
## Docker
|
||||
|
||||
Logs are available with `docker logs <container>`. To get the correct container-id use `docker container ls` or `docker ps`.
|
||||
|
||||
## Linux
|
||||
|
||||
Logs are available with `journalctl -u nvidia-gridd -f`.
|
||||
@ -615,7 +646,7 @@ only
|
||||
gets a valid local license.
|
||||
|
||||
<details>
|
||||
<summary>Log</summary>
|
||||
<summary>Log example</summary>
|
||||
|
||||
**Display-Container-LS**
|
||||
|
||||
@ -681,7 +712,7 @@ The error message can safely be ignored (since we have no license limitation :P)
|
||||
<0>:End Logging
|
||||
```
|
||||
|
||||
#### log with nginx as reverse proxy (see [docker-compose.yml](docker-compose.yml))
|
||||
#### log with nginx as reverse proxy (see [docker-compose-http-and-https.yml](examples/docker-compose-http-and-https.yml))
|
||||
|
||||
```
|
||||
<1>:NLS initialized
|
||||
|
@ -1,9 +1,10 @@
|
||||
version: '3.9'
|
||||
|
||||
x-dls-variables: &dls-variables
|
||||
TZ: Europe/Berlin # REQUIRED, set your timezone correctly on fastapi-dls AND YOUR CLIENTS !!!
|
||||
DLS_URL: localhost # REQUIRED, change to your ip or hostname
|
||||
DLS_PORT: 443 # must match nginx listen & exposed port
|
||||
LEASE_EXPIRE_DAYS: 90
|
||||
DLS_PORT: 443
|
||||
LEASE_EXPIRE_DAYS: 90 # 90 days is maximum
|
||||
DATABASE: sqlite:////app/database/db.sqlite
|
||||
DEBUG: false
|
||||
|
||||
@ -13,108 +14,16 @@ services:
|
||||
restart: always
|
||||
environment:
|
||||
<<: *dls-variables
|
||||
volumes:
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /opt/docker/fastapi-dls/cert:/app/cert # instance.private.pem, instance.public.pem
|
||||
- db:/app/database
|
||||
entrypoint: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--app-dir", "/app", "--proxy-headers"]
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "--fail", "http://localhost:8000/-/health"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
proxy:
|
||||
image: nginx
|
||||
ports:
|
||||
# thees are ports where nginx (!) is listen to
|
||||
- "80:80" # for "/leasing/v1/lessor/shutdown" used by windows guests, can't be changed!
|
||||
- "443:443" # first part must match "DLS_PORT"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /opt/docker/fastapi-dls/cert:/opt/cert
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "--insecure", "--fail", "https://localhost/-/health"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
command: |
|
||||
bash -c "bash -s <<\"EOF\"
|
||||
cat > /etc/nginx/nginx.conf <<\"EON\"
|
||||
daemon off;
|
||||
user root;
|
||||
worker_processes auto;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
gzip on;
|
||||
gzip_disable "msie6";
|
||||
include /etc/nginx/mime.types;
|
||||
|
||||
upstream dls-backend {
|
||||
server dls:8000; # must match dls listen port
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2 default_server;
|
||||
listen [::]:443 ssl http2 default_server;
|
||||
|
||||
root /var/www/html;
|
||||
index index.html;
|
||||
server_name _;
|
||||
|
||||
ssl_certificate "/opt/cert/webserver.crt";
|
||||
ssl_certificate_key "/opt/cert/webserver.key";
|
||||
ssl_session_cache shared:SSL:1m;
|
||||
ssl_session_timeout 10m;
|
||||
ssl_protocols TLSv1.3 TLSv1.2;
|
||||
# ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305";
|
||||
# ssl_ciphers PROFILE=SYSTEM;
|
||||
ssl_prefer_server_ciphers on;
|
||||
|
||||
location / {
|
||||
proxy_set_header Host $$http_host;
|
||||
proxy_set_header X-Real-IP $$remote_addr;
|
||||
proxy_set_header X-Forwarded-For $$proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $$scheme;
|
||||
proxy_pass http://dls-backend$$request_uri;
|
||||
}
|
||||
|
||||
location = /-/health {
|
||||
access_log off;
|
||||
add_header 'Content-Type' 'application/json';
|
||||
return 200 '{\"status\":\"up\",\"service\":\"nginx\"}';
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
|
||||
root /var/www/html;
|
||||
index index.html;
|
||||
server_name _;
|
||||
|
||||
location /leasing/v1/lessor/shutdown {
|
||||
proxy_set_header Host $$http_host;
|
||||
proxy_set_header X-Real-IP $$remote_addr;
|
||||
proxy_set_header X-Forwarded-For $$proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $$scheme;
|
||||
proxy_pass http://dls-backend/leasing/v1/lessor/shutdown;
|
||||
}
|
||||
|
||||
location / {
|
||||
return 301 https://$$host$$request_uri;
|
||||
}
|
||||
}
|
||||
}
|
||||
EON
|
||||
nginx
|
||||
EOF"
|
||||
- /opt/docker/fastapi-dls/cert:/app/cert
|
||||
- dls-db:/app/database
|
||||
logging: # optional, for those who do not need logs
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-file: 5
|
||||
max-size: 10m
|
||||
|
||||
volumes:
|
||||
db:
|
||||
dls-db:
|
||||
|
120
examples/docker-compose-http-and-https.yml
Normal file
120
examples/docker-compose-http-and-https.yml
Normal file
@ -0,0 +1,120 @@
|
||||
version: '3.9'
|
||||
|
||||
x-dls-variables: &dls-variables
|
||||
DLS_URL: localhost # REQUIRED, change to your ip or hostname
|
||||
DLS_PORT: 443 # must match nginx listen & exposed port
|
||||
LEASE_EXPIRE_DAYS: 90
|
||||
DATABASE: sqlite:////app/database/db.sqlite
|
||||
DEBUG: false
|
||||
|
||||
services:
|
||||
dls:
|
||||
image: collinwebdesigns/fastapi-dls:latest
|
||||
restart: always
|
||||
environment:
|
||||
<<: *dls-variables
|
||||
volumes:
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /opt/docker/fastapi-dls/cert:/app/cert # instance.private.pem, instance.public.pem
|
||||
- db:/app/database
|
||||
entrypoint: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--app-dir", "/app", "--proxy-headers"]
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "--fail", "http://localhost:8000/-/health"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
proxy:
|
||||
image: nginx
|
||||
ports:
|
||||
# thees are ports where nginx (!) is listen to
|
||||
- "80:80" # for "/leasing/v1/lessor/shutdown" used by windows guests, can't be changed!
|
||||
- "443:443" # first part must match "DLS_PORT"
|
||||
volumes:
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /opt/docker/fastapi-dls/cert:/opt/cert
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "--insecure", "--fail", "https://localhost/-/health"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
command: |
|
||||
bash -c "bash -s <<\"EOF\"
|
||||
cat > /etc/nginx/nginx.conf <<\"EON\"
|
||||
daemon off;
|
||||
user root;
|
||||
worker_processes auto;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
gzip on;
|
||||
gzip_disable "msie6";
|
||||
include /etc/nginx/mime.types;
|
||||
|
||||
upstream dls-backend {
|
||||
server dls:8000; # must match dls listen port
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2 default_server;
|
||||
listen [::]:443 ssl http2 default_server;
|
||||
|
||||
root /var/www/html;
|
||||
index index.html;
|
||||
server_name _;
|
||||
|
||||
ssl_certificate "/opt/cert/webserver.crt";
|
||||
ssl_certificate_key "/opt/cert/webserver.key";
|
||||
ssl_session_cache shared:SSL:1m;
|
||||
ssl_session_timeout 10m;
|
||||
ssl_protocols TLSv1.3 TLSv1.2;
|
||||
# ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305";
|
||||
# ssl_ciphers PROFILE=SYSTEM;
|
||||
ssl_prefer_server_ciphers on;
|
||||
|
||||
location / {
|
||||
proxy_set_header Host $$http_host;
|
||||
proxy_set_header X-Real-IP $$remote_addr;
|
||||
proxy_set_header X-Forwarded-For $$proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $$scheme;
|
||||
proxy_pass http://dls-backend$$request_uri;
|
||||
}
|
||||
|
||||
location = /-/health {
|
||||
access_log off;
|
||||
add_header 'Content-Type' 'application/json';
|
||||
return 200 '{\"status\":\"up\",\"service\":\"nginx\"}';
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
|
||||
root /var/www/html;
|
||||
index index.html;
|
||||
server_name _;
|
||||
|
||||
location /leasing/v1/lessor/shutdown {
|
||||
proxy_set_header Host $$http_host;
|
||||
proxy_set_header X-Real-IP $$remote_addr;
|
||||
proxy_set_header X-Forwarded-For $$proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $$scheme;
|
||||
proxy_pass http://dls-backend/leasing/v1/lessor/shutdown;
|
||||
}
|
||||
|
||||
location / {
|
||||
return 301 https://$$host$$request_uri;
|
||||
}
|
||||
}
|
||||
}
|
||||
EON
|
||||
nginx
|
||||
EOF"
|
||||
|
||||
volumes:
|
||||
db:
|
@ -1,8 +1,8 @@
|
||||
fastapi==0.97.0
|
||||
uvicorn[standard]==0.22.0
|
||||
fastapi==0.110.0
|
||||
uvicorn[standard]==0.27.1
|
||||
python-jose==3.3.0
|
||||
pycryptodome==3.18.0
|
||||
pycryptodome==3.20.0
|
||||
python-dateutil==2.8.2
|
||||
sqlalchemy==2.0.16
|
||||
markdown==3.4.3
|
||||
python-dotenv==1.0.0
|
||||
sqlalchemy==2.0.27
|
||||
markdown==3.5.2
|
||||
python-dotenv==1.0.1
|
||||
|
Loading…
Reference in New Issue
Block a user