Compare commits

..

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

28 changed files with 490 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,373 +1,367 @@
NAME VERSION TYPE NAME VERSION TYPE
Simple Launcher 1.1.0.14 binary (+5 duplicates) Simple Launcher 1.1.0.14 dotnet (+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.1.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.32.0 python
azure-identity 1.23.1 python azure-identity 1.20.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.10 python
botocore 1.40.1 python botocore 1.37.10 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 cloudflare 2.19.4 python
cli-32 UNKNOWN binary composer 2.8.6 binary
cli-64 UNKNOWN binary configargparse 1.7 python
cli-arm64 UNKNOWN binary configobj 5.0.9 python
cloudflare 2.19.4 python coreutils 9.5-r2 apk
composer 2.8.10 binary coreutils-env 9.5-r2 apk
configargparse 1.7.1 python coreutils-fmt 9.5-r2 apk
configobj 5.0.9 python coreutils-sha512sum 9.5-r2 apk
coreutils 9.7-r1 apk cryptography 44.0.2 python
coreutils-env 9.7-r1 apk curl 8.12.1-r0 apk
coreutils-fmt 9.7-r1 apk distro 1.9.0 python
coreutils-sha512sum 9.7-r1 apk dns-lexicon 3.20.1 python
cryptography 45.0.5 python dnslib 0.9.26 python
curl 8.14.1-r1 apk dnspython 2.7.0 python
distro 1.9.0 python domeneshop 0.4.4 python
dns-lexicon 3.21.1 python fail2ban 1.1.0 python
dnslib 0.9.26 python fail2ban 1.1.0-r2 apk
dnspython 2.7.0 python fail2ban-pyc 1.1.0-r2 apk
domeneshop 0.4.4 python filelock 3.17.0 python
fail2ban 1.1.0 python findutils 4.10.0-r0 apk
fail2ban 1.1.0-r3 apk fontconfig 2.15.0-r1 apk
fail2ban-pyc 1.1.0-r3 apk freetype 2.13.3-r0 apk
filelock 3.18.0 python future 1.0.0 python
findutils 4.10.0-r0 apk gdbm 1.24-r0 apk
fontconfig 2.15.0-r3 apk git 2.47.2-r0 apk
freetype 2.13.3-r0 apk git-init-template 2.47.2-r0 apk
future 1.0.0 python git-perl 2.47.2-r0 apk
gdbm 1.24-r0 apk gmp 6.3.0-r2 apk
git 2.49.1-r0 apk gnupg 2.4.7-r0 apk
git-init-template 2.49.1-r0 apk gnupg-dirmngr 2.4.7-r0 apk
git-perl 2.49.1-r0 apk gnupg-gpgconf 2.4.7-r0 apk
gmp 6.3.0-r3 apk gnupg-keyboxd 2.4.7-r0 apk
gnupg 2.4.7-r0 apk gnupg-utils 2.4.7-r0 apk
gnupg-dirmngr 2.4.7-r0 apk gnupg-wks-client 2.4.7-r0 apk
gnupg-gpgconf 2.4.7-r0 apk gnutls 3.8.8-r0 apk
gnupg-keyboxd 2.4.7-r0 apk google-api-core 2.24.2 python
gnupg-utils 2.4.7-r0 apk google-api-python-client 2.163.0 python
gnupg-wks-client 2.4.7-r0 apk google-auth 2.38.0 python
gnutls 3.8.8-r0 apk google-auth-httplib2 0.2.0 python
google-api-core 2.25.1 python googleapis-common-protos 1.69.1 python
google-api-python-client 2.177.0 python gpg 2.4.7-r0 apk
google-auth 2.40.3 python gpg-agent 2.4.7-r0 apk
google-auth-httplib2 0.2.0 python gpg-wks-server 2.4.7-r0 apk
googleapis-common-protos 1.70.0 python gpgsm 2.4.7-r0 apk
gpg 2.4.7-r0 apk gpgv 2.4.7-r0 apk
gpg-agent 2.4.7-r0 apk httplib2 0.22.0 python
gpg-wks-server 2.4.7-r0 apk icu-data-en 74.2-r0 apk
gpgsm 2.4.7-r0 apk icu-libs 74.2-r0 apk
gpgv 2.4.7-r0 apk idna 3.10 python
gui UNKNOWN binary importlib-metadata 8.0.0 python
gui-32 UNKNOWN binary inflect 7.3.1 python
gui-64 UNKNOWN binary inotify-tools 4.23.9.0-r0 apk
gui-arm64 UNKNOWN binary inotify-tools-libs 4.23.9.0-r0 apk
httplib2 0.22.0 python inwx-domrobot 3.2.0 python
icu-data-en 76.1-r1 apk iptables 1.8.11-r1 apk
icu-libs 76.1-r1 apk iptables-legacy 1.8.11-r1 apk
idna 3.10 python isodate 0.7.2 python
importlib-metadata 8.0.0 python jaraco-collections 5.1.0 python
inflect 7.3.1 python jaraco-context 5.3.0 python
inotify-tools 4.23.9.0-r0 apk jaraco-functools 4.0.1 python
inotify-tools-libs 4.23.9.0-r0 apk jaraco-text 3.12.1 python
inwx-domrobot 3.2.0 python jinja2 3.1.6 python
iptables 1.8.11-r1 apk jmespath 1.0.1 python
iptables-legacy 1.8.11-r1 apk josepy 1.15.0 python
isodate 0.7.2 python jq 1.7.1-r0 apk
jaraco-collections 5.1.0 python jsonlines 4.0.0 python
jaraco-context 5.3.0 python jsonpickle 4.0.2 python
jaraco-functools 4.0.1 python libassuan 2.5.7-r0 apk
jaraco-text 3.12.1 python libattr 2.5.2-r2 apk
jinja2 3.1.6 python libavif 1.0.4-r0 apk
jmespath 1.0.1 python libbsd 0.12.2-r0 apk
josepy 2.1.0 python libbz2 1.0.8-r6 apk
jq 1.8.0-r0 apk libcrypto3 3.3.3-r0 apk
jsonlines 4.0.0 python libcurl 8.12.1-r0 apk
jsonpickle 4.1.1 python libdav1d 1.5.0-r0 apk
libapk2 2.14.9-r2 apk libedit 20240808.3.1-r0 apk
libassuan 2.5.7-r0 apk libevent 2.1.12-r7 apk
libattr 2.5.2-r2 apk libexpat 2.6.4-r0 apk
libavif 1.3.0-r0 apk libffi 3.4.7-r0 apk
libbsd 0.12.2-r0 apk libgcc 14.2.0-r4 apk
libbz2 1.0.8-r6 apk libgcrypt 1.10.3-r1 apk
libcrypto3 3.5.1-r0 apk libgd 2.3.3-r9 apk
libcurl 8.14.1-r1 apk libgpg-error 1.51-r0 apk
libdav1d 1.5.1-r0 apk libice 1.1.1-r6 apk
libedit 20250104.3.1-r1 apk libidn2 2.3.7-r0 apk
libevent 2.1.12-r8 apk libintl 0.22.5-r0 apk
libexpat 2.7.1-r0 apk libip4tc 1.8.11-r1 apk
libffi 3.4.8-r0 apk libip6tc 1.8.11-r1 apk
libgcc 14.2.0-r6 apk libjpeg-turbo 3.0.4-r0 apk
libgcrypt 1.10.3-r1 apk libksba 1.6.7-r0 apk
libgd 2.3.3-r10 apk libldap 2.6.8-r0 apk
libgpg-error 1.55-r0 apk libmaxminddb-libs 1.9.1-r0 apk
libice 1.1.2-r0 apk libmcrypt 2.5.8-r10 apk
libidn2 2.3.7-r0 apk libmd 1.1.0-r0 apk
libintl 0.24.1-r0 apk libmemcached-libs 1.1.4-r1 apk
libip4tc 1.8.11-r1 apk libmnl 1.0.5-r2 apk
libip6tc 1.8.11-r1 apk libncursesw 6.5_p20241006-r3 apk
libjpeg-turbo 3.1.0-r0 apk libnftnl 1.2.8-r0 apk
libksba 1.6.7-r0 apk libpanelw 6.5_p20241006-r3 apk
libldap 2.6.8-r0 apk libpng 1.6.44-r0 apk
libmaxminddb-libs 1.9.1-r0 apk libpq 17.4-r0 apk
libmd 1.1.0-r0 apk libproc2 4.0.4-r2 apk
libmemcached-libs 1.1.4-r1 apk libpsl 0.21.5-r3 apk
libmnl 1.0.5-r2 apk libsasl 2.1.28-r8 apk
libncursesw 6.5_p20250503-r0 apk libseccomp 2.5.5-r1 apk
libnftnl 1.2.9-r0 apk libsharpyuv 1.4.0-r0 apk
libpanelw 6.5_p20250503-r0 apk libsm 1.2.4-r4 apk
libpng 1.6.47-r0 apk libsodium 1.0.20-r0 apk
libpq 17.5-r0 apk libssl3 3.3.3-r0 apk
libproc2 4.0.4-r3 apk libstdc++ 14.2.0-r4 apk
libpsl 0.21.5-r3 apk libtasn1 4.20.0-r0 apk
libsasl 2.1.28-r8 apk libunistring 1.2-r0 apk
libseccomp 2.6.0-r0 apk libuuid 2.40.4-r0 apk
libsharpyuv 1.5.0-r0 apk libwebp 1.4.0-r0 apk
libsm 1.2.5-r0 apk libx11 1.8.10-r0 apk
libsodium 1.0.20-r0 apk libxau 1.0.11-r4 apk
libssl3 3.5.1-r0 apk libxcb 1.16.1-r0 apk
libstdc++ 14.2.0-r6 apk libxdmcp 1.1.5-r1 apk
libtasn1 4.20.0-r0 apk libxext 1.3.6-r2 apk
libunistring 1.3-r0 apk libxml2 2.13.4-r5 apk
libuuid 2.41-r9 apk libxpm 3.5.17-r0 apk
libwebp 1.5.0-r0 apk libxslt 1.1.42-r1 apk
libx11 1.8.11-r0 apk libxt 1.3.1-r0 apk
libxau 1.0.12-r0 apk libxtables 1.8.11-r1 apk
libxcb 1.17.0-r0 apk libzip 1.11.2-r0 apk
libxdmcp 1.1.5-r1 apk linux-pam 1.6.1-r1 apk
libxext 1.3.6-r2 apk logrotate 3.21.0-r1 apk
libxml2 2.13.8-r0 apk loopialib 0.2.0 python
libxpm 3.5.17-r0 apk lxml 5.3.1 python
libxslt 1.1.43-r3 apk lz4-libs 1.10.0-r0 apk
libxt 1.3.1-r0 apk markupsafe 3.0.2 python
libxtables 1.8.11-r1 apk memcached 1.6.32-r0 apk
libyuv 0.0.1887.20251502-r1 apk mock 5.2.0 python
libzip 1.11.4-r0 apk more-itertools 10.3.0 python
linux-pam 1.7.0-r4 apk mpdecimal 4.0.0-r0 apk
logrotate 3.21.0-r1 apk msal 1.31.1 python
loopialib 0.2.0 python msal-extensions 1.2.0 python
lxml 6.0.0 python musl 1.2.5-r9 apk
lz4-libs 1.10.0-r0 apk musl-utils 1.2.5-r9 apk
markupsafe 3.0.2 python my-test-package 1.0 python
memcached 1.6.32-r0 apk nano 8.2-r0 apk
mock 5.2.0 python ncurses-terminfo-base 6.5_p20241006-r3 apk
more-itertools 10.3.0 python netcat-openbsd 1.226.1.1-r0 apk
mpdecimal 4.0.1-r0 apk nettle 3.10-r1 apk
msal 1.33.0 python nghttp2-libs 1.64.0-r0 apk
msal-extensions 1.3.1 python nginx 1.26.2-r4 apk
musl 1.2.5-r10 apk nginx-mod-devel-kit 1.26.2-r4 apk
musl-utils 1.2.5-r10 apk nginx-mod-http-brotli 1.26.2-r4 apk
my-test-package 1.0 python nginx-mod-http-dav-ext 1.26.2-r4 apk
nano 8.4-r0 apk nginx-mod-http-echo 1.26.2-r4 apk
ncurses-terminfo-base 6.5_p20250503-r0 apk nginx-mod-http-fancyindex 1.26.2-r4 apk
netcat-openbsd 1.229.1-r0 apk nginx-mod-http-geoip2 1.26.2-r4 apk
nettle 3.10.1-r0 apk nginx-mod-http-headers-more 1.26.2-r4 apk
nghttp2-libs 1.65.0-r0 apk nginx-mod-http-image-filter 1.26.2-r4 apk
nginx 1.28.0-r3 apk nginx-mod-http-perl 1.26.2-r4 apk
nginx-mod-devel-kit 1.28.0-r3 apk nginx-mod-http-redis2 1.26.2-r4 apk
nginx-mod-http-brotli 1.28.0-r3 apk nginx-mod-http-set-misc 1.26.2-r4 apk
nginx-mod-http-dav-ext 1.28.0-r3 apk nginx-mod-http-upload-progress 1.26.2-r4 apk
nginx-mod-http-echo 1.28.0-r3 apk nginx-mod-http-xslt-filter 1.26.2-r4 apk
nginx-mod-http-fancyindex 1.28.0-r3 apk nginx-mod-mail 1.26.2-r4 apk
nginx-mod-http-geoip2 1.28.0-r3 apk nginx-mod-rtmp 1.26.2-r4 apk
nginx-mod-http-headers-more 1.28.0-r3 apk nginx-mod-stream 1.26.2-r4 apk
nginx-mod-http-image-filter 1.28.0-r3 apk nginx-mod-stream-geoip2 1.26.2-r4 apk
nginx-mod-http-perl 1.28.0-r3 apk nginx-vim 1.26.2-r4 apk
nginx-mod-http-redis2 1.28.0-r3 apk npth 1.6-r4 apk
nginx-mod-http-set-misc 1.28.0-r3 apk oniguruma 6.9.9-r0 apk
nginx-mod-http-upload-progress 1.28.0-r3 apk openssl 3.3.3-r0 apk
nginx-mod-http-xslt-filter 1.28.0-r3 apk p11-kit 0.25.5-r2 apk
nginx-mod-mail 1.28.0-r3 apk packaging 24.2 python
nginx-mod-rtmp 1.28.0-r3 apk parsedatetime 2.6 python
nginx-mod-stream 1.28.0-r3 apk pcre 8.45-r3 apk
nginx-mod-stream-geoip2 1.28.0-r3 apk pcre2 10.43-r0 apk
nginx-vim 1.28.0-r3 apk perl 5.40.1-r0 apk
npth 1.8-r0 apk perl-error 0.17029-r2 apk
oniguruma 6.9.10-r0 apk perl-git 2.47.2-r0 apk
openssl 3.5.1-r0 apk php83 8.3.17-r0 apk
p11-kit 0.25.5-r2 apk php83-bcmath 8.3.17-r0 apk
packaging 24.2 python php83-bz2 8.3.17-r0 apk
parsedatetime 2.6 python php83-common 8.3.17-r0 apk
pcre2 10.43-r1 apk php83-ctype 8.3.17-r0 apk
perl 5.40.2-r0 apk php83-curl 8.3.17-r0 apk
perl-error 0.17030-r0 apk php83-dom 8.3.17-r0 apk
perl-git 2.49.1-r0 apk php83-exif 8.3.17-r0 apk
php84 8.4.10-r0 apk php83-fileinfo 8.3.17-r0 apk
php84-bcmath 8.4.10-r0 apk php83-fpm 8.3.17-r0 apk
php84-bz2 8.4.10-r0 apk php83-ftp 8.3.17-r0 apk
php84-common 8.4.10-r0 apk php83-gd 8.3.17-r0 apk
php84-ctype 8.4.10-r0 apk php83-gmp 8.3.17-r0 apk
php84-curl 8.4.10-r0 apk php83-iconv 8.3.17-r0 apk
php84-dom 8.4.10-r0 apk php83-imap 8.3.17-r0 apk
php84-exif 8.4.10-r0 apk php83-intl 8.3.17-r0 apk
php84-fileinfo 8.4.10-r0 apk php83-ldap 8.3.17-r0 apk
php84-fpm 8.4.10-r0 apk php83-mbstring 8.3.17-r0 apk
php84-ftp 8.4.10-r0 apk php83-mysqli 8.3.17-r0 apk
php84-gd 8.4.10-r0 apk php83-mysqlnd 8.3.17-r0 apk
php84-gmp 8.4.10-r0 apk php83-opcache 8.3.17-r0 apk
php84-iconv 8.4.10-r0 apk php83-openssl 8.3.17-r0 apk
php84-intl 8.4.10-r0 apk php83-pdo 8.3.17-r0 apk
php84-ldap 8.4.10-r0 apk php83-pdo_mysql 8.3.17-r0 apk
php84-mbstring 8.4.10-r0 apk php83-pdo_odbc 8.3.17-r0 apk
php84-mysqli 8.4.10-r0 apk php83-pdo_pgsql 8.3.17-r0 apk
php84-mysqlnd 8.4.10-r0 apk php83-pdo_sqlite 8.3.17-r0 apk
php84-opcache 8.4.10-r0 apk php83-pear 8.3.17-r0 apk
php84-openssl 8.4.10-r0 apk php83-pecl-apcu 5.1.24-r0 apk
php84-pdo 8.4.10-r0 apk php83-pecl-igbinary 3.2.16-r0 apk
php84-pdo_mysql 8.4.10-r0 apk php83-pecl-mcrypt 1.0.7-r0 apk
php84-pdo_odbc 8.4.10-r0 apk php83-pecl-memcached 3.3.0-r0 apk
php84-pdo_pgsql 8.4.10-r0 apk php83-pecl-msgpack 3.0.0-r0 apk
php84-pdo_sqlite 8.4.10-r0 apk php83-pecl-redis 6.1.0-r0 apk
php84-pear 8.4.10-r0 apk php83-pgsql 8.3.17-r0 apk
php84-pecl-apcu 5.1.24-r1 apk php83-phar 8.3.17-r0 apk
php84-pecl-igbinary 3.2.16-r1 apk php83-posix 8.3.17-r0 apk
php84-pecl-imap 1.0.3-r0 apk php83-session 8.3.17-r0 apk
php84-pecl-memcached 3.3.0-r0 apk php83-simplexml 8.3.17-r0 apk
php84-pecl-msgpack 3.0.0-r0 apk php83-soap 8.3.17-r0 apk
php84-pecl-redis 6.2.0-r0 apk php83-sockets 8.3.17-r0 apk
php84-pgsql 8.4.10-r0 apk php83-sodium 8.3.17-r0 apk
php84-phar 8.4.10-r0 apk php83-sqlite3 8.3.17-r0 apk
php84-posix 8.4.10-r0 apk php83-tokenizer 8.3.17-r0 apk
php84-session 8.4.10-r0 apk php83-xml 8.3.17-r0 apk
php84-simplexml 8.4.10-r0 apk php83-xmlreader 8.3.17-r0 apk
php84-soap 8.4.10-r0 apk php83-xmlwriter 8.3.17-r0 apk
php84-sockets 8.4.10-r0 apk php83-xsl 8.3.17-r0 apk
php84-sodium 8.4.10-r0 apk php83-zip 8.3.17-r0 apk
php84-sqlite3 8.4.10-r0 apk pinentry 1.3.1-r0 apk
php84-tokenizer 8.4.10-r0 apk pip 25.0.1 python
php84-xml 8.4.10-r0 apk pkb-client 2.0.0 python
php84-xmlreader 8.4.10-r0 apk platformdirs 4.2.2 python
php84-xmlwriter 8.4.10-r0 apk popt 1.19-r4 apk
php84-xsl 8.4.10-r0 apk portalocker 2.10.1 python
php84-zip 8.4.10-r0 apk procps-ng 4.0.4-r2 apk
pinentry 1.3.1-r0 apk proto-plus 1.26.1 python
pip 25.2 python protobuf 5.29.3 python
pkb-client 2.2.0 python pyacmedns 0.4 python
platformdirs 4.2.2 python pyasn1 0.6.1 python
popt 1.19-r4 apk pyasn1-modules 0.4.1 python
procps-ng 4.0.4-r3 apk pyc 3.12.9-r0 apk
proto-plus 1.26.1 python pycparser 2.22 python
protobuf 6.31.1 python pyjwt 2.10.1 python
pyacmedns 0.4 python pynamecheap 0.0.3 python
pyasn1 0.6.1 python pyopenssl 25.0.0 python
pyasn1-modules 0.4.2 python pyotp 2.9.0 python
pyc 3.12.11-r0 apk pyparsing 3.2.1 python
pycparser 2.22 python pyrfc3339 2.0.1 python
pyjwt 2.10.1 python python-dateutil 2.9.0.post0 python
pynamecheap 0.0.3 python python-digitalocean 1.17.0 python
pyopenssl 25.1.0 python python-transip 0.6.0 python
pyotp 2.9.0 python python3 3.12.9-r0 apk
pyparsing 3.2.3 python python3-pyc 3.12.9-r0 apk
pyrfc3339 2.0.1 python python3-pycache-pyc0 3.12.9-r0 apk
python-dateutil 2.9.0.post0 python pytz 2025.1 python
python-digitalocean 1.17.0 python pyyaml 6.0.2 python
python-transip 0.6.0 python readline 8.2.13-r0 apk
python3 3.12.11-r0 apk requests 2.32.3 python
python3-pyc 3.12.11-r0 apk requests-file 2.1.0 python
python3-pycache-pyc0 3.12.11-r0 apk requests-mock 1.12.1 python
pytz 2025.2 python rsa 4.9 python
pyyaml 6.0.2 python s3transfer 0.11.4 python
readline 8.2.13-r1 apk scanelf 1.3.8-r1 apk
requests 2.32.4 python setuptools 76.0.0 python
requests-file 2.1.0 python shadow 4.16.0-r1 apk
requests-mock 1.12.1 python six 1.17.0 python
rsa 4.9.1 python skalibs-libs 2.14.3.0-r0 apk
s3transfer 0.13.1 python soupsieve 2.6 python
scanelf 1.3.8-r1 apk sqlite-libs 3.48.0-r0 apk
setuptools 80.9.0 python ssl_client 1.37.0-r12 apk
shadow 4.17.3-r0 apk tiff 4.7.0-r0 apk
six 1.17.0 python tldextract 5.1.3 python
skalibs-libs 2.14.4.0-r0 apk tomli 2.0.1 python
soupsieve 2.7 python typeguard 4.3.0 python
sqlite-libs 3.49.2-r1 apk typing-extensions 4.12.2 python (+1 duplicate)
ssl_client 1.37.0-r18 apk tzdata 2025a-r0 apk
tiff 4.7.0-r0 apk unixodbc 2.3.12-r0 apk
tldextract 5.3.0 python uritemplate 4.1.1 python
tomli 2.0.1 python urllib3 2.3.0 python
typeguard 4.3.0 python utmps-libs 0.1.2.3-r2 apk
typing-extensions 4.12.2 python wheel 0.43.0 python
typing-extensions 4.14.1 python wheel 0.45.1 python
tzdata 2025b-r0 apk whois 5.5.23-r0 apk
unixodbc 2.3.12-r0 apk xz-libs 5.6.3-r0 apk
uritemplate 4.2.0 python zipp 3.19.2 python
urllib3 2.5.0 python zlib 1.3.1-r2 apk
utmps-libs 0.1.3.1-r0 apk zope-interface 7.2 python
wheel 0.45.1 python (+1 duplicate) zstd-libs 1.5.6-r2 apk
whois 5.6.3-r0 apk
xz-libs 5.8.1-r0 apk
zipp 3.19.2 python
zlib 1.3.1-r2 apk
zope-interface 7.2 python
zstd-libs 1.5.7-r0 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