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