ทีม LinuxServer.io ขอนำเสนอคอนเทนเนอร์ใหม่ที่มีฟีเจอร์:
พบกับเราได้ที่:
SWAG - Secure Web Application Gateway (เดิมชื่อ Letsencrypt ไม่เกี่ยวข้องกับ Let's Encrypt™) ตั้งค่าเว็บเซิร์ฟเวอร์ Nginx และพร็อกซีย้อนกลับพร้อมการรองรับ php และไคลเอนต์ certbot ในตัวที่สร้างกระบวนการสร้างใบรับรองเซิร์ฟเวอร์ SSL ฟรีและกระบวนการต่ออายุโดยอัตโนมัติ (Let's Encrypt และ ZeroSSL) นอกจากนี้ยังมี Fail2ban สำหรับการป้องกันการบุกรุก
เราใช้รายการนักเทียบท่าเพื่อการรับรู้หลายแพลตฟอร์ม ดูข้อมูลเพิ่มเติมได้จาก Docker ที่นี่ และประกาศของเราที่นี่
เพียงดึง lscr.io/linuxserver/swag:latest
ควรดึงภาพที่ถูกต้องสำหรับส่วนโค้งของคุณ แต่คุณยังสามารถดึงภาพส่วนโค้งที่เฉพาะเจาะจงผ่านแท็กได้
สถาปัตยกรรมที่สนับสนุนโดยภาพนี้คือ:
สถาปัตยกรรม | มีอยู่ | แท็ก |
---|---|---|
x86-64 | amd64-<แท็กเวอร์ชัน> | |
อาร์ม64 | arm64v8-<แท็กเวอร์ชัน> | |
อาร์มเฮฟ |
URL
จะเป็น yoursubdomain.duckdns.org
และ SUBDOMAINS
อาจเป็น www,ftp,cloud
ที่มีการตรวจสอบ http หรือ wildcard
ที่มีการตรวจสอบ DNS คุณสามารถใช้อิมเมจ duckdns ของเราเพื่ออัปเดต IP ของคุณบน duckdns.orghttp
ควรส่งต่อพอร์ต 80 บนฝั่งอินเทอร์เน็ตของเราเตอร์ไปยังพอร์ต 80 ของคอนเทนเนอร์นี้dns
ตรวจสอบให้แน่ใจว่าได้ป้อนข้อมูลประจำตัวของคุณลงในไฟล์ ini (หรือ json สำหรับปลั๊กอินบางตัว) ที่เกี่ยวข้องภายใต้ /config/dns-conf
yoursubdomain.duckdns.org
ปล่อยให้ตัวแปร SUBDOMAINS
ว่างไว้)*.yoursubdomain.duckdns.org
ตั้งค่าตัวแปร SUBDOMAINS
เป็น wildcard
)--cap-add=NET_ADMIN
จำเป็นสำหรับ failed2ban เพื่อแก้ไข iptableshttps://yourdomain.url
เพื่อเข้าถึงหน้าแรกเริ่มต้น (การเข้าถึง http ผ่านพอร์ต 80 ถูกปิดใช้งานโดยค่าเริ่มต้น คุณสามารถเปิดใช้งานได้โดยแก้ไขการกำหนดค่าไซต์เริ่มต้นที่ /config/nginx/site-confs/default.conf
)/config/log/letsencrypt
เพื่อดูว่าเหตุใดการต่ออายุจึงล้มเหลว ขอแนะนำให้ป้อนอีเมลของคุณในพารามิเตอร์นักเทียบท่าเพื่อให้คุณได้รับการแจ้งเตือนการหมดอายุจาก Let's Encrypt ในสถานการณ์เหล่านั้นSWAG มีปลั๊กอิน Certbot จำนวนมากอยู่ในกล่อง แต่ไม่สามารถรวมปลั๊กอินทั้งหมดได้ หากคุณต้องการปลั๊กอินที่ไม่ได้รวมอยู่ด้วย วิธีที่เร็วที่สุดในการมีปลั๊กอินคือการใช้ Universal Package Install Docker Mod ของเรา
ตั้งค่าตัวแปรสภาพแวดล้อมต่อไปนี้บนคอนเทนเนอร์ของคุณ:
DOCKER_MODS=linuxserver/mods:universal-package-install
INSTALL_PIP_PACKAGES=certbot-dns-<plugin>
ตั้งค่าข้อมูลรับรองที่จำเป็น (โดยปกติจะพบในเอกสารประกอบปลั๊กอิน) ใน /config/dns-conf/<plugin>.ini
ขอแนะนำให้พยายามขอรับใบรับรองที่มี STAGING=true
ก่อนเพื่อให้แน่ใจว่าปลั๊กอินทำงานตามที่คาดไว้
dhparams.pem
docker exec -it swag htpasswd -c /config/nginx/.htpasswd <username>
.htpasswd
สำหรับผู้ใช้รายแรก ให้ใช้คำสั่งข้างต้น สำหรับรายอื่น ให้ใช้คำสั่งข้างต้นโดยไม่มีแฟล็ก -c
เนื่องจากจะบังคับให้ลบ .htpasswd
ที่มีอยู่และสร้างคำสั่งใหม่/config/nginx/site-confs/default.conf
คุณสามารถแก้ไขไฟล์นี้ได้ตามใจชอบ และคุณสามารถเพิ่มไฟล์ conf อื่นๆ ลงในไดเร็กทอรีนี้ได้ อย่างไรก็ตาม หากคุณลบไฟล์ default
เริ่มต้นใหม่จะถูกสร้างขึ้นเมื่อเริ่มคอนเทนเนอร์README.md
ใต้ /config/nginx/proxy_confs
สำหรับคำแนะนำในการเปิดใช้งาน Confs ที่ตั้งไว้ล่วงหน้าจะอยู่ในและนำเข้าจาก Repo นี้add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";
การดำเนินการนี้จะ ขอให้ Google และคณะไม่จัดทำดัชนีและแสดงรายการเว็บไซต์ของคุณ โปรดใช้ความระมัดระวังเนื่องจากในที่สุดคุณจะถูกเพิกถอนรายชื่อหากคุณทิ้งบรรทัดนี้ไว้ในไซต์ที่คุณต้องการให้ปรากฏบนเครื่องมือค้นหา-v /path-to-swag-config:/swag-ssl
) และในคอนเทนเนอร์อื่น ๆ ให้ใช้ตำแหน่งใบรับรอง /swag-ssl/keys/letsencrypt/
etc
ที่อยู่ภายใต้ /config
ในคอนเทนเนอร์อื่น (เช่น -v /path-to-swag-config/etc:/swag-ssl
) และในคอนเทนเนอร์อื่น ๆ ให้ใช้ตำแหน่งใบรับรอง /swag-ssl/letsencrypt/live/<your.domain.url>/
(วิธีนี้ปลอดภัยกว่าเนื่องจากวิธีแรกแชร์โฟลเดอร์กำหนดค่า SWAG ทั้งหมดกับคอนเทนเนอร์อื่น รวมถึงไฟล์ www ในขณะที่วิธีที่สองเท่านั้น แบ่งปันใบรับรอง SSL)cert.pem
, chain.pem
, fullchain.pem
และ privkey.pem
ซึ่งสร้างโดย Certbot และใช้งานโดย nginx และแอปอื่นๆ อีกมากมายprivkey.pfx
รูปแบบที่ Microsoft รองรับและใช้กันทั่วไปโดยแอป dotnet เช่น Emby Server (ไม่มีรหัสผ่าน)priv-fullchain-bundle.pem
ซึ่งเป็นใบรับรอง pem ที่รวมคีย์ส่วนตัวและ fullchain ที่ใช้โดยแอปเช่น ZNC/config/fail2ban/jail.local
.conf
ให้สร้างไฟล์ .local
ที่มีชื่อเดียวกันและแก้ไขเนื่องจากไฟล์ .conf จะถูกเขียนทับเมื่อมีการอัปเดตการดำเนินการและตัวกรอง ไฟล์ .local
จะต่อท้ายสิ่งที่อยู่ในไฟล์ .conf
(เช่น nginx-http-auth.conf
--> nginx-http-auth.local
)docker exec -it swag fail2ban-client status
docker exec -it swag fail2ban-client status <jail name>
docker exec -it swag fail2ban-client set <jail name> unbanip <IP>
linuxserver/letsencrypt
เก่าโปรดปฏิบัติตามคำแนะนำในโพสต์บล็อกนี้
เพื่อช่วยคุณในการเริ่มต้นสร้างคอนเทนเนอร์จากอิมเมจนี้ คุณสามารถใช้ docker-compose หรือ docker cli ได้
---
services :
swag :
image : lscr.io/linuxserver/swag:latest
container_name : swag
cap_add :
- NET_ADMIN
environment :
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- URL=yourdomain.url
- VALIDATION=http
- SUBDOMAINS=www, # optional
- CERTPROVIDER= # optional
- DNSPLUGIN=cloudflare # optional
- PROPAGATION= # optional
- EMAIL= # optional
- ONLY_SUBDOMAINS=false # optional
- EXTRA_DOMAINS= # optional
- STAGING=false # optional
volumes :
- /path/to/swag/config:/config
ports :
- 443:443
- 80:80 # optional
restart : unless-stopped
docker run -d
--name=swag
--cap-add=NET_ADMIN
-e PUID=1000
-e PGID=1000
-e TZ=Etc/UTC
-e URL=yourdomain.url
-e VALIDATION=http
-e SUBDOMAINS=www, ` # optional `
-e CERTPROVIDER= ` # optional `
-e DNSPLUGIN=cloudflare ` # optional `
-e PROPAGATION= ` # optional `
-e EMAIL= ` # optional `
-e ONLY_SUBDOMAINS=false ` # optional `
-e EXTRA_DOMAINS= ` # optional `
-e STAGING=false ` # optional `
-p 443:443
-p 80:80 ` # optional `
-v /path/to/swag/config:/config
--restart unless-stopped
lscr.io/linuxserver/swag:latest
คอนเทนเนอร์ได้รับการกำหนดค่าโดยใช้พารามิเตอร์ที่ส่งผ่านขณะรันไทม์ (เช่นพารามิเตอร์ข้างต้น) พารามิเตอร์เหล่านี้คั่นด้วยเครื่องหมายโคลอนและระบุ <external>:<internal>
ตามลำดับ ตัวอย่างเช่น -p 8080:80
จะแสดงพอร์ต 80
จากภายในคอนเทนเนอร์เพื่อให้สามารถเข้าถึงได้จาก IP ของโฮสต์บนพอร์ต 8080
นอกคอนเทนเนอร์
พารามิเตอร์ | การทำงาน |
---|---|
-p 443 | พอร์ต HTTPS |
-p 80 | พอร์ต Http (จำเป็นสำหรับการตรวจสอบความถูกต้อง http และ http -> การเปลี่ยนเส้นทาง https) |
-e PUID=1000 | สำหรับ UserID - ดูคำอธิบายด้านล่าง |
-e PGID=1000 | สำหรับ GroupID - ดูคำอธิบายด้านล่าง |
-e TZ=Etc/UTC | ระบุเขตเวลาที่จะใช้ ดูรายการนี้ |
-e URL=yourdomain.url | URL ยอดนิยมที่คุณสามารถควบคุมได้ ( customdomain.com หากคุณเป็นเจ้าของ หรือ customsubdomain.ddnsprovider.com หากเป็น DNS แบบไดนามิก) |
-e VALIDATION=http | วิธีการตรวจสอบ Certbot ที่จะใช้ ตัวเลือกคือ http หรือ dns (วิธี dns ต้องใช้ชุดตัวแปร DNSPLUGIN ด้วย) |
-e SUBDOMAINS=www, | โดเมนย่อยที่คุณต้องการให้ใบรับรองครอบคลุม (คั่นด้วยเครื่องหมายจุลภาค ไม่ต้องเว้นวรรค) เช่น www,ftp,cloud สำหรับใบรับรองไวด์การ์ด ให้ตั้งค่านี้เป็น wildcard ทุกประการ (ใบรับรองไวด์การ์ดสามารถใช้ได้ผ่านการตรวจสอบ dns เท่านั้น) |
-e CERTPROVIDER= | คุณสามารถเลือกกำหนดผู้ให้บริการใบรับรองได้ ตั้งค่าเป็น zerossl สำหรับใบรับรอง ZeroSSL (ต้องมีบัญชี ZeroSSL ที่มีอยู่และที่อยู่อีเมลที่ป้อนใน EMAIL env var) มิฉะนั้นจะมีค่าเริ่มต้นเป็น Let's Encrypt |
-e DNSPLUGIN=cloudflare | จำเป็นหากตั้ง VALIDATION เป็น dns ตัวเลือก ได้แก่ acmedns , aliyun , azure , bunny , cloudflare , cpanel , desec , digitalocean , directadmin , dnsimple , dnsmadeeasy , dnspod , do , domeneshop , dreamhost , duckdns , dynu , freedns , gandi , gehirn , glesys , godaddy , google , he , hetzner , infomaniak , inwx , ionos , linode , loopia , luadns , namecheap , netcup , njalla , nsone , ovh , porkbun , rfc2136 , route53 , sakuracloud , standalone , transip และ vultr นอกจากนี้จำเป็นต้องป้อนข้อมูลรับรองลงในไฟล์ ini (หรือ json สำหรับปลั๊กอินบางตัว) ที่เกี่ยวข้องภายใต้ /config/dns-conf |
-e PROPAGATION= | เลือกที่จะแทนที่ (เป็นวินาที) เวลาการเผยแพร่เริ่มต้นสำหรับปลั๊กอิน DNS |
-e EMAIL= | ที่อยู่อีเมลเสริมที่ใช้สำหรับการแจ้งเตือนการหมดอายุของใบรับรอง (จำเป็นสำหรับ ZeroSSL) |
-e ONLY_SUBDOMAINS=false | หากคุณต้องการรับใบรับรองสำหรับโดเมนย่อยบางโดเมนเท่านั้น แต่ไม่ใช่โดเมนหลัก (โดเมนหลักอาจโฮสต์อยู่ในเครื่องอื่นและไม่สามารถตรวจสอบได้) ให้ตั้งค่านี้เป็น true |
-e EXTRA_DOMAINS= | ชื่อโดเมนแบบเต็มเพิ่มเติม (คั่นด้วยเครื่องหมายจุลภาค ห้ามเว้นวรรค) เช่น extradomain.com,subdomain.anotherdomain.org,*.anotherdomain.org |
-e STAGING=false | ตั้งค่าเป็น true เพื่อดึงข้อมูลใบรับรองในโหมดการแสดงชั่วคราว ขีดจำกัดอัตราจะสูงกว่ามาก แต่ใบรับรองผลลัพธ์จะไม่ผ่านการทดสอบความปลอดภัยของเบราว์เซอร์ เพื่อใช้ในการทดสอบเท่านั้น |
-v /config | ไฟล์กำหนดค่าถาวร |
รูปภาพนี้ใช้ cap_add
หรือ sysctl
เพื่อให้ทำงานได้อย่างถูกต้อง สิ่งนี้ไม่ได้ถูกนำมาใช้อย่างถูกต้องใน Portainer บางเวอร์ชัน ดังนั้นอิมเมจนี้อาจไม่ทำงานหากใช้งานผ่าน Portainer
คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมจากไฟล์ได้โดยใช้คำนำหน้าพิเศษ FILE__
เป็นตัวอย่าง:
-e FILE__MYVAR=/run/secrets/mysecretvariable
จะตั้งค่าตัวแปรสภาพแวดล้อม MYVAR
ตามเนื้อหาของไฟล์ /run/secrets/mysecretvariable
สำหรับอิมเมจทั้งหมดของเรา เรามีความสามารถในการแทนที่การตั้งค่า umask เริ่มต้นสำหรับบริการที่เริ่มต้นภายในคอนเทนเนอร์โดยใช้การตั้งค่าเสริม -e UMASK=022
โปรดทราบว่า umask ไม่ใช่ chmod ซึ่งจะลบออกจากการอนุญาตตามมูลค่าที่มันไม่ได้เพิ่ม โปรดอ่านที่นี่ก่อนที่จะขอความช่วยเหลือ
เมื่อใช้โวลุ่ม (แฟล็ก -v
) ปัญหาการอนุญาตอาจเกิดขึ้นระหว่างระบบปฏิบัติการโฮสต์และคอนเทนเนอร์ เราจะหลีกเลี่ยงปัญหานี้โดยอนุญาตให้คุณระบุ PUID
ของผู้ใช้และกลุ่ม PGID
ตรวจสอบให้แน่ใจว่าไดเร็กทอรีโวลุ่มใด ๆ บนโฮสต์เป็นของผู้ใช้คนเดียวกันกับที่คุณระบุ และปัญหาการอนุญาตใด ๆ จะหายไปอย่างมหัศจรรย์
ในกรณีนี้ PUID=1000
และ PGID=1000
เพื่อค้นหาของคุณให้ใช้ id your_user
ดังต่อไปนี้:
id your_user
ตัวอย่างผลลัพธ์:
uid=1000(your_user) gid=1000(your_user) groups=1000(your_user)
เราเผยแพร่ Docker Mods ต่างๆ เพื่อเปิดใช้งานฟังก์ชันเพิ่มเติมภายในคอนเทนเนอร์ รายชื่อม็อดที่มีให้สำหรับภาพนี้ (ถ้ามี) รวมถึงม็อดสากลที่สามารถนำไปใช้กับภาพใดๆ ของเราได้ สามารถเข้าถึงได้ผ่านป้ายสถานะแบบไดนามิกด้านบน
การเข้าถึงเชลล์ในขณะที่คอนเทนเนอร์กำลังทำงาน:
docker exec -it swag /bin/bash
วิธีตรวจสอบบันทึกของคอนเทนเนอร์แบบเรียลไทม์:
docker logs -f swag
หมายเลขเวอร์ชันคอนเทนเนอร์:
docker inspect -f ' {{ index .Config.Labels "build_version" }} ' swag
หมายเลขเวอร์ชันรูปภาพ:
docker inspect -f ' {{ index .Config.Labels "build_version" }} ' lscr.io/linuxserver/swag:latest
รูปภาพส่วนใหญ่ของเราเป็นแบบคงที่ มีเวอร์ชัน และต้องมีการอัปเดตรูปภาพและการสร้างคอนเทนเนอร์ใหม่เพื่ออัปเดตแอปภายใน ด้วยข้อยกเว้นบางประการ (ระบุไว้ใน readme.md ที่เกี่ยวข้อง) เราไม่แนะนำหรือสนับสนุนการอัปเดตแอปภายในคอนเทนเนอร์ โปรดดูส่วนการตั้งค่าแอปพลิเคชันด้านบนเพื่อดูว่าแนะนำสำหรับรูปภาพหรือไม่
ด้านล่างนี้เป็นคำแนะนำในการอัพเดตคอนเทนเนอร์:
อัปเดตรูปภาพ:
ภาพทั้งหมด:
docker-compose pull
ภาพเดียว:
docker-compose pull swag
อัปเดตคอนเทนเนอร์:
ภาชนะทั้งหมด:
docker-compose up -d
ภาชนะเดียว:
docker-compose up -d swag
คุณยังสามารถลบภาพที่ห้อยต่องแต่งเก่าออกได้:
docker image prune
อัพเดตรูปภาพ:
docker pull lscr.io/linuxserver/swag:latest
หยุดคอนเทนเนอร์ที่ทำงานอยู่:
docker stop swag
ลบคอนเทนเนอร์:
docker rm swag
สร้างคอนเทนเนอร์ใหม่ด้วยพารามิเตอร์การเรียกใช้นักเทียบท่าเดียวกันกับคำแนะนำด้านบน (หากแมปอย่างถูกต้องกับโฟลเดอร์โฮสต์ โฟลเดอร์ /config
ของคุณและการตั้งค่าจะยังคงอยู่)
คุณยังสามารถลบภาพที่ห้อยต่องแต่งเก่าออกได้:
docker image prune
เคล็ดลับ
เราขอแนะนำ Diun สำหรับการแจ้งเตือนการอัปเดต ไม่แนะนำหรือรองรับเครื่องมืออื่นๆ ที่อัปเดตคอนเทนเนอร์โดยอัตโนมัติโดยไม่ต้องดูแล
หากคุณต้องการแก้ไขรูปภาพเหล่านี้ในเครื่องเพื่อวัตถุประสงค์ในการพัฒนาหรือเพียงเพื่อปรับแต่งตรรกะ:
git clone https://github.com/linuxserver/docker-swag.git
cd docker-swag
docker build
--no-cache
--pull
-t lscr.io/linuxserver/swag:latest .
ตัวแปร ARM สามารถสร้างได้บนฮาร์ดแวร์ x86_64 และในทางกลับกันโดยใช้ lscr.io/linuxserver/qemu-static
docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
เมื่อลงทะเบียนแล้วคุณสามารถกำหนด dockerfile เพื่อใช้กับ -f Dockerfile.aarch64
ได้
priv-fullchain-bundle.pem
ที่สร้างขึ้นcertbot-dns-dynudns
stream.conf
ภายในคอนเทนเนอร์เพื่อให้ผู้ใช้สามารถรวมบล็อกของตนเองใน nginx.conf
google-domains
STAGING=true
และความล้มเหลวในการเพิกถอนssl.conf
SUBDOMAINS
var ว่าเป็นทางเลือกresolver.conf
และแพทช์สำหรับ CVE-2021-32637
dhparams.pem
ต่อ RFC7919 เพิ่ม worker_processes.conf
ซึ่งกำหนดจำนวนคนทำงาน nginx และ resolver.conf
ซึ่งตั้งค่าตัวแก้ไข DNS ไฟล์ conf ทั้งสองไฟล์สร้างขึ้นอัตโนมัติเฉพาะในการเริ่มต้นครั้งแรกเท่านั้น และผู้ใช้สามารถแก้ไขได้ในภายหลังCERTPROVIDER
env var อัปเดตปลั๊กอิน aliyun, Domeneshop, inwx และ transip DNS ด้วยชื่อปลั๊กอินใหม่ ซ่อน donoteditthisfile.conf
เนื่องจากผู้ใช้กำลังแก้ไขมันแม้จะมีชื่อก็ตาม ระงับข้อผิดพลาดที่ไม่เป็นอันตรายเมื่อไม่ได้เปิดใช้งานพร็อกซี confs