部署 Angela 资源包
严格来说,Angela 并非一个 V2board 主题,而是一个独立的 Web 应用,仅通过 API 与 V2board 通信。因此,Angela 并不能像 V2board 主题那样通过简单拖动到 themes
目录来安装。
Angela 的部署流程分为两个部分:
- Angela Web 应用的部署
- Angela Web 应用与 V2board API 的对接
部署 Angela Web 应用
与任何其他的独立 Web 应用一样,Angela 的资源包内包含的仅仅是一大堆静态文件。
要部署 Angela Web 应用,您只需要:
- 解压 Angela 资源包到您的 Web 服务器的某个目录下
- 配置 Web 服务器以正确地处理 Angela 的静态资源
以下是一段最基本的适用于 Angela 的 Nginx 配置示例:
location / {
root /path/to/angela/resources; # Angela 资源包解压后的目录
try_files $uri $uri/index.html /index.html =404;
}
这一段配置必须放在
server
块的内部。
建议将其作为最后一个location
配置,以避免使其他配置失效。
添加多语言支持(若需要)
如果您的 Angela 资源包是多语言的,您需要进行额外的几步配置,以便让您的 Web 服务器能够根据用户请求头中的 Accept-Language
来提供对应的资源。
对于 Nginx,您可以使用 map
关键字来实现这一功能:
map $http_accept_language $accept_language {
~*^zh-TW zh-TW;
~*^zh-HK zh-HK;
~*^zh zh;
~*^en en;
~*^ru ru;
}
这一段配置必须放在站点配置的
server
块的之前:map $http_accept_language $accept_language { ~*^zh-TW zh-TW; ~*^zh-HK zh-HK; ~*^zh zh; ~*^en en; ~*^ru ru; } server { ... }
以上的这一段配置将会根据用户请求头中的 Accept-Language
来设置一个变量 $accept_language
。请根据您选择的语言删减配置内容。
另外,下面的这段配置会在 Accept-Language
没有匹配到任何语言时,使用 en
作为 $accept_language
的默认值:
if ($accept_language ~ "^$") {
set $accept_language "en";
}
这一段配置需要放在所有
location
块的前面。
最后,只需要略微修改原先的 location
配置,让其根据 $accept_language
来选择对应的资源即可:
location / {
root /path/to/angela/resources; # Angela 资源包解压后的目录
# 修改下面的这一行
try_files $uri $uri/index.html $uri/$accept_language/index.html /$accept_language/index.html /index.html =404;
}
对接 V2board API
截止到目前,您的 Angela Web 应用已经部署完毕了。然而,如果您尝试访问绑定的域名,您会发现虽然 Angela 可以启动,但是却无法正常工作,并且会有页面加载失败的报错。这是因为 Angela 目前还没有与 V2board API 完成对接,因此无法加载必要的数据。
Angela 完成启动后,会尝试请求当前域名下的 /api/
下的 API 端点以加载必要的数据。因此,要使 Angela 能够正常工作,您需要在您的 V2board 服务器上配置一个反向代理,将 /api/
下的请求转发到 V2board API 的地址。
对于 Nginx,这样的反向代理可以通过以下的 location
配置实现:
- 通过内网连接 V2board API(部署在同一台机器上):
location /api { proxy_pass http://127.0.0.1:7001/api; # <-- V2board API 的内网地址 proxy_set_header Host $host:$server_port; }
- 通过公网连接 V2board API:
location /api { proxy_pass https://your.backend/api; # <-- V2board API 的公网地址 proxy_set_header Host $proxy_host:$server_port; proxy_ssl_server_name on; proxy_ssl_name $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
通过公网连接 V2board API 时,V2board 代码中获取到的站点地址会是 V2board API 的地址,而不是 Angela 的地址。您可能会需要在 V2board 管理后台中手动修改站点地址为 Angela 的地址。
aaPanel - 放行 LICENSE 文件
如果您使用 aaPanel 部署 Angela,您可能会发现无法正常访问到站点,这是因为 aaPanel 默认会拦截 LICENSE 文件的访问。要解决这个问题,在 aaPanel 的 Nginx 配置中找到并移除以下配置:
# Forbidden files or directories
location ~ ^/(.user.ini|.htaccess|.git|.env|.svn|.project|LICENSE|README.md)
{
return 404;
}
最简化完整配置示例
map $http_accept_language $accept_language {
~*^zh zh;
~*^en en;
}
server {
listen 80 ;
listen [::]:80 ;
server_name angela-demo.misstea2.live;
if ($accept_language ~ "^$") {
set $accept_language "en";
}
location /api {
proxy_pass http://127.0.0.1:7001/api;
proxy_set_header Host $host:$server_port;
}
location / {
root /www/sites/angela-demo.misstea2.live/public;
try_files $uri $uri/index.html $uri/$accept_language/index.html /$accept_language/index.html /index.html =404;
}
}
常见问题
我一定要为 Angela 分配一个新域名吗?
在部署的过程中,您确实需要为 Angela 分配一个新的域名。然而,部署完成后,您可以为 V2board 分配一个新的域名,然后再重新将 V2board 之前的域名分配给 Angela。这样,在部署完成后,您的用户可以直接通过原先的域名访问 Angela,但您会需要通过新的 V2board 域名来访问 V2board 管理后台。