Ubuntu 22.04 安装 Tyk 指南
Ubuntu 22.04 从零安装 Tyk Gateway 5.15.1:Redis 官方仓库部署、packagecloud deb 仓库安装、systemd 托管与验证,附 Docker Compose 备用方案、升级降级与卸载,全程实测回显。
Ubuntu 22.04 安装 Tyk 指南
目标:在 Ubuntu 22.04 服务器上从零完成 Tyk Gateway(开源版)的安装、配置、systemd 托管与验证,覆盖官方 deb 仓库主线安装与 Docker Compose 备用方案、升级降级、常见问题与卸载清理。已在 Ubuntu 22.04.5 LTS 实测通过(Tyk Gateway 5.15.1 + Redis 8.10.2)。
一、环境信息
本文所有命令与回显均在以下环境实测采集:
- 操作系统:Ubuntu 22.04.5 LTS(jammy),x86_64
- Tyk Gateway:5.15.1(官方 packagecloud 仓库 deb 安装)
- Redis:8.10.2(packages.redis.io 官方 APT 仓库安装)
- 网关主目录:
/opt/tyk-gateway/(二进制tyk、配置tyk.conf、API 定义目录apps/、模板templates/) - systemd 服务:
tyk-gateway.service(单元文件/lib/systemd/system/tyk-gateway.service) - 网关监听端口:8080(HTTP);Redis 监听 127.0.0.1:6379
- 示例主机名:
gw01
二、前置条件
- 一台 Ubuntu 22.04 服务器(物理机或虚拟机均可),具备 root 或 sudo 权限。
- 服务器可访问以下软件源:
packages.redis.io(Redis 官方仓库)、packagecloud.io/tyk/tyk-gateway(Tyk 官方仓库)、archive.ubuntu.com。 - 已安装
curl与gnupg(导入仓库签名密钥用,缺少时执行sudo apt-get install -y curl gnupg)。 - 防火墙放行 8080 端口(本指南网关流量端口)。
- Redis 版本要求:Tyk 5.x 官方兼容矩阵要求 Redis 6.2.x 及以上(推荐 7.x/8.x)。注意:Ubuntu 22.04 官方源自带的 redis-server 为 6.0.16,低于 Tyk 5.x 官方支持基线,务必按第四章使用 Redis 官方仓库安装 7.x/8.x 版本。
三、版本选型说明
- 最新稳定版:5.15.1(2026-10-02 发布,来源:GitHub Releases,查询日期 2026-10-20)。Tyk 官方仅维护最新功能分支与 LTS 分支,新装建议直接上最新稳定版。
- 软件仓库可用版本(实测
apt-cache madison输出节选):
tyk-gateway | 5.15.1 | https://packagecloud.io/tyk/tyk-gateway/ubuntu jammy/main amd64 Packages
tyk-gateway | 5.15.0 | https://packagecloud.io/tyk/tyk-gateway/ubuntu jammy/main amd64 Packages
tyk-gateway | 5.14.0 | https://packagecloud.io/tyk/tyk-gateway/ubuntu jammy/main amd64 Packages
tyk-gateway | 5.13.4 | https://packagecloud.io/tyk/tyk-gateway/ubuntu jammy/main amd64 Packages
tyk-gateway | 5.13.3 | https://packagecloud.io/tyk/tyk-gateway/ubuntu jammy/main amd64 Packages
tyk-gateway | 5.13.2 | https://packagecloud.io/tyk/tyk-gateway/ubuntu jammy/main amd64 Packages
关键差异:仓库同时保留 5.13/5.14/5.15 各分支的补丁版本,可按需锁定版本安装;不带版本号安装会拿到最高版(本文实测 Candidate 为 5.15.1)。多版本共存/切换方法见第八章。
四、方案 A:官方 deb 仓库在线安装(推荐主线)
4.1 方案说明
Ubuntu 官方维护的安装通道是 packagecloud 上的 tyk/tyk-gateway 仓库(deb/rpm 双形态,含 GPG 签名),安装后由 systemd 托管 tyk-gateway 服务,开机自启。Tyk 依赖 Redis,因此先装 Redis 再装网关。
4.2 安装 Redis 8(官方 APT 仓库)
先更新系统索引并安装前置工具:
sudo apt-get update
sudo apt-get install -y curl gnupg
导入 Redis 官方 GPG 密钥并添加仓库(命令执行无输出即为成功):
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb jammy main" | sudo tee /etc/apt/sources.list.d/redis.list
刷新索引并安装(实测回显节选):
sudo apt-get update
sudo apt-get install -y redis-server
Get:4 https://packages.redis.io/deb jammy InRelease [3854 B]
Get:6 https://packages.redis.io/deb jammy/main all Packages [13.1 kB]
Get:7 https://packages.redis.io/deb jammy/main amd64 Packages [61.3 kB]
Reading package lists...
...
Selecting previously unselected package redis-tools.
Preparing to unpack .../redis-tools_6%3a8.10.2-1rl1~jammy1_amd64.deb ...
Unpacking redis-tools (6:8.10.2-1rl1~jammy1) ...
Selecting previously unselected package redis-server.
Setting up redis-tools (6:8.10.2-1rl1~jammy1) ...
Setting up redis-server (6:8.10.2-1rl1~jammy1) ...
Created symlink /etc/systemd/system/redis.service → /lib/systemd/system/redis-server.service.
Created symlink /etc/systemd/system/multi-user.target.wants/redis-server.service → /lib/systemd/system/redis-server.service.
⚠️ 注意:部分环境下安装末尾会出现
/usr/sbin/policy-rc.d returned 101, not running 'start redis-server.service',这只表示安装脚本未代为拉起服务,按下一步手动启动即可。
启动并设置开机自启,随后验证:
sudo systemctl enable --now redis-server
systemctl is-active redis-server
redis-cli ping
redis-server --version
实测回显:
active
PONG
Redis server v=8.10.2 sha=00000000:1 malloc=jemalloc-5.3.0 bits=64 build=accb23a4692c1fdb
Redis 默认只监听 127.0.0.1(/etc/redis/redis.conf 中 bind 127.0.0.1 ::1),单机部署无需改动;生产环境为网关集群共享时需按第九章 FAQ 调整监听与口令。
4.3 配置 Tyk 官方 packagecloud 仓库
一条脚本命令完成仓库配置(自动检测发行版、安装 apt-transport-https、导入 GPG 密钥、写入 sources.list.d),实测完整回显如下:
curl -s https://packagecloud.io/install/repositories/tyk/tyk-gateway/script.deb.sh | sudo bash
Detected operating system as Ubuntu/jammy.
Checking for curl...
Detected curl...
Checking for gpg...
Detected gpg...
Detected apt version as 2.4.14
Running apt-get update... done.
Installing apt-transport-https... done.
Installing /etc/apt/sources.list.d/tyk_tyk-gateway.list...done.
Importing packagecloud gpg key... Packagecloud gpg key imported to /etc/apt/keyrings/tyk_tyk-gateway-archive-keyring.gpg
done.
Running apt-get update... done.
The repository is setup! You can now install packages.
4.4 安装 tyk-gateway
先确认候选版本,再安装:
apt-cache policy tyk-gateway | head -4
tyk-gateway:
Installed: (none)
Candidate: 5.15.1
Version table:
sudo apt-get install -y tyk-gateway
实测回显节选:
0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
Need to get 210 MB of archives.
After this operation, 558 MB of additional disk space will be used.
Get:1 https://packagecloud.io/tyk/tyk-gateway/ubuntu jammy/main amd64 tyk-gateway amd64 5.15.1 [210 MB]
Fetched 210 MB in 16s (12.9 MB/s)
Selecting previously unselected package tyk-gateway.
Creating user and group...
Unpacking tyk-gateway (5.15.1) ...
Setting up tyk-gateway (5.15.1) ...
Post Install of the install directory ownership and permissions
Post Install of an clean install
Reload the service unit from disk
Unmask the service
Set the preset flag for the service unit
Created symlink /etc/systemd/system/multi-user.target.wants/tyk-gateway.service → /lib/systemd/system/tyk-gateway.service.
Set the enabled flag for the service unit
确认安装结果与包内布局:
dpkg -l tyk-gateway | tail -1
/opt/tyk-gateway/tyk --version
ls /opt/tyk-gateway/
ii tyk-gateway 5.15.1 amd64 Tyk Open Source API Gateway written in Go, supporting REST, GraphQL, TCP and gRPC protocols
5.15.1
apps coprocess event_handlers install middleware policies templates tyk tyk.conf tyk-gateway.service
💡 说明:Tyk 5.x 的 deb 包把全部文件集中在
/opt/tyk-gateway/下——tyk是网关二进制、tyk.conf是主配置、apps/存放文件型 API 定义、templates/是错误页模板;安装时已自动systemctl enable,即默认开机自启。服务单元定义如下(节选):
[Service]
Type=simple
User=root
Group=root
EnvironmentFile=-/etc/default/tyk-gateway
EnvironmentFile=-/etc/sysconfig/tyk-gateway
ExecStart=/opt/tyk-gateway/tyk --conf /opt/tyk-gateway/tyk.conf
Restart=always
WorkingDirectory=/opt/tyk-gateway
RuntimeDirectory=tyk
RuntimeDirectoryMode=0770
4.5 初始配置:指向本地 Redis
默认 tyk.conf 的 Redis 主机名为 redis(面向容器编排场景的默认值),单机安装需改为 127.0.0.1。编辑 /opt/tyk-gateway/tyk.conf,将 storage.host 改为 127.0.0.1:
{
"listen_address": "",
"listen_port": 8080,
"secret": "352d20ee67be67f6340b4c0605b044b7",
"template_path": "/opt/tyk-gateway/templates",
"use_db_app_configs": false,
"app_path": "/opt/tyk-gateway/apps",
"middleware_path": "/opt/tyk-gateway/middleware",
"storage": {
"type": "redis",
"host": "127.0.0.1",
"port": 6379,
"username": "",
"password": "",
"database": 0,
"optimisation_max_idle": 2000,
"optimisation_max_active": 4000
}
}
配置项解读(首次安装至少关注这四项):
listen_port:网关 HTTP 监听端口,默认 8080。secret:管理 API(Control API)鉴权密钥,所有/tyk/管理请求需携带x-tyk-authorization: <secret>请求头;上生产前务必改成高强度随机值。上文为包内默认值,便于对照。storage.host/storage.port:Redis 连接地址,单机改127.0.0.1:6379;集群环境指向 Redis VIP/哨兵。app_path:文件型 API 定义目录,systemctl restart或热加载时自动加载该目录下的 JSON 文件。
4.6 systemd 托管、启动与验证
启动服务并确认状态:
sudo systemctl restart tyk-gateway
systemctl is-active tyk-gateway
systemctl status tyk-gateway --no-pager -l | sed -n '1,8p'
实测回显(CGroup 路径已按标准 systemd 路径呈现):
active
● tyk-gateway.service - Tyk API Gateway
Loaded: loaded (/lib/systemd/system/tyk-gateway.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2026-10-20 17:46:57 UTC; 3s ago
Main PID: 4208 (tyk)
Tasks: 16 (limit: 94371)
Memory: 48.7M
CPU: 174ms
CGroup: /system.slice/tyk-gateway.service
└─4208 /opt/tyk-gateway/tyk --conf /opt/tyk-gateway/tyk.conf
启动日志抽查(journalctl 实测节选,确认 API 定义加载成功):
tyk[4208]: time="2026-10-20T17:46:57Z" level=info message="Loading API configurations." prefix=main
tyk[4208]: time="2026-10-20T17:46:57Z" level=info message="Tracking hostname" api_name="Tyk Test API" domain="(no host)" prefix=main
tyk[4208]: time="2026-10-20T17:46:57Z" level=info message="API Loaded" api_id=1 api_name="Tyk Test API" org_id=default prefix=gateway server_name=-- type=request user_id=-- user_ip=--
tyk[4208]: time="2026-10-20T17:46:57Z" level=info message="Initialised API Definitions" prefix=main
tyk[4208]: time="2026-10-20T17:46:57Z" level=info message="API reload complete" prefix=main
验证端口监听与健康检查端点:
ss -ltnp | grep 8080
curl -s http://127.0.0.1:8080/hello; echo
LISTEN 0 4096 *:8080 *:* users:(("tyk",pid=4208,fd=9))
{"status":"pass","version":"5.15.1","description":"Tyk GW"}
/hello 返回 status: "pass" 且版本号正确,说明网关进程、配置文件、Redis 连接全部就绪。安装包默认附带一个示例 API 定义(/opt/tyk-gateway/apps/app_sample.json,监听路径 /tyk-api-test/),可在日志中看到其加载记录;不需要时删除该文件并重启即可。
五、方案 B:Docker Compose 部署(备用方案)
5.1 方案说明
Tyk 官方在 Docker Hub 发布 tykio/tyk-gateway 镜像,官方快速上手即采用「网关 + Redis」双服务的 Compose 形态,适合不想污染宿主机环境、或以容器化标准交付的场景。以下为实测可用的最小编排。
5.2 前置条件
- Docker Engine 24.0+ 与 Docker Compose v2.20+(官方快速上手要求,实测于 Docker 29 环境)。
- 准备工作目录并预建 API 定义目录(官方说明网关进程以用户 65532 运行,Linux 下需预先授权):
mkdir -p /opt/tyk-compose && cd /opt/tyk-compose
mkdir -p apps
sudo chown 65532:65532 apps
5.3 配置文件与编排文件
最小 tyk.conf(注意 storage.host 填 Compose 服务名 tyk-redis):
{
"listen_port": 8080,
"secret": "tyk-gw-2026-secret",
"template_path": "/opt/tyk-gateway/templates",
"app_path": "/opt/tyk-gateway/apps",
"storage": {
"type": "redis",
"host": "tyk-redis",
"port": 6379
}
}
docker-compose.yml(项目名显式声明,网关 HTTP 映射到宿主机 8140 端口):
name: tyk-5.15.1-stack
services:
tyk-gateway:
image: tykio/tyk-gateway:v5.15.1
container_name: tyk-5-15-1-gateway
ports:
- "8140:8080"
volumes:
- ./tyk.conf:/opt/tyk-gateway/tyk.conf
- ./apps:/opt/tyk-gateway/apps
depends_on:
- tyk-redis
networks:
- tyk-net
tyk-redis:
image: redis:7.2
container_name: tyk-5-15-1-redis
command: ["redis-server", "--appendonly", "yes"]
volumes:
- redis-data:/data
networks:
- tyk-net
networks:
tyk-net:
driver: bridge
ipam:
config:
- subnet: 10.89.63.0/24
volumes:
redis-data:
配置要点:name: 固定 Compose 项目名,避免多套部署同名互相覆盖;tyk.conf 与 apps/ 挂载进网关(与 deb 安装的 /opt/tyk-gateway/ 路径一致);Redis 数据落命名卷 redis-data 持久化;网关与 Redis 同一自定义网络 tyk-net,网关用服务名 tyk-redis 访问。
5.4 启动与验证
cd /opt/tyk-compose
docker compose up -d
docker compose ps --format 'table {{.Name}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}'
实测回显:
Container tyk-5-15-1-redis Starting
Container tyk-5-15-1-redis Started
Container tyk-5-15-1-gateway Starting
Container tyk-5-15-1-gateway Started
NAME IMAGE PORTS STATUS
tyk-5-15-1-gateway tykio/tyk-gateway:v5.15.1 0.0.0.0:8140->8080/tcp, [::]:8140->8080/tcp Up 7 seconds
tyk-5-15-1-redis redis:7.2 6379/tcp Up 7 seconds
健康检查与管理 API 验证(实测回显):
curl -s http://127.0.0.1:8140/hello; echo
curl -s -H 'x-tyk-authorization: tyk-gw-2026-secret' http://127.0.0.1:8140/tyk/apis
{"status":"pass","version":"5.15.1","description":"Tyk GW"}
[]
/tyk/apis 返回 [] 表示管理 API 正常工作且当前没有已注册的 API 定义。Compose 方式下修改 tyk.conf 或向 apps/ 放入 API 定义后,执行 docker compose restart tyk-gateway(或调用热加载接口)生效。
六、方案对比与选择建议
| 维度 | 方案 A:deb 仓库 + systemd | 方案 B:Docker Compose |
|---|---|---|
| 版本来源 | packagecloud 官方仓库(含全部历史版本) | Docker Hub tykio/tyk-gateway tag |
| 进程托管 | systemd 原生(开机自启、Restart=always) | Compose/容器运行时托管 |
| 配置路径 | /opt/tyk-gateway/tyk.conf | 挂载自定义 tyk.conf,路径一致 |
| 升级方式 | apt-get install tyk-gateway=<版本> | 改镜像 tag 后 up -d |
| 是否依赖 Redis | 需宿主机自装或使用外部 Redis | 编排内自带 Redis,一体化交付 |
| 适用场景 | 传统单机/虚拟机长期运行、便于 journalctl 巡检 | 容器化环境、快速演示、标准化交付 |
选择建议:裸金属/虚拟机长期运行选方案 A,运维路径最短(apt + journalctl);已有容器化交付标准或需要与 Redis 一键起停选方案 B。两者配置文件格式完全一致,后续迁移无痛。
七、配置说明(两方案通用)
- 主配置均为
/opt/tyk-gateway/tyk.conf(JSON 格式):deb 安装直接编辑;Compose 方案编辑宿主机文件后挂载。 - 管理密钥
secret是所有管理 API 的鉴权凭据,修改后需systemctl restart tyk-gateway(或重启服务单元)并同步更新所有管理脚本中的x-tyk-authorization请求头。 - systemd 环境变量入口:
/etc/default/tyk-gateway(Debian 系),可放置TYK_LOGLEVEL等环境变量,由服务单元EnvironmentFile自动加载;留空则全部以tyk.conf为准。 - 开机自启确认:
systemctl is-enabled tyk-gateway应返回enabled(deb 安装默认已启用)。 - Redis 生产加固(集群场景):
/etc/redis/redis.conf设置requirepass、bind <内网IP>,并在tyk.conf的storage.password同步填写;开启 AOF/RDB 持久化避免限流计数与密钥缓存重启丢失。
八、升级、降级与多版本管理
仓库保留全部历史版本,锁定版本安装即可完成升级/降级(实测完整回显):
apt-cache madison tyk-gateway | head -3
tyk-gateway | 5.15.1 | https://packagecloud.io/tyk/tyk-gateway/ubuntu jammy/main amd64 Packages
tyk-gateway | 5.15.0 | https://packagecloud.io/tyk/tyk-gateway/ubuntu jammy/main amd64 Packages
tyk-gateway | 5.14.0 | https://packagecloud.io/tyk/tyk-gateway/ubuntu jammy/main amd64 Packages
降级到 5.14.0:
sudo apt-get install -y --allow-downgrades tyk-gateway=5.14.0
0 upgraded, 0 newly installed, 1 downgraded, 0 to remove and 3 not upgraded.
Need to get 203 MB of archives.
Get:1 https://packagecloud.io/tyk/tyk-gateway/ubuntu jammy/main amd64 tyk-gateway amd64 5.14.0 [203 MB]
Fetched 203 MB in 12s (17.6 MB/s)
Preparing to unpack .../tyk-gateway_5.14.0_amd64.deb ...
Unpacking tyk-gateway (5.14.0) over (5.15.1) ...
Setting up tyk-gateway (5.14.0) ...
sudo systemctl restart tyk-gateway
curl -s http://127.0.0.1:8080/hello; echo
{"status":"pass","version":"5.14.0","description":"Tyk GW"}
升级回 5.15.1 并验证(实测回显):
sudo apt-get install -y tyk-gateway=5.15.1
sudo systemctl restart tyk-gateway
/opt/tyk-gateway/tyk --version
curl -s http://127.0.0.1:8080/hello; echo
Need to get 210 MB of archives.
Get:1 https://packagecloud.io/tyk/tyk-gateway/ubuntu jammy/main amd64 tyk-gateway amd64 5.15.1 [210 MB]
Setting up tyk-gateway (5.15.1) ...
5.15.1
{"status":"pass","version":"5.15.1","description":"Tyk GW"}
⚠️ 注意:跨小版本升级前先阅读官方发布说明的 Breaking Changes(如 5.14.0 统一了应用日志格式);
/hello返回的version字段是确认版本切换生效的最直接手段。
九、常见问题(FAQ)
Q1:网关日志报 storage: Redis is either down or was not configured 怎么排查?
该错误表示网关连不上 Redis。实测将 storage.host 改成无法解析的主机名 redis 后复现:
gateway01 tyk[4568]: time="2026-10-20T17:48:49Z" level=error message="storage: Redis is either down or was not configured"
排查顺序:systemctl is-active redis-server → redis-cli ping(应返回 PONG)→ 核对 tyk.conf 中 storage.host/port/password → 修复后 systemctl restart tyk-gateway。注意此时 /hello 仍可能返回 pass(健康端点不依赖 Redis),但限流、密钥签发、热加载等管理功能全部不可用,不能以 /hello 判断 Redis 正常。
Q2:安装 redis-server 时提示 /usr/sbin/policy-rc.d returned 101, not running 'start redis-server.service'?
这不是故障:表示安装钩子按策略未自动拉起服务(常见于受限安装环境),手动执行 sudo systemctl enable --now redis-server 即可,见 4.2 节。
Q3:8080 端口被占用导致网关起不来?
用 ss -ltnp | grep 8080 找出占用进程;或编辑 tyk.conf 将 listen_port 改为其他端口后 systemctl restart tyk-gateway,再用 ss -ltnp | grep <新端口> 与 curl http://127.0.0.1:<新端口>/hello 验证。
Q4:启动日志出现 All APIs are protected with mTLS, except for the control API... 告警?
这是 Tyk 对控制面安全基线的常规提醒:当网关启用了 mTLS 保护的 API 而管理 API(Control API)未单独隔离时提示加固。默认 HTTP 安装下该告警属预期噪音可忽略;若启用 mTLS,建议为 Control API 配置独立端口(control_api_port)或独立主机名。
Q5:curl /tyk/health 返回 Health checks are not enabled for this node?
健康检查详情接口默认关闭(实测回显:{"status":"error","message":"Health checks are not enabled for this node"})。在 tyk.conf 增加 "health_check": {"enable_health_checks": true, "health_check_value_timeouts": 60} 并重启即可开启。日常巡检用 /hello 已足够。
十、卸载与清理
卸载网关(实测回显,配置与 /opt/tyk-gateway/ 一并清除):
sudo apt-get purge -y tyk-gateway
0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded.
Removing tyk-gateway (5.15.1) ...
Purging configuration files for tyk-gateway (5.15.1) ...
dpkg -l tyk-gateway 2>&1 | tail -1
ls /opt/tyk-gateway
dpkg-query: no packages found matching tyk-gateway
ls: cannot access '/opt/tyk-gateway': No such file or directory
彻底清理软件源(可选):
sudo rm -f /etc/apt/sources.list.d/tyk_tyk-gateway.list
sudo rm -f /etc/apt/keyrings/tyk_tyk-gateway-archive-keyring.gpg
sudo apt-get update
如需一并卸载 Redis:sudo apt-get purge -y redis-server redis-tools && sudo rm -f /etc/apt/sources.list.d/redis.list;数据目录默认在 /var/lib/redis,确认无需保留后再删除。
十一、参考链接
- Tyk 官方安装文档:https://tyk.io/docs/tyk-oss-gateway/install/
- packagecloud 官方软件仓库:https://packagecloud.io/tyk/tyk-gateway
- Redis 官方 APT 仓库:https://packages.redis.io/
- Tyk Gateway 发布说明:https://tyk.io/docs/developer-support/release-notes/gateway
- 站内相关文档:《Tyk 5.15 介绍与选型指南》、《Tyk 5.15 配置参数详解》、《Tyk 5.15 常用 CLI 命令详解》