配置基于Traefik v2的 Web 服务器

阅读: 评论:0

配置基于Traefik v2的 Web 服务器

配置基于Traefik v2的 Web 服务器

本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2020年02月01日
统计字数: 6940字
阅读时间: 14分钟阅读
本文链接: .html


配置基于Traefik v2的 Web 服务器

以往聊到 Web 服务器,我们通常会使用 Nginx、Apache,或者后起之秀 Caddy,本文将继续介绍一种相对小众但是好用的 Web 服务软件:Traefik。

本文先聊聊传统架构场景下的使用,云服务架构场景晚些时候有空再写。

写在前面

如果你使用的是 SLB + VPC 的架构,那么使用《Traefik 2 使用指南,愉悦的开发体验》 中的容器方案会更利于维护。

如果你使用的是传统的单体 VPS 架构,服务器前缺少云平台的负载均衡网关,那么就可以使用 Traefik 直接作为服务网关,在保证高性能转发、无感知重载、动态加载SSL证书等能力外,还提供了一定的可视化能力,解决了日常开发调试中“盲人摸象”的问题。

然而即使是使用传统的 VPS 架构,在 Traefik 和 Docker 容器的加持下,也可以发挥出不错的性能和便捷的开发能力。

配置系统

作为 Web Server 需要配置的东西不多,根据情况简单提升下文件打开数目:

echo "* soft nofile 51200">>/etc/f
echo "* hard nofile 51200">>/etc/f
echo "session required pam_limits.so">>/etc/pam.d/common-session
echo "ulimit -SHn 51200">>/etc/profile

SSH 免密登录等可参考《Ubuntu 18.04 基础系统配置》、《配置Ubuntu WebServer基础环境》,这里不做赘述。

接着配置安装 Docker 容器运行环境:

apt update && apt upgrade -y
apt install -y apt-transport-https  ca-certificates curl software-properties-commoncurl -fsSL  | sudo apt-key add -
apt-key fingerprint 0EBFCD88
add-apt-repository "deb [arch=amd64]  $(lsb_release -cs) stable"
apt install -y docker-cecurl -L .25.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

如果有挂载云储存(云硬盘、NAS),可以参考 《迁移 Docker 容器储存位置 》、《Ubuntu 18.04 基础系统配置》 中的内容进行磁盘挂载、内容迁移。

因为引用了两篇内容,这里做一些概括性描述怎么操作。

格式化并挂载磁盘到 /data 可以参考使用下面的命令:

fdisk -u /dev/vdb
# 交互式输入:p->n->p->enter->enter->enter->w
4 /dev/vdb1
echo /dev/vdb1 /data ext4 defaults 0 0 >> /etc/fstab

迁移容器数据内容到新的目录位置可以参考下面的命令:

service docker stop
mkdir -p /data/docker/lib
rsync -avz /var/lib/docker /data/docker/libvi /etc/docker/daemon.json
{"data-root": "/data/docker/lib"
}
service docker start

Traefik 作为服务网关

作为服务网关,更偏重于性能和稳定性,考虑容器化会降低一部分性能,这里推荐直接使用对应 Linux 发行版的二进制应用文件直接启动应用。

安装应用

安装 Traefik 很容易,只需要下载二进制文件,就好了,像是下面这样。

wget .1.3/traefik_v2.1.3_linux_
tar zxvf traefik_v2.1.3_linux_
mv traefik /usr/bin/

验证是否安装就绪,可以使用 command 或者 which 来进行验证系统是否找的着软件或者执行路径是什么,再或者使用 traefik version 来看看当前应用的版本也行。

which traefik
command -v traefik

如果显示的结果都是 /usr/bin/traefik 就说明安装成功。本文使用的 Traefik 版本信息如下:

traefik versionVersion:      2.1.3
Codename:     cantal
Go version:   go1.13.6
Built:        2020-01-21T17:30:29Z
OS/Arch:      linux/amd64

配置应用

在书写应用配置前,需要先准备应用配置目录。

mkdir -p /data/basic/traefik/{logs,conf}

参考《Traefik 2 使用指南,愉悦的开发体验》 一文中的内容,很容易写出一个简单的 l 配置:

[global]checkNewVersion = falsesendAnonymousUsage = false[log]level = "INFO"format = "common"filePath = "/data/basic/traefik/logs/traefik.log"[api]dashboard = trueinsecure = truedebug = false[ping][accessLog]filePath = "/data/basic/traefik/logs/access.log"bufferingSize = 100[providers][providers.docker]watch = trueexposedByDefault = falseendpoint = "unix:///var/run/docker.sock"swarmMode = falseuseBindPortIP = falsenetwork = "traefik"[providers.file]watch = truedirectory = "/data/basic/traefik/conf"debugLogGeneratedTemplate = true[entryPoints][entryPoints.http]address = ":80"[entryPoints.https]address = ":443"

将上面的内容保存到 /data/basic/l 后,启动应用,并访问你的服务器 IP 进行验证。

traefik --configFile /data/basic/lINFO[0000] Configuration loaded from file: /data/basic/l 

当你在浏览器中看到熟悉的 404 page not found 的时候,说明基础配置就完成了,如果你想配置 dashboard ,可以参考《Traefik 2 使用指南,愉悦的开发体验》 文中的其他配置。

配置进程守护服务

即使软件通过了编译测试、功能测试,实际运行时,还是可能遇到极端情况,导致软件中止运行,所以我们需要安装进程守护服务,对应用进行“保活”。

在容器方案里,只需要很简单的一句“restart: always”配置即可,但是退化到传统服务器方案中,这个事情就变的稍微麻烦了一些。

这里推荐老牌应用 supervisor,在 debian / ubuntu 系统中安装只需要一句话:

apt-get install -y supervisor

等待安装完毕,准备编写 Traefik 的进程守护配置文件:

[program:traefik]
command=traefik --configFile /data/basic/l
user=root
autostart=true
startsecs=3
startretries=100
autorestart=true
stderr_logfile=/data/basic/traefik/logs/supervisor-traefik-error.log
stderr_logfile_maxbytes=50MB
stderr_logfile_backups=10
stdout_logfile=/data/basic/traefik/logs/supervisor-traefik-access.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10

将上面的内容保存到 /etc/supervisor/conf.f 中,重启进程守护服务,查看系统进程,会发现 traefik 已经启动起来了。

service supervisor restartps -ef | grep traefikroot      1318  1285  2 21:38 ?        00:00:01 traefik --configFile /data/basic/l

自动申请证书

作为服务网关,Traefik 还有一个令人满意的功能,就是“根据所启动的服务”,动态的自动申请并续签泛域名证书。

首先需要准备储存申请证书的目录:

mkdir -p /data/basic/traefik/ssl/

接着在 Traefik 主配置中添加 ACME 证书申请配置:

[certificatesResolvers.le.acme]email = "yourmail@company"storage = "/data/basic/traefik/ssl/acme.json"[certificatesResolvers.le.acme.dnsChallenge]resolvers = ["1.1.1.1:53", "8.8.8.8:53"]provider = "cloudflare"delayBeforeCheck = 30

参考官方配置Traefik 使用DNS 验证方式申请证书,我这边选择 Cloudflare 作为服务商,根据 / 所需配置的变量有三个(不推荐使用 CF_API_KEY)。

# CloudFlare 账户邮箱
CF_API_EMAIL
# API token 需要 DNS:Edit 权限
CLOUDFLARE_DNS_API_TOKEN
# API token 需要 Zone:Read 权限
CLOUDFLARE_ZONE_API_TOKEN	

因为使用 supervisor ,所以这里设置变量需要写在 /etc/supervisor/conf.f 中,并使用 Key="value" 的格式:

[program:traefik]
command=traefik --configFile /data/basic/l
user=root
environment=CF_API_EMAIL="yourmail@company",CLOUDFLARE_DNS_API_TOKEN="token1",CLOUDFLARE_ZONE_API_TOKEN="token2"
autostart=true
...

然后重启守护服务。

service supervisor stop && service supervisor start

接下来,随便启动一个服务,然后稍等片刻,检查证书储存文件(/data/basic/traefik/ssl/acme.json),顺利的话,会看到申请好的 SSL 证书。

验证 Web 应用

想要验证服务的基础功能是否好用,只需要随便启动一个应用,并声明它所使用的域名即可,下面是 l 配置文件内容:

version: '3'services:whoami:image: soulteary/whoaminetworks:- traefiklabels:- &#able=true"- "traefik.dockerwork=traefik"- "uters.whoami0.middlewares=https-redirect@file"- "points=http"- "uters.whoami0.rule=Host(`whoami.soulteary`)"- "uters.whoami1.middlewares=content-compress@file"- "points=https"- "uters.whoami1.tls=true"- "uters.solver=le"- "uters.whoami1.tls.domains[0].main=soulteary"- "uters.whoami1.tls.domains[0].sans=*.soulteary"- "uters.whoami1.rule=Host(`whoami.soulteary`)"- "traefik.http.services.whoamibackend.loadbalancer.server.scheme=http"- "traefik.http.services.whoamibackend.loadbalancer.server.port=80"
networks:traefik:external: true

将内容保存完毕,使用 docker-compose up -d 将应用启动之后,稍等片刻,访问域名,会看到应用已经就绪,现证书也已经自动申请完毕。

其他

去年写了不少有关traefik 的文章,接下来我会找时间把这些文章做一遍升级。我个人和线上生产环境都已经使用了一年多 Traefik ,恰逢 Traefik 版本升级,记录一些实践笔记,希望能帮助到有需要的同学。

–EOF


我现在有一个小小的折腾群,里面聚集了一些喜欢折腾的小伙伴。

在不发广告的情况下,我们在里面会一起聊聊软件、HomeLab、编程上的一些问题,也会在群里不定期的分享一些技术沙龙的资料。

喜欢折腾的小伙伴欢迎扫码添加好友。(请注明来源和目的,否则不会通过审核)

关于折腾群入群的那些事

本文发布于:2024-01-31 13:29:01,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170667894228871.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:服务器   Traefik   Web
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23