Traefik reverse proxy: 5 యాప్లు, ఒక Compose file
Docker Composeలో Traefik v3 వాడి ఒకే IPపై ఐదు యాప్లను రన్ చేయడం ఎలా: Host rule ద్వారా రౌటింగ్, Let's Encrypt TLS, మరియు acme.json ఉచ్చు స్టార్టప్ను ఆపే సమస్య.
ఒక IP, ఐదు యాప్లు, ఒక పోర్ట్ 443
మీ VPSలో ఒకే ఒక పబ్లిక్ IPv4 చిరునామా మరియు ఒకే ఒక TCP పోర్ట్ 443 ఉన్నాయి. దానిపై మీకు Gitea, మీ యాప్కు ఒక స్టేజింగ్ కాపీ, ఒక అంతర్గత డాష్బోర్డ్, ఒక స్టేటస్ పేజీ మరియు ఒక వెబ్హుక్ రిసీవర్ కావాలి — ఐదు హోస్ట్పేర్లు, ఒకే బాక్స్. రివర్స్ ప్రాక్సీ అనేది :80 మరియు :443 పోర్ట్లను నియంత్రించే ప్రాసెస్. ఇది ప్రతి అభ్యర్థనపై Host హెడర్ను చదువుతుంది మరియు దాన్ని సరైన కంటైనర్కు అప్పగిస్తుంది. Traefik అలా చేస్తుంది. అంతేకాకుండా, మీరు చేతితో certbot నడపకుండానే ప్రతి హోస్ట్పేరుకు సర్టిఫికేట్ను పొందడం మరియు పునరుద్ధరించడం జరుగుతుంది.
Traefik మరియు nginx server {} బ్లాక్ మధ్య తేడ దాని కాన్ఫిగరేషన్ మూలంలో ఉంది. nginxతో మీరు ఒక ఫైల్ను సవరించి రీలోడ్ చేస్తారు. సర్టిఫికేట్ జీవితచక్రం ఒక ప్రత్యేక పనిగానే ఉండిపోతుంది — ఇది మీరు nginxపై Let's Encrypt సర్టిఫికేట్లను certbotతో జారీ చేసినప్పుడు అనుసరించే వర్క్ఫ్లో, అక్కడ పునరుద్ధరణ టైమర్ వెబ్ సర్వర్ వెలుపల పూర్తిగా ఉంటుంది. Traefik యొక్క Docker ప్రొవైడర్ Docker ఈవెంట్ స్ట్రీమ్ను పరిశీలిస్తుంది మరియు మీ కంటైనర్ల నుండి లేబుల్లను చదువుతుంది: Host() రూల్ లేబుల్తో ఒక కంటైనర్ను ప్రారంభించండి మరియు అది ఒక సెకనులో రౌట్ చేయగలిగేలా అవుతుంది; ఆపేయండి మరియు ఆ రూట్ మాయమవుతుంది. ఇది ఒక ఉచ్చు కూడా. లేబుల్లలో ఉండే కాన్ఫిగరేషన్ ఒకేసారి ఐదు చోట్లలో ఉంటుంది. తప్పుడు లేబుల్ నిశ్శబ్దంగా ఉంటుంది — కంటైనర్ రూట్ చేయబడదు, మరియు Traefik ఏమీ చెప్పదు.
నాలుగు నామవాచకాలు
- Entrypoints అనేవి లిజనింగ్ సాకెట్లు. మీరు రెండింటిని నిర్వచిస్తారు:
:80పైwebమరియు:443పైwebsecure. - Routers ఒక అభ్యర్థనను (
Host(...)) సరిపోల్చి దానిని ఒక సర్వీస్కు అనుబంధిస్తాయి. సర్టిఫికెట్లు ప్రతి రౌటర్కుtls.certresolverద్వారా అభ్యర్థించబడతాయి. - Services అనేవి బ్యాకెండ్ — ఒక కంటైనర్ మరియు అది డాకర్ నెట్వర్క్ లోపల లిజన్ చేసే పోర్ట్.
- Middlewares రౌటర్ మరియు సర్వీస్ మధ్య ఉంటాయి: బేసిక్ ఆథ్, IP అలో-లిస్ట్లు, హెడర్ రీరైట్లు, రీడైరెక్ట్లు.
స్టాటిక్ కాన్ఫిగరేషన్ (entrypoints, providers, ACME) Traefik కమాండ్ లైన్పై లేదా traefik.yml లో పాస్ చేయబడుతుంది, మరియు దానిని మార్చడం అంటే Traefik ను రీస్టార్ట్ చేయడం. డైనమిక్ కాన్ఫిగరేషన్ (routers, services, middlewares) కంటైనర్ లేబుల్ల నుండి వస్తుంది మరియు హాట్-రీలోడ్ అవుతుంది. ఈ రెండింటినీ కలపడం అనేది "నా ఫ్లాగ్ ఏమీ చేయట్లేదు" అనే సమస్యకు సాధారణ కారణం.
కంపోజ్ ఫైలు
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() మరియు దాని స్వంత అంతర్గత పోర్ట్తో పాటు. ఒక Dockerలో TLS మరియు బ్యాకప్లతో నడుస్తున్న Nextcloud ఇన్స్టాలేషన్ అదే విధంగా చేరుతుంది — దాని పబ్లిష్ చేసిన పోర్ట్లను తీసేయండి, దాన్ని proxyకు అటాచ్ చేయండి, మరియు రౌటర్ లేబుల్లు హోస్ట్నేమ్ మరియు సర్టిఫికేట్ను నిర్వహించనివ్వండి.
అక్కడ ఐదు వివరాలు తమ పనిని సమర్థిస్తాయి.
exposedByDefault=false ఒక కంటైనర్ను అది traefik.enable=true కలిగి ఉండే వరకు Traefikకు అగోచరంగా చేస్తుంది. దాన్ని వదిలేస్తే మీరు ప్రారంభించే ప్రతి కంటైనర్కు — దేనినైనా తనిఖీ చేయడానికి మీరు నడిపిన వాసినే పారిపోయే postgres తో సహా — ఒక రూట్ సృష్టించబడుతుంది.
providers.docker.network=proxy ఒక కంటైనర్ అనేక నెట్వర్క్లకు అటాచ్ చేయబడినప్పుడు Traefik ఏ నెట్వర్క్ను ఉపయోగించాలో చెబుతుంది. దాన్ని వదిలేస్తే Traefik తప్పుడు కంటైనర్ IPని ఎంచుకోవచ్చు, అది ఒక యాప్ లోపంలా కనిపించే 502గా బయటపడుతుంది.
loadbalancer.server.port=3000 అనేది కంటైనర్ లోపల ఉన్న పోర్ట్; Gitea అక్కడ 3000పై వింటుంది. ఏ యాప్ కంటైనర్ పోర్ట్నూ పబ్లిష్ చేయదని గమనించండి — Traefik మాత్రమే చేస్తుంది.
web ఎంట్రీపాయింట్పై ఉన్న రీడైరెక్ట్ ప్లెయిన్టెక్స్ట్ అభ్యర్థనలను HTTPSకి 308గా మారుస్తుంది. పోర్ట్ 80 ఏమైనప్పటికీ తెరిచేనే ఉంటుంది: ACME HTTP ఛాలెంజ్కు అది అవసరం, మరియు నగ్న హోస్ట్నేమ్ను టైప్ చేసే మనుషులకు కూడా అవసరం.
బేసిక్-ఆథ్ హ్యాష్లో రెట్టించబడిన $$ అనేది కంపోజ్ ఎస్కేపింగ్, టైపో కాదు. దాన్ని htpasswd -nbB admin 'your-password' (ప్యాకేజ్ apache2-utils) తో సృష్టించండి, తరువాత ప్రతి $ను రెట్టించండి.
ధృవీకరణపత్రం, మరియు acme.json ఉచ్చు
tlschallenge=true అనేది TLS-ALPN-01 ని ఎంచుకుంటుంది: Let's Encrypt మీ సర్వర్కు 443 పోర్ట్లో అనుసంధానం అవుతుంది మరియు Traefik ఈ సవాలుకు TLS హ్యాండ్షేక్ లోపలే స్పందిస్తుంది. ప్రత్యామ్నాయం HTTP-01, అది 80 పోర్ట్లో జరుగుతుంది — Traefik యొక్క command: జాబితాలో tlschallenge వరుసను ఈ రెండింటితో మార్చండి:
- --certificatesresolvers.le.acme.httpchallenge=true
- --certificatesresolvers.le.acme.httpchallenge.entrypoint=webరెండూ పనిచేస్తాయి. రెండింటికీ హోస్ట్నేమ్ యొక్క పబ్లిక్ DNS ఇప్పటికే మీ VPS వైపు సూచిస్తూ ఉండాలి — ధృవీకరణపత్ర అధికారం ఆ పేరును పరిష్కరించి బయటి నుండి అనుసంధానం అవుతుంది. ముందుగా A (మరియు AAAA) రికార్డ్ను సృష్టించండి, dig +short git.example.com తో నిర్ధారించుకోండి, తర్వాత Traefik ను ప్రారంభించండి.
ఇప్పుడు ప్రజల సమయాన్ని ఒక సాయంత్రం వృథా చేసే ఉచ్చు గురించి చెప్పుకుందాం. Traefik తన ACME ఖాతా కీ మరియు జారీ చేయబడిన ప్రతి ధృవీకరణపత్రాన్ని ఒకే acme.json లో నిల్వ చేస్తుంది. ఆ ఫైల్ గ్రూప్ లేదా అందరికీ చదవడానికి వీలుగా ఉంటే, Traefik దీనికి దగ్గరగా ఉన్న ఒక వరుసను ముద్రించి ఆగిపోతుంది:
error: unable to get ACME account: permissions 644 for /letsencrypt/acme.json are too open, please use 600సరైన పరిష్కారం పైన ఉన్నదే: డైరెక్టరీని బైండ్-మౌంట్ చేయండి మరియు సరైన మోడ్తో ఫైల్ను Traefik స్వయంగా సృష్టించుకోనివ్వండి. మీరు acme.json ను touch తో సృష్టించినట్లయితే, మీ umask దాన్ని 644 గా చేసింది. దాన్ని హోస్ట్పై సరిచేయండి:
chmod 600 ./letsencrypt/acme.json
docker compose restart traefikఆ డైరెక్టరీని మీ యాప్ వాల్యూమ్లతో పాటు బ్యాకప్ చేయండి. దాన్ని కోల్పోవడం తట్టుకోవచ్చు — ధృవీకరణపత్రాలు మళ్లీ జారీ అవుతాయి — కానీ ఒకేసారి ఐదు హోస్ట్నేమ్లను మళ్లీ జారీ చేయడం మిమ్మల్ని రేట్ లిమిట్లలోకి నెట్తుంది.
మీరు మార్పులు చేసేటప్పుడు స్టేజింగ్ CA ని ఉపయోగించండి. caserver వరుసను అన్-కామెంట్ చేయండి, ప్రతి రూట్ను పని చేసేలా చేయండి, తర్వాత దాన్ని కామెంట్ చేసి acme.json ను తొలగించండి తద్వారా ప్రొడక్షన్ ధృవీకరణపత్రాలు కొత్తగా అభ్యర్థించబడతాయి. ప్రొడక్షన్ Let's Encrypt ఒకే హోస్ట్నేమ్ల సమితికి వారానికి ఐదు నకిలీ ధృవీకరణపత్రాలను అనుమతిస్తుంది, మరియు ఒకే పేరుకు పునరావృతమయ్యే విఫల ధృవీకరణలను నియంత్రిస్తుంది. స్టేజింగ్ విశ్వసనీయత లేని ధృవీకరణపత్రాలను జారీ చేస్తుంది — మీ బ్రౌజర్ హెచ్చరిస్తుంది, మరియు ఆ హెచ్చరికే అది పని చేసిందనే సంకేతం — చాలా సడలిన లిమిట్లతో.
డాష్బోర్డ్ అనేది నియంత్రణ తలం, ప్రదర్శన కాదు
చాలా క్విక్స్టార్ట్లు --api.insecure=true ను సెట్ చేస్తాయి. అది డాష్బోర్డ్ను పోర్ట్ 8080 పై ఎలాంటి ప్రామాణీకరణ లేకుండా అందిస్తుంది. పబ్లిక్ IP ఉన్న సర్వర్లో, ఇది మీ రౌటింగ్ టోపాలజీ, హోస్ట్నేమ్లు, మిడిల్వేర్ పేర్లు మరియు బ్యాకెండ్ పోర్ట్లను స్కాన్ చేసే ఎవరికైనా అందిస్తుంది.
పైన ఉన్న traefik సర్వీస్పై లేబుల్స్ అనేవి ప్రత్యామ్నాయం: డాష్బోర్డ్ అనేది మరే ఇతర యాప్ లాగా రౌట్ చేయబడుతుంది, నిజమైన హోస్ట్నేమ్ పై, TLS ద్వారా, basicauth వెనుక. రౌటర్ను Traefik యొక్క అంతర్గత APIకి అనుసంధించేది service=api@internal. దీనిని ఒక IP అనుమతి-జాబితాను చైన్ చేడం ద్వారా మరింత బిగుతుగా చేయండి, దీనిని ఎడమ నుండి కుడికి వర్తింపజేస్తారు. మీ ఆఫీస్ చిరునామా డైనమిక్గా ఉంటే, పరిధిని అదే VPS పై మీరే హోస్ట్ చేసే ఒక WireGuard VPN అందించే సబ్నెట్కు సెట్ చేయండి. డాష్బోర్డ్ను టన్నెల్ ద్వారా మాత్రమే చేరుకోండి:
- traefik.http.middlewares.office.ipallowlist.sourcerange=10.0.0.7/32
- traefik.http.routers.dashboard.middlewares=office,dashboard-authDocker సాకెట్ అనేది root
/var/run/docker.sock అనేది ఒక API. ఇది హోస్ట్ నుండి / ను మౌంట్ చేసే ఒక కంటైనర్ను సృష్టించగలదు. దీనికి యాక్సెస్ ఉన్నది అనగా ఆ మెషీన్లో root యాక్సెస్ ఉన్నట్లే. Traefik కు లేబుళ్లను చదవడానికి దీని అవసరం ఉంది.
మౌంట్పై :ro ను ఉంచండి. కానీ అది ఏమి ఇస్తుందో స్పష్టంగా తెలుసుకోండి: అది సాకెట్ ఫైల్ను చదవడానికి మాత్రమే అనుమతిస్తుంది. దాని ద్వారా వెళ్లే Docker API కు POST అభ్యర్థనలను ఇది ఆపదు. నిజమైన పరిష్కారం ఏమిటంటే, Traefik కు సాకెట్ను అసలు ఇవ్వకూడదు. మధ్యలో ఒక ఫిల్టరింగ్ ప్రాక్సీని ఉంచండి:
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 నుండి సాకెట్ వాల్యూమ్ను తీసేయండి. ప్రొవైడర్ను ఆ ప్రాక్సీ వైపు చూపండి:
--providers.docker.endpoint=tcp://dockerproxy:2375Traefik కు కంటైనర్లు, నెట్వర్క్లను చదవడానికి యాక్సెస్ ఉంటుంది. కానీ ఏదైనా సృష్టించే సామర్థ్యం దానికి పోతుంది.
ఫైర్వాల్, పోర్ట్లు, మరియు అందరూ తప్పుగా అర్థం చేసుకునే నియమం
రెండు పోర్ట్లు తెరిచి ఉంటాయి, అంతేకాక 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] ఇవ్వండి మరియు మరేమీ ఇవ్వకండి. ఏదైనా నిజంగా హోస్ట్ను చేరుకోవలసి వస్తే, దానిని లూప్బ్యాక్కు బైండ్ చేయండి — "127.0.0.1:3000:3000".
సమస్య పరిష్కారం: మీరు వాస్తవాన చూసే లోపాలు
404 పేజీ కనబడలేదు, Traefik అందిస్తోంది. ఏ రౌటర్ సరిపోలలేదు. సంభావ్యత క్రమంలో: కంటైనర్కు traefik.enable=true లేదు (exposedByDefault=false సెట్ చేయబడి ఉంది); Host() నియమం మీరు టైప్ చేసిన పేరుతో సరిపోలడం లేదు; ఒక లేబుల్లోని రౌటర్ పేరు మరొక లేబుల్లోని రౌటర్ పేరుతో భిన్నంగా ఉంది (routers.gitea.rule మరియు routers.gitea.entrypoints ఒకే పదం అయి ఉండాలి); లేదా మీరు హోస్ట్నేమ్ను బ్యాక్టిక్ల బదులుగా కోట్స్లో పొందుపరిచారు. Traefik v3 మ్యాచర్ల లోపల బ్యాక్టిక్లను కోరుతుంది.
502 బ్యాడ్ గేట్వే. ఒక రౌటర్ సరిపోయింది మరియు బ్యాకెండ్ చేరుకోలేకపోయింది. దాదాపు ఎల్లప్పుడూ కంటైనర్ proxy నెట్వర్క్లో లేదు — docker inspect -f '{{json .NetworkSettings.Networks}}' gitea తనిఖీ చేయండి. మరొక అవకాశం తప్పుడు loadbalancer.server.port: మీరు దానికి పబ్లిష్ చేసిన పోర్ట్ ఇచ్చారు, లేదా యాప్ మరెక్కడో వింటోంది. లాగ్ ఆ ప్రయత్నాన్ని పేర్కొంటుంది: dial tcp 172.18.0.5:8080: connect: connection refused.
బ్రౌజర్ హెచ్చరిస్తోంది, మరియు సర్టిఫికేట్ TRAEFIK DEFAULT CERT కు జారీ చేయబడింది. ఆ హోస్ట్నేమ్ కోసం సర్టిఫికేట్ లేదు మరియు Traefik దాని స్వయం-సంతకం ప్లేస్హోల్డర్ను అందించింది. 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 ఛాలెంజ్పై Invalid response from http://git.example.com/.well-known/acme-challenge/...: పోర్ట్ 80 బయటి నుండి Traefik ను చేరుకోలేదు — సాధారణంగా VPS ముందు ప్రొవైడర్-స్థాయి ఫైర్వాల్, ufw కాదు.
సర్టిఫికేట్లు ఎప్పటికీ జారీ కావు, మరియు మీ DNS Cloudflare లో ఉంది, ఆరెంజ్ క్లౌడ్ ఆన్లో ఉంది. Cloudflare దాని ఎడ్జ్ వద్ద TLS ను అంతం చేస్తుంది మరియు TLS-ALPN-01 దాని ద్వారా పూర్తి కాలేదు. జారీ చేసేటప్పుడు రికార్డ్ను DNS-మాత్రమే గా సెట్ చేయండి, లేదా API టోకెన్తో DNS-01 ఛాలెంజ్కు మారండి. DNS-01 వైల్డ్కార్డ్లను జారీ చేసే ఏకైక ఛాలెంజ్ కూడా.
రీడైరెక్ట్ లూప్. Traefik ముందు ఉన్న ఏదైనా ఇప్పటికే TLS ను అంతం చేసి ప్లెయిన్టెక్స్ట్ను :80 కు ఫార్వర్డ్ చేస్తోంది; ఎంట్రీపాయింట్ రీడైరెక్ట్ దానిని తిరిగి HTTPS కు పంపుతుంది. ఆ రెండు రీడైరెక్ట్లలో ఒకదాన్ని తొలగించండి.
నడుపుతూ ఉండటం
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 కు అప్గ్రేడ్ రూల్ సింటాక్స్ మరియు ప్రొవైడర్ పేర్లను మార్చింది. ఎజామాయిషీ లేని latest అది ఇకపై అర్థం చేసుకోని కాన్ఫిగ్ను సంతోషంగా రీలోడ్ చేస్తుంది. ఉద్దేశపూర్వకంగా అప్గ్రేడ్ చేయండి: మైగ్రేషన్ గమనికలను చదవండి, ట్యాగ్ను పెంచండి, docker compose up -d traefik, లాగ్ను పరిశీలించండి. మీరు ఇంకా v2 ట్యాగ్లోనే ఉంటే, Traefik v2 నుండి v3 మైగ్రేషన్ గైడ్ ప్రతి పేరు మార్పును, కాంపాటిబిలిటీ మోడ్ను, మరియు మీ సర్టిఫికేట్లను నిలుపుకునే రోల్బ్యాక్ను వివరిస్తుంది.
./letsencrypt మరియు ప్రతి యాప్ డేటా వాల్యూమ్ను బ్యాకప్ చేయండి. Traefik మరేమీ స్టేట్ను కలిగి ఉండదు; కంపోజ్ ఫైల్ నుండి మీరు దాన్ని తిరిగి నిర్మించవచ్చు.
స్కేల్ దగ్గర ఏమి విరుస్తుంది
మొదటి పరిమితి థ్రూపుట్ కాదు, అది ఒంటరి సర్వరు: ఒక VPS పై ఒక Traefik అనేది ఐదు యాప్లకు ఒకే వైఫల్య బిందువు, మరియు acme.json అనేది ఫ్లాట్-ఫైల్ నిల్వ — రెండు Traefik ఇన్స్టాన్స్లు దాన్ని రాస్తే అది పాడవుతుంది. స్కేలింగ్ అవుట్ అంటే సర్టిఫికేట్ నిల్వను ఫైల్ నుండి బయటకు తరలించడం, లేదా TLS ని మరెక్కడో అంతం చేయడం.
రెండవది సుదీర్ఘ కనెక్షన్లు. సర్వర్-సెంట్ ఈవెంట్లు, పెద్ద అప్లోడ్లు మరియు నెమ్మదైన క్లయింట్లు ఎంట్రీపాయింట్ యొక్క రెస్పాన్స్ టైమవుట్లను ఎదుర్కొంటాయి; --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 రిజాల్వర్ ప్రతి హోస్ట్నేమ్కు సర్టిఫికెట్ను అభ్యర్థించి నవీకరిస్తుంది, మరియు అన్నీ acme.json లో నిల్వ చేస్తుంది. nginx లేదా మరో సర్వర్ TLS ను స్వయంగా పూర్తి చేసినప్పుడు certbot సరైన సాధనంగా ఉంటుంది. ఒకే హోస్ట్నేమ్లపై రెండింటినీ నడపడం వలన Let's Encrypt రేట్ పరిమితులు మాత్రమే వృథా అవుతాయి.
నా కంటైనర్ Traefik ద్వారా 404 ఎందుకు అందిస్తుంది?
Traefik అందించిన 404 అంటే అభ్యర్థనకు ఏ రౌటర్ సరిపోలలేదని అర్థం. కంటైనర్ traefik.enable=true ను కలిగి ఉందో లేదో చెక్ చేయండి (exposedByDefault=false సెట్ చేసిన తర్వాత ఇది తప్పనిసరి), Host() విలువ మీరు టైప్ చేసిన పేరుతో సరిపోలుతుందో లేదో చూడండి, మరియు ఆ యాప్ యొక్క ప్రతి లేబుల్లోనూ రౌటర్ పేరు ఒకేలా ఉందో లేదో నిర్ధారించుకోండి. Traefik v3 మ్యాచర్ లోపల కోట్స్ కాకుండా బ్యాక్టిక్లను కూడా కోరుతుంది.
ఇక్కడ 404 మరియు 502 మధ్య తేడా ఏమిటి?
404 అంటే రౌటింగ్ జరగలేదని అర్థం. 502 అంటే ఒక రౌటర్ సరిపోయింది మరియు బ్యాకెండ్ కనెక్షన్ను తిరస్కరించిందని అర్థం. సాధారణ 502 కారణాలు రెండు: ఒకటి, కంటైనర్ proxy నెట్వర్క్కు అటాచ్ కాలేదు. రెండు, loadbalancer.server.port కంటైనర్ లోపల యాప్ వింట్రున్న పోర్ట్ కాకుండా పబ్లిష్ చేసిన పోర్ట్ను సూచిస్తోంది. యాక్సెస్ లాగ్ Traefik డయల్ చేసిన సరైన చిరునామాను పేర్కొంటుంది.
Docker సాకెట్ను రీడ్-ఓన్లీగా మౌంట్ చేయడం సరిపోతుందా?
:ro ఫ్లాగ్ సాకెట్ ఫైల్ను రీడ్-ఓన్లీగా చేస్తుంది, దాని వెనుక ఉన్న API ని కాదు. POST అభ్యర్థనలు దాని ద్వారా ఇంకా ప్రయాణిస్తాయి, మరియు Docker API యాక్సెస్ అనేది హోస్ట్పై రూట్కి సమానం. బలమైన ఏర్పాటు పైన చూపిన docker-socket-proxy కంటైనర్, ఇది Traefik కు కంటైనర్ మరియు నెట్వర్క్ రీడ్లను మాత్రమే అందిస్తుంది మరియు రైట్లను పూర్తిగా నిరోధిస్తుంది.
Traefik వైల్డ్కార్డ్ సర్టిఫికెట్ను జారీ చేయగలదా?
DNS-01 ఛాలెంజ్ ద్వారా మాత్రమే, మీ DNS ప్రొవైడర్ కోసం API టోకెన్తో పాటు. TLS-ALPN-01 మరియు HTTP-01 ఒక్కొక్కటి ఒకే హోస్ట్నేమ్ను ధృవీకరిస్తాయి మరియు వైల్డ్కార్డ్ను ఉత్పత్తి చేయలేవు. Cloudflare వంటి CDN మీ VPS ముందు TLS ను పూర్తి చేసినప్పుడు మరియు మిగతా రెండు ఛాలెంజ్లు ఎప్పటికీ పూర్తి కానప్పుడు DNS-01 కూడా సమాధానం.