- การติดตั้งนี้ใช้ Docker Compose, ผู้ใช้ภายในเครื่อง และพื้นที่จัดเก็บข้อมูลผ่าน SQLite
- ข้อมูลลับควรเก็บไว้นอกไฟล์ YAML และจัดเก็บไว้ในรูปแบบไฟล์ที่มีการป้องกัน
- โฟลเดอร์การตั้งค่าจะเก็บรักษาผู้ใช้ ฐานข้อมูล และการแจ้งเตือนไว้ระหว่างการอัปเดต
- SQLite เหมาะสำหรับระบบที่มีอินสแตนซ์เดียว ในขณะที่ PostgreSQL เหมาะสำหรับระบบที่มีความพร้อมใช้งานสูง
หากคุณมีแอปพลิเคชันหลายตัวที่โฮสต์อยู่บนเซิร์ฟเวอร์เดียวกัน การจัดการการเข้าสู่ระบบแต่ละครั้งแยกกันอาจกลายเป็นเรื่องยุ่งยากมาก นอกจากนี้ การเปิดเผยแดชบอร์ดภายในที่ได้รับการป้องกันด้วยรหัสผ่านเพียงอย่างเดียว จะเพิ่มความเสี่ยงที่บุคคลอื่นจะเข้าถึงได้ผ่านข้อมูลประจำตัวที่รั่วไหลหรือการโจมตีอัตโนมัติ
วิธีหนึ่งในการเสริมสร้างโครงสร้างพื้นฐานนี้คือ ติดตั้ง Authelia ด้วย Dockerแพลตฟอร์มโอเพนซอร์สนี้ทำหน้าที่เป็นเกตเวย์การตรวจสอบสิทธิ์แบบรวมศูนย์ และช่วยให้คุณสามารถเพิ่มการเข้าสู่ระบบครั้งเดียว (Single Sign-On), นโยบายการเข้าถึง และการตรวจสอบสิทธิ์แบบหลายปัจจัย (Multi-Factor Authentication) ให้กับแอปพลิเคชันที่อยู่เบื้องหลังพร็อกซีแบบย้อนกลับได้
ในคู่มือนี้ เราจะทำการติดตั้งระบบอย่างง่ายสำหรับเซิร์ฟเวอร์เครื่องเดียว โดยใช้ Docker Compose, ข้อมูลผู้ใช้ที่จัดเก็บไว้ในไฟล์ และฐานข้อมูล SQLiteการตั้งค่าพร็อกซีขั้นสูง กฎเกณฑ์ และการตรวจสอบสิทธิ์แบบสองขั้นตอน จะได้รับการอธิบายแยกต่างหาก เพื่อหลีกเลี่ยงการผสมผสานวัตถุประสงค์ที่แตกต่างกัน
สิ่งที่คุณต้องใช้ในการติดตั้ง Authelia ด้วย Docker

ก่อนเริ่มต้น คุณต้องมีเซิร์ฟเวอร์ Linux ที่มี Docker Engine และปลั๊กอิน Docker Compose ติดตั้งเสร็จแล้ว คุณยังต้องมีสิทธิ์ในการสร้างโฟลเดอร์ เครือข่าย และคอนเทนเนอร์ด้วย
เพื่อให้พอร์ทัลการตรวจสอบสิทธิ์ทำงานได้อย่างถูกต้องในเบราว์เซอร์ของคุณ คุณจะต้องมีสิ่งต่อไปนี้:
- Un โดเมนหรือโดเมนย่อยที่ถูกต้อง, เช่น
auth.ejemplo.com. - โปรแกรมพร็อกซีแบบย้อนกลับ เช่น Nginx Proxy Manager, Traefik, Caddy หรือ Nginx
- จำเป็นต้องมีใบรับรอง TLS ที่ถูกต้องเพื่อเข้าถึงผ่าน HTTPS.
- เครือข่าย Docker ที่ใช้งานร่วมกันระหว่าง Authelia และพร็อกซีแบบย้อนกลับ
Authelia สามารถสื่อสารกับพร็อกซีผ่าน HTTP ภายในเครือข่ายส่วนตัวของ Docker ได้ จำเป็นต้องใช้การเข้ารหัส HTTPS กับการเชื่อมต่อที่เข้าถึงพร็อกซีจากเบราว์เซอร์ ดังนั้น ไม่จำเป็นต้องตั้งค่า TLS ภายในคอนเทนเนอร์เอง.
คู่มือนี้ใช้ SQLite เนื่องจากเป็นตัวเลือกที่เหมาะสมสำหรับอินสแตนซ์เดียว หากคุณต้องการสำเนาหลายชุดหรือความพร้อมใช้งานสูง คุณควรใช้ PostgreSQL หรือ MySQL และกำหนดค่า Redis เป็นที่เก็บข้อมูลเซสชันที่ใช้ร่วมกัน
วิธีการเตรียมโฟลเดอร์ Docker และเครือข่าย
เริ่มต้นด้วยการสร้างโฟลเดอร์เฉพาะเพื่อป้องกันไม่ให้การตั้งค่าปะปนกับคอนเทนเนอร์อื่นๆ:
mkdir -p authelia/config authelia/secrets
cd authelia
ขั้นตอนต่อไป ให้สร้างเครือข่ายภายนอกที่จะใช้พร็อกซีแบบย้อนกลับด้วยเช่นกัน:
docker network create proxy
คุณต้องรันคำสั่งนี้เพียงครั้งเดียวเท่านั้น หากเครือข่ายมีอยู่แล้ว Docker จะแสดงการแจ้งเตือน และคุณสามารถดำเนินการติดตั้งต่อได้
โครงสร้างสุดท้ายจะมีลักษณะคล้ายกับนี้:
authelia/
├── docker-compose.yml
├── .env
├── config/
│ ├── configuration.yml
│ └── users_database.yml
└── secrets/
├── JWT_SECRET
├── SESSION_SECRET
└── STORAGE_ENCRYPTION_KEY
ปริมาณ config ระบบจะจัดเก็บการตั้งค่า ผู้ใช้ และฐานข้อมูล SQLite ด้วยคุณสมบัติการจัดเก็บข้อมูลแบบถาวรนี้ ข้อมูลจะไม่หายไปเมื่อสร้างคอนเทนเนอร์ใหม่หรืออัปเดตคอนเทนเนอร์.
วิธีสร้างความลับของออเทเลีย
Authelia ต้องการสตริงแบบสุ่มหลายชุดเพื่อปกป้องเซสชัน พื้นที่จัดเก็บ และกระบวนการกู้คืนรหัสผ่าน คุณสามารถสร้างสตริงเหล่านี้ได้ด้วย OpenSSL:
openssl rand -hex 64 > secrets/JWT_SECRET
openssl rand -hex 64 > secrets/SESSION_SECRET
openssl rand -hex 64 > secrets/STORAGE_ENCRYPTION_KEY
chmod 600 secrets/*
ไม่ควรเขียนค่าเหล่านี้ลงไปโดยตรง configuration.ymlเราจะติดตั้งไฟล์เหล่านั้นเป็นไฟล์อ่านอย่างเดียว และใช้ตัวแปรที่ลงท้ายด้วย _FILE เพื่อให้ออเทเลียสามารถอ่านได้
เป็นสิ่งสำคัญ ห้ามกำหนดความลับเดียวกันโดยใช้สองวิธีที่แตกต่างกันหากค่าปรากฏพร้อมกันทั้งในไฟล์ YAML และในตัวแปร _FILEAuthelia จะหยุดกระบวนการบูตเพื่อหลีกเลี่ยงการตั้งค่าที่ไม่ชัดเจน
วิธีการสร้างไฟล์ Docker Compose สำหรับ Authelia
ขั้นแรก ตรวจสอบชื่อผู้ใช้และกลุ่มของคุณ:
id -u
id -g
สร้างไฟล์ .env และแทนที่ตัวเลขหากรหัสประจำตัวของคุณแตกต่างกัน:
AUTHELIA_UID=1000
AUTHELIA_GID=1000
TZ=Europe/Madrid
ขั้นตอนต่อไปคือการสร้างไฟล์ docker-compose.yml:
services:
authelia:
image: docker.io/authelia/authelia:latest
container_name: authelia
restart: unless-stopped
user: "${AUTHELIA_UID}:${AUTHELIA_GID}"
environment:
TZ: "${TZ}"
AUTHELIA_IDENTITY_VALIDATION_RESET_PASSWORD_JWT_SECRET_FILE: /secrets/JWT_SECRET
AUTHELIA_SESSION_SECRET_FILE: /secrets/SESSION_SECRET
AUTHELIA_STORAGE_ENCRYPTION_KEY_FILE: /secrets/STORAGE_ENCRYPTION_KEY
volumes:
- ./config:/config
- ./secrets:/secrets:ro
networks:
- proxy
expose:
- "9091"
ports:
- "127.0.0.1:9091:9091"
networks:
proxy:
external: true
พอร์ต 9091 เชื่อมต่อกับเพียงพอร์ตเดียวเท่านั้น 127.0.0.1ดังนั้น ระบบจะไม่เปิดเผยข้อมูลสู่ภายนอกโดยตรงทางอินเทอร์เน็ตหรือเครือข่ายภายในอื่นๆ พร็อกซีจะสามารถสื่อสารกับบริการได้โดยใช้ที่อยู่ภายใน http://authelia:9091.
เมื่อคุณทำการผสานรวมเข้ากับพร็อกซีเสร็จเรียบร้อยแล้ว คุณสามารถลบส่วนนั้นออกได้อย่างสมบูรณ์ portsคำสั่ง expose วิธีนี้ก็เพียงพอแล้ว ตราบใดที่คอนเทนเนอร์ทั้งสองใช้เครือข่ายร่วมกัน proxy.
สำหรับสภาพแวดล้อมการผลิต คุณสามารถเปลี่ยนได้เช่นกัน latest โดย a เวอร์ชันเสถียรเฉพาะเพื่อหลีกเลี่ยงการอัปเดตที่ไม่คาดคิดเมื่อดาวน์โหลดรูปภาพอีกครั้ง
วิธีเตรียมการตั้งค่า Authelia ขั้นต่ำ
สร้างไฟล์ config/configuration.yml ด้วยเนื้อหาต่อไปนี้ แทนที่ ejemplo.com สำหรับโดเมนของคุณ:
theme: auto
server:
address: "tcp://:9091/"
log:
level: info
authentication_backend:
file:
path: /config/users_database.yml
watch: false
password:
algorithm: argon2
access_control:
default_policy: deny
session:
cookies:
- domain: ejemplo.com
authelia_url: https://auth.ejemplo.com
default_redirection_url: https://ejemplo.com
storage:
local:
path: /config/db.sqlite3
notifier:
filesystem:
filename: /config/notification.txt
นโยบายเริ่มต้น deny ระบบจะปิดแอปพลิเคชันทั้งหมดจนกว่าคุณจะเพิ่มกฎที่กำหนดไว้อย่างชัดเจน ซึ่งเป็นไปตามหลักการดังต่อไปนี้ หลักการปฏิเสธโดยปริยาย และลดความเสี่ยงที่จะทำให้บริการไม่สามารถเข้าถึงได้เนื่องจากความประมาทเลินเล่อ
ระบบแจ้งเตือนแบบไฟล์มีประโยชน์ในระหว่างการทดสอบ เนื่องจากจะบันทึกลิงก์การลงทะเบียนและการกู้คืนลงในไฟล์ notification.txtอย่างไรก็ตาม สำหรับการใช้งานขั้นสุดท้าย คุณควรตั้งค่า SMTP เนื่องจาก ระบบแจ้งเตือนแบบไฟล์ไม่เหมาะสำหรับการใช้งานจริง.
ควรเพิ่มกฎเกณฑ์เฉพาะในภายหลัง โดยปฏิบัติตามคู่มือที่กำหนดไว้ กำหนดค่ากฎการเข้าถึงใน Authelia โดยไม่ทำให้การติดตั้งนี้กลายเป็นบทความที่ยาวเกินไป
วิธีสร้างผู้ใช้ Authelia คนแรก
รหัสผ่านของระบบจัดการไฟล์ต้องถูกจัดเก็บโดยใช้แฮชที่ปลอดภัย โปรดเรียกใช้ตัวสร้างรหัสผ่านที่รวมอยู่ในอิมเมจอย่างเป็นทางการ:
docker run --rm -it docker.io/authelia/authelia:latest authelia crypto hash generate argon2
ป้อนรหัสผ่านเมื่อคำสั่งถาม บรรทัดที่มีชื่อว่า "password" จะปรากฏในผลลัพธ์ Digestคัดลอกเฉพาะแฮชที่ขึ้นต้นด้วย $argon2id$โดยไม่รวมคำนั้น Digest:.
จากนั้น สร้าง config/users_database.yml:
users:
maria:
disabled: false
displayname: "María"
password: "$argon2id$v=19$m=65536,t=3,p=4$SUSTITUYE_ESTE_VALOR"
email: "[email protected]"
groups:
- "admins"
ป้องกันไฟล์เพื่อป้องกันไม่ให้ผู้ใช้รายอื่นบนเซิร์ฟเวอร์อ่านไฟล์นั้น:
chmod 600 config/users_database.yml
ถึงแม้ไฟล์ดังกล่าวจะไม่มีรหัสผ่านต้นฉบับ แต่ค่าแฮชก็ยังคงเป็นข้อมูลที่ละเอียดอ่อนอยู่ดี ไม่ควรเผยแพร่ในแหล่งเก็บข้อมูลหรือแบ่งปันโดยไม่จำเป็น.
วิธีตรวจสอบและเริ่มต้นใช้งาน Authelia
ก่อนเริ่มใช้งานคอนเทนเนอร์ โปรดตรวจสอบโครงสร้างของไฟล์ Compose ก่อน:
docker compose config
ขั้นตอนต่อไป ใช้เครื่องมือตรวจสอบความถูกต้องของ Authelia เพื่อตรวจหาคุณสมบัติที่ไม่รู้จัก ข้อผิดพลาดทางไวยากรณ์ หรือการกำหนดค่าที่ไม่เข้ากัน:
docker compose run --rm authelia authelia config validate --config /config/configuration.yml
หากการตรวจสอบความถูกต้องเสร็จสมบูรณ์โดยไม่มีปัญหา ให้เริ่มให้บริการ:
docker compose up -d
ตรวจสอบสถานะและดูบันทึกต่างๆ:
docker compose ps
docker compose logs -f authelia
คอนเทนเนอร์ควรแสดงสถานะว่าเริ่มต้นทำงานแล้ว และหลังจากตรวจสอบภายในเสร็จสิ้น ควรแสดงสถานะว่าทำงานได้ปกติ หากคอนเทนเนอร์เข้าสู่สถานะรีบูตอย่างต่อเนื่อง บันทึกการทำงานมักจะระบุว่าคีย์ ไฟล์ หรือสิทธิ์ใดที่ทำให้เกิดความล้มเหลว
วิธีตรวจสอบว่า Authelia ทำงานได้หรือไม่
ก่อนทำการกำหนดค่าแอปพลิเคชันใดๆ โปรดตรวจสอบให้แน่ใจว่าคอนเทนเนอร์ตอบสนองในเครื่องบนพอร์ต 9091 และพร็อกซีสามารถระบุชื่อได้ authelia ภายในเครือข่ายที่ใช้ร่วมกัน
โดยปกติแล้วควรเข้าถึงผ่าน URL เช่น:
https://auth.ejemplo.com
โดเมนย่อยต้องชี้ไปยังรีเวิร์สพร็อกซีและมีใบรับรองที่ถูกต้อง Authelia ต้องการ URL แบบ HTTPS และโดเมนที่เบราว์เซอร์ยอมรับเพื่อสร้างคุกกี้เซสชันได้อย่างถูกต้อง ไม่สามารถใช้ localhost เป็นโดเมนสุดท้ายสำหรับพอร์ทัลได้.
เมื่อหน้าจอเข้าสู่ระบบปรากฏขึ้น ให้เข้าสู่ระบบด้วยผู้ใช้ที่คุณสร้างไว้ก่อนหน้านี้ การลงทะเบียน TOTP, WebAuthn หรือปัจจัยอื่นๆ จะขึ้นอยู่กับนโยบายที่คุณกำหนดค่าในภายหลังและระบบแจ้งเตือนที่คุณเลือก
จากตรงนี้คุณสามารถ ปกป้องแอปพลิเคชันด้วย Autheliaเชื่อมต่อกับรีเวิร์สพร็อกซีหรือ ตั้งค่า OpenID Connect ใน Authelia สำหรับแอปพลิเคชันที่สอดคล้องกับมาตรฐาน OIDC
วิธีการอัปเดต Authelia ด้วย Docker Compose
ก่อนทำการอัปเดต โปรดคัดลอกโฟลเดอร์เหล่านั้นก่อน config y secretsหากคุณใช้ SQLite วิธีที่ปลอดภัยที่สุดคือการหยุดคอนเทนเนอร์ชั่วคราวก่อนคัดลอกฐานข้อมูล:
docker compose stop authelia
cp -a config "config-backup-$(date +%F-%H%M)"
cp -a secrets "secrets-backup-$(date +%F-%H%M)"
ขั้นตอนต่อไป ดาวน์โหลดอิมเมจและสร้างบริการขึ้นใหม่:
docker compose pull
docker compose up -d
สุดท้ายนี้ โปรดตรวจสอบบันทึกเพื่อยืนยันว่าการย้ายข้อมูลและการตรวจสอบเสร็จสมบูรณ์เรียบร้อยแล้ว:
docker compose logs --tail=100 authelia
ก่อนอัปเกรดระหว่างเวอร์ชันหลัก ขอแนะนำให้ตรวจสอบบันทึกการเปลี่ยนแปลงก่อน ห้ามลบไดรฟ์กำหนดค่าในระหว่างกระบวนการอัปเกรด เนื่องจากมีข้อมูลสำคัญอยู่ภายใน ฐานข้อมูล ผู้ใช้ และการตั้งค่าถาวร.
ข้อผิดพลาดที่พบบ่อยเมื่อติดตั้ง Authelia ด้วย Docker
หนึ่งในข้อผิดพลาดที่พบบ่อยที่สุดคือเครือข่ายภายนอกไม่มีอยู่จริง หาก Docker แสดงข้อความดังกล่าว network proxy declared as external, but could not be foundสร้างด้วย:
docker network create proxy
หากเกิดข้อผิดพลาดเกี่ยวกับสิทธิ์การเข้าถึง /config o /secretsตรวจสอบว่าตัวระบุที่รวมอยู่ในนั้นถูกต้อง .env ตรวจสอบให้แน่ใจว่าการเป็นเจ้าของโฟลเดอร์ตรงกัน คุณสามารถตรวจสอบได้โดยใช้ id -u e id -g.
ปัญหาที่พบได้บ่อยอีกอย่างหนึ่งคือ กำหนดความลับสองครั้งเมื่อคุณใช้ตัวแปรแบบนี้ AUTHELIA_SESSION_SECRET_FILEคุณไม่ควรใส่ค่าเดียวกันซ้ำกันภายใน configuration.yml.
หาก Authelia ไม่ยอมรับรหัสผ่าน โปรดตรวจสอบไฟล์ users_database.yml. สนาม password จะต้องมีเฉพาะแฮชที่สมบูรณ์ซึ่งขึ้นต้นด้วย $argon2id$ห้ามรวม Digest: และอย่าตัดโซ่เป็นหลายเส้น
เมื่อคอนเทนเนอร์ทำงานได้ แต่พอร์ทัลไม่โหลด โปรดจำไว้ว่า expose มันไม่ได้ประกาศพอร์ตบนโฮสต์ พร็อกซีต้องเชื่อมต่ออยู่ในเครือข่ายเดียวกันและใช้งาน authelia โดยใช้ชื่อเซิร์ฟเวอร์เป็นชื่ออ้างอิง การเปลี่ยนเส้นทาง ส่วนหัว หรือข้อผิดพลาดในการตรวจสอบสิทธิ์ที่เกิดขึ้นภายหลังนั้นเกี่ยวข้องกับการกำหนดค่าพร็อกซี ไม่ใช่การติดตั้งคอนเทนเนอร์
สุดท้ายนี้ หากคุณใช้ SQLite อย่าพยายามเรียกใช้ Authelia หลายๆ ตัวพร้อมกันในไฟล์เดียวกัน สำหรับการใช้งานแบบกระจาย คุณจำเป็นต้อง... ฐานข้อมูลภายนอกและผู้ให้บริการเซสชันที่ใช้ร่วมกัน.
การติดตั้ง Authelia ด้วย Docker Compose ช่วยให้คุณสร้างรากฐานที่มั่นคงสำหรับการรวมศูนย์การตรวจสอบสิทธิ์โดยไม่ต้องเปิดเผยพอร์ตโดยตรง ด้วยการแยกการกำหนดค่า ข้อมูลลับ และข้อมูลถาวร บริการจึงสามารถอัปเดตได้อย่างเป็นระบบ และสามารถขยายเพิ่มเติมได้ในภายหลังด้วยพร็อกซีแบบย้อนกลับ กฎการเข้าถึง การตรวจสอบสิทธิ์แบบหลายปัจจัย หรือ OpenID Connect
ฉันเป็นผู้ชื่นชอบเทคโนโลยีที่เปลี่ยนความสนใจ "เกินบรรยาย" ของเขาให้กลายเป็นอาชีพ ฉันใช้เวลามากกว่า 10 ปีในชีวิตไปกับเทคโนโลยีล้ำสมัยและปรับแต่งโปรแกรมทุกประเภทด้วยความอยากรู้อยากเห็น ตอนนี้ฉันมีความเชี่ยวชาญในด้านเทคโนโลยีคอมพิวเตอร์และวิดีโอเกม เนื่องจากเป็นเวลากว่า 5 ปีแล้วที่ฉันเขียนให้กับเว็บไซต์ต่างๆ เกี่ยวกับเทคโนโลยีและวิดีโอเกม โดยสร้างบทความที่พยายามให้ข้อมูลที่คุณต้องการในภาษาที่ทุกคนเข้าใจได้
หากคุณมีคำถามใดๆ ความรู้ของฉันมีตั้งแต่ทุกอย่างที่เกี่ยวข้องกับระบบปฏิบัติการ Windows รวมถึง Android สำหรับโทรศัพท์มือถือ และความมุ่งมั่นของฉันคือคุณ ฉันยินดีสละเวลาสักครู่เสมอและช่วยคุณแก้ไขคำถามใดๆ ที่คุณอาจมีในโลกอินเทอร์เน็ตนี้