跳到主要内容

网关

简介

网关是一个基于 Nginx 的反向代理服务器,负责根据用户访问的域名转发到各个实际的服务。由于目前生如夏花的全部服务都部署在同一个服务器上,网关的实现方式是在 80 和 443 端口监听 HTTP/HTTPS 请求,然后把它们都统一为 HTTPS 请求转发到 3000 端口(API)、4000 端口(论坛)或 5000 端口(邮件管理面板)。

开发

Cloudflare API 令牌的获取

网关在构建时会向 Let's Encrypt 证书颁发机构申请 SSL 证书,因此我们首先需要让容器能访问 Cloudflare。登录 Cloudflare 后,在个人资料 - API 令牌中创建新令牌,使用「编辑区域 DNS」的模板,然后在区域资源中选择 viva-la-vita.org 即可。

m2rp64

编写代理配置

conf.d 文件夹中对每个服务编写代理的配置,包括域名、转发请求头和端口等等。典型的配置如下:

server {
listen 80;
server_name api.viva-la-vita.org;
access_log /var/log/nginx/api-access.log;
error_log /var/log/nginx/api-error.log;

location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;

proxy_pass http://host.docker.internal:3000/;
}
}

构建

由于涉及到从容器内部访问到宿主网络的问题,这个镜像暂时不能用 CI 自动构建。在本地至少运行一次 docker compose up -d 后,本地会产生一个名为 ghcr.io/viva-la-vita/gateway 的镜像。

部署

首先上传镜像

docker push ghcr.io/viva-la-vita/gateway

然后部署

DOCKER_HOST="ssh://vultr" docker compose -f docker-compose.yml up -d