Compare commits

...

55 Commits

Author SHA1 Message Date
LinuxServer-CI
4632ecb91a Bot Updating Package Versions 2025-02-26 08:57:28 +00:00
Adam
615ccbc589 Merge pull request #548 from linuxserver/invalid-dns-creds 2025-02-26 08:51:57 +00:00
thespad
199d0a6707 Check for broken dns credentials value in cli.ini and remove 2025-02-25 20:24:11 +00:00
LinuxServer-CI
f8171d73ce Bot Updating Package Versions 2025-02-22 03:27:55 +00:00
LinuxServer-CI
503578a870 Bot Updating Package Versions
Some checks failed
Package Trigger Scheduler / package-trigger-scheduler (push) Has been cancelled
2025-02-15 03:25:45 +00:00
LinuxServer-CI
b4978e40c5 Bot Updating Package Versions
Some checks failed
Package Trigger Scheduler / package-trigger-scheduler (push) Has been cancelled
2025-02-11 22:21:06 +00:00
LinuxServer-CI
ed765dbdc1 Bot Updating Templated Files 2025-02-11 22:17:30 +00:00
LinuxServer-CI
6fcd946c0a Bot Updating Package Versions 2025-02-08 03:26:43 +00:00
LinuxServer-CI
c1d1a87a0c Bot Updating Package Versions
Some checks failed
Package Trigger Scheduler / package-trigger-scheduler (push) Has been cancelled
2025-02-01 03:32:56 +00:00
LinuxServer-CI
990c95b7d9 Bot Updating Templated Files 2025-02-01 03:24:53 +00:00
LinuxServer-CI
d83dc89c84 Bot Updating Templated Files 2025-02-01 03:23:39 +00:00
LinuxServer-CI
7046e938e0 Bot Updating Package Versions
Some checks failed
Package Trigger Scheduler / package-trigger-scheduler (push) Has been cancelled
2025-01-25 03:21:11 +00:00
LinuxServer-CI
27e2e83f03 Bot Updating Package Versions
Some checks failed
Package Trigger Scheduler / package-trigger-scheduler (push) Has been cancelled
2025-01-23 07:42:30 +00:00
quietsy
f11dbcea78 Merge pull request #540 from linuxserver/add-project-categories
Add categories to readme-vars.yml
2025-01-23 09:34:40 +02:00
quietsy
07e9ada724 Add categories to readme-vars.yml 2025-01-22 22:44:19 +02:00
Adam
ae72916deb Merge pull request #538 from linuxserver/auto-reload-readme
Update auto reload wording
2025-01-19 19:04:33 +00:00
thespad
06b385d25c Update auto reload wording 2025-01-19 18:30:03 +00:00
thespad
8753119d54 Update wording to fix stupid GH markdown parser 2025-01-19 18:21:28 +00:00
LinuxServer-CI
1f2cc4ade5 Bot Updating Package Versions 2025-01-19 18:13:52 +00:00
LinuxServer-CI
fc0986b0be Bot Updating Templated Files 2025-01-19 18:07:41 +00:00
LinuxServer-CI
564fbd271a Bot Updating Templated Files 2025-01-19 18:05:23 +00:00
Adam
bffc4c9236 Merge pull request #537 from linuxserver/auto-reload 2025-01-19 18:03:54 +00:00
thespad
14cab18c36 Spelling 2025-01-19 17:56:10 +00:00
thespad
c0adf4fd0a Update log message 2025-01-19 17:36:15 +00:00
thespad
2160126f96 Use case-insensitive include just in case (no pun) 2025-01-19 17:34:21 +00:00
thespad
d81e33b63b Anchor to avoid samples 2025-01-19 17:33:22 +00:00
thespad
21b5a79e06 Switch to include, document watchlist functionality 2025-01-19 17:30:11 +00:00
thespad
02ed03a455 Add auto-reload 2025-01-19 17:03:14 +00:00
thespad
515fdf45d8 Skip logrotate.status file in log chmod 2025-01-19 16:52:45 +00:00
LinuxServer-CI
5a5d0ebaec Bot Updating Package Versions 2025-01-18 03:24:35 +00:00
LinuxServer-CI
37deacf13a Bot Updating Package Versions
Some checks failed
Package Trigger Scheduler / package-trigger-scheduler (push) Has been cancelled
2025-01-11 03:29:15 +00:00
LinuxServer-CI
16d5763dcc Bot Updating Package Versions
Some checks failed
Package Trigger Scheduler / package-trigger-scheduler (push) Has been cancelled
2025-01-10 17:43:18 +00:00
LinuxServer-CI
e12d7e642c Bot Updating Templated Files 2025-01-10 17:33:54 +00:00
driz
0cddb6d6b7 Merge pull request #534 from linuxserver/man-fail2ban
Add working link for fail2ban-client manpage
2025-01-10 12:32:14 -05:00
thespad
ff8cf3bfa5 Add working link for fail2ban-client manpage 2025-01-10 17:16:22 +00:00
LinuxServer-CI
db05a6b72b Bot Updating Package Versions 2025-01-08 01:24:02 +00:00
LinuxServer-CI
410fa0515e Bot Updating Package Versions 2025-01-07 10:29:27 +00:00
Adam
e1ece8ac1c Merge pull request #532 from linuxserver/more-3.21-migrations 2025-01-07 10:25:12 +00:00
thespad
d33df2224b Try and warn about confs looking at /etc for certs 2025-01-07 10:15:49 +00:00
thespad
3b98b3ae65 Simplify 2025-01-07 10:15:27 +00:00
LinuxServer-CI
af6a3a2163 Bot Updating Package Versions 2025-01-06 18:11:57 +00:00
Adam
7a8a360746 Merge pull request #530 from linuxserver/3.21-migrations 2025-01-06 18:05:32 +00:00
thespad
f467b9539b Include space in replacement path 2025-01-06 17:51:07 +00:00
thespad
3aae7b50d9 Migrate existing renewal confs with old paths 2025-01-06 16:54:53 +00:00
LinuxServer-CI
98e22cb66d Bot Updating Package Versions 2025-01-04 03:26:59 +00:00
LinuxServer-CI
0a9c7ff821 Bot Updating Package Versions
Some checks failed
Package Trigger Scheduler / package-trigger-scheduler (push) Has been cancelled
2025-01-03 16:00:52 +00:00
LinuxServer-CI
6dd89c8232 Bot Updating Templated Files 2025-01-03 15:56:57 +00:00
Adam
d376c95088 Merge pull request #526 from linuxserver/3.21 2025-01-03 15:54:39 +00:00
thespad
29bd5fe1b7 Remove logrotate chmod as the base image handles it 2024-12-31 18:18:47 +00:00
thespad
c489e2c07f Can't rm if it's an RO filesystem 2024-12-17 21:27:37 +00:00
thespad
7f4aabeef7 Don't need to create that folder 2024-12-17 21:27:26 +00:00
thespad
03f8285212 Remove proxy cache path 2024-12-17 21:27:15 +00:00
thespad
589b80e492 Support disabling f2b 2024-12-17 20:34:13 +00:00
thespad
2dc24f90c7 Use live base image 2024-12-17 20:20:53 +00:00
thespad
e56ade75fb Rebase to 3.21 2024-12-17 20:06:05 +00:00
26 changed files with 574 additions and 459 deletions

View File

@@ -6,7 +6,7 @@
* Read, and fill the Pull Request template * Read, and fill the Pull Request template
* If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR * If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR
* If the PR is addressing an existing issue include, closes #\<issue number>, in the body of the PR commit message * If the PR is addressing an existing issue include, closes #\<issue number>, in the body of the PR commit message
* If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://discord.gg/YWrKVTn) * If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://linuxserver.io/discord)
## Common files ## Common files

View File

@@ -1,7 +1,7 @@
blank_issues_enabled: false blank_issues_enabled: false
contact_links: contact_links:
- name: Discord chat support - name: Discord chat support
url: https://discord.gg/YWrKVTn url: https://linuxserver.io/discord
about: Realtime support / chat with the community and the team. about: Realtime support / chat with the community and the team.
- name: Discourse discussion forum - name: Discourse discussion forum

View File

@@ -15,7 +15,10 @@ jobs:
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }} SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
run: | run: |
printf "# External trigger for docker-swag\n\n" >> $GITHUB_STEP_SUMMARY printf "# External trigger for docker-swag\n\n" >> $GITHUB_STEP_SUMMARY
if grep -q "^swag_master" <<< "${SKIP_EXTERNAL_TRIGGER}"; then if grep -q "^swag_master_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`swag_master_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY
elif grep -q "^swag_master" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`swag_master\`; skipping trigger." >> $GITHUB_STEP_SUMMARY echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`swag_master\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
@@ -25,6 +28,11 @@ jobs:
printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY
EXT_RELEASE=$(curl -sL "https://pypi.python.org/pypi/certbot/json" |jq -r '. | .info.version') EXT_RELEASE=$(curl -sL "https://pypi.python.org/pypi/certbot/json" |jq -r '. | .info.version')
echo "Type is \`pip_version\`" >> $GITHUB_STEP_SUMMARY echo "Type is \`pip_version\`" >> $GITHUB_STEP_SUMMARY
if grep -q "^swag_master_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` matches current external release; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY

View File

@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.20 FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.21
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@@ -29,6 +29,7 @@ RUN \
apk add --no-cache \ apk add --no-cache \
fail2ban \ fail2ban \
gnupg \ gnupg \
inotify-tools \
iptables-legacy \ iptables-legacy \
memcached \ memcached \
nginx-mod-http-brotli \ nginx-mod-http-brotli \
@@ -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.20/ \ 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 \
@@ -150,9 +151,9 @@ RUN \
rm -f /etc/nginx/conf.d/stream.conf && \ rm -f /etc/nginx/conf.d/stream.conf && \
echo "**** correct ip6tables legacy issue ****" && \ echo "**** correct ip6tables legacy issue ****" && \
rm \ rm \
/sbin/ip6tables && \ /usr/sbin/ip6tables && \
ln -s \ ln -s \
/sbin/ip6tables-nft /sbin/ip6tables && \ /usr/sbin/ip6tables-nft /usr/sbin/ip6tables && \
echo "**** remove unnecessary fail2ban filters ****" && \ echo "**** remove unnecessary fail2ban filters ****" && \
rm \ rm \
/etc/fail2ban/jail.d/alpine-ssh.conf && \ /etc/fail2ban/jail.d/alpine-ssh.conf && \

View File

@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.20 FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.21
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@@ -29,6 +29,7 @@ RUN \
apk add --no-cache \ apk add --no-cache \
fail2ban \ fail2ban \
gnupg \ gnupg \
inotify-tools \
iptables-legacy \ iptables-legacy \
memcached \ memcached \
nginx-mod-http-brotli \ nginx-mod-http-brotli \
@@ -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.20/ \ 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 \
@@ -150,9 +151,9 @@ RUN \
rm -f /etc/nginx/conf.d/stream.conf && \ rm -f /etc/nginx/conf.d/stream.conf && \
echo "**** correct ip6tables legacy issue ****" && \ echo "**** correct ip6tables legacy issue ****" && \
rm \ rm \
/sbin/ip6tables && \ /usr/sbin/ip6tables && \
ln -s \ ln -s \
/sbin/ip6tables-nft /sbin/ip6tables && \ /usr/sbin/ip6tables-nft /usr/sbin/ip6tables && \
echo "**** remove unnecessary fail2ban filters ****" && \ echo "**** remove unnecessary fail2ban filters ****" && \
rm \ rm \
/etc/fail2ban/jail.d/alpine-ssh.conf && \ /etc/fail2ban/jail.d/alpine-ssh.conf && \

39
Jenkinsfile vendored
View File

@@ -57,11 +57,23 @@ pipeline {
steps{ steps{
echo "Running on node: ${NODE_NAME}" echo "Running on node: ${NODE_NAME}"
sh '''#! /bin/bash sh '''#! /bin/bash
containers=$(docker ps -aq) echo "Pruning builder"
docker builder prune -f --builder container || :
containers=$(docker ps -q)
if [[ -n "${containers}" ]]; then if [[ -n "${containers}" ]]; then
docker stop ${containers} BUILDX_CONTAINER_ID=$(docker ps -qf 'name=buildx_buildkit')
for container in ${containers}; do
if [[ "${container}" == "${BUILDX_CONTAINER_ID}" ]]; then
echo "skipping buildx container in docker stop"
else
echo "Stopping container ${container}"
docker stop ${container}
fi
done
fi fi
docker system prune -af --volumes || : ''' docker system prune -f --volumes || :
docker image prune -af || :
'''
script{ script{
env.EXIT_STATUS = '' env.EXIT_STATUS = ''
env.LS_RELEASE = sh( env.LS_RELEASE = sh(
@@ -741,7 +753,8 @@ pipeline {
if [[ -n "${containers}" ]]; then if [[ -n "${containers}" ]]; then
docker stop ${containers} docker stop ${containers}
fi fi
docker system prune -af --volumes || : docker system prune -f --volumes || :
docker image prune -af || :
''' '''
} }
} }
@@ -1152,12 +1165,22 @@ EOF
} }
cleanup { cleanup {
sh '''#! /bin/bash sh '''#! /bin/bash
echo "Performing docker system prune!!" echo "Pruning builder!!"
containers=$(docker ps -aq) docker builder prune -f --builder container || :
containers=$(docker ps -q)
if [[ -n "${containers}" ]]; then if [[ -n "${containers}" ]]; then
docker stop ${containers} BUILDX_CONTAINER_ID=$(docker ps -qf 'name=buildx_buildkit')
for container in ${containers}; do
if [[ "${container}" == "${BUILDX_CONTAINER_ID}" ]]; then
echo "skipping buildx container in docker stop"
else
echo "Stopping container ${container}"
docker stop ${container}
fi
done
fi fi
docker system prune -af --volumes || : docker system prune -f --volumes || :
docker image prune -af || :
''' '''
cleanWs() cleanWs()
} }

View File

@@ -3,7 +3,7 @@
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io) [![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)
[![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://discord.gg/YWrKVTn "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.") [![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.")
@@ -20,7 +20,7 @@ The [LinuxServer.io](https://linuxserver.io) team brings you another container r
Find us at: 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://discord.gg/YWrKVTn) - 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. * [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.
@@ -129,7 +129,7 @@ This will *ask* Google et al not to index and list your site. Be careful with th
* You can check which jails are active via `docker exec -it swag fail2ban-client status` * You can check which jails are active via `docker exec -it swag fail2ban-client status`
* You can check the status of a specific jail via `docker exec -it swag fail2ban-client status <jail name>` * You can check the status of a specific jail via `docker exec -it swag fail2ban-client status <jail name>`
* You can unban an IP via `docker exec -it swag fail2ban-client set <jail name> unbanip <IP>` * You can unban an IP via `docker exec -it swag fail2ban-client set <jail name> unbanip <IP>`
* A list of commands can be found here: <https://www.fail2ban.org/wiki/index.php/Commands> * A list of commands for fail2ban-client can be found [here](https://manpages.ubuntu.com/manpages/noble/man1/fail2ban-client.1.html)
### Updating configs ### Updating configs
@@ -149,6 +149,15 @@ This will *ask* Google et al not to index and list your site. Be careful with th
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).
## Read-Only Operation
This image can be run with a read-only container filesystem. For details please [read the docs](https://docs.linuxserver.io/misc/read-only/).
### Caveats
* `/tmp` must be mounted to tmpfs
* fail2ban will not be available
## Usage ## Usage
To help you get started creating a container from this image you can either use docker-compose or the docker cli. To help you get started creating a container from this image you can either use docker-compose or the docker cli.
@@ -180,6 +189,9 @@ services:
- ONLY_SUBDOMAINS=false #optional - ONLY_SUBDOMAINS=false #optional
- EXTRA_DOMAINS= #optional - EXTRA_DOMAINS= #optional
- STAGING=false #optional - STAGING=false #optional
- DISABLE_F2B= #optional
- SWAG_AUTORELOAD= #optional
- SWAG_AUTORELOAD_WATCHLIST= #optional
volumes: volumes:
- /path/to/swag/config:/config - /path/to/swag/config:/config
ports: ports:
@@ -207,6 +219,9 @@ docker run -d \
-e ONLY_SUBDOMAINS=false `#optional` \ -e ONLY_SUBDOMAINS=false `#optional` \
-e EXTRA_DOMAINS= `#optional` \ -e EXTRA_DOMAINS= `#optional` \
-e STAGING=false `#optional` \ -e STAGING=false `#optional` \
-e DISABLE_F2B= `#optional` \
-e SWAG_AUTORELOAD= `#optional` \
-e SWAG_AUTORELOAD_WATCHLIST= `#optional` \
-p 443:443 \ -p 443:443 \
-p 80:80 `#optional` \ -p 80:80 `#optional` \
-v /path/to/swag/config:/config \ -v /path/to/swag/config:/config \
@@ -235,7 +250,11 @@ Containers are configured using parameters passed at runtime (such as those abov
| `-e ONLY_SUBDOMAINS=false` | If you wish to get certs only for certain subdomains, but not the main domain (main domain may be hosted on another machine and cannot be validated), set this to `true` | | `-e ONLY_SUBDOMAINS=false` | If you wish to get certs only for certain subdomains, but not the main domain (main domain may be hosted on another machine and cannot be validated), set this to `true` |
| `-e EXTRA_DOMAINS=` | Additional fully qualified domain names (comma separated, no spaces) ie. `example.net,subdomain.example.net,*.example.org` | | `-e EXTRA_DOMAINS=` | Additional fully qualified domain names (comma separated, no spaces) ie. `example.net,subdomain.example.net,*.example.org` |
| `-e STAGING=false` | Set to `true` to retrieve certs in staging mode. Rate limits will be much higher, but the resulting cert will not pass the browser's security test. Only to be used for testing purposes. | | `-e STAGING=false` | Set to `true` to retrieve certs in staging mode. Rate limits will be much higher, but the resulting cert will not pass the browser's security test. Only to be used for testing purposes. |
| `-e DISABLE_F2B=` | Set to `true` to disable the Fail2ban service in the container, if you're already running it elsewhere or using a different IPS. |
| `-e SWAG_AUTORELOAD=` | Set to `true` to enable automatic reloading of confs on change without stopping/restarting nginx. Your filesystem must support inotify. This functionality was previously offered [via mod](https://github.com/linuxserver/docker-mods/tree/swag-auto-reload). |
| `-e SWAG_AUTORELOAD_WATCHLIST=` | A [pipe](https://en.wikipedia.org/wiki/Vertical_bar)-separated list of additional folders for auto reload to watch in addition to `/config/nginx` |
| `-v /config` | Persistent config files | | `-v /config` | Persistent config files |
| `--read-only=true` | Run container with a read-only filesystem. Please [read the docs](https://docs.linuxserver.io/misc/read-only/). |
| `--cap-add=NET_ADMIN` | Required for fail2Ban to be able to modify iptables rules. | | `--cap-add=NET_ADMIN` | Required for fail2Ban to be able to modify iptables rules. |
### Portainer notice ### Portainer notice
@@ -404,6 +423,8 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Versions ## Versions
* **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.
* **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).
* **30.08.24:** - Fix zerossl cert revocation. * **30.08.24:** - Fix zerossl cert revocation.
* **24.07.14:** - Rebase to Alpine 3.20. Remove deprecated Google Domains certbot plugin. Existing users should update their nginx confs to avoid http2 deprecation warnings. * **24.07.14:** - Rebase to Alpine 3.20. Remove deprecated Google Domains certbot plugin. Existing users should update their nginx confs to avoid http2 deprecation warnings.

View File

@@ -1,363 +1,365 @@
NAME VERSION TYPE NAME VERSION TYPE
Simple Launcher 1.1.0.14 dotnet (+5 duplicates) Simple Launcher 1.1.0.14 dotnet (+5 duplicates)
acme 3.0.1 python acl-libs 2.3.2-r1 apk
alpine-baselayout 3.6.5-r0 apk acme 3.2.0 python
alpine-baselayout-data 3.6.5-r0 apk alpine-baselayout 3.6.8-r1 apk
alpine-keys 2.4-r1 apk alpine-baselayout-data 3.6.8-r1 apk
alpine-release 3.20.3-r0 apk alpine-keys 2.5-r0 apk
aom-libs 3.9.1-r0 apk alpine-release 3.21.3-r0 apk
apache2-utils 2.4.62-r0 apk aom-libs 3.11.0-r0 apk
apk-tools 2.14.4-r1 apk apache2-utils 2.4.62-r0 apk
apr 1.7.5-r0 apk apk-tools 2.14.6-r3 apk
apr-util 1.6.3-r1 apk apr 1.7.5-r0 apk
argon2-libs 20190702-r5 apk apr-util 1.6.3-r1 apk
attrs 24.3.0 python argon2-libs 20190702-r5 apk
autocommand 2.2.2 python attrs 25.1.0 python
azure-common 1.1.28 python autocommand 2.2.2 python
azure-core 1.32.0 python azure-common 1.1.28 python
azure-identity 1.19.0 python azure-core 1.32.0 python
azure-mgmt-core 1.5.0 python azure-identity 1.20.0 python
azure-mgmt-dns 8.2.0 python azure-mgmt-core 1.5.0 python
backports-tarfile 1.2.0 python azure-mgmt-dns 8.2.0 python
bash 5.2.26-r0 apk backports-tarfile 1.2.0 python
beautifulsoup4 4.12.3 python bash 5.2.37-r0 apk
boto3 1.35.91 python beautifulsoup4 4.13.3 python
botocore 1.35.91 python boto3 1.37.1 python
brotli-libs 1.1.0-r2 apk botocore 1.37.1 python
bs4 0.0.2 python brotli-libs 1.1.0-r2 apk
busybox 1.36.1-r29 apk bs4 0.0.2 python
busybox-binsh 1.36.1-r29 apk busybox 1.37.0-r12 apk
c-ares 1.33.1-r0 apk busybox-binsh 1.37.0-r12 apk
c-client 2007f-r15 apk c-ares 1.34.3-r0 apk
ca-certificates 20240705-r0 apk c-client 2007f-r15 apk
ca-certificates-bundle 20240705-r0 apk ca-certificates 20241121-r1 apk
cachetools 5.5.0 python ca-certificates-bundle 20241121-r1 apk
catatonit 0.2.0-r0 apk cachetools 5.5.2 python
certbot 3.0.1 python catatonit 0.2.0-r0 apk
certbot-dns-acmedns 0.1.0 python certbot 3.2.0 python
certbot-dns-aliyun 2.0.0 python certbot-dns-acmedns 0.1.0 python
certbot-dns-azure 2.6.1 python certbot-dns-aliyun 2.0.0 python
certbot-dns-bunny 3.0.0 python certbot-dns-azure 2.6.1 python
certbot-dns-cloudflare 3.0.1 python certbot-dns-bunny 3.0.0 python
certbot-dns-cpanel 0.4.0 python certbot-dns-cloudflare 3.2.0 python
certbot-dns-desec 1.2.1 python certbot-dns-cpanel 0.4.0 python
certbot-dns-digitalocean 3.0.1 python certbot-dns-desec 1.2.1 python
certbot-dns-directadmin 1.0.13 python certbot-dns-digitalocean 3.2.0 python
certbot-dns-dnsimple 3.0.1 python certbot-dns-directadmin 1.0.13 python
certbot-dns-dnsmadeeasy 3.0.1 python certbot-dns-dnsimple 3.2.0 python
certbot-dns-dnspod 0.1.0 python certbot-dns-dnsmadeeasy 3.2.0 python
certbot-dns-do 0.31.0 python certbot-dns-dnspod 0.1.0 python
certbot-dns-domeneshop 0.2.9 python certbot-dns-do 0.31.0 python
certbot-dns-dreamhost 1.0 python certbot-dns-domeneshop 0.2.9 python
certbot-dns-duckdns 1.5 python certbot-dns-dreamhost 1.0 python
certbot-dns-dynudns 0.0.6 python certbot-dns-duckdns 1.5 python
certbot-dns-freedns 0.2.0 python certbot-dns-dynudns 0.0.6 python
certbot-dns-gehirn 3.0.1 python certbot-dns-freedns 0.2.0 python
certbot-dns-glesys 2.1.0 python certbot-dns-gehirn 3.2.0 python
certbot-dns-godaddy 2.8.0 python certbot-dns-glesys 2.1.0 python
certbot-dns-google 3.0.1 python certbot-dns-godaddy 2.8.0 python
certbot-dns-he 1.0.0 python certbot-dns-google 3.2.0 python
certbot-dns-hetzner 2.0.1 python certbot-dns-he 1.0.0 python
certbot-dns-infomaniak 0.2.3 python certbot-dns-hetzner 2.0.1 python
certbot-dns-inwx 3.0.1 python certbot-dns-infomaniak 0.2.3 python
certbot-dns-ionos 2024.11.9 python certbot-dns-inwx 3.0.2 python
certbot-dns-linode 3.0.1 python certbot-dns-ionos 2024.11.9 python
certbot-dns-loopia 1.0.1 python certbot-dns-linode 3.2.0 python
certbot-dns-luadns 3.0.1 python certbot-dns-loopia 1.0.1 python
certbot-dns-namecheap 1.0.0 python certbot-dns-luadns 3.2.0 python
certbot-dns-netcup 1.4.4 python certbot-dns-namecheap 1.0.0 python
certbot-dns-njalla 2.0.2 python certbot-dns-netcup 1.4.4 python
certbot-dns-nsone 3.0.1 python certbot-dns-njalla 2.0.2 python
certbot-dns-ovh 3.0.1 python certbot-dns-nsone 3.2.0 python
certbot-dns-porkbun 0.9.1 python certbot-dns-ovh 3.2.0 python
certbot-dns-rfc2136 3.0.1 python certbot-dns-porkbun 0.9.1 python
certbot-dns-route53 3.0.1 python certbot-dns-rfc2136 3.2.0 python
certbot-dns-sakuracloud 3.0.1 python certbot-dns-route53 3.2.0 python
certbot-dns-standalone 1.1 python certbot-dns-sakuracloud 3.2.0 python
certbot-dns-transip 0.5.2 python certbot-dns-standalone 1.2.1 python
certbot-dns-vultr 1.1.0 python certbot-dns-transip 0.5.2 python
certbot-plugin-gandi 1.5.0 python certbot-dns-vultr 1.1.0 python
certifi 2024.12.14 python certbot-plugin-gandi 1.5.0 python
cffi 1.17.1 python certifi 2025.1.31 python
charset-normalizer 3.4.1 python cffi 1.17.1 python
cloudflare 2.19.4 python charset-normalizer 3.4.1 python
composer 2.8.4 binary cloudflare 2.19.4 python
configargparse 1.7 python composer 2.8.5 binary
configobj 5.0.9 python configargparse 1.7 python
coreutils 9.5-r1 apk configobj 5.0.9 python
coreutils-env 9.5-r1 apk coreutils 9.5-r2 apk
coreutils-fmt 9.5-r1 apk coreutils-env 9.5-r2 apk
coreutils-sha512sum 9.5-r1 apk coreutils-fmt 9.5-r2 apk
cryptography 44.0.0 python coreutils-sha512sum 9.5-r2 apk
curl 8.11.1-r0 apk cryptography 44.0.1 python
distro 1.9.0 python curl 8.12.1-r0 apk
dns-lexicon 3.20.1 python distro 1.9.0 python
dnslib 0.9.25 python dns-lexicon 3.20.1 python
dnspython 2.7.0 python dnslib 0.9.25 python
domeneshop 0.4.4 python dnspython 2.7.0 python
fail2ban 1.1.0 python domeneshop 0.4.4 python
fail2ban 1.1.0-r0 apk fail2ban 1.1.0 python
fail2ban-pyc 1.1.0-r0 apk fail2ban 1.1.0-r2 apk
filelock 3.16.1 python fail2ban-pyc 1.1.0-r2 apk
findutils 4.9.0-r5 apk filelock 3.17.0 python
fontconfig 2.15.0-r1 apk findutils 4.10.0-r0 apk
freetype 2.13.2-r0 apk fontconfig 2.15.0-r1 apk
future 1.0.0 python freetype 2.13.3-r0 apk
gdbm 1.23-r1 apk future 1.0.0 python
git 2.45.2-r0 apk gdbm 1.24-r0 apk
git-init-template 2.45.2-r0 apk git 2.47.2-r0 apk
git-perl 2.45.2-r0 apk git-init-template 2.47.2-r0 apk
gmp 6.3.0-r1 apk git-perl 2.47.2-r0 apk
gnupg 2.4.5-r0 apk gmp 6.3.0-r2 apk
gnupg-dirmngr 2.4.5-r0 apk gnupg 2.4.7-r0 apk
gnupg-gpgconf 2.4.5-r0 apk gnupg-dirmngr 2.4.7-r0 apk
gnupg-keyboxd 2.4.5-r0 apk gnupg-gpgconf 2.4.7-r0 apk
gnupg-utils 2.4.5-r0 apk gnupg-keyboxd 2.4.7-r0 apk
gnupg-wks-client 2.4.5-r0 apk gnupg-utils 2.4.7-r0 apk
gnutls 3.8.5-r0 apk gnupg-wks-client 2.4.7-r0 apk
google-api-core 2.24.0 python gnutls 3.8.8-r0 apk
google-api-python-client 2.157.0 python google-api-core 2.24.1 python
google-auth 2.37.0 python google-api-python-client 2.162.0 python
google-auth-httplib2 0.2.0 python google-auth 2.38.0 python
googleapis-common-protos 1.66.0 python google-auth-httplib2 0.2.0 python
gpg 2.4.5-r0 apk googleapis-common-protos 1.68.0 python
gpg-agent 2.4.5-r0 apk gpg 2.4.7-r0 apk
gpg-wks-server 2.4.5-r0 apk gpg-agent 2.4.7-r0 apk
gpgsm 2.4.5-r0 apk gpg-wks-server 2.4.7-r0 apk
gpgv 2.4.5-r0 apk gpgsm 2.4.7-r0 apk
httplib2 0.22.0 python gpgv 2.4.7-r0 apk
icu-data-en 74.2-r0 apk httplib2 0.22.0 python
icu-libs 74.2-r0 apk icu-data-en 74.2-r0 apk
idna 3.10 python icu-libs 74.2-r0 apk
importlib-metadata 8.0.0 python idna 3.10 python
inflect 7.3.1 python importlib-metadata 8.0.0 python
inwx-domrobot 3.2.0 python inflect 7.3.1 python
iptables 1.8.10-r3 apk inotify-tools 4.23.9.0-r0 apk
iptables-legacy 1.8.10-r3 apk inotify-tools-libs 4.23.9.0-r0 apk
isodate 0.7.2 python inwx-domrobot 3.2.0 python
jaraco-collections 5.1.0 python iptables 1.8.11-r1 apk
jaraco-context 5.3.0 python iptables-legacy 1.8.11-r1 apk
jaraco-functools 4.0.1 python isodate 0.7.2 python
jaraco-text 3.12.1 python jaraco-collections 5.1.0 python
jmespath 1.0.1 python jaraco-context 5.3.0 python
josepy 1.14.0 python jaraco-functools 4.0.1 python
jq 1.7.1-r0 apk jaraco-text 3.12.1 python
jsonlines 4.0.0 python jmespath 1.0.1 python
jsonpickle 4.0.1 python josepy 1.15.0 python
libacl 2.3.2-r0 apk jq 1.7.1-r0 apk
libassuan 2.5.7-r0 apk jsonlines 4.0.0 python
libattr 2.5.2-r0 apk jsonpickle 4.0.2 python
libavif 1.0.4-r0 apk libassuan 2.5.7-r0 apk
libbsd 0.12.2-r0 apk libattr 2.5.2-r2 apk
libbz2 1.0.8-r6 apk libavif 1.0.4-r0 apk
libcrypto3 3.3.2-r1 apk libbsd 0.12.2-r0 apk
libcurl 8.11.1-r0 apk libbz2 1.0.8-r6 apk
libdav1d 1.4.2-r0 apk libcrypto3 3.3.3-r0 apk
libedit 20240517.3.1-r0 apk libcurl 8.12.1-r0 apk
libevent 2.1.12-r7 apk libdav1d 1.5.0-r0 apk
libexpat 2.6.4-r0 apk libedit 20240808.3.1-r0 apk
libffi 3.4.6-r0 apk libevent 2.1.12-r7 apk
libgcc 13.2.1_git20240309-r0 apk libexpat 2.6.4-r0 apk
libgcrypt 1.10.3-r0 apk libffi 3.4.6-r0 apk
libgd 2.3.3-r9 apk libgcc 14.2.0-r4 apk
libgpg-error 1.49-r0 apk libgcrypt 1.10.3-r1 apk
libice 1.1.1-r6 apk libgd 2.3.3-r9 apk
libidn2 2.3.7-r0 apk libgpg-error 1.51-r0 apk
libintl 0.22.5-r0 apk libice 1.1.1-r6 apk
libip4tc 1.8.10-r3 apk libidn2 2.3.7-r0 apk
libip6tc 1.8.10-r3 apk libintl 0.22.5-r0 apk
libjpeg-turbo 3.0.3-r0 apk libip4tc 1.8.11-r1 apk
libksba 1.6.6-r0 apk libip6tc 1.8.11-r1 apk
libldap 2.6.8-r0 apk libjpeg-turbo 3.0.4-r0 apk
libmaxminddb-libs 1.9.1-r0 apk libksba 1.6.7-r0 apk
libmcrypt 2.5.8-r10 apk libldap 2.6.8-r0 apk
libmd 1.1.0-r0 apk libmaxminddb-libs 1.9.1-r0 apk
libmemcached-libs 1.1.4-r1 apk libmcrypt 2.5.8-r10 apk
libmnl 1.0.5-r2 apk libmd 1.1.0-r0 apk
libncursesw 6.4_p20240420-r2 apk libmemcached-libs 1.1.4-r1 apk
libnftnl 1.2.6-r0 apk libmnl 1.0.5-r2 apk
libpanelw 6.4_p20240420-r2 apk libncursesw 6.5_p20241006-r3 apk
libpng 1.6.44-r0 apk libnftnl 1.2.8-r0 apk
libpq 16.6-r0 apk libpanelw 6.5_p20241006-r3 apk
libproc2 4.0.4-r0 apk libpng 1.6.44-r0 apk
libpsl 0.21.5-r1 apk libpq 17.4-r0 apk
libsasl 2.1.28-r6 apk libproc2 4.0.4-r2 apk
libseccomp 2.5.5-r1 apk libpsl 0.21.5-r3 apk
libsharpyuv 1.3.2-r0 apk libsasl 2.1.28-r8 apk
libsm 1.2.4-r4 apk libseccomp 2.5.5-r1 apk
libsodium 1.0.19-r0 apk libsharpyuv 1.4.0-r0 apk
libssl3 3.3.2-r1 apk libsm 1.2.4-r4 apk
libstdc++ 13.2.1_git20240309-r0 apk libsodium 1.0.20-r0 apk
libtasn1 4.19.0-r2 apk libssl3 3.3.3-r0 apk
libunistring 1.2-r0 apk libstdc++ 14.2.0-r4 apk
libuuid 2.40.1-r1 apk libtasn1 4.20.0-r0 apk
libwebp 1.3.2-r0 apk libunistring 1.2-r0 apk
libx11 1.8.9-r1 apk libuuid 2.40.4-r0 apk
libxau 1.0.11-r4 apk libwebp 1.4.0-r0 apk
libxcb 1.16.1-r0 apk libx11 1.8.10-r0 apk
libxdmcp 1.1.5-r1 apk libxau 1.0.11-r4 apk
libxext 1.3.6-r2 apk libxcb 1.16.1-r0 apk
libxml2 2.12.7-r0 apk libxdmcp 1.1.5-r1 apk
libxpm 3.5.17-r0 apk libxext 1.3.6-r2 apk
libxslt 1.1.39-r1 apk libxml2 2.13.4-r3 apk
libxt 1.3.0-r5 apk libxpm 3.5.17-r0 apk
libxtables 1.8.10-r3 apk libxslt 1.1.42-r1 apk
libzip 1.10.1-r0 apk libxt 1.3.1-r0 apk
linux-pam 1.6.0-r0 apk libxtables 1.8.11-r1 apk
logrotate 3.21.0-r1 apk libzip 1.11.2-r0 apk
loopialib 0.2.0 python linux-pam 1.6.1-r1 apk
lxml 5.3.0 python logrotate 3.21.0-r1 apk
lz4-libs 1.9.4-r5 apk loopialib 0.2.0 python
memcached 1.6.27-r0 apk lxml 5.3.1 python
mock 5.1.0 python lz4-libs 1.10.0-r0 apk
more-itertools 10.3.0 python memcached 1.6.32-r0 apk
mpdecimal 4.0.0-r0 apk mock 5.1.0 python
msal 1.31.1 python more-itertools 10.3.0 python
msal-extensions 1.2.0 python mpdecimal 4.0.0-r0 apk
musl 1.2.5-r0 apk msal 1.31.1 python
musl-utils 1.2.5-r0 apk msal-extensions 1.2.0 python
my-test-package 1.0 python musl 1.2.5-r9 apk
nano 8.0-r0 apk musl-utils 1.2.5-r9 apk
ncurses-terminfo-base 6.4_p20240420-r2 apk my-test-package 1.0 python
netcat-openbsd 1.226-r0 apk nano 8.2-r0 apk
nettle 3.9.1-r0 apk ncurses-terminfo-base 6.5_p20241006-r3 apk
nghttp2-libs 1.62.1-r0 apk netcat-openbsd 1.226.1.1-r0 apk
nginx 1.26.2-r0 apk nettle 3.10-r1 apk
nginx-mod-devel-kit 1.26.2-r0 apk nghttp2-libs 1.64.0-r0 apk
nginx-mod-http-brotli 1.26.2-r0 apk nginx 1.26.2-r4 apk
nginx-mod-http-dav-ext 1.26.2-r0 apk nginx-mod-devel-kit 1.26.2-r4 apk
nginx-mod-http-echo 1.26.2-r0 apk nginx-mod-http-brotli 1.26.2-r4 apk
nginx-mod-http-fancyindex 1.26.2-r0 apk nginx-mod-http-dav-ext 1.26.2-r4 apk
nginx-mod-http-geoip2 1.26.2-r0 apk nginx-mod-http-echo 1.26.2-r4 apk
nginx-mod-http-headers-more 1.26.2-r0 apk nginx-mod-http-fancyindex 1.26.2-r4 apk
nginx-mod-http-image-filter 1.26.2-r0 apk nginx-mod-http-geoip2 1.26.2-r4 apk
nginx-mod-http-perl 1.26.2-r0 apk nginx-mod-http-headers-more 1.26.2-r4 apk
nginx-mod-http-redis2 1.26.2-r0 apk nginx-mod-http-image-filter 1.26.2-r4 apk
nginx-mod-http-set-misc 1.26.2-r0 apk nginx-mod-http-perl 1.26.2-r4 apk
nginx-mod-http-upload-progress 1.26.2-r0 apk nginx-mod-http-redis2 1.26.2-r4 apk
nginx-mod-http-xslt-filter 1.26.2-r0 apk nginx-mod-http-set-misc 1.26.2-r4 apk
nginx-mod-mail 1.26.2-r0 apk nginx-mod-http-upload-progress 1.26.2-r4 apk
nginx-mod-rtmp 1.26.2-r0 apk nginx-mod-http-xslt-filter 1.26.2-r4 apk
nginx-mod-stream 1.26.2-r0 apk nginx-mod-mail 1.26.2-r4 apk
nginx-mod-stream-geoip2 1.26.2-r0 apk nginx-mod-rtmp 1.26.2-r4 apk
nginx-vim 1.26.2-r0 apk nginx-mod-stream 1.26.2-r4 apk
npth 1.6-r4 apk nginx-mod-stream-geoip2 1.26.2-r4 apk
oniguruma 6.9.9-r0 apk nginx-vim 1.26.2-r4 apk
openssl 3.3.2-r1 apk npth 1.6-r4 apk
p11-kit 0.25.3-r0 apk oniguruma 6.9.9-r0 apk
packaging 24.2 python openssl 3.3.3-r0 apk
parsedatetime 2.6 python p11-kit 0.25.5-r2 apk
pcre 8.45-r3 apk packaging 24.2 python
pcre2 10.43-r0 apk parsedatetime 2.6 python
perl 5.38.2-r0 apk pcre 8.45-r3 apk
perl-error 0.17029-r2 apk pcre2 10.43-r0 apk
perl-git 2.45.2-r0 apk perl 5.40.1-r0 apk
php83 8.3.15-r0 apk perl-error 0.17029-r2 apk
php83-bcmath 8.3.15-r0 apk perl-git 2.47.2-r0 apk
php83-bz2 8.3.15-r0 apk php83 8.3.17-r0 apk
php83-common 8.3.15-r0 apk php83-bcmath 8.3.17-r0 apk
php83-ctype 8.3.15-r0 apk php83-bz2 8.3.17-r0 apk
php83-curl 8.3.15-r0 apk php83-common 8.3.17-r0 apk
php83-dom 8.3.15-r0 apk php83-ctype 8.3.17-r0 apk
php83-exif 8.3.15-r0 apk php83-curl 8.3.17-r0 apk
php83-fileinfo 8.3.15-r0 apk php83-dom 8.3.17-r0 apk
php83-fpm 8.3.15-r0 apk php83-exif 8.3.17-r0 apk
php83-ftp 8.3.15-r0 apk php83-fileinfo 8.3.17-r0 apk
php83-gd 8.3.15-r0 apk php83-fpm 8.3.17-r0 apk
php83-gmp 8.3.15-r0 apk php83-ftp 8.3.17-r0 apk
php83-iconv 8.3.15-r0 apk php83-gd 8.3.17-r0 apk
php83-imap 8.3.15-r0 apk php83-gmp 8.3.17-r0 apk
php83-intl 8.3.15-r0 apk php83-iconv 8.3.17-r0 apk
php83-ldap 8.3.15-r0 apk php83-imap 8.3.17-r0 apk
php83-mbstring 8.3.15-r0 apk php83-intl 8.3.17-r0 apk
php83-mysqli 8.3.15-r0 apk php83-ldap 8.3.17-r0 apk
php83-mysqlnd 8.3.15-r0 apk php83-mbstring 8.3.17-r0 apk
php83-opcache 8.3.15-r0 apk php83-mysqli 8.3.17-r0 apk
php83-openssl 8.3.15-r0 apk php83-mysqlnd 8.3.17-r0 apk
php83-pdo 8.3.15-r0 apk php83-opcache 8.3.17-r0 apk
php83-pdo_mysql 8.3.15-r0 apk php83-openssl 8.3.17-r0 apk
php83-pdo_odbc 8.3.15-r0 apk php83-pdo 8.3.17-r0 apk
php83-pdo_pgsql 8.3.15-r0 apk php83-pdo_mysql 8.3.17-r0 apk
php83-pdo_sqlite 8.3.15-r0 apk php83-pdo_odbc 8.3.17-r0 apk
php83-pear 8.3.15-r0 apk php83-pdo_pgsql 8.3.17-r0 apk
php83-pecl-apcu 5.1.23-r0 apk php83-pdo_sqlite 8.3.17-r0 apk
php83-pecl-igbinary 3.2.15-r0 apk php83-pear 8.3.17-r0 apk
php83-pecl-mcrypt 1.0.7-r0 apk php83-pecl-apcu 5.1.24-r0 apk
php83-pecl-memcached 3.3.0-r0 apk php83-pecl-igbinary 3.2.16-r0 apk
php83-pecl-msgpack 2.2.0-r2 apk php83-pecl-mcrypt 1.0.7-r0 apk
php83-pecl-redis 6.1.0-r0 apk php83-pecl-memcached 3.3.0-r0 apk
php83-pgsql 8.3.15-r0 apk php83-pecl-msgpack 3.0.0-r0 apk
php83-phar 8.3.15-r0 apk php83-pecl-redis 6.1.0-r0 apk
php83-posix 8.3.15-r0 apk php83-pgsql 8.3.17-r0 apk
php83-session 8.3.15-r0 apk php83-phar 8.3.17-r0 apk
php83-simplexml 8.3.15-r0 apk php83-posix 8.3.17-r0 apk
php83-soap 8.3.15-r0 apk php83-session 8.3.17-r0 apk
php83-sockets 8.3.15-r0 apk php83-simplexml 8.3.17-r0 apk
php83-sodium 8.3.15-r0 apk php83-soap 8.3.17-r0 apk
php83-sqlite3 8.3.15-r0 apk php83-sockets 8.3.17-r0 apk
php83-tokenizer 8.3.15-r0 apk php83-sodium 8.3.17-r0 apk
php83-xml 8.3.15-r0 apk php83-sqlite3 8.3.17-r0 apk
php83-xmlreader 8.3.15-r0 apk php83-tokenizer 8.3.17-r0 apk
php83-xmlwriter 8.3.15-r0 apk php83-xml 8.3.17-r0 apk
php83-xsl 8.3.15-r0 apk php83-xmlreader 8.3.17-r0 apk
php83-zip 8.3.15-r0 apk php83-xmlwriter 8.3.17-r0 apk
pinentry 1.3.0-r0 apk php83-xsl 8.3.17-r0 apk
pip 24.3.1 python php83-zip 8.3.17-r0 apk
pkb-client 2.0.0 python pinentry 1.3.1-r0 apk
platformdirs 4.2.2 python pip 25.0.1 python
popt 1.19-r3 apk pkb-client 2.0.0 python
portalocker 2.10.1 python platformdirs 4.2.2 python
procps-ng 4.0.4-r0 apk popt 1.19-r4 apk
proto-plus 1.25.0 python portalocker 2.10.1 python
protobuf 5.29.2 python procps-ng 4.0.4-r2 apk
pyacmedns 0.4 python proto-plus 1.26.0 python
pyasn1 0.6.1 python protobuf 5.29.3 python
pyasn1-modules 0.4.1 python pyacmedns 0.4 python
pyc 3.12.8-r1 apk pyasn1 0.6.1 python
pycparser 2.22 python pyasn1-modules 0.4.1 python
pyjwt 2.10.1 python pyc 3.12.9-r0 apk
pynamecheap 0.0.3 python pycparser 2.22 python
pyopenssl 24.3.0 python pyjwt 2.10.1 python
pyotp 2.9.0 python pynamecheap 0.0.3 python
pyparsing 3.2.1 python pyopenssl 25.0.0 python
pyrfc3339 2.0.1 python pyotp 2.9.0 python
python-dateutil 2.9.0.post0 python pyparsing 3.2.1 python
python-digitalocean 1.17.0 python pyrfc3339 2.0.1 python
python-transip 0.6.0 python python-dateutil 2.9.0.post0 python
python3 3.12.8-r1 apk python-digitalocean 1.17.0 python
python3-pyc 3.12.8-r1 apk python-transip 0.6.0 python
python3-pycache-pyc0 3.12.8-r1 apk python3 3.12.9-r0 apk
pytz 2024.2 python python3-pyc 3.12.9-r0 apk
pyyaml 6.0.2 python python3-pycache-pyc0 3.12.9-r0 apk
readline 8.2.10-r0 apk pytz 2025.1 python
requests 2.32.3 python pyyaml 6.0.2 python
requests-file 2.1.0 python readline 8.2.13-r0 apk
requests-mock 1.12.1 python requests 2.32.3 python
rsa 4.9 python requests-file 2.1.0 python
s3transfer 0.10.4 python requests-mock 1.12.1 python
scanelf 1.3.7-r2 apk rsa 4.9 python
setuptools 75.6.0 python s3transfer 0.11.2 python
shadow 4.15.1-r0 apk scanelf 1.3.8-r1 apk
six 1.17.0 python setuptools 75.8.1 python
skalibs 2.14.1.1-r0 apk shadow 4.16.0-r1 apk
soupsieve 2.6 python six 1.17.0 python
sqlite-libs 3.45.3-r1 apk skalibs-libs 2.14.3.0-r0 apk
ssl_client 1.36.1-r29 apk soupsieve 2.6 python
tiff 4.6.0t-r0 apk sqlite-libs 3.48.0-r0 apk
tldextract 5.1.3 python ssl_client 1.37.0-r12 apk
tomli 2.0.1 python tiff 4.7.0-r0 apk
typeguard 4.3.0 python tldextract 5.1.3 python
typing-extensions 4.12.2 python (+1 duplicate) tomli 2.0.1 python
tzdata 2024b-r0 apk typeguard 4.3.0 python
unixodbc 2.3.12-r0 apk typing-extensions 4.12.2 python (+1 duplicate)
uritemplate 4.1.1 python tzdata 2025a-r0 apk
urllib3 2.3.0 python unixodbc 2.3.12-r0 apk
utmps-libs 0.1.2.2-r1 apk uritemplate 4.1.1 python
wheel 0.43.0 python urllib3 2.3.0 python
wheel 0.45.1 python utmps-libs 0.1.2.3-r2 apk
whois 5.5.23-r0 apk wheel 0.43.0 python
xz-libs 5.6.2-r0 apk wheel 0.45.1 python
zipp 3.19.2 python whois 5.5.23-r0 apk
zlib 1.3.1-r1 apk xz-libs 5.6.3-r0 apk
zope-interface 7.2 python zipp 3.19.2 python
zstd-libs 1.5.6-r0 apk zlib 1.3.1-r2 apk
zope-interface 7.2 python
zstd-libs 1.5.6-r2 apk

View File

@@ -6,6 +6,7 @@ project_url: "https://linuxserver.io"
project_logo: "https://github.com/linuxserver/docker-templates/raw/master/linuxserver.io/img/swag.gif" project_logo: "https://github.com/linuxserver/docker-templates/raw/master/linuxserver.io/img/swag.gif"
project_blurb: "SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let's Encrypt and ZeroSSL). It also contains fail2ban for intrusion prevention." project_blurb: "SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let's Encrypt and ZeroSSL). It also contains fail2ban for intrusion prevention."
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}" project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
project_categories: "Reverse Proxy"
# supported architectures # supported architectures
available_architectures: available_architectures:
- {arch: "{{ arch_x86_64 }}", tag: "amd64-latest"} - {arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
@@ -37,9 +38,16 @@ opt_param_env_vars:
- {env_var: "ONLY_SUBDOMAINS", env_value: "false", desc: "If you wish to get certs only for certain subdomains, but not the main domain (main domain may be hosted on another machine and cannot be validated), set this to `true`"} - {env_var: "ONLY_SUBDOMAINS", env_value: "false", desc: "If you wish to get certs only for certain subdomains, but not the main domain (main domain may be hosted on another machine and cannot be validated), set this to `true`"}
- {env_var: "EXTRA_DOMAINS", env_value: "", desc: "Additional fully qualified domain names (comma separated, no spaces) ie. `example.net,subdomain.example.net,*.example.org`"} - {env_var: "EXTRA_DOMAINS", env_value: "", desc: "Additional fully qualified domain names (comma separated, no spaces) ie. `example.net,subdomain.example.net,*.example.org`"}
- {env_var: "STAGING", env_value: "false", desc: "Set to `true` to retrieve certs in staging mode. Rate limits will be much higher, but the resulting cert will not pass the browser's security test. Only to be used for testing purposes."} - {env_var: "STAGING", env_value: "false", desc: "Set to `true` to retrieve certs in staging mode. Rate limits will be much higher, but the resulting cert will not pass the browser's security test. Only to be used for testing purposes."}
- {env_var: "DISABLE_F2B", env_value: "", desc: "Set to `true` to disable the Fail2ban service in the container, if you're already running it elsewhere or using a different IPS."}
- {env_var: "SWAG_AUTORELOAD", env_value: "", desc: "Set to `true` to enable automatic reloading of confs on change without stopping/restarting nginx. Your filesystem must support inotify. This functionality was previously offered [via mod](https://github.com/linuxserver/docker-mods/tree/swag-auto-reload)."}
- {env_var: "SWAG_AUTORELOAD_WATCHLIST", env_value: "", desc: "A [pipe](https://en.wikipedia.org/wiki/Vertical_bar)-separated list of additional folders for auto reload to watch in addition to `/config/nginx`"}
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)"}
readonly_supported: true
readonly_message: |
* `/tmp` must be mounted to tmpfs
* fail2ban will not be available
# application setup block # application setup block
app_setup_block_enabled: true app_setup_block_enabled: true
app_setup_block: | app_setup_block: |
@@ -114,7 +122,7 @@ app_setup_block: |
* You can check which jails are active via `docker exec -it swag fail2ban-client status` * You can check which jails are active via `docker exec -it swag fail2ban-client status`
* You can check the status of a specific jail via `docker exec -it swag fail2ban-client status <jail name>` * You can check the status of a specific jail via `docker exec -it swag fail2ban-client status <jail name>`
* You can unban an IP via `docker exec -it swag fail2ban-client set <jail name> unbanip <IP>` * You can unban an IP via `docker exec -it swag fail2ban-client set <jail name> unbanip <IP>`
* A list of commands can be found here: <https://www.fail2ban.org/wiki/index.php/Commands> * A list of commands for fail2ban-client can be found [here](https://manpages.ubuntu.com/manpages/noble/man1/fail2ban-client.1.html)
### Updating configs ### Updating configs
@@ -152,26 +160,22 @@ init_diagram: |
init-nginx-end -> init-config init-nginx-end -> init-config
init-os-end -> init-config init-os-end -> init-config
init-config -> init-config-end init-config -> init-config-end
init-crontab-config -> init-config-end
init-outdated-config -> init-config-end init-outdated-config -> init-config-end
init-os-end -> init-crontab-config init-config -> init-crontab-config
init-mods-end -> init-custom-files init-mods-end -> init-custom-files
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
init-php -> init-keygen init-php -> init-keygen
base -> init-migrations base -> init-migrations
base -> init-mods
init-config-end -> init-mods init-config-end -> init-mods
init-version-checks -> init-mods
init-mods -> init-mods-end
init-mods-package-install -> init-mods-end init-mods-package-install -> init-mods-end
init-mods -> init-mods-package-install init-mods -> init-mods-package-install
init-samples -> init-nginx init-samples -> init-nginx
init-permissions -> init-nginx-end init-version-checks -> init-nginx-end
base -> init-os-end
init-adduser -> init-os-end init-adduser -> init-os-end
init-envfile -> init-os-end init-envfile -> init-os-end
init-migrations -> init-os-end
init-renew -> init-outdated-config init-renew -> init-outdated-config
init-keygen -> init-permissions init-keygen -> init-permissions
init-certbot-config -> init-permissions-config init-certbot-config -> init-permissions-config
@@ -180,11 +184,10 @@ init_diagram: |
init-config -> init-require-url init-config -> init-require-url
init-folders -> init-samples init-folders -> init-samples
init-custom-files -> init-services init-custom-files -> init-services
init-mods-end -> init-services
init-fail2ban-config -> init-swag-config init-fail2ban-config -> init-swag-config
init-require-url -> init-swag-folders init-require-url -> init-swag-folders
init-swag-folders -> init-swag-samples init-swag-folders -> init-swag-samples
init-config-end -> init-version-checks init-permissions -> init-version-checks
init-services -> svc-cron init-services -> svc-cron
svc-cron -> legacy-services svc-cron -> legacy-services
init-services -> svc-fail2ban init-services -> svc-fail2ban
@@ -193,13 +196,17 @@ init_diagram: |
svc-nginx -> legacy-services svc-nginx -> legacy-services
init-services -> svc-php-fpm init-services -> svc-php-fpm
svc-php-fpm -> legacy-services svc-php-fpm -> legacy-services
init-services -> svc-swag-auto-reload
svc-swag-auto-reload -> legacy-services
} }
Base Images: { Base Images: {
"baseimage-alpine-nginx:3.20" <- "baseimage-alpine:3.20" "baseimage-alpine-nginx:3.21" <- "baseimage-alpine:3.21"
} }
"swag:latest" <- Base Images "swag:latest" <- Base Images
# changelog # changelog
changelogs: changelogs:
- {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: "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)."}
- {date: "30.08.24:", desc: "Fix zerossl cert revocation."} - {date: "30.08.24:", desc: "Fix zerossl cert revocation."}
- {date: "24.07.14:", desc: "Rebase to Alpine 3.20. Remove deprecated Google Domains certbot plugin. Existing users should update their nginx confs to avoid http2 deprecation warnings."} - {date: "24.07.14:", desc: "Rebase to Alpine 3.20. Remove deprecated Google Domains certbot plugin. Existing users should update their nginx confs to avoid http2 deprecation warnings."}

View File

@@ -6,4 +6,4 @@ echo
echo "<------------------------------------------------->" echo "<------------------------------------------------->"
echo "cronjob running on $(date)" echo "cronjob running on $(date)"
echo "Running certbot renew" echo "Running certbot renew"
certbot renew --non-interactive certbot renew --non-interactive --config-dir /config/etc/letsencrypt --logs-dir /config/log/letsencrypt --work-dir /tmp/letsencrypt --config /config/etc/letsencrypt/cli.ini

View File

View File

View File

View File

@@ -1,4 +1,4 @@
## Version 2024/07/16 - 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 {
@@ -80,5 +80,3 @@ server {
# enable subdomain method reverse proxy confs # enable subdomain method reverse proxy confs
include /config/nginx/proxy-confs/*.subdomain.conf; include /config/nginx/proxy-confs/*.subdomain.conf;
# enable proxy cache for auth
proxy_cache_path cache/ keys_zone=auth_cache:10m;

View File

@@ -5,4 +5,4 @@
0 3 * * 6 run-parts /etc/periodic/weekly 0 3 * * 6 run-parts /etc/periodic/weekly
0 5 1 * * run-parts /etc/periodic/monthly 0 5 1 * * run-parts /etc/periodic/monthly
8 2 * * * /app/le-renew.sh >> /config/log/letsencrypt/letsencrypt.log 2>&1 8 2 * * * /app/le-renew.sh >> /config/log/letsencrypt/renewal.log 2>&1

View File

@@ -38,12 +38,6 @@ if [[ "${VALIDATION}" = "dns" ]] && ! echo "${CERTBOT_DNS_AUTHENTICATORS}" | gre
sleep infinity sleep infinity
fi fi
# set owner of certbot's CONFIG_DIR, WORK_DIR, and LOGS_DIR to abc
lsiown -R abc:abc \
/etc/letsencrypt \
/var/lib/letsencrypt \
/var/log/letsencrypt
# set_ini_value logic: # set_ini_value logic:
# - if the name is not found in the file, append the name=value to the end of the file # - if the name is not found in the file, append the name=value to the end of the file
# - if the name is found in the file, replace the value # - if the name is found in the file, replace the value
@@ -62,12 +56,14 @@ touch /config/etc/letsencrypt/cli.ini
lsiown abc:abc /config/etc/letsencrypt/cli.ini lsiown abc:abc /config/etc/letsencrypt/cli.ini
grep -qF 'agree-tos' /config/etc/letsencrypt/cli.ini || echo 'agree-tos=true' >>/config/etc/letsencrypt/cli.ini grep -qF 'agree-tos' /config/etc/letsencrypt/cli.ini || echo 'agree-tos=true' >>/config/etc/letsencrypt/cli.ini
# Check for broken dns credentials value in cli.ini and remove
sed -i '/dns--credentials/d' /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
# copy default renewal hooks # copy default renewal hooks
chmod -R +x /defaults/etc/letsencrypt/renewal-hooks
cp -nR /defaults/etc/letsencrypt/renewal-hooks/* /config/etc/letsencrypt/renewal-hooks/ 2> >(grep -v 'cp: not replacing') cp -nR /defaults/etc/letsencrypt/renewal-hooks/* /config/etc/letsencrypt/renewal-hooks/ 2> >(grep -v 'cp: not replacing')
lsiown -R abc:abc /config/etc/letsencrypt/renewal-hooks lsiown -R abc:abc /config/etc/letsencrypt/renewal-hooks
@@ -169,14 +165,14 @@ fi
rm -rf /config/keys/letsencrypt rm -rf /config/keys/letsencrypt
if [[ "${ONLY_SUBDOMAINS}" = "true" ]] && [[ ! "${SUBDOMAINS}" = "wildcard" ]]; then if [[ "${ONLY_SUBDOMAINS}" = "true" ]] && [[ ! "${SUBDOMAINS}" = "wildcard" ]]; then
DOMAIN="$(echo "${SUBDOMAINS}" | tr ',' ' ' | awk '{print $1}').${URL}" DOMAIN="$(echo "${SUBDOMAINS}" | tr ',' ' ' | awk '{print $1}').${URL}"
ln -s ../etc/letsencrypt/live/"${DOMAIN}" /config/keys/letsencrypt ln -s /config/etc/letsencrypt/live/"${DOMAIN}" /config/keys/letsencrypt
else else
ln -s ../etc/letsencrypt/live/"${URL}" /config/keys/letsencrypt ln -s /config/etc/letsencrypt/live/"${URL}" /config/keys/letsencrypt
fi fi
# cleanup unused csr and keys folders # cleanup unused csr and keys folders
rm -rf /etc/letsencrypt/csr rm -rf /config/etc/letsencrypt/csr
rm -rf /etc/letsencrypt/keys rm -rf /config/etc/letsencrypt/keys
# checking for changes in cert variables, revoking certs if necessary # checking for changes in cert variables, revoking certs if necessary
if [[ ! "${URL}" = "${ORIGURL}" ]] || if [[ ! "${URL}" = "${ORIGURL}" ]] ||
@@ -197,9 +193,9 @@ if [[ ! "${URL}" = "${ORIGURL}" ]] ||
REV_ACMESERVER=("https://acme-v02.api.letsencrypt.org/directory") REV_ACMESERVER=("https://acme-v02.api.letsencrypt.org/directory")
fi fi
if [[ -f /config/etc/letsencrypt/live/"${ORIGDOMAIN}"/fullchain.pem ]]; then if [[ -f /config/etc/letsencrypt/live/"${ORIGDOMAIN}"/fullchain.pem ]]; then
certbot revoke --non-interactive --cert-path /config/etc/letsencrypt/live/"${ORIGDOMAIN}"/fullchain.pem --key-path /config/etc/letsencrypt/live/"${ORIGDOMAIN}"/privkey.pem --server "${REV_ACMESERVER[@]}" || true certbot revoke --config-dir /config/etc/letsencrypt --logs-dir /config/log/letsencrypt --work-dir /tmp/letsencrypt --config /config/etc/letsencrypt/cli.ini --non-interactive --cert-path /config/etc/letsencrypt/live/"${ORIGDOMAIN}"/fullchain.pem --key-path /config/etc/letsencrypt/live/"${ORIGDOMAIN}"/privkey.pem --server "${REV_ACMESERVER[@]}" || true
else else
certbot revoke --non-interactive --cert-name "${ORIGDOMAIN}" --server "${REV_ACMESERVER[@]}" || true certbot revoke --config-dir /config/etc/letsencrypt --logs-dir /config/log/letsencrypt --work-dir /tmp/letsencrypt --config /config/etc/letsencrypt/cli.ini --non-interactive --cert-name "${ORIGDOMAIN}" --server "${REV_ACMESERVER[@]}" || true
fi fi
rm -rf /config/etc/letsencrypt/{accounts,archive,live,renewal} rm -rf /config/etc/letsencrypt/{accounts,archive,live,renewal}
fi fi
@@ -212,9 +208,9 @@ if [[ -f "/config/keys/letsencrypt/chain.pem" ]] && { [[ "${CERTPROVIDER}" == "l
echo "The cert seems to be using the old LE root cert, which is no longer valid. Deleting and revoking." echo "The cert seems to be using the old LE root cert, which is no longer valid. Deleting and revoking."
REV_ACMESERVER=("https://acme-v02.api.letsencrypt.org/directory") REV_ACMESERVER=("https://acme-v02.api.letsencrypt.org/directory")
if [[ -f /config/etc/letsencrypt/live/"${ORIGDOMAIN}"/fullchain.pem ]]; then if [[ -f /config/etc/letsencrypt/live/"${ORIGDOMAIN}"/fullchain.pem ]]; then
certbot revoke --non-interactive --cert-path /config/etc/letsencrypt/live/"${ORIGDOMAIN}"/fullchain.pem --server "${REV_ACMESERVER[@]}" || true certbot revoke --config-dir /config/etc/letsencrypt --logs-dir /config/log/letsencrypt --work-dir /tmp/letsencrypt --config /config/etc/letsencrypt/cli.ini --non-interactive --cert-path /config/etc/letsencrypt/live/"${ORIGDOMAIN}"/fullchain.pem --server "${REV_ACMESERVER[@]}" || true
else else
certbot revoke --non-interactive --cert-name "${ORIGDOMAIN}" --server "${REV_ACMESERVER[@]}" || true certbot revoke --config-dir /config/etc/letsencrypt --logs-dir /config/log/letsencrypt --work-dir /tmp/letsencrypt --config /config/etc/letsencrypt/cli.ini --non-interactive --cert-name "${ORIGDOMAIN}" --server "${REV_ACMESERVER[@]}" || true
fi fi
rm -rf /config/etc/letsencrypt/{accounts,archive,live,renewal} rm -rf /config/etc/letsencrypt/{accounts,archive,live,renewal}
fi fi
@@ -347,7 +343,7 @@ if [[ ! -f "/config/keys/letsencrypt/fullchain.pem" ]]; then
set_ini_value "eab-hmac-key" "${ZEROSSL_EAB_HMAC_KEY}" /config/etc/letsencrypt/cli.ini set_ini_value "eab-hmac-key" "${ZEROSSL_EAB_HMAC_KEY}" /config/etc/letsencrypt/cli.ini
fi fi
echo "Generating new certificate" echo "Generating new certificate"
certbot certonly --non-interactive --renew-by-default certbot certonly --config-dir /config/etc/letsencrypt --logs-dir /config/log/letsencrypt --work-dir /tmp/letsencrypt --config /config/etc/letsencrypt/cli.ini --non-interactive --renew-by-default
if [[ ! -d /config/keys/letsencrypt ]]; then if [[ ! -d /config/keys/letsencrypt ]]; then
if [[ "${VALIDATION}" = "dns" ]]; then if [[ "${VALIDATION}" = "dns" ]]; then
echo "ERROR: Cert does not exist! Please see the validation error above. Make sure you entered correct credentials into the ${DNSCREDENTIALFILE} file." echo "ERROR: Cert does not exist! Please see the validation error above. Make sure you entered correct credentials into the ${DNSCREDENTIALFILE} file."

View File

@@ -1,38 +1,40 @@
#!/usr/bin/with-contenv bash #!/usr/bin/with-contenv bash
# shellcheck shell=bash # shellcheck shell=bash
if ! iptables -L &> /dev/null; then if [[ -z ${LSIO_READ_ONLY_FS} ]] && [[ -z ${LSIO_NON_ROOT_USER} ]] && [[ "${DISABLE_F2B,,}" != "true" ]]; then
ln -sf /sbin/xtables-legacy-multi /sbin/iptables if ! iptables -L &> /dev/null; then
ln -sf /sbin/xtables-legacy-multi /sbin/iptables-save ln -sf /usr/sbin/xtables-legacy-multi /usr/sbin/iptables
ln -sf /sbin/xtables-legacy-multi /sbin/iptables-restore ln -sf /usr/sbin/xtables-legacy-multi /usr/sbin/iptables-save
ln -sf /sbin/xtables-legacy-multi /sbin/ip6tables ln -sf /usr/sbin/xtables-legacy-multi /usr/sbin/iptables-restore
ln -sf /sbin/xtables-legacy-multi /sbin/ip6tables-save ln -sf /usr/sbin/xtables-legacy-multi /usr/sbin/ip6tables
ln -sf /sbin/xtables-legacy-multi /sbin/ip6tables-restore ln -sf /usr/sbin/xtables-legacy-multi /usr/sbin/ip6tables-save
fi ln -sf /usr/sbin/xtables-legacy-multi /usr/sbin/ip6tables-restore
fi
# copy/update the fail2ban config defaults to/in /config # copy/update the fail2ban config defaults to/in /config
cp -R /defaults/fail2ban/filter.d /config/fail2ban/ cp -R /defaults/fail2ban/filter.d /config/fail2ban/
cp -R /defaults/fail2ban/action.d /config/fail2ban/ cp -R /defaults/fail2ban/action.d /config/fail2ban/
# if jail.local is missing in /config, copy default # if jail.local is missing in /config, copy default
if [[ ! -f /config/fail2ban/jail.local ]]; then if [[ ! -f /config/fail2ban/jail.local ]]; then
cp /defaults/fail2ban/jail.local /config/fail2ban/jail.local cp /defaults/fail2ban/jail.local /config/fail2ban/jail.local
fi fi
# Replace fail2ban config with user config # Replace fail2ban config with user config
if [[ -d /etc/fail2ban/filter.d ]]; then if [[ -d /etc/fail2ban/filter.d ]]; then
rm -rf /etc/fail2ban/filter.d rm -rf /etc/fail2ban/filter.d
fi fi
if [[ -d /etc/fail2ban/action.d ]]; then if [[ -d /etc/fail2ban/action.d ]]; then
rm -rf /etc/fail2ban/action.d rm -rf /etc/fail2ban/action.d
fi fi
cp -R /config/fail2ban/filter.d /etc/fail2ban/ cp -R /config/fail2ban/filter.d /etc/fail2ban/
cp -R /config/fail2ban/action.d /etc/fail2ban/ cp -R /config/fail2ban/action.d /etc/fail2ban/
cp /defaults/fail2ban/fail2ban.local /etc/fail2ban/ cp /defaults/fail2ban/fail2ban.local /etc/fail2ban/
cp /config/fail2ban/jail.local /etc/fail2ban/jail.local cp /config/fail2ban/jail.local /etc/fail2ban/jail.local
# logfiles needed by fail2ban # logfiles needed by fail2ban
if [[ ! -f /config/log/nginx/error.log ]]; then if [[ ! -f /config/log/nginx/error.log ]]; then
touch /config/log/nginx/error.log touch /config/log/nginx/error.log
fi fi
if [[ ! -f /config/log/nginx/access.log ]]; then if [[ ! -f /config/log/nginx/access.log ]]; then
touch /config/log/nginx/access.log touch /config/log/nginx/access.log
fi
fi fi

View File

@@ -11,3 +11,9 @@ if [[ -f /config/nginx/ldap.conf ]]; then
Ensure your configs are updated and remove /config/nginx/ldap.conf Ensure your configs are updated and remove /config/nginx/ldap.conf
If you do not use this config, simply remove it." If you do not use this config, simply remove it."
fi fi
if grep -qrle ' /etc/letsencrypt' /config/nginx; then
echo " The following nginx confs are using certificates from the obsolete location
/etc/letsencrypt and should be updated to point to /config/etc/letsencrypt
"
echo -n " " && grep -rle ' /etc/letsencrypt' /config/nginx
fi

View File

@@ -2,10 +2,7 @@
# shellcheck shell=bash # shellcheck shell=bash
# permissions # permissions
find /config/log ! -path '/config/log/logrotate.status' -exec chmod +r {} \+
lsiown -R abc:abc \ lsiown -R abc:abc \
/config /config
chmod -R 0644 /etc/logrotate.d
chmod -R +r /config/log
# Workaround for systems with chmod errors
true

View File

@@ -7,6 +7,6 @@ mkdir -p \
/config/etc/letsencrypt/renewal-hooks \ /config/etc/letsencrypt/renewal-hooks \
/config/log/{fail2ban,letsencrypt,nginx} \ /config/log/{fail2ban,letsencrypt,nginx} \
/config/nginx/proxy-confs \ /config/nginx/proxy-confs \
/run/fail2ban /run/fail2ban \
rm -rf /etc/letsencrypt /tmp/letsencrypt
ln -s /config/etc/letsencrypt /etc/letsencrypt

View File

@@ -1,5 +1,9 @@
#!/usr/bin/with-contenv bash #!/usr/bin/with-contenv bash
# shellcheck shell=bash # shellcheck shell=bash
exec \ if [[ -z ${LSIO_READ_ONLY_FS} ]] && [[ -z ${LSIO_NON_ROOT_USER} ]] && [[ "${DISABLE_F2B,,}" != "true" ]]; then
fail2ban-client -x -f start exec \
fail2ban-client -x -f start
else
sleep infinity
fi

View File

@@ -0,0 +1,41 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
if [[ ${SWAG_AUTORELOAD,,} == "true" ]]; then
if [[ -f "/etc/s6-overlay/s6-rc.d/svc-mod-swag-auto-reload/run" ]]; then
echo "ERROR: Legacy SWAG Auto Reload Mod detected, to use the built-in Auto Reload functionality please remove it from your container config."
sleep infinity
else
echo "Auto-reload: Watching the following folders for changes to .conf files:"
echo "/config/nginx"
ACTIVE_WATCH=("/config/nginx")
for i in $(echo "${SWAG_AUTORELOAD_WATCHLIST}" | tr "|" " "); do
if [ -f "${i}" ] || [ -d "${i}" ]; then
echo "${i}"
ACTIVE_WATCH+=("${i}")
fi
done
function wait_for_changes {
inotifywait -rq \
--event modify,move,create,delete \
--includei '\.conf$' \
"${ACTIVE_WATCH[@]}"
}
while wait_for_changes; do
NGINX_CONF=()
if ! grep -q "/config/nginx/nginx.conf" /etc/nginx/nginx.conf; then
NGINX_CONF=("-c" "/config/nginx/nginx.conf")
fi
if /usr/sbin/nginx "${NGINX_CONF[@]}" -t; then
echo "Changes to nginx config detected and the changes are valid, reloading nginx"
/usr/sbin/nginx "${NGINX_CONF[@]}" -s reload
else
echo "Changes to nginx config detected but the changes are not valid, skipping nginx reload. Please fix your config."
fi
done
fi
else
sleep infinity
fi

View File

@@ -0,0 +1 @@
longrun

View File

@@ -0,0 +1,7 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
# Migrate existing renewal confs with old paths from /etc/letsencrypt to /config/etc/letsencrypt
if ls /config/etc/letsencrypt/renewal/*.conf >/dev/null 2>&1; then
sed -i 's| /etc/letsencrypt| /config/etc/letsencrypt|' /config/etc/letsencrypt/renewal/*.conf
fi