获取 Angela 部署 Angela 资源包

部署 Angela 资源包

严格来说,Angela 并非一个 V2board 主题,而是一个独立的 Web 应用,仅通过 API 与 V2board 通信。因此,Angela 并不能像 V2board 主题那样通过简单拖动到 themes 目录来安装。

Angela 的部署流程分为两个部分:

  1. Angela Web 应用的部署
  2. Angela Web 应用与 V2board API 的对接

部署 Angela Web 应用

与任何其他的独立 Web 应用一样,Angela 的资源包内包含的仅仅是一大堆静态文件。

要部署 Angela Web 应用,您只需要:

  1. 解压 Angela 资源包到您的 Web 服务器的某个目录下
  2. 配置 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 管理后台。