引言
Traefik 是一个开源的、现代的、易于配置的反向代理和负载均衡器,它支持多种协议和模式,如 HTTP、HTTPS、WebSocket、Mail 等。在本文中,我们将详细介绍如何在 CentOS 上安装和配置 Traefik。
系统要求
在开始之前,请确保您的 CentOS 系统满足以下要求:
- CentOS 7 或更高版本
- 至少 2GB 的 RAM
- 1GB 的磁盘空间
安装步骤
1. 安装 Docker
由于 Traefik 是基于容器的,我们首先需要安装 Docker。
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
2. 添加 Traefik 官方仓库
接下来,我们需要将 Traefik 添加到 Docker 仓库。
sudo mkdir -p /etc/docker/repositories.d
sudo cat <<EOF | sudo tee /etc/docker/repositories.d/traefik.repo
[traefik]
name=traefik
baseurl=https://apt.dockerproject.org/repo/traefik-$(curl -s https://api.github.com/repos/golang/go/tags | grep -Po '"tag_name": "\K.*?(?=")' | head -1)/apt/centos/7/main/x86_64/
EOF
3. 安装 Traefik
现在我们可以使用 Docker 安装 Traefik。
sudo docker pull traefik:latest
4. 创建 Traefik 配置文件
创建一个 Traefik 配置文件,例如 /etc/traefik/traefik.yml
,并添加以下内容:
”`yaml version: 2 entryPoints: web:
address: ":80"
admin:
address: ":8080"
smtp:
address: ":25"
protocols:
- smtp
imap:
address: ":143"
protocols:
- imap
pop3:
address: ":110"
protocols:
- pop3
ftp:
address: ":21"
protocols:
- ftp
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
ftps:
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
dns: providers:
- file:
filename: /etc/traefik/dns/resolver.conf
resolvers:
- 8.8.8.8
- 8.8.4.4
- 1.1.1.1
- 1.0.0.1
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
watch:
files:
- /etc/traefik/dns/resolver.conf
directories:
- /etc/traefik/dns
recursive: true
cache:
maxEntries: 100
onStartup: true
onExit: true
entryPoints:
- web
- admin
- smtp
- imap
- pop3
- ftp
default:
resolvers:
- "default"
watch: true
ttl: 300s
entryPoints:
- web
providers:
- file:
filename: /etc/traefik/http/services/http.file
rules:
- match: Host(`example.com`)
service: example
- match: Host(`*.example.com`)
service: subdomains
- match: Host(`test.example.com`)
service: test
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
entryPoints:
- web
providers:
- file:
filename: /etc/traefik/http/services/https.file
rules:
- match: Host(`example.com`)
service: example
- match: Host(`*.example.com`)
service: subdomains
- match: Host(`test.example.com`)
service: test
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
smtp:
entryPoints:
- smtp
rules:
- match: Host(`smtp.example.com`)
service: smtp
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
imap:
entryPoints:
- imap
rules:
- match: Host(`imap.example.com`)
service: imap
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
pop3:
entryPoints:
- pop3
rules:
- match: Host(`pop3.example.com`)
service: pop3
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
ftp:
entryPoints:
- ftp
rules:
- match: Host(`ftp.example.com`)
service: ftp
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
dns:
entryPoints:
- web
providers:
- file:
filename: /etc/traefik/dns/resolver.conf
resolvers:
- 8.8.8.8
- 8.8.4.4
- 1.1.1.1
- 1.0.0.1
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
watch:
files:
- /etc/traefik/dns/resolver.conf
directories:
- /etc/traefik/dns
recursive: true
cache:
maxEntries: 100
onStartup: true
onExit: true
default:
resolvers:
- "default"
watch: true
ttl: 300s
default:
resolvers:
- "default"
watch: true
ttl: 300s
entryPoints:
- web
providers:
- file:
filename: /etc/traefik/http/services/default.file
rules:
- match: Host(`example.com`)
service: example
- match: Host(`*.example.com`)
service: subdomains
- match: Host(`test.example.com`)
service: test
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
defaultSMTP:
entryPoints:
- smtp
rules:
- match: Host(`smtp.example.com`)
service: smtp
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
defaultIMAP:
entryPoints:
- imap
rules:
- match: Host(`imap.example.com`)
service: imap
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
defaultPOP3:
entryPoints:
- pop3
rules:
- match: Host(`pop3.example.com`)
service: pop3
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
defaultFTP:
entryPoints:
- ftp
rules:
- match: Host(`ftp.example.com`)
service: ftp
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
ftps:
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
defaultDNS:
entryPoints:
- web
providers:
- file:
filename: /etc/traefik/dns/resolver.conf
resolvers:
- 8.8.8.8
- 8.8.4.4
- 1.1.1.1
- 1.0.0.1
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
watch:
files:
- /etc/traefik/dns/resolver.conf
directories:
- /etc/traefik/dns
recursive: true
cache:
maxEntries: 100
onStartup: true
onExit: true
default:
resolvers:
- "default"
watch: true
ttl: 300s
entryPoints:
- web
providers:
- file:
filename: /etc/traefik/http/services/default.file
rules:
- match: Host(`example.com`)
service: example
- match: Host(`*.example.com`)
service: subdomains
- match: Host(`test.example.com`)
service: test
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
defaultHTTPS:
entryPoints:
- web
providers:
- file:
filename: /etc/traefik/http/services/https.file
rules:
- match: Host(`example.com`)
service: example
- match: Host(`*.example.com`)
service: subdomains
- match: Host(`test.example.com`)
service: test
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
defaultSMTP:
entryPoints:
- smtp
rules:
- match: Host(`smtp.example.com`)
service: smtp
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
defaultIMAP:
entryPoints:
- imap
rules:
- match: Host(`imap.example.com`)
service: imap
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
defaultPOP3:
entryPoints:
- pop3
rules:
- match: Host(`pop3.example.com`)
service: pop3
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
defaultFTP:
entryPoints:
- ftp
rules:
- match: Host(`ftp.example.com`)
service: ftp
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
ftps:
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
defaultDNS:
entryPoints:
- web
providers:
- file:
filename: /etc/traefik/dns/resolver.conf
resolvers:
- 8.8.8.8
- 8.8.4.4
- 1.1.1.1
- 1.0.0.1
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
watch:
files:
- /etc/traefik/dns/resolver.conf
directories:
- /etc/traefik/dns
recursive: true
cache:
maxEntries: 100
onStartup: true
onExit: true
default:
resolvers:
- "default"
watch: true
ttl: 300s
entryPoints:
- web
providers:
- file:
filename: /etc/traefik/http/services/default.file
rules:
- match: Host(`example.com`)
service: example
- match: Host(`*.example.com`)
service: subdomains
- match: Host(`test.example.com`)
service: test
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
defaultHTTPS:
entryPoints:
- web
providers:
- file:
filename: /etc/traefik/http/services/https.file
rules:
- match: Host(`example.com`)
service: example
- match: Host(`*.example.com`)
service: subdomains
- match: Host(`test.example.com`)
service: test
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
defaultSMTP:
entryPoints:
- smtp
rules:
- match: Host(`smtp.example.com`)
service: smtp
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
defaultIMAP:
entryPoints:
- imap
rules:
- match: Host(`imap.example.com`)
service: imap
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
defaultPOP3:
entryPoints:
- pop3
rules:
- match: Host(`pop3.example.com`)
service: pop3
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
defaultFTP:
entryPoints:
- ftp
rules:
- match: Host(`ftp.example.com`)
service: ftp
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
ftps:
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
defaultDNS:
entryPoints:
- web
providers:
- file:
filename: /etc/traefik/dns/resolver.conf
resolvers:
- 8.8.8.8
- 8.8.4.4
- 1.1.1.1
- 1.0.0.1
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
watch:
files:
- /etc/traefik/dns/resolver.conf
directories:
- /etc/traefik/dns
recursive: true
cache:
maxEntries: 100
onStartup: true
onExit: true
default:
resolvers:
- "default"
watch: true
ttl: 300s
entryPoints:
- web
providers:
- file:
filename: /etc/traefik/http/services/default.file
rules:
- match: Host(`example.com`)
service: example
- match: Host(`*.example.com`)
service: subdomains
- match: Host(`test.example.com`)
service: test
middlewares:
- rewriter:
replacePath:
prefix: /
target: /
tls:
certResolver: default
domains:
- "example.com"
- "*.example.com"
- "test.example.com"
secret: /etc/traefik/tls/tls.key
ca: /etc/traefik/tls/ca.crt
default