Compare commits

..

No commits in common. "master" and "3.3.0-ls374" have entirely different histories.

28 changed files with 488 additions and 566 deletions

0
.editorconfig Normal file → Executable file
View file

0
.github/FUNDING.yml vendored Normal file → Executable file
View file

0
.github/ISSUE_TEMPLATE/config.yml vendored Normal file → Executable file
View file

0
.github/ISSUE_TEMPLATE/issue.bug.yml vendored Normal file → Executable file
View file

0
.github/ISSUE_TEMPLATE/issue.feature.yml vendored Normal file → Executable file
View file

3
.github/workflows/call_issue_pr_tracker.yml vendored Normal file → Executable file
View file

@ -8,9 +8,6 @@ on:
pull_request_review: pull_request_review:
types: [submitted,edited,dismissed] types: [submitted,edited,dismissed]
permissions:
contents: read
jobs: jobs:
manage-project: manage-project:
permissions: permissions:

3
.github/workflows/call_issues_cron.yml vendored Normal file → Executable file
View file

@ -4,9 +4,6 @@ on:
- cron: '35 15 * * *' - cron: '35 15 * * *'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
stale: stale:
permissions: permissions:

View file

@ -3,9 +3,6 @@ name: External Trigger Main
on: on:
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
external-trigger-master: external-trigger-master:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -46,8 +43,8 @@ jobs:
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1 exit 1
fi fi
EXT_RELEASE_SANITIZED=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "Sanitized external version: \`${EXT_RELEASE_SANITIZED}\`" >> $GITHUB_STEP_SUMMARY echo "External version: \`${EXT_RELEASE}\`" >> $GITHUB_STEP_SUMMARY
echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY
image="linuxserver/swag" image="linuxserver/swag"
tag="latest" tag="latest"
@ -103,8 +100,8 @@ jobs:
exit 1 exit 1
fi fi
echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY
if [ "${EXT_RELEASE_SANITIZED}" == "${IMAGE_VERSION}" ]; then if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
echo "Sanitized version \`${EXT_RELEASE_SANITIZED}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY echo "Version \`${EXT_RELEASE}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-swag/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-swag/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
@ -119,7 +116,7 @@ jobs:
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
else else
printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY
echo "New sanitized version \`${EXT_RELEASE_SANITIZED}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY echo "New version \`${EXT_RELEASE}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY
if [[ "${artifacts_found}" == "true" ]]; then if [[ "${artifacts_found}" == "true" ]]; then
echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY
fi fi
@ -139,7 +136,7 @@ jobs:
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \ --data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit" --data-urlencode "Submit=Submit"
echo "**** Notifying Discord ****" echo "**** Notifying Discord ****"
TRIGGER_REASON="A version change was detected for swag tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE_SANITIZED}" TRIGGER_REASON="A version change was detected for swag tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}], "description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}

View file

@ -5,9 +5,6 @@ on:
- cron: '2 * * * *' - cron: '2 * * * *'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
external-trigger-scheduler: external-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest

View file

@ -2,14 +2,8 @@ name: Greetings
on: [pull_request_target, issues] on: [pull_request_target, issues]
permissions:
contents: read
jobs: jobs:
greeting: greeting:
permissions:
issues: write
pull-requests: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/first-interaction@v1 - uses: actions/first-interaction@v1

View file

@ -5,9 +5,6 @@ on:
- cron: '1 3 * * 6' - cron: '1 3 * * 6'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
package-trigger-scheduler: package-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest

0
.github/workflows/permissions.yml vendored Normal file → Executable file
View file

1
.gitignore vendored
View file

@ -1,2 +1 @@
.idea
.jenkins-external .jenkins-external

View file

@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.22 FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.21
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@ -49,36 +49,37 @@ RUN \
nginx-mod-stream \ nginx-mod-stream \
nginx-mod-stream-geoip2 \ nginx-mod-stream-geoip2 \
nginx-vim \ nginx-vim \
php84-bcmath \ php83-bcmath \
php84-bz2 \ php83-bz2 \
php84-dom \ php83-dom \
php84-exif \ php83-exif \
php84-ftp \ php83-ftp \
php84-gd \ php83-gd \
php84-gmp \ php83-gmp \
php84-imap \ php83-imap \
php84-intl \ php83-intl \
php84-ldap \ php83-ldap \
php84-mysqli \ php83-mysqli \
php84-mysqlnd \ php83-mysqlnd \
php84-opcache \ php83-opcache \
php84-pdo_mysql \ php83-pdo_mysql \
php84-pdo_odbc \ php83-pdo_odbc \
php84-pdo_pgsql \ php83-pdo_pgsql \
php84-pdo_sqlite \ php83-pdo_sqlite \
php84-pear \ php83-pear \
php84-pecl-apcu \ php83-pecl-apcu \
php84-pecl-memcached \ php83-pecl-mcrypt \
php84-pecl-redis \ php83-pecl-memcached \
php84-pgsql \ php83-pecl-redis \
php84-posix \ php83-pgsql \
php84-soap \ php83-posix \
php84-sockets \ php83-soap \
php84-sodium \ php83-sockets \
php84-sqlite3 \ php83-sodium \
php84-tokenizer \ php83-sqlite3 \
php84-xmlreader \ php83-tokenizer \
php84-xsl \ php83-xmlreader \
php83-xsl \
whois && \ whois && \
echo "**** install certbot plugins ****" && \ echo "**** install certbot plugins ****" && \
if [ -z ${CERTBOT_VERSION+x} ]; then \ if [ -z ${CERTBOT_VERSION+x} ]; then \
@ -88,7 +89,7 @@ RUN \
pip install -U --no-cache-dir \ pip install -U --no-cache-dir \
pip \ pip \
wheel && \ wheel && \
pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.22/ \ pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.21/ \
certbot==${CERTBOT_VERSION} \ certbot==${CERTBOT_VERSION} \
certbot-dns-acmedns \ certbot-dns-acmedns \
certbot-dns-aliyun \ certbot-dns-aliyun \

View file

@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.22 FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.21
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@ -49,36 +49,37 @@ RUN \
nginx-mod-stream \ nginx-mod-stream \
nginx-mod-stream-geoip2 \ nginx-mod-stream-geoip2 \
nginx-vim \ nginx-vim \
php84-bcmath \ php83-bcmath \
php84-bz2 \ php83-bz2 \
php84-dom \ php83-dom \
php84-exif \ php83-exif \
php84-ftp \ php83-ftp \
php84-gd \ php83-gd \
php84-gmp \ php83-gmp \
php84-imap \ php83-imap \
php84-intl \ php83-intl \
php84-ldap \ php83-ldap \
php84-mysqli \ php83-mysqli \
php84-mysqlnd \ php83-mysqlnd \
php84-opcache \ php83-opcache \
php84-pdo_mysql \ php83-pdo_mysql \
php84-pdo_odbc \ php83-pdo_odbc \
php84-pdo_pgsql \ php83-pdo_pgsql \
php84-pdo_sqlite \ php83-pdo_sqlite \
php84-pear \ php83-pear \
php84-pecl-apcu \ php83-pecl-apcu \
php84-pecl-memcached \ php83-pecl-mcrypt \
php84-pecl-redis \ php83-pecl-memcached \
php84-pgsql \ php83-pecl-redis \
php84-posix \ php83-pgsql \
php84-soap \ php83-posix \
php84-sockets \ php83-soap \
php84-sodium \ php83-sockets \
php84-sqlite3 \ php83-sodium \
php84-tokenizer \ php83-sqlite3 \
php84-xmlreader \ php83-tokenizer \
php84-xsl \ php83-xmlreader \
php83-xsl \
whois && \ whois && \
echo "**** install certbot plugins ****" && \ echo "**** install certbot plugins ****" && \
if [ -z ${CERTBOT_VERSION+x} ]; then \ if [ -z ${CERTBOT_VERSION+x} ]; then \
@ -88,7 +89,7 @@ RUN \
pip install -U --no-cache-dir \ pip install -U --no-cache-dir \
pip \ pip \
wheel && \ wheel && \
pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.22/ \ pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.21/ \
certbot==${CERTBOT_VERSION} \ certbot==${CERTBOT_VERSION} \
certbot-dns-acmedns \ certbot-dns-acmedns \
certbot-dns-aliyun \ certbot-dns-aliyun \

7
Jenkinsfile vendored
View file

@ -95,11 +95,7 @@ pipeline {
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/' env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/'
env.PULL_REQUEST = env.CHANGE_ID env.PULL_REQUEST = env.CHANGE_ID
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./root/donate.txt' env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./root/donate.txt'
if ( env.SYFT_IMAGE_TAG == null ) {
env.SYFT_IMAGE_TAG = 'latest'
} }
}
echo "Using syft image tag ${SYFT_IMAGE_TAG}"
sh '''#! /bin/bash sh '''#! /bin/bash
echo "The default github branch detected as ${GH_DEFAULT_BRANCH}" ''' echo "The default github branch detected as ${GH_DEFAULT_BRANCH}" '''
script{ script{
@ -784,7 +780,7 @@ pipeline {
docker run --rm \ docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock:ro \ -v /var/run/docker.sock:/var/run/docker.sock:ro \
-v ${TEMPDIR}:/tmp \ -v ${TEMPDIR}:/tmp \
ghcr.io/anchore/syft:${SYFT_IMAGE_TAG} \ ghcr.io/anchore/syft:latest \
${LOCAL_CONTAINER} -o table=/tmp/package_versions.txt ${LOCAL_CONTAINER} -o table=/tmp/package_versions.txt
NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 ) NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 )
echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github" echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github"
@ -894,7 +890,6 @@ pipeline {
-e WEB_AUTH=\"${CI_AUTH}\" \ -e WEB_AUTH=\"${CI_AUTH}\" \
-e WEB_PATH=\"${CI_WEBPATH}\" \ -e WEB_PATH=\"${CI_WEBPATH}\" \
-e NODE_NAME=\"${NODE_NAME}\" \ -e NODE_NAME=\"${NODE_NAME}\" \
-e SYFT_IMAGE_TAG=\"${CI_SYFT_IMAGE_TAG:-${SYFT_IMAGE_TAG}}\" \
-t ghcr.io/linuxserver/ci:latest \ -t ghcr.io/linuxserver/ci:latest \
python3 test_build.py''' python3 test_build.py'''
} }

0
LICENSE Normal file → Executable file
View file

View file

@ -5,6 +5,7 @@
[![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!") [![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
[![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://linuxserver.io/discord "realtime support / chat with the community and the team.") [![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://linuxserver.io/discord "realtime support / chat with the community and the team.")
[![Discourse](https://img.shields.io/discourse/https/discourse.linuxserver.io/topics.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=discourse)](https://discourse.linuxserver.io "post on our community forum.") [![Discourse](https://img.shields.io/discourse/https/discourse.linuxserver.io/topics.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=discourse)](https://discourse.linuxserver.io "post on our community forum.")
[![Fleet](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Fleet)](https://fleet.linuxserver.io "an online web interface which displays all of our maintained images.")
[![GitHub](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub&logo=github)](https://github.com/linuxserver "view the source for all of our repositories.") [![GitHub](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub&logo=github)](https://github.com/linuxserver "view the source for all of our repositories.")
[![Open Collective](https://img.shields.io/opencollective/all/linuxserver.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Supporters&logo=open%20collective)](https://opencollective.com/linuxserver "please consider helping us by either donating or contributing to our budget") [![Open Collective](https://img.shields.io/opencollective/all/linuxserver.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Supporters&logo=open%20collective)](https://opencollective.com/linuxserver "please consider helping us by either donating or contributing to our budget")
@ -21,6 +22,7 @@ Find us at:
* [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more! * [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more!
* [Discord](https://linuxserver.io/discord) - realtime support / chat with the community and the team. * [Discord](https://linuxserver.io/discord) - realtime support / chat with the community and the team.
* [Discourse](https://discourse.linuxserver.io) - post on our community forum. * [Discourse](https://discourse.linuxserver.io) - post on our community forum.
* [Fleet](https://fleet.linuxserver.io) - an online web interface which displays all of our maintained images.
* [GitHub](https://github.com/linuxserver) - view the source for all of our repositories. * [GitHub](https://github.com/linuxserver) - view the source for all of our repositories.
* [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget * [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget
@ -52,6 +54,7 @@ The architectures supported by this image are:
| :----: | :----: | ---- | | :----: | :----: | ---- |
| x86-64 | ✅ | amd64-\<version tag\> | | x86-64 | ✅ | amd64-\<version tag\> |
| arm64 | ✅ | arm64v8-\<version tag\> | | arm64 | ✅ | arm64v8-\<version tag\> |
| armhf | ❌ | |
## Application Setup ## Application Setup
@ -142,16 +145,6 @@ This will *ask* Google et al not to index and list your site. Be careful with th
* Proxy sample files WILL be updated, however your renamed (enabled) proxy files will not. * Proxy sample files WILL be updated, however your renamed (enabled) proxy files will not.
* You can check the new sample and adjust your active config as needed. * You can check the new sample and adjust your active config as needed.
### QUIC support
This image supports QUIC (also known as HTTP/3) but it must be explicitly enabled in each proxy conf, and the default conf, because if the listener is enabled and you don't expose 443/UDP, it can break connections with some browsers.
To enable QUIC, expose 443/UDP to your clients, then uncomment both QUIC listeners in all of your active proxy confs, as well as the default conf, and restart the container.
You should also uncomment the `Alt-Svc` header in your `ssl.conf` so that browsers are aware that you offer QUIC connectivity.
It is [recommended](https://quic-go.net/docs/quic/optimizations/#udp-buffer-sizes) to increase the UDP send/recieve buffer **on the host** by setting the `net.core.rmem_max` and `net.core.wmem_max` sysctls. Suggested values are 4-16Mb (4194304-16777216 bytes). For persistence between reboots use `/etc/sysctl.d/`.
### Migration from the old `linuxserver/letsencrypt` image ### Migration from the old `linuxserver/letsencrypt` image
Please follow the instructions [on this blog post](https://www.linuxserver.io/blog/2020-08-21-introducing-swag#migrate). Please follow the instructions [on this blog post](https://www.linuxserver.io/blog/2020-08-21-introducing-swag#migrate).
@ -204,7 +197,6 @@ services:
ports: ports:
- 443:443 - 443:443
- 80:80 #optional - 80:80 #optional
- 443:443/udp #optional
restart: unless-stopped restart: unless-stopped
``` ```
@ -232,7 +224,6 @@ docker run -d \
-e SWAG_AUTORELOAD_WATCHLIST= `#optional` \ -e SWAG_AUTORELOAD_WATCHLIST= `#optional` \
-p 443:443 \ -p 443:443 \
-p 80:80 `#optional` \ -p 80:80 `#optional` \
-p 443:443/udp `#optional` \
-v /path/to/swag/config:/config \ -v /path/to/swag/config:/config \
--restart unless-stopped \ --restart unless-stopped \
lscr.io/linuxserver/swag:latest lscr.io/linuxserver/swag:latest
@ -246,7 +237,6 @@ Containers are configured using parameters passed at runtime (such as those abov
| :----: | --- | | :----: | --- |
| `-p 443:443` | HTTPS port | | `-p 443:443` | HTTPS port |
| `-p 80` | HTTP port (required for HTTP validation and HTTP -> HTTPS redirect) | | `-p 80` | HTTP port (required for HTTP validation and HTTP -> HTTPS redirect) |
| `-p 443/udp` | QUIC (HTTP/3) port. Must be enabled in the default and proxy confs. |
| `-e PUID=1000` | for UserID - see below for explanation | | `-e PUID=1000` | for UserID - see below for explanation |
| `-e PGID=1000` | for GroupID - see below for explanation | | `-e PGID=1000` | for GroupID - see below for explanation |
| `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). | | `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). |
@ -433,8 +423,6 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Versions ## Versions
* **18.07.25:** - Rebase to Alpine 3.22 with PHP 8.4. Add QUIC support. Drop PHP bindings for mcrypt as it is no longer maintained.
* **05.05.25:** - Disable Certbot's built in log rotation.
* **19.01.25:** - Add [Auto Reload](https://github.com/linuxserver/docker-mods/tree/swag-auto-reload) functionality to SWAG. * **19.01.25:** - Add [Auto Reload](https://github.com/linuxserver/docker-mods/tree/swag-auto-reload) functionality to SWAG.
* **17.12.24:** - Rebase to Alpine 3.21. * **17.12.24:** - Rebase to Alpine 3.21.
* **21.10.24:** - Fix naming issue with Dynu plugin. If you are using Dynu, please make sure your credentials are set in /config/dns-conf/dynu.ini and your DNSPLUGIN variable is set to dynu (not dynudns). * **21.10.24:** - Fix naming issue with Dynu plugin. If you are using Dynu, please make sure your credentials are set in /config/dns-conf/dynu.ini and your DNSPLUGIN variable is set to dynu (not dynudns).

View file

@ -1,118 +1,113 @@
NAME VERSION TYPE NAME VERSION TYPE
Simple Launcher 1.1.0.14 binary (+5 duplicates)
acl-libs 2.3.2-r1 apk acl-libs 2.3.2-r1 apk
acme 4.1.1 python acme 3.3.0 python
alpine-baselayout 3.7.0-r0 apk alpine-baselayout 3.6.8-r1 apk
alpine-baselayout-data 3.7.0-r0 apk alpine-baselayout-data 3.6.8-r1 apk
alpine-keys 2.5-r0 apk alpine-keys 2.5-r0 apk
alpine-release 3.22.1-r0 apk alpine-release 3.21.3-r0 apk
aom-libs 3.12.1-r0 apk aom-libs 3.11.0-r0 apk
apache2-utils 2.4.65-r0 apk apache2-utils 2.4.62-r0 apk
apk-tools 2.14.9-r2 apk apk-tools 2.14.6-r3 apk
apr 1.7.5-r0 apk apr 1.7.5-r0 apk
apr-util 1.6.3-r1 apk apr-util 1.6.3-r1 apk
argon2-libs 20190702-r5 apk argon2-libs 20190702-r5 apk
attrs 25.3.0 python attrs 25.3.0 python
autocommand 2.2.2 python autocommand 2.2.2 python
azure-common 1.1.28 python azure-common 1.1.28 python
azure-core 1.35.0 python azure-core 1.33.0 python
azure-identity 1.23.1 python azure-identity 1.21.0 python
azure-mgmt-core 1.6.0 python azure-mgmt-core 1.5.0 python
azure-mgmt-dns 9.0.0 python azure-mgmt-dns 8.2.0 python
backports-tarfile 1.2.0 python backports-tarfile 1.2.0 python
bash 5.2.37-r0 apk bash 5.2.37-r0 apk
beautifulsoup4 4.13.4 python beautifulsoup4 4.13.3 python
boto3 1.40.1 python boto3 1.37.28 python
botocore 1.40.1 python botocore 1.37.28 python
brotli-libs 1.1.0-r2 apk brotli-libs 1.1.0-r2 apk
bs4 0.0.2 python bs4 0.0.2 python
busybox 1.37.0-r18 apk busybox 1.37.0-r12 apk
busybox-binsh 1.37.0-r18 apk busybox-binsh 1.37.0-r12 apk
c-ares 1.34.5-r0 apk c-ares 1.34.3-r0 apk
c-client 2007f-r15 apk c-client 2007f-r15 apk
ca-certificates 20250619-r0 apk ca-certificates 20241121-r1 apk
ca-certificates-bundle 20250619-r0 apk ca-certificates-bundle 20241121-r1 apk
cachetools 5.5.2 python cachetools 5.5.2 python
catatonit 0.2.1-r0 apk catatonit 0.2.0-r0 apk
certbot 4.1.1 python certbot 3.3.0 python
certbot-dns-acmedns 0.1.0 python certbot-dns-acmedns 0.1.0 python
certbot-dns-aliyun 2.0.0 python certbot-dns-aliyun 2.0.0 python
certbot-dns-azure 1.5.0 python certbot-dns-azure 2.6.1 python
certbot-dns-bunny 3.0.0 python certbot-dns-bunny 3.0.0 python
certbot-dns-cloudflare 4.1.1 python certbot-dns-cloudflare 3.3.0 python
certbot-dns-cpanel 0.4.0 python certbot-dns-cpanel 0.4.0 python
certbot-dns-desec 1.2.1 python certbot-dns-desec 1.2.1 python
certbot-dns-digitalocean 4.1.1 python certbot-dns-digitalocean 3.3.0 python
certbot-dns-directadmin 1.0.15 python certbot-dns-directadmin 1.0.14 python
certbot-dns-dnsimple 4.1.1 python certbot-dns-dnsimple 3.3.0 python
certbot-dns-dnsmadeeasy 4.1.1 python certbot-dns-dnsmadeeasy 3.3.0 python
certbot-dns-dnspod 0.1.0 python certbot-dns-dnspod 0.1.0 python
certbot-dns-do 0.31.0 python certbot-dns-do 0.31.0 python
certbot-dns-domeneshop 0.2.9 python certbot-dns-domeneshop 0.2.9 python
certbot-dns-dreamhost 1.0 python certbot-dns-dreamhost 1.0 python
certbot-dns-duckdns 1.6 python certbot-dns-duckdns 1.5 python
certbot-dns-dynudns 0.0.6 python certbot-dns-dynudns 0.0.6 python
certbot-dns-freedns 0.2.0 python certbot-dns-freedns 0.2.0 python
certbot-dns-gehirn 4.1.1 python certbot-dns-gehirn 3.3.0 python
certbot-dns-glesys 2.1.0 python certbot-dns-glesys 2.1.0 python
certbot-dns-godaddy 2.8.0 python certbot-dns-godaddy 2.8.0 python
certbot-dns-google 4.1.1 python certbot-dns-google 3.3.0 python
certbot-dns-he 1.0.0 python certbot-dns-he 1.0.0 python
certbot-dns-hetzner 2.0.1 python certbot-dns-hetzner 2.0.1 python
certbot-dns-infomaniak 0.2.3 python certbot-dns-infomaniak 0.2.3 python
certbot-dns-inwx 3.0.3 python certbot-dns-inwx 3.0.2 python
certbot-dns-ionos 2024.11.9 python certbot-dns-ionos 2024.11.9 python
certbot-dns-linode 4.1.1 python certbot-dns-linode 3.3.0 python
certbot-dns-loopia 1.0.1 python certbot-dns-loopia 1.0.1 python
certbot-dns-luadns 4.1.1 python certbot-dns-luadns 3.3.0 python
certbot-dns-namecheap 1.0.0 python certbot-dns-namecheap 1.0.0 python
certbot-dns-netcup 1.4.4 python certbot-dns-netcup 1.4.4 python
certbot-dns-njalla 2.0.2 python certbot-dns-njalla 2.0.2 python
certbot-dns-nsone 4.1.1 python certbot-dns-nsone 3.3.0 python
certbot-dns-ovh 4.1.1 python certbot-dns-ovh 3.3.0 python
certbot-dns-porkbun 0.10.1 python certbot-dns-porkbun 0.9.1 python
certbot-dns-rfc2136 4.1.1 python certbot-dns-rfc2136 3.3.0 python
certbot-dns-route53 4.1.1 python certbot-dns-route53 3.3.0 python
certbot-dns-sakuracloud 4.1.1 python certbot-dns-sakuracloud 3.3.0 python
certbot-dns-standalone 1.2.1 python certbot-dns-standalone 1.2.1 python
certbot-dns-transip 0.5.2 python certbot-dns-transip 0.5.2 python
certbot-dns-vultr 1.1.0 python certbot-dns-vultr 1.1.0 python
certbot-plugin-gandi 1.5.0 python certbot-plugin-gandi 1.5.0 python
certifi 2025.7.14 python certifi 2025.1.31 python
cffi 1.17.1 python cffi 1.17.1 python
charset-normalizer 3.4.2 python charset-normalizer 3.4.1 python
cli UNKNOWN binary
cli-32 UNKNOWN binary
cli-64 UNKNOWN binary
cli-arm64 UNKNOWN binary
cloudflare 2.19.4 python cloudflare 2.19.4 python
composer 2.8.10 binary composer 2.8.7 binary
configargparse 1.7.1 python configargparse 1.7 python
configobj 5.0.9 python configobj 5.0.9 python
coreutils 9.7-r1 apk coreutils 9.5-r2 apk
coreutils-env 9.7-r1 apk coreutils-env 9.5-r2 apk
coreutils-fmt 9.7-r1 apk coreutils-fmt 9.5-r2 apk
coreutils-sha512sum 9.7-r1 apk coreutils-sha512sum 9.5-r2 apk
cryptography 45.0.5 python cryptography 44.0.2 python
curl 8.14.1-r1 apk curl 8.12.1-r1 apk
distro 1.9.0 python distro 1.9.0 python
dns-lexicon 3.21.1 python dns-lexicon 3.20.1 python
dnslib 0.9.26 python dnslib 0.9.26 python
dnspython 2.7.0 python dnspython 2.7.0 python
domeneshop 0.4.4 python domeneshop 0.4.4 python
fail2ban 1.1.0 python fail2ban 1.1.0 python
fail2ban 1.1.0-r3 apk fail2ban 1.1.0-r2 apk
fail2ban-pyc 1.1.0-r3 apk fail2ban-pyc 1.1.0-r2 apk
filelock 3.18.0 python filelock 3.18.0 python
findutils 4.10.0-r0 apk findutils 4.10.0-r0 apk
fontconfig 2.15.0-r3 apk fontconfig 2.15.0-r1 apk
freetype 2.13.3-r0 apk freetype 2.13.3-r0 apk
future 1.0.0 python future 1.0.0 python
gdbm 1.24-r0 apk gdbm 1.24-r0 apk
git 2.49.1-r0 apk git 2.47.2-r0 apk
git-init-template 2.49.1-r0 apk git-init-template 2.47.2-r0 apk
git-perl 2.49.1-r0 apk git-perl 2.47.2-r0 apk
gmp 6.3.0-r3 apk gmp 6.3.0-r2 apk
gnupg 2.4.7-r0 apk gnupg 2.4.7-r0 apk
gnupg-dirmngr 2.4.7-r0 apk gnupg-dirmngr 2.4.7-r0 apk
gnupg-gpgconf 2.4.7-r0 apk gnupg-gpgconf 2.4.7-r0 apk
@ -120,23 +115,19 @@ gnupg-keyboxd 2.4.7-r0 apk
gnupg-utils 2.4.7-r0 apk gnupg-utils 2.4.7-r0 apk
gnupg-wks-client 2.4.7-r0 apk gnupg-wks-client 2.4.7-r0 apk
gnutls 3.8.8-r0 apk gnutls 3.8.8-r0 apk
google-api-core 2.25.1 python google-api-core 2.24.2 python
google-api-python-client 2.177.0 python google-api-python-client 2.166.0 python
google-auth 2.40.3 python google-auth 2.38.0 python
google-auth-httplib2 0.2.0 python google-auth-httplib2 0.2.0 python
googleapis-common-protos 1.70.0 python googleapis-common-protos 1.69.2 python
gpg 2.4.7-r0 apk gpg 2.4.7-r0 apk
gpg-agent 2.4.7-r0 apk gpg-agent 2.4.7-r0 apk
gpg-wks-server 2.4.7-r0 apk gpg-wks-server 2.4.7-r0 apk
gpgsm 2.4.7-r0 apk gpgsm 2.4.7-r0 apk
gpgv 2.4.7-r0 apk gpgv 2.4.7-r0 apk
gui UNKNOWN binary
gui-32 UNKNOWN binary
gui-64 UNKNOWN binary
gui-arm64 UNKNOWN binary
httplib2 0.22.0 python httplib2 0.22.0 python
icu-data-en 76.1-r1 apk icu-data-en 74.2-r0 apk
icu-libs 76.1-r1 apk icu-libs 74.2-r0 apk
idna 3.10 python idna 3.10 python
importlib-metadata 8.0.0 python importlib-metadata 8.0.0 python
inflect 7.3.1 python inflect 7.3.1 python
@ -152,222 +143,223 @@ jaraco-functools 4.0.1 python
jaraco-text 3.12.1 python jaraco-text 3.12.1 python
jinja2 3.1.6 python jinja2 3.1.6 python
jmespath 1.0.1 python jmespath 1.0.1 python
josepy 2.1.0 python josepy 1.15.0 python
jq 1.8.0-r0 apk jq 1.7.1-r0 apk
jsonlines 4.0.0 python jsonlines 4.0.0 python
jsonpickle 4.1.1 python jsonpickle 4.0.5 python
libapk2 2.14.9-r2 apk
libassuan 2.5.7-r0 apk libassuan 2.5.7-r0 apk
libattr 2.5.2-r2 apk libattr 2.5.2-r2 apk
libavif 1.3.0-r0 apk libavif 1.0.4-r0 apk
libbsd 0.12.2-r0 apk libbsd 0.12.2-r0 apk
libbz2 1.0.8-r6 apk libbz2 1.0.8-r6 apk
libcrypto3 3.5.1-r0 apk libcrypto3 3.3.3-r0 apk
libcurl 8.14.1-r1 apk libcurl 8.12.1-r1 apk
libdav1d 1.5.1-r0 apk libdav1d 1.5.0-r0 apk
libedit 20250104.3.1-r1 apk libedit 20240808.3.1-r0 apk
libevent 2.1.12-r8 apk libevent 2.1.12-r7 apk
libexpat 2.7.1-r0 apk libexpat 2.7.0-r0 apk
libffi 3.4.8-r0 apk libffi 3.4.7-r0 apk
libgcc 14.2.0-r6 apk libgcc 14.2.0-r4 apk
libgcrypt 1.10.3-r1 apk libgcrypt 1.10.3-r1 apk
libgd 2.3.3-r10 apk libgd 2.3.3-r9 apk
libgpg-error 1.55-r0 apk libgpg-error 1.51-r0 apk
libice 1.1.2-r0 apk libice 1.1.1-r6 apk
libidn2 2.3.7-r0 apk libidn2 2.3.7-r0 apk
libintl 0.24.1-r0 apk libintl 0.22.5-r0 apk
libip4tc 1.8.11-r1 apk libip4tc 1.8.11-r1 apk
libip6tc 1.8.11-r1 apk libip6tc 1.8.11-r1 apk
libjpeg-turbo 3.1.0-r0 apk libjpeg-turbo 3.0.4-r0 apk
libksba 1.6.7-r0 apk libksba 1.6.7-r0 apk
libldap 2.6.8-r0 apk libldap 2.6.8-r0 apk
libmaxminddb-libs 1.9.1-r0 apk libmaxminddb-libs 1.9.1-r0 apk
libmcrypt 2.5.8-r10 apk
libmd 1.1.0-r0 apk libmd 1.1.0-r0 apk
libmemcached-libs 1.1.4-r1 apk libmemcached-libs 1.1.4-r1 apk
libmnl 1.0.5-r2 apk libmnl 1.0.5-r2 apk
libncursesw 6.5_p20250503-r0 apk libncursesw 6.5_p20241006-r3 apk
libnftnl 1.2.9-r0 apk libnftnl 1.2.8-r0 apk
libpanelw 6.5_p20250503-r0 apk libpanelw 6.5_p20241006-r3 apk
libpng 1.6.47-r0 apk libpng 1.6.47-r0 apk
libpq 17.5-r0 apk libpq 17.4-r0 apk
libproc2 4.0.4-r3 apk libproc2 4.0.4-r2 apk
libpsl 0.21.5-r3 apk libpsl 0.21.5-r3 apk
libsasl 2.1.28-r8 apk libsasl 2.1.28-r8 apk
libseccomp 2.6.0-r0 apk libseccomp 2.5.5-r1 apk
libsharpyuv 1.5.0-r0 apk libsharpyuv 1.4.0-r0 apk
libsm 1.2.5-r0 apk libsm 1.2.4-r4 apk
libsodium 1.0.20-r0 apk libsodium 1.0.20-r0 apk
libssl3 3.5.1-r0 apk libssl3 3.3.3-r0 apk
libstdc++ 14.2.0-r6 apk libstdc++ 14.2.0-r4 apk
libtasn1 4.20.0-r0 apk libtasn1 4.20.0-r0 apk
libunistring 1.3-r0 apk libunistring 1.2-r0 apk
libuuid 2.41-r9 apk libuuid 2.40.4-r0 apk
libwebp 1.5.0-r0 apk libwebp 1.4.0-r0 apk
libx11 1.8.11-r0 apk libx11 1.8.10-r0 apk
libxau 1.0.12-r0 apk libxau 1.0.11-r4 apk
libxcb 1.17.0-r0 apk libxcb 1.16.1-r0 apk
libxdmcp 1.1.5-r1 apk libxdmcp 1.1.5-r1 apk
libxext 1.3.6-r2 apk libxext 1.3.6-r2 apk
libxml2 2.13.8-r0 apk libxml2 2.13.4-r5 apk
libxpm 3.5.17-r0 apk libxpm 3.5.17-r0 apk
libxslt 1.1.43-r3 apk libxslt 1.1.42-r2 apk
libxt 1.3.1-r0 apk libxt 1.3.1-r0 apk
libxtables 1.8.11-r1 apk libxtables 1.8.11-r1 apk
libyuv 0.0.1887.20251502-r1 apk libzip 1.11.2-r0 apk
libzip 1.11.4-r0 apk linux-pam 1.6.1-r1 apk
linux-pam 1.7.0-r4 apk
logrotate 3.21.0-r1 apk logrotate 3.21.0-r1 apk
loopialib 0.2.0 python loopialib 0.2.0 python
lxml 6.0.0 python lxml 5.3.1 python
lz4-libs 1.10.0-r0 apk lz4-libs 1.10.0-r0 apk
markupsafe 3.0.2 python markupsafe 3.0.2 python
memcached 1.6.32-r0 apk memcached 1.6.32-r0 apk
mock 5.2.0 python mock 5.2.0 python
more-itertools 10.3.0 python more-itertools 10.3.0 python
mpdecimal 4.0.1-r0 apk mpdecimal 4.0.0-r0 apk
msal 1.33.0 python msal 1.32.0 python
msal-extensions 1.3.1 python msal-extensions 1.3.1 python
musl 1.2.5-r10 apk musl 1.2.5-r9 apk
musl-utils 1.2.5-r10 apk musl-utils 1.2.5-r9 apk
my-test-package 1.0 python my-test-package 1.0 python
nano 8.4-r0 apk nano 8.2-r0 apk
ncurses-terminfo-base 6.5_p20250503-r0 apk ncurses-terminfo-base 6.5_p20241006-r3 apk
netcat-openbsd 1.229.1-r0 apk netcat-openbsd 1.226.1.1-r0 apk
nettle 3.10.1-r0 apk nettle 3.10-r1 apk
nghttp2-libs 1.65.0-r0 apk nghttp2-libs 1.64.0-r0 apk
nginx 1.28.0-r3 apk nginx 1.26.3-r0 apk
nginx-mod-devel-kit 1.28.0-r3 apk nginx-mod-devel-kit 1.26.3-r0 apk
nginx-mod-http-brotli 1.28.0-r3 apk nginx-mod-http-brotli 1.26.3-r0 apk
nginx-mod-http-dav-ext 1.28.0-r3 apk nginx-mod-http-dav-ext 1.26.3-r0 apk
nginx-mod-http-echo 1.28.0-r3 apk nginx-mod-http-echo 1.26.3-r0 apk
nginx-mod-http-fancyindex 1.28.0-r3 apk nginx-mod-http-fancyindex 1.26.3-r0 apk
nginx-mod-http-geoip2 1.28.0-r3 apk nginx-mod-http-geoip2 1.26.3-r0 apk
nginx-mod-http-headers-more 1.28.0-r3 apk nginx-mod-http-headers-more 1.26.3-r0 apk
nginx-mod-http-image-filter 1.28.0-r3 apk nginx-mod-http-image-filter 1.26.3-r0 apk
nginx-mod-http-perl 1.28.0-r3 apk nginx-mod-http-perl 1.26.3-r0 apk
nginx-mod-http-redis2 1.28.0-r3 apk nginx-mod-http-redis2 1.26.3-r0 apk
nginx-mod-http-set-misc 1.28.0-r3 apk nginx-mod-http-set-misc 1.26.3-r0 apk
nginx-mod-http-upload-progress 1.28.0-r3 apk nginx-mod-http-upload-progress 1.26.3-r0 apk
nginx-mod-http-xslt-filter 1.28.0-r3 apk nginx-mod-http-xslt-filter 1.26.3-r0 apk
nginx-mod-mail 1.28.0-r3 apk nginx-mod-mail 1.26.3-r0 apk
nginx-mod-rtmp 1.28.0-r3 apk nginx-mod-rtmp 1.26.3-r0 apk
nginx-mod-stream 1.28.0-r3 apk nginx-mod-stream 1.26.3-r0 apk
nginx-mod-stream-geoip2 1.28.0-r3 apk nginx-mod-stream-geoip2 1.26.3-r0 apk
nginx-vim 1.28.0-r3 apk nginx-vim 1.26.3-r0 apk
npth 1.8-r0 apk npth 1.6-r4 apk
oniguruma 6.9.10-r0 apk oniguruma 6.9.9-r0 apk
openssl 3.5.1-r0 apk openssl 3.3.3-r0 apk
p11-kit 0.25.5-r2 apk p11-kit 0.25.5-r2 apk
packaging 24.2 python packaging 24.2 python
parsedatetime 2.6 python parsedatetime 2.6 python
pcre2 10.43-r1 apk pcre 8.45-r3 apk
perl 5.40.2-r0 apk pcre2 10.43-r0 apk
perl-error 0.17030-r0 apk perl 5.40.1-r0 apk
perl-git 2.49.1-r0 apk perl-error 0.17029-r2 apk
php84 8.4.10-r0 apk perl-git 2.47.2-r0 apk
php84-bcmath 8.4.10-r0 apk php83 8.3.19-r0 apk
php84-bz2 8.4.10-r0 apk php83-bcmath 8.3.19-r0 apk
php84-common 8.4.10-r0 apk php83-bz2 8.3.19-r0 apk
php84-ctype 8.4.10-r0 apk php83-common 8.3.19-r0 apk
php84-curl 8.4.10-r0 apk php83-ctype 8.3.19-r0 apk
php84-dom 8.4.10-r0 apk php83-curl 8.3.19-r0 apk
php84-exif 8.4.10-r0 apk php83-dom 8.3.19-r0 apk
php84-fileinfo 8.4.10-r0 apk php83-exif 8.3.19-r0 apk
php84-fpm 8.4.10-r0 apk php83-fileinfo 8.3.19-r0 apk
php84-ftp 8.4.10-r0 apk php83-fpm 8.3.19-r0 apk
php84-gd 8.4.10-r0 apk php83-ftp 8.3.19-r0 apk
php84-gmp 8.4.10-r0 apk php83-gd 8.3.19-r0 apk
php84-iconv 8.4.10-r0 apk php83-gmp 8.3.19-r0 apk
php84-intl 8.4.10-r0 apk php83-iconv 8.3.19-r0 apk
php84-ldap 8.4.10-r0 apk php83-imap 8.3.19-r0 apk
php84-mbstring 8.4.10-r0 apk php83-intl 8.3.19-r0 apk
php84-mysqli 8.4.10-r0 apk php83-ldap 8.3.19-r0 apk
php84-mysqlnd 8.4.10-r0 apk php83-mbstring 8.3.19-r0 apk
php84-opcache 8.4.10-r0 apk php83-mysqli 8.3.19-r0 apk
php84-openssl 8.4.10-r0 apk php83-mysqlnd 8.3.19-r0 apk
php84-pdo 8.4.10-r0 apk php83-opcache 8.3.19-r0 apk
php84-pdo_mysql 8.4.10-r0 apk php83-openssl 8.3.19-r0 apk
php84-pdo_odbc 8.4.10-r0 apk php83-pdo 8.3.19-r0 apk
php84-pdo_pgsql 8.4.10-r0 apk php83-pdo_mysql 8.3.19-r0 apk
php84-pdo_sqlite 8.4.10-r0 apk php83-pdo_odbc 8.3.19-r0 apk
php84-pear 8.4.10-r0 apk php83-pdo_pgsql 8.3.19-r0 apk
php84-pecl-apcu 5.1.24-r1 apk php83-pdo_sqlite 8.3.19-r0 apk
php84-pecl-igbinary 3.2.16-r1 apk php83-pear 8.3.19-r0 apk
php84-pecl-imap 1.0.3-r0 apk php83-pecl-apcu 5.1.24-r0 apk
php84-pecl-memcached 3.3.0-r0 apk php83-pecl-igbinary 3.2.16-r0 apk
php84-pecl-msgpack 3.0.0-r0 apk php83-pecl-mcrypt 1.0.7-r0 apk
php84-pecl-redis 6.2.0-r0 apk php83-pecl-memcached 3.3.0-r0 apk
php84-pgsql 8.4.10-r0 apk php83-pecl-msgpack 3.0.0-r0 apk
php84-phar 8.4.10-r0 apk php83-pecl-redis 6.2.0-r0 apk
php84-posix 8.4.10-r0 apk php83-pgsql 8.3.19-r0 apk
php84-session 8.4.10-r0 apk php83-phar 8.3.19-r0 apk
php84-simplexml 8.4.10-r0 apk php83-posix 8.3.19-r0 apk
php84-soap 8.4.10-r0 apk php83-session 8.3.19-r0 apk
php84-sockets 8.4.10-r0 apk php83-simplexml 8.3.19-r0 apk
php84-sodium 8.4.10-r0 apk php83-soap 8.3.19-r0 apk
php84-sqlite3 8.4.10-r0 apk php83-sockets 8.3.19-r0 apk
php84-tokenizer 8.4.10-r0 apk php83-sodium 8.3.19-r0 apk
php84-xml 8.4.10-r0 apk php83-sqlite3 8.3.19-r0 apk
php84-xmlreader 8.4.10-r0 apk php83-tokenizer 8.3.19-r0 apk
php84-xmlwriter 8.4.10-r0 apk php83-xml 8.3.19-r0 apk
php84-xsl 8.4.10-r0 apk php83-xmlreader 8.3.19-r0 apk
php84-zip 8.4.10-r0 apk php83-xmlwriter 8.3.19-r0 apk
php83-xsl 8.3.19-r0 apk
php83-zip 8.3.19-r0 apk
pinentry 1.3.1-r0 apk pinentry 1.3.1-r0 apk
pip 25.2 python pip 25.0.1 python
pkb-client 2.2.0 python pkb-client 2.0.0 python
platformdirs 4.2.2 python platformdirs 4.2.2 python
popt 1.19-r4 apk popt 1.19-r4 apk
procps-ng 4.0.4-r3 apk procps-ng 4.0.4-r2 apk
proto-plus 1.26.1 python proto-plus 1.26.1 python
protobuf 6.31.1 python protobuf 6.30.2 python
pyacmedns 0.4 python pyacmedns 0.4 python
pyasn1 0.6.1 python pyasn1 0.6.1 python
pyasn1-modules 0.4.2 python pyasn1-modules 0.4.2 python
pyc 3.12.11-r0 apk pyc 3.12.9-r0 apk
pycparser 2.22 python pycparser 2.22 python
pyjwt 2.10.1 python pyjwt 2.10.1 python
pynamecheap 0.0.3 python pynamecheap 0.0.3 python
pyopenssl 25.1.0 python pyopenssl 25.0.0 python
pyotp 2.9.0 python pyotp 2.9.0 python
pyparsing 3.2.3 python pyparsing 3.2.3 python
pyrfc3339 2.0.1 python pyrfc3339 2.0.1 python
python-dateutil 2.9.0.post0 python python-dateutil 2.9.0.post0 python
python-digitalocean 1.17.0 python python-digitalocean 1.17.0 python
python-transip 0.6.0 python python-transip 0.6.0 python
python3 3.12.11-r0 apk python3 3.12.9-r0 apk
python3-pyc 3.12.11-r0 apk python3-pyc 3.12.9-r0 apk
python3-pycache-pyc0 3.12.11-r0 apk python3-pycache-pyc0 3.12.9-r0 apk
pytz 2025.2 python pytz 2025.2 python
pyyaml 6.0.2 python pyyaml 6.0.2 python
readline 8.2.13-r1 apk readline 8.2.13-r0 apk
requests 2.32.4 python requests 2.32.3 python
requests-file 2.1.0 python requests-file 2.1.0 python
requests-mock 1.12.1 python requests-mock 1.12.1 python
rsa 4.9.1 python rsa 4.9 python
s3transfer 0.13.1 python s3transfer 0.11.4 python
scanelf 1.3.8-r1 apk scanelf 1.3.8-r1 apk
setuptools 80.9.0 python setuptools 78.1.0 python
shadow 4.17.3-r0 apk shadow 4.16.0-r1 apk
six 1.17.0 python six 1.17.0 python
skalibs-libs 2.14.4.0-r0 apk skalibs-libs 2.14.3.0-r0 apk
soupsieve 2.7 python soupsieve 2.6 python
sqlite-libs 3.49.2-r1 apk sqlite-libs 3.48.0-r0 apk
ssl_client 1.37.0-r18 apk ssl_client 1.37.0-r12 apk
tiff 4.7.0-r0 apk tiff 4.7.0-r0 apk
tldextract 5.3.0 python tldextract 5.1.3 python
tomli 2.0.1 python tomli 2.0.1 python
typeguard 4.3.0 python typeguard 4.3.0 python
typing-extensions 4.12.2 python typing-extensions 4.12.2 python
typing-extensions 4.14.1 python typing-extensions 4.13.1 python
tzdata 2025b-r0 apk tzdata 2025b-r0 apk
unixodbc 2.3.12-r0 apk unixodbc 2.3.12-r0 apk
uritemplate 4.2.0 python uritemplate 4.1.1 python
urllib3 2.5.0 python urllib3 2.3.0 python
utmps-libs 0.1.3.1-r0 apk utmps-libs 0.1.2.3-r2 apk
wheel 0.45.1 python (+1 duplicate) wheel 0.45.1 python (+1 duplicate)
whois 5.6.3-r0 apk whois 5.5.23-r0 apk
xz-libs 5.8.1-r0 apk xz-libs 5.6.3-r1 apk
zipp 3.19.2 python zipp 3.19.2 python
zlib 1.3.1-r2 apk zlib 1.3.1-r2 apk
zope-interface 7.2 python zope-interface 7.2 python
zstd-libs 1.5.7-r0 apk zstd-libs 1.5.6-r2 apk

View file

@ -44,7 +44,6 @@ opt_param_env_vars:
opt_param_usage_include_ports: true opt_param_usage_include_ports: true
opt_param_ports: opt_param_ports:
- {external_port: "80", internal_port: "80", port_desc: "HTTP port (required for HTTP validation and HTTP -> HTTPS redirect)"} - {external_port: "80", internal_port: "80", port_desc: "HTTP port (required for HTTP validation and HTTP -> HTTPS redirect)"}
- {external_port: "443", internal_port: "443/udp", port_desc: "QUIC (HTTP/3) port. Must be enabled in the default and proxy confs."}
readonly_supported: true readonly_supported: true
readonly_message: | readonly_message: |
* `/tmp` must be mounted to tmpfs * `/tmp` must be mounted to tmpfs
@ -139,16 +138,6 @@ app_setup_block: |
* Proxy sample files WILL be updated, however your renamed (enabled) proxy files will not. * Proxy sample files WILL be updated, however your renamed (enabled) proxy files will not.
* You can check the new sample and adjust your active config as needed. * You can check the new sample and adjust your active config as needed.
### QUIC support
This image supports QUIC (also known as HTTP/3) but it must be explicitly enabled in each proxy conf, and the default conf, because if the listener is enabled and you don't expose 443/UDP, it can break connections with some browsers.
To enable QUIC, expose 443/UDP to your clients, then uncomment both QUIC listeners in all of your active proxy confs, as well as the default conf, and restart the container.
You should also uncomment the `Alt-Svc` header in your `ssl.conf` so that browsers are aware that you offer QUIC connectivity.
It is [recommended](https://quic-go.net/docs/quic/optimizations/#udp-buffer-sizes) to increase the UDP send/recieve buffer **on the host** by setting the `net.core.rmem_max` and `net.core.wmem_max` sysctls. Suggested values are 4-16Mb (4194304-16777216 bytes). For persistence between reboots use `/etc/sysctl.d/`.
### Migration from the old `linuxserver/letsencrypt` image ### Migration from the old `linuxserver/letsencrypt` image
Please follow the instructions [on this blog post](https://www.linuxserver.io/blog/2020-08-21-introducing-swag#migrate). Please follow the instructions [on this blog post](https://www.linuxserver.io/blog/2020-08-21-introducing-swag#migrate).
@ -175,7 +164,6 @@ init_diagram: |
init-outdated-config -> init-config-end init-outdated-config -> init-config-end
init-config -> init-crontab-config init-config -> init-crontab-config
init-mods-end -> init-custom-files init-mods-end -> init-custom-files
init-adduser -> init-device-perms
base -> init-envfile base -> init-envfile
init-swag-samples -> init-fail2ban-config init-swag-samples -> init-fail2ban-config
init-os-end -> init-folders init-os-end -> init-folders
@ -187,7 +175,6 @@ init_diagram: |
init-samples -> init-nginx init-samples -> init-nginx
init-version-checks -> init-nginx-end init-version-checks -> init-nginx-end
init-adduser -> init-os-end init-adduser -> init-os-end
init-device-perms -> init-os-end
init-envfile -> init-os-end init-envfile -> init-os-end
init-renew -> init-outdated-config init-renew -> init-outdated-config
init-keygen -> init-permissions init-keygen -> init-permissions
@ -213,13 +200,11 @@ init_diagram: |
svc-swag-auto-reload -> legacy-services svc-swag-auto-reload -> legacy-services
} }
Base Images: { Base Images: {
"baseimage-alpine-nginx:3.22" <- "baseimage-alpine:3.22" "baseimage-alpine-nginx:3.21" <- "baseimage-alpine:3.21"
} }
"swag:latest" <- Base Images "swag:latest" <- Base Images
# changelog # changelog
changelogs: changelogs:
- {date: "18.07.25:", desc: "Rebase to Alpine 3.22 with PHP 8.4. Add QUIC support. Drop PHP bindings for mcrypt as it is no longer maintained."}
- {date: "05.05.25:", desc: "Disable Certbot's built in log rotation."}
- {date: "19.01.25:", desc: "Add [Auto Reload](https://github.com/linuxserver/docker-mods/tree/swag-auto-reload) functionality to SWAG."} - {date: "19.01.25:", desc: "Add [Auto Reload](https://github.com/linuxserver/docker-mods/tree/swag-auto-reload) functionality to SWAG."}
- {date: "17.12.24:", desc: "Rebase to Alpine 3.21."} - {date: "17.12.24:", desc: "Rebase to Alpine 3.21."}
- {date: "21.10.24:", desc: "Fix naming issue with Dynu plugin. If you are using Dynu, please make sure your credentials are set in /config/dns-conf/dynu.ini and your DNSPLUGIN variable is set to dynu (not dynudns)."} - {date: "21.10.24:", desc: "Fix naming issue with Dynu plugin. If you are using Dynu, please make sure your credentials are set in /config/dns-conf/dynu.ini and your DNSPLUGIN variable is set to dynu (not dynudns)."}

View file

@ -1,8 +1,13 @@
## Version 2025/03/25 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authelia-location.conf.sample ## Version 2024/03/14 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authelia-location.conf.sample
# Make sure that your authelia container is in the same user defined bridge network and is named authelia # Make sure that your authelia container is in the same user defined bridge network and is named authelia
# Rename /config/nginx/proxy-confs/authelia.subdomain.conf.sample to /config/nginx/proxy-confs/authelia.subdomain.conf # Rename /config/nginx/proxy-confs/authelia.subdomain.conf.sample to /config/nginx/proxy-confs/authelia.subdomain.conf
# For authelia 4.37 and below, make sure that the authelia configuration.yml has 'path: "authelia"' defined
# For authelia 4.38 and above, make sure that the authelia configuration.yml has 'address: "tcp://:9091/authelia"' defined
## Send a subrequest to Authelia to verify if the user is authenticated and has permission to access the resource ## Send a subrequest to Authelia to verify if the user is authenticated and has permission to access the resource
## For authelia 4.37 and below, use the following line
# auth_request /authelia/api/verify;
## For authelia 4.38 and above, use the following line
auth_request /authelia/api/authz/auth-request; auth_request /authelia/api/authz/auth-request;
## If the subreqest returns 200 pass to the backend, if the subrequest returns 401 redirect to the portal ## If the subreqest returns 200 pass to the backend, if the subrequest returns 401 redirect to the portal

View file

@ -1,15 +1,44 @@
## Version 2025/03/25 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authelia-server.conf.sample ## Version 2024/03/16 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authelia-server.conf.sample
# Make sure that your authelia container is in the same user defined bridge network and is named authelia # Make sure that your authelia container is in the same user defined bridge network and is named authelia
# Rename /config/nginx/proxy-confs/authelia.subdomain.conf.sample to /config/nginx/proxy-confs/authelia.subdomain.conf # Rename /config/nginx/proxy-confs/authelia.subdomain.conf.sample to /config/nginx/proxy-confs/authelia.subdomain.conf
# For authelia 4.37 and below, make sure that the authelia configuration.yml has 'path: "authelia"' defined
# For authelia 4.38 and above, make sure that the authelia configuration.yml has 'address: "tcp://:9091/authelia"' defined
# location for authelia auth requests # location for authelia subfolder requests
location ^~ /authelia {
auth_request off; # requests to this subfolder must be accessible without authentication
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_authelia authelia;
proxy_pass http://$upstream_authelia:9091;
}
# location for authelia 4.37 and below auth requests
location = /authelia/api/verify {
internal;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_authelia authelia;
proxy_pass http://$upstream_authelia:9091;
## Include the Set-Cookie header if present
auth_request_set $set_cookie $upstream_http_set_cookie;
add_header Set-Cookie $set_cookie;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
}
# location for authelia 4.38 and above auth requests
location = /authelia/api/authz/auth-request { location = /authelia/api/authz/auth-request {
internal; internal;
include /config/nginx/proxy.conf; include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf; include /config/nginx/resolver.conf;
set $upstream_authelia authelia; set $upstream_authelia authelia;
proxy_pass http://$upstream_authelia:9091/api/authz/auth-request; proxy_pass http://$upstream_authelia:9091;
## Include the Set-Cookie header if present ## Include the Set-Cookie header if present
auth_request_set $set_cookie $upstream_http_set_cookie; auth_request_set $set_cookie $upstream_http_set_cookie;
@ -33,6 +62,11 @@ location @authelia_proxy_signin {
## Translate the Location response header from the auth subrequest into a variable ## Translate the Location response header from the auth subrequest into a variable
auth_request_set $signin_url $upstream_http_location; auth_request_set $signin_url $upstream_http_location;
if ($signin_url = '') {
## Set the $signin_url variable
set $signin_url https://$http_host/authelia/?rd=$target_url;
}
## Redirect to login ## Redirect to login
return 302 $signin_url; return 302 $signin_url;
} }

View file

@ -1,4 +1,4 @@
## Version 2025/03/25 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authentik-server.conf.sample ## Version 2023/04/27 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authentik-server.conf.sample
# Make sure that your authentik container is in the same user defined bridge network and is named authentik-server # Make sure that your authentik container is in the same user defined bridge network and is named authentik-server
# Rename /config/nginx/proxy-confs/authentik.subdomain.conf.sample to /config/nginx/proxy-confs/authentik.subdomain.conf # Rename /config/nginx/proxy-confs/authentik.subdomain.conf.sample to /config/nginx/proxy-confs/authentik.subdomain.conf
@ -19,7 +19,7 @@ location = /outpost.goauthentik.io/auth/nginx {
include /config/nginx/proxy.conf; include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf; include /config/nginx/resolver.conf;
set $upstream_authentik authentik-server; set $upstream_authentik authentik-server;
proxy_pass http://$upstream_authentik:9000/outpost.goauthentik.io/auth/nginx; proxy_pass http://$upstream_authentik:9000;
## Include the Set-Cookie header if present ## Include the Set-Cookie header if present
auth_request_set $set_cookie $upstream_http_set_cookie; auth_request_set $set_cookie $upstream_http_set_cookie;

View file

@ -1,4 +1,4 @@
## Version 2025/07/18 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/site-confs/default.conf.sample ## Version 2024/12/17 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/site-confs/default.conf.sample
# redirect all traffic to https # redirect all traffic to https
server { server {
@ -13,9 +13,7 @@ server {
# main server block # main server block
server { server {
listen 443 ssl default_server; listen 443 ssl default_server;
# listen 443 quic reuseport default_server;
listen [::]:443 ssl default_server; listen [::]:443 ssl default_server;
# listen [::]:443 quic reuseport default_server;
server_name _; server_name _;

View file

@ -1,9 +0,0 @@
## Version 2025/06/08 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/tinyauth-location.conf.sample
# Make sure that your tinyauth container is in the same user defined bridge network and is named tinyauth
# Rename /config/nginx/proxy-confs/tinyauth.subdomain.conf.sample to /config/nginx/proxy-confs/tinyauth.subdomain.conf
## Send a subrequest to tinyauth to verify if the user is authenticated and has permission to access the resource
auth_request /tinyauth;
## If the subreqest returns 200 pass to the backend, if the subrequest returns 401 redirect to the portal
error_page 401 = @tinyauth_login;

View file

@ -1,35 +0,0 @@
## Version 2025/06/08 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/tinyauth-server.conf.sample
# Make sure that your tinyauth container is in the same user defined bridge network and is named tinyauth
# Rename /config/nginx/proxy-confs/tinyauth.subdomain.conf.sample to /config/nginx/proxy-confs/tinyauth.subdomain.conf
# location for tinyauth auth requests
location /tinyauth {
internal;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_tinyauth tinyauth;
proxy_pass http://$upstream_tinyauth:3000/api/auth/nginx;
proxy_set_header x-forwarded-proto $scheme;
proxy_set_header x-forwarded-host $http_host;
proxy_set_header x-forwarded-uri $request_uri;
}
# virtual location for tinyauth 401 redirects
location @tinyauth_login {
internal;
## Set the $target_url variable based on the original request
set_escape_uri $target_url $scheme://$http_host$request_uri;
## Set the $signin_url variable
set $domain $host;
if ($host ~* "^[^.]+\.([^.]+\..+)$") {
set $domain $1;
}
set $signin_url https://tinyauth.$domain/login?redirect_uri=$target_url;
## Redirect to login
return 302 $signin_url;
}

View file

@ -59,9 +59,6 @@ grep -qF 'agree-tos' /config/etc/letsencrypt/cli.ini || echo 'agree-tos=true' >>
# Check for broken dns credentials value in cli.ini and remove # Check for broken dns credentials value in cli.ini and remove
sed -i '/dns--credentials/d' /config/etc/letsencrypt/cli.ini sed -i '/dns--credentials/d' /config/etc/letsencrypt/cli.ini
# Disable Certbot's built in log rotation
set_ini_value "max-log-backups" "0" /config/etc/letsencrypt/cli.ini
# copy dns default configs # copy dns default configs
cp -n /defaults/dns-conf/* /config/dns-conf/ 2> >(grep -v 'cp: not replacing') cp -n /defaults/dns-conf/* /config/dns-conf/ 2> >(grep -v 'cp: not replacing')
lsiown -R abc:abc /config/dns-conf lsiown -R abc:abc /config/dns-conf

View file

@ -22,14 +22,6 @@ if [[ ! -f /config/nginx/authentik-server.conf ]]; then
cp /defaults/nginx/authentik-server.conf.sample /config/nginx/authentik-server.conf cp /defaults/nginx/authentik-server.conf.sample /config/nginx/authentik-server.conf
fi fi
# copy tinyauth config files if they don't exist
if [[ ! -f /config/nginx/tinyauth-location.conf ]]; then
cp /defaults/nginx/tinyauth-location.conf.sample /config/nginx/tinyauth-location.conf
fi
if [[ ! -f /config/nginx/tinyauth-server.conf ]]; then
cp /defaults/nginx/tinyauth-server.conf.sample /config/nginx/tinyauth-server.conf
fi
# copy old ldap config file to new location # copy old ldap config file to new location
if [[ -f /config/nginx/ldap.conf ]] && [[ ! -f /config/nginx/ldap-server.conf ]]; then if [[ -f /config/nginx/ldap.conf ]] && [[ ! -f /config/nginx/ldap-server.conf ]]; then
cp /config/nginx/ldap.conf /config/nginx/ldap-server.conf cp /config/nginx/ldap.conf /config/nginx/ldap-server.conf