Traefik reverse proxy Docker Compose ஒரே IP 5 செயலிகள்
Traefik v3 மற்றும் Docker Compose உடன் ஒரே IP-யில் 5 செயலிகளை இயக்கும் முறை. Host rule routing, Let's Encrypt TLS, acme.json permission trap காரணமாக startup தோல்வி அடைவதை தவிர்க்கவும்.
ஒரே IP, ஐந்து செயலிகள், ஒரே port 443
உங்கள் VPS-க்கு ஒரே ஒரு public IPv4 முகவரி மற்றும் ஒரே ஒரு TCP port 443 உள்ளது. அதில் நீங்கள் Gitea, உங்கள் செயலியின் ஒரு staging நகல், ஒரு உள்கட்டமைப்பு dashboard, ஒரு status page மற்றும் ஒரு webhook receiver ஆகியவற்றை இயக்க விரும்புகிறீர்கள் — ஐந்து hostnames, ஒரே சேவைப் பெட்டி. Reverse proxy என்பது :80 மற்றும் :443-ஐ கட்டுப்பாட்டில் வைத்திருக்கும் செயல்முறை. ஒவ்வொரு request-லும் உள்ள Host header-ஐ படித்து, அதை சரியான container-க்கு அனுப்புகிறது. Traefik இந்த வேலையைச் செய்கிறது. கூடுதலாக, நீங்கள் கைமுறையாக certbot ஐ இயக்காமலே ஒவ்வொரு hostname-க்கும் சான்றிதழை (certificate) பெற்று புதுப்பிக்கிறது.
Traefik-ஐ nginx-ன் server {} block-இலிருந்து வேறுபடுத்துவது அதன் உள்ளமைவு (configuration) எங்கிருந்து வருகிறது என்பதுதான். nginx-ல் நீங்கள் ஒரு கோப்பைத் திருத்தி reload செய்கிறீர்கள். சான்றிதழ் புதுப்பித்தல் தனியாக ஒரு பணியாகவே இருக்கும். இதுதான் நீங்கள் nginx-ல் Let's Encrypt சான்றிதழ்களை certbot மூலம் பெறும்போது பின்பற்றும் வழிமுறை; அங்கே renewal timer முழுக்க முழுக்க web server-க்கு வெளியே இயங்குகிறது. Traefik-ன் Docker provider ஆனது Docker event stream-ஐ கவனித்து, உங்கள் container-களில் உள்ள labels-ஐ படிக்கிறது. ஒரு Host() rule label கொண்ட container-ஐ தொடங்கினால், ஒரு விநாடிக்குள் அது route செய்யக்கூடியதாக மாறுகிறது. நிறுத்தினால், route மறைந்துவிடுகிறது. இதுதான் உள்ள சிக்கலும் கூட. Label-களில் வைக்கப்படும் உள்ளமைவு ஒரே நேரத்தில் ஐந்து இடங்களில் இருக்கும். ஒரு label தவறாக இருந்தால், அது அமைதியாக இருக்கும் — container route செய்யப்படுவதில்லை, மேலும் Traefik எதையும் சொல்லாது.
நான்கு பெயர்ச்சொற்கள்
- Entrypoints என்பவை கவனிக்கும் சாக்கெட்டுகள். நீங்கள் இரண்டை வரையறுப்பீர்கள்:
:80இல்webமற்றும்:443இல்websecure. - Routers ஒரு கோரிக்கையை (
Host(...)) பொருத்தி அதை ஒரு service உடன் இணைக்கின்றன. சான்றிதழ்கள் ஒவ்வொரு router க்கும்tls.certresolverவழியாக கோரப்படுகின்றன. - Services என்பவை backend ஆகும் — ஒரு container மற்றும் அது Docker network க்குள் கவனிக்கும் port.
- Middlewares router மற்றும் service இக்கு இடையில் அமைகின்றன: basic auth, IP allow-lists, header rewrites, redirects.
நிலையான உள்ளமைப்பு (entrypoints, providers, ACME) Traefik இன் command line இல் அல்லது traefik.yml இல் அனுப்பப்படுகிறது. இதை மாற்றினால் Traefik ஐ மறுதொடக்கம் செய்ய வேண்டும். மாறும் உள்ளமைப்பு (routers, services, middlewares) container labels இலிருந்து வருகிறது. இது hot-reload ஆகும். இவ்விரண்டையும் குழப்பிக்கொள்வதே "எனது flag எதையும் செய்யவில்லை" என்ற பிரச்சினையின் வழக்கத்தான காரணம்.
compose கோப்பு
proxy எனப் பெயரிடப்பட்ட ஒரு பகிரப்பட்ட Docker நெட்வொர்க் முதுகெலும்பாக இருக்கிறது. Traefik ஒரு கொள்கலனை அடைவது, இரண்டும் அதில் இருந்தால் மட்டுமே.
name: edge
networks:
proxy:
name: proxy
services:
traefik:
image: traefik:v3.5
restart: unless-stopped
command:
- --providers.docker=true
- --providers.docker.exposedByDefault=false
- --providers.docker.network=proxy
- --entryPoints.web.address=:80
- --entryPoints.websecure.address=:443
- --entryPoints.web.http.redirections.entryPoint.to=websecure
- --entryPoints.web.http.redirections.entryPoint.scheme=https
- --certificatesresolvers.le.acme.email=you@example.com
- --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
- --certificatesresolvers.le.acme.tlschallenge=true
# while you iterate, point at staging so a mistake costs nothing:
# - --certificatesresolvers.le.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
- --api.dashboard=true
- --log.level=INFO
- --accesslog=true
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
networks:
- proxy
labels:
- traefik.enable=true
- traefik.http.routers.dashboard.rule=Host(`traefik.example.com`)
- traefik.http.routers.dashboard.entrypoints=websecure
- traefik.http.routers.dashboard.tls.certresolver=le
- traefik.http.routers.dashboard.service=api@internal
- traefik.http.routers.dashboard.middlewares=dashboard-auth
- traefik.http.middlewares.dashboard-auth.basicauth.users=admin:$$apr1$$REPLACE$$THIS
gitea:
image: gitea/gitea:1 # major-only pin keeps this demo copy-pasteable; pin an exact release in production
restart: unless-stopped
volumes:
- ./gitea:/data
networks:
- proxy
labels:
- traefik.enable=true
- traefik.http.routers.gitea.rule=Host(`git.example.com`)
- traefik.http.routers.gitea.entrypoints=websecure
- traefik.http.routers.gitea.tls.certresolver=le
- traefik.http.services.gitea.loadbalancer.server.port=3000docker compose up -d, பிறகு docker compose logs -f traefik. ஒவ்வொரு கூடுதல் செயலியும் gitea தொகுதியின் நகல் ஆகும். அதற்கு சொந்த ரூட்டர் பெயர், சொந்த Host() மற்றும் சொந்த உள் போர்ட் இருக்கும். ஒரு TLS மற்றும் காப்புப்பிரதிகளுடன் Docker-இல் இயங்கும் Nextcloud நிறுவல் அதே வகையில் பொருந்தும் — அதன் வெளியிடப்பட்ட போர்ட்களை நீக்கவும், அதை proxy-க்கு இணைக்கவும், மேலும் ரூட்டர் லேபிள்கள் ஹோஸ்ட்பெயர் மற்றும் சான்றிதழை கையாளட்டும்.
அங்கே ஐந்து விவரங்கள் முக்கியத்துவம் வாய்ந்தவை.
exposedByDefault=false ஒரு கொள்கலனை Traefik-க்கு கண்ணுக்குத் தெரியாததாக ஆக்குகிறது. அது traefik.enable=true கொண்டிருக்கும் வரை இந்த நிலை தொடரும். இதை விட்டுவிட்டால், நீங்கள் தொடங்கும் ஒவ்வொரு கொள்கலனுக்கும் — ஏதாவது சரிபார்க்க இயக்கிய தற்காலிக postgres உட்பட — ஒரு ரூட் உருவாக்கப்படுகிறது.
providers.docker.network=proxy ஒரு கொள்கலன் பல நெட்வொர்க்குகளுக்கு இணைக்கப்பட்டிருக்கும்போது Traefik-க்கு எந்த நெட்வொர்க்கைப் பயன்படுத்த வேண்டும் என்று கூறுகிறது. இதை விட்டுவிட்டால், Traefik தவறான கொள்கலன் IP-ஐத் தேர்ந்தெடுக்கலாம். இது 502 பிழையாக வெளிப்படுகிறது. அது ஒரு செயலி பிழையைப் போலத் தோன்றும்.
loadbalancer.server.port=3000 என்பது கொள்கலனுக்குள் இருக்கும் போர்ட் ஆகும். Gitea அங்கே 3000-இல் கேட்கிறது. எந்தச் செயலி கொள்கலனும் ஒரு போர்ட்டையும் வெளியிடுவதில்லை என்பதைக் கவனிக்கவும் — Traefik மட்டுமே வெளியிடுகிறது.
web என்ட்ரிபாயிண்டில் உள்ள redirect, ப்ளெயின்டெக்ஸ்ட் கோரிக்கைகளை HTTPS-க்கு 308 ஆக மாற்றுகிறது. போர்ட் 80 எப்படியும் திறந்தே இருக்கும்: ACME HTTP challenge-க்கு அது தேவைப்படுகிறது. வெறும் ஹோஸ்ட்பெயரைத் தட்டச்சு செய்யும் மனிதர்களுக்கும் அது தேவை.
basic-auth hash-இல் இரட்டையாக உள்ள $$ என்பது Compose escaping ஆகும். அது தட்டச்சுப் பிழை அல்ல. அதை htpasswd -nbB admin 'your-password' (தொகுப்பு apache2-utils) கொண்டு உருவாக்கவும். பிறகு ஒவ்வொரு $-ஐயும் இரட்டிக்கவும்.
சான்றிதழ், மற்றும் acme.json பொறி
tlschallenge=true TLS-ALPN-01 ஐத் தேர்ந்தெடுக்கிறது: Let's Encrypt உங்கள் சேவையகத்துடன் 443 துறையில் இணைகிறது. TLS handshake க்குள் Traefik சவாலுக்கு பதிலளிக்கிறது. மாற்று வழி HTTP-01 ஆகும், அது 80 துறையில் இயங்கும் — Traefik இன் command: பட்டியலில் உள்ள tlschallenge வரியை இந்த இரண்டால் மாற்றவும்:
- --certificatesresolvers.le.acme.httpchallenge=true
- --certificatesresolvers.le.acme.httpchallenge.entrypoint=webஇரண்டும் வேலை செய்யும். இரண்டுக்கும் ஹோஸ்ட்பெயருக்கான பொது DNS ஏற்கனவே உங்கள் VPS ஐ சுட்டியிருக்க வேண்டும் — சான்றிதழ் அதிகாரம் பெயரை resolve செய்து வெளியிலிருந்து இணைக்கிறது. முதலில் A (மற்றும் AAAA) பதிவை உருவாக்கவும், dig +short git.example.com உடன் உறுதிப்படுத்தவும், பிறகு Traefik ஐத் தொடங்கவும்.
இப்போது மக்களுக்கு ஒரு மாலை நேரத்தை வீணாக்கும் பொறி. Traefik தன் ACME கணக்கு key ஐயும் ஒவ்வொரு வழங்கப்பட்ட சான்றிதழையும் ஒரே acme.json இல் சேமிக்கிறது. அந்த கோப்பு group அல்லது world படிக்கக்கூடியதாக இருந்தால், Traefik இதற்கு மிக அருகில் ஒரு வரியை அச்சிட்டு நிறுத்துகிறது:
error: unable to get ACME account: permissions 644 for /letsencrypt/acme.json are too open, please use 600சரியான தீர்வு மேலே உள்ளது: கோப்பகத்தை bind-mount செய்யவும், சரியான mode உடன் Traefik கோப்பைத் தானாகவே உருவாக்கட்டும். நீங்கள் acme.json ஐ touch உடன் உருவாக்கியிருந்தால், உங்கள் umask அதை 644 ஆக்கியுள்ளது. ஹோஸ்டில் அதை சரிசெய்யவும்:
chmod 600 ./letsencrypt/acme.json
docker compose restart traefikஅந்த கோப்பகத்தை உங்கள் app volumes உடன் காப்புப் பிரதி எடுக்கவும். அதை இழப்பது தாங்கிக்கொள்ளக்கூடியதே — சான்றிதழ்கள் மீண்டும் வழங்கப்படும் — ஆனால் ஒரே நேரத்தில் ஐந்து ஹோஸ்ட்பெயர்களை மீண்டும் வழங்குவது உங்களை rate limits க்குள் நுழையச் செய்யும்.
நீங்கள் சோதிக்கும்போது staging CA ஐப் பயன்படுத்தவும். caserver வரியை uncomment செய்யவும், ஒவ்வொரு route ஐயும் வேலை செய்யச் செய்யவும், பிறகு அதை comment செய்து acme.json ஐ நீக்கவும், அப்போது production சான்றிதழ்கள் புதிதாகக் கோரப்படும். Production Let's Encrypt ஒரு வாரத்திற்கு ஒரே ஹோஸ்ட்பெயர் தொகுப்புக்கு ஐந்து நகல் சான்றிதழ்களை மட்டுமே அனுமதிக்கிறது, மேலும் ஒரே பெயருக்கு தொடர்ந்து தோல்வியடைந்த validation களை throttle செய்கிறது. Staging நம்பமுடியாத சான்றிதழ்களை வழங்குகிறது — உங்கள் உலாவி எச்சரிக்கும், அந்த எச்சரிக்கை அது வேலை செய்ததற்கான அறிகுறி — மிகத் தளர்வான வரம்புகளுடன்.
டாஷ்போர்டு ஒரு கட்டுப்பாட்டு இடைமுகம், விளக்கக்காட்சி அல்ல
பெரும்பாலான quickstart-கள் --api.insecure=true ஐ அமைக்கின்றன. இது டாஷ்போர்டை port 8080-இல் அங்கீகாரம் இல்லாமல் வழங்குகிறது. பொது IP கொண்ட சேவையகத்தில் இது உங்கள் ரவுட்டிங் அமைப்பு, hostnames, middleware பெயர்கள் மற்றும் backend ports ஆகியவற்றை ஸ்கேன் செய்யும் எவருக்கும் வெளிப்படுத்துகிறது.
மேலே உள்ள traefik சேவையின் labels இதற்கு மாற்று வழியாகும். டாஷ்போர்டு வேறு எந்த ஆப்பைப் போலவும் ரவுட் செய்யப்படுகிறது. இது உண்மையான hostname-இல், TLS வழியாக, basicauth-க்குப் பின்னால் இயங்குகிறது. service=api@internal தான் ரவுட்டரை Traefik-இன் உள்ளமைந்த API உடன் இணைக்கிறது. IP allow-list ஐச் சேர்ப்பதன் மூலம் இதை மேலும் இறுக்கலாம். இது இடமிருந்து வலமாகச் செயல்படுத்தப்படுகிறது. உங்கள் அலுவலக முகவரி மாறும் தன்மை கொண்டதாக இருந்தால், வரம்பை நீங்களே ஒரே VPS-இல் ஹோஸ்ட் செய்யும் WireGuard VPN-இல் ஒதுக்கப்படும் subnet-ஆக அமைக்கவும். டாஷ்போர்டை டனல் வழியாக மட்டுமே அணுகவும்:
- traefik.http.middlewares.office.ipallowlist.sourcerange=10.0.0.7/32
- traefik.http.routers.dashboard.middlewares=office,dashboard-authDocker socket ஆனது root ஆகும்
/var/run/docker.sock என்பது ஒரு API ஆகும். இது host இலிருந்து / ஐ mount செய்யும் ஒரு container ஐ உருவாக்க முடியும். இதற்கான அணுகல் என்பது கணினியில் root அணுகலுக்கு சமம். Traefik க்கு label களைப் படிக்க இது தேவைப்படுகிறது.
mount இல் :ro ஐ வைத்திருங்கள். ஆனால் இது எதை வழங்குகிறது என்பதைத் தெளிவாக அறிந்து கொள்ளுங்கள்: இது socket file ஐ read-only ஆக மாற்றுகிறது. அதன் வழியாக Docker API க்குச் செல்லும் POST request களை இது நிறுத்தாது. உண்மையான தீர்வு என்னவென்றால், Traefik க்கு socket ஐ ஒருபோதும் கொடுக்கக் கூடாது. அதற்குப் பதிலாக இடையே ஒரு filtering proxy ஐ வைக்க வேண்டும்:
dockerproxy:
image: tecnativa/docker-socket-proxy # pin the current tag
restart: unless-stopped
environment:
CONTAINERS: 1
NETWORKS: 1
POST: 0
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- proxyTraefik இலிருந்து socket volume ஐ நீக்குங்கள். provider ஐ proxy ஐ நோக்கி அமையுங்கள்:
--providers.docker.endpoint=tcp://dockerproxy:2375Traefik ஆனது container கள் மற்றும் network களின் read அணுகலைத் தக்க வைத்துக் கொள்கிறது. எதையும் உருவாக்கும் திறனை இழக்கிறது.
ஃபயர்வால், போர்ட்கள், மற்றும் அனைவரும் தவறாகப் புரிந்துகொள்ளும் விதி
இரண்டு போர்ட்கள் திறந்திருக்கும், அத்துடன் SSH:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enableDocker-ன் வெளியிடப்பட்ட போர்ட்கள் ufw-ஐத் தவிர்க்கின்றன. Docker தனக்கென இருக்கும் iptables விதிகளைச் செருகுகிறது. இவை ufw-ன் செயின்களை விட முன்னதாகவே மதிப்பிடப்படுகின்றன. எனவே, ports: ["3000:3000"] உடன் தொடங்கப்பட்ட ஒரு கன்டெய்னர் ufw deny இருந்தாலும் இணையத்திலிருந்து அணுகக்கூடியதாக இருக்கும். இதற்கான தீர்வு ஃபயர்வால் உள்ளமைவில் இல்லை; அது கட்டமைப்பு ரீதியானது: போர்ட்களை Traefik மூலம் மட்டுமே வெளியிடவும். மற்ற அனைத்து கன்டெய்னர்களுக்கும் networks: [proxy] மட்டுமே கொடுக்கவும், வேறில்லை. ஏதாவது உண்மையிலேயே ஹோஸ்ட்டை அணுக வேண்டுமென்றால், அதை loopback-உடன் பிணைக்கவும் — "127.0.0.1:3000:3000".
பழுதுநீக்கம்: நீங்கள் உண்மையில் காணும் பிழைகள்
404 page not found, Traefik ஆல் வழங்கப்பட்டது. எந்த router பொருந்தவில்லை. நிகழ்வதற்கான வாய்ப்பு வரிசைப்படி: container இல் traefik.enable=true இல்லை (exposedByDefault=false அமைக்கப்பட்டுள்ளது); Host() விதி நீங்கள் தட்டச்சு செய்த பெயருடன் பொருந்தவில்லை; ஒரு label இல் உள்ள router பெயர் மற்றொன்றில் உள்ளதிலிருந்து வேறுபடுகிறது (routers.gitea.rule மற்றும் routers.gitea.entrypoints ஒரே சொல்லாக இருக்க வேண்டும்); அல்லது நீங்கள் hostname ஐ backticks க்கு பதிலாக மேற்கோள் குறிகளுக்குள் மூடிவிட்டீர்கள். Traefik v3 க்கு matchers உள்ளே backticks தேவை.
502 Bad Gateway. ஒரு router பொருந்தியது ஆனால் backend ஐ அடைய முடியவில்லை. ஏறக்குறைய எப்போதும் container ஆனது proxy network இல் இல்லை — docker inspect -f '{{json .NetworkSettings.Networks}}' gitea ஐ சரிபார்க்கவும். மற்றொரு சாத்தியம் தவறான loadbalancer.server.port: நீங்கள் அதற்கு ஒரு published port கொடுத்துள்ளீர்கள், அல்லது app வேறு இடத்தில் கேட்கிறது. பதிவு அந்த முயற்சியைப் பெயரிட்டு காட்டுகிறது: dial tcp 172.18.0.5:8080: connect: connection refused.
உலாவி எச்சரிக்கிறது, மேலும் சான்றிதழ் TRAEFIK DEFAULT CERT க்கு வழங்கப்பட்டுள்ளது. அந்த hostname க்கு சான்றிதழ் எதுவும் இல்லை, எனவே Traefik அதன் self-signed placeholder ஐ வழங்கியது. ACME வரிகளை படிக்கவும்:
unable to obtain ACME certificate for domains "git.example.com" ...
acme: error: 400 ... DNS problem: NXDOMAIN looking up A for git.example.comDNS இன்னும் அந்த பெட்டியை நோக்கி சுட்டவில்லை. பதிவை சரிசெய்யவும், TTL காலத்தை காத்திருக்கவும், Traefik ஐ மறுதொடக்கம் செய்யவும்.
HTTP challenge இல் Invalid response from http://git.example.com/.well-known/acme-challenge/...: port 80 வெளியிலிருந்து Traefik ஐ சென்றடையவில்லை — பொதுவாக இது VPS முன் உள்ள provider-நிலை firewall, ufw அல்ல.
சான்றிதழ்கள் ஒருபோதும் வழங்கப்படுவதில்லை, மேலும் உங்கள் DNS Cloudflare இல் உள்ளது, orange cloud இயக்கத்தில் உள்ளது. Cloudflare அதன் edge இல் TLS ஐ முடிக்கிறது, எனவே TLS-ALPN-01 அதன் வழியாக முடிக்க முடியாது. வழங்கும் போது பதிவை DNS-only ஆக அமைக்கவும், அல்லது API token உடன் DNS-01 challenge க்கு மாறவும். DNS-01 மட்டுமே wildcards வழங்கும் ஒரே challenge ஆகும்.
Redirect loop. Traefik முன் உள்ள ஏதோ ஒன்று ஏற்கனவே TLS ஐ முடித்து வெளிப்படையான உரையை :80 க்கு அனுப்புகிறது; entrypoint redirect அதை மீண்டும் HTTPS க்கு அனுப்புகிறது. இரண்டு redirect களில் ஒன்றை அகற்றவும்.
இயக்கநிலையில் தொடர்வதற்கு
Docker அலகு துவக்கத்தில் இயக்கப்பட வேண்டும் (systemctl is-enabled docker). மறுதுவக்கத்திற்குப் பிறகு restart: unless-stopped அடுக்கை மீண்டும் கொண்டுவரும். நேரடி கட்டுப்பாட்டிற்கு, docker compose -f /srv/edge/compose.yml up -d கட்டளையை RemainAfterExit=yes உடன் இயக்கும் சிறிய systemd அலகு ஒன்று systemctl status edge மற்றும் வரிசைக் கட்டுப்பாட்டைத் தரும்.
Traefik குறியீட்டைப் பொதியுங்கள் (traefik:v3.5, latest ஒருபோதும் இல்லை). v2-இலிருந்து v3 தரமுயர்த்தல் விதி தொடரியல் மற்றும் provider பெயர்களை மாற்றியது. கவனிக்கப்படாத latest அதற்கு இனி புரியாத உள்ளமைவைத் தானாகவே மீளேற்றும். வேண்டுமென்றே தரமுயர்த்தவும்: இடப்பெயர்ப்பு குறிப்புகளைப் படிக்கவும், குறியீட்டை உயர்த்தவும், docker compose up -d traefik, பதிவைக் கவனிக்கவும். நீங்கள் இன்னும் v2 குறியீட்டில் இருந்தால், Traefik v2 இலிருந்து v3 இடப்பெயர்ப்பு வழிகாட்டி ஒவ்வொரு பெயர்மாற்றம், இணக்கப் பயன்முறை, மற்றும் உங்கள் சான்றிதழ்களைத் தக்கவைக்கும் பின்செல் நடவடிக்கை ஆகிய அனைத்தையும் விளக்கும்.
./letsencrypt மற்றும் ஒவ்வொரு செயலின் தரவுத் தொகுதியையும் காப்புப் பிரதி எடுக்கவும். compose கோப்பிலிருந்து மீண்டும் உருவாக்க முடியாத வேறு எந்த நிலையையும் Traefik கொண்டிருக்கவில்லை.
அளவுப்படுத்தும்போது எது பழுதடைகிறது
முதல் தடை செயல்திறன் அல்ல; அது ஒரே சேவையகம் ஆகும். ஒரே VPS-இல் இயங்கும் ஒரு Traefik ஐந்து செயலிகளுக்குமான ஒரே பழுதடைப் புள்ளியாகும். acme.json ஒரு கோப்பு அடிப்படையிலான சேமிப்பு ஆகும். இரண்டு Traefik நிகழ்வுகள் அதை எழுத முயற்சித்தால் தரவு சேதமடையும். அளவுப்படுத்துவது என்பது சான்றிதழ் சேமிப்பை கோப்பிலிருந்து வெளியே மாற்றுவதைக் குறிக்கிறது. அல்லது TLS-ஐ வேறு இடத்தில் முடிப்பதைக் குறிக்கிறது.
இரண்டாவது தடை நீண்ட கால இணைப்புகள் ஆகும். Server-sent events, பெரிய பதிவேற்றங்கள் மற்றும் மெதுவான வாடிக்கையாளர்கள் entrypoint-இன் பதிலளிப்பு நேரமுடிப்பை எட்டுகின்றன. --entryPoints.websecure.transport.respondingTimeouts.readTimeout மற்றும் அதன் writeTimeout மற்றும் idleTimeout சகோதர அமைப்புகளே இவற்றைக் கட்டுப்படுத்தும் கருவிகள். WebSockets கூடுதல் அமைப்பு இல்லாமல் கடந்து செல்கின்றன.
மூன்றாவது தடை வட்டு ஆகும். --accesslog=true stdout-க்கு எழுதுகிறது. Docker-இன் json-file இயக்கி வரம்பு வைக்கப்படாவிட்டால் அதை நிரந்தரமாக வைத்திருக்கும். Traefik சேவையில் logging.options.max-size ஐ அமைக்கவும். அல்லது அணுகல் பதிவை ஒரு கோப்பிற்கு எழுதி அதை சுழற்றவும்.
இவற்றிற்கு எதற்கும் ஒரு ஆர்க்கெஸ்ட்ரேட்டர் தேவையில்லை. ஆனால் நீங்கள் கட்டுப்படுத்தும் ஒரு சேவையகம் தேவை. அதற்கு ஒரு உண்மையான IP தேவை. போர்ட்டுகள் 80 மற்றும் 443 உலகளாவிய அணுகலுக்கு திறந்திருக்க வேண்டும். ஒரு சிறிய VPS-தான் முழு சார்புப் பட்டியலும்.
FAQ
Traefik இயக்கினால் certbot இன்னும் தேவையா?
இல்லை. Traefik இன் ACME resolver ஒவ்வொரு hostname க்கும் சான்றிதழை கோரி புதுப்பிக்கிறது. அனைத்தையும் acme.json இல் சேமிக்கிறது. nginx அல்லது வேறு சர்வர் TLS ஐ தானாக முடிக்கும்போது certbot சரியான கருவி. ஒரே hostname க்கு இரண்டையும் இயக்கினால் Let's Encrypt rate limit வீணாகும்.
என் container Traefik வழியாக 404 தருவது ஏன்?
Traefik 404 தருவது எந்த router உம் கோரிக்கையுடன் பொருந்தவில்லை என்று பொருள். container இல் traefik.enable=true இருப்பதை சரிபார்க்கவும் (exposedByDefault=false அமைத்தபின் கட்டாயம்). Host() மதிப்பு நீங்கள் தட்டச்சு செய்த பெயருடன் பொருந்துகிறதா என சரிபார்க்கவும். ஒவ்வொரு label இலும் router பெயர் ஒன்றாக இருக்க வேண்டும். Traefik v3 இல் matcher உள்ளே backtick வேண்டும், quotes கூடாது.
இங்கே 404 க்கும் 502 க்கும் என்ன வேறுபாடு?
404 என்பது routing நடக்கவே இல்லை என்று பொருள். 502 என்பது router பொருந்தியது ஆனால் backend இணைப்பை மறுத்தது என்று பொருள். வழக்கமான 502 காரணங்கள்: container ஆனது proxy network உடன் இணைக்கப்படவில்லை. loadbalancer.server.port வெளியிடப்பட்ட port ஐ சுட்டுகிறது, container உள்ளே app கவனிக்கும் port ஐ அல்ல. access log ஆனது Traefik அழைத்த சரியான முகவரியை காட்டும்.
Docker socket ஐ read-only ஆக mount செய்வது போதுமானதா?
:ro flag ஆனது socket file ஐ மட்டும் read-only ஆக்குகிறது, அதற்கு பின்னால் உள்ள API ஐ அல்ல. POST கோரிக்கைகள் அதன் வழியாக செல்லும். Docker API அணுகல் என்பது host இல் root க்கு சமம். மேலே காட்டப்பட்ட docker-socket-proxy container ஆனது பலமான அமைப்பு. இது container மற்றும் network read ஐ மட்டும் Traefik க்கு தரும். write ஐ முற்றிலும் தடுக்கும்.
Traefik wildcard சான்றிதழை வழங்க முடியுமா?
DNS-01 challenge மூலம் மட்டுமே முடியும், உங்கள் DNS provider க்கான API token உடன். TLS-ALPN-01 மற்றும் HTTP-01 ஒவ்வொன்றும் ஒரு hostname ஐ மட்டும் சரிபார்க்கும், wildcard தர முடியாது. Cloudflare போன்ற CDN உங்கள் VPS முன் TLS ஐ முடிக்கும்போது மற்ற இரண்டு challenge களும் முடிவடையாது. அப்போதும் DNS-01 தான் தீர்வு.