FoundryVTT终极部署解决方案

PatchNote更新日志

20/12/15 更新安装服务器步骤图片

21/02/11 更新重定向低频资源到对象存储、原理图

21/05/13 更新安宽+按量双网卡优化

0x00 原理图

原理图

0x01 服务器初始化

【本步骤大约需要3分钟】

你需要初始化一台云服务器,基本配置要求如下(云服务器建议选择阿里、腾讯、华为等。本次使用华为云作为示范):

  • CPU:不小于1U
  • 内存:不小于1G
  • 带宽:不小于3M(或使用按量付费模式)
  • 系统:CentOS 7.3

然后需要进入云服务器控制面板设置以下内容:

  • 配置Root帐号密码。
  • 开放下列端口的安全组:22(SSH)、80(Http)、443(Https)、8888(宝塔面板)

最后启动服务器,等待服务器正常开机。


0x02 安装面板(以宝塔面板为例)

【本步骤大约需要3分钟】

使用Putty或者云服务器提供的远程Shell登录云服务器,登入后若为非Root用户(阿里云、腾讯云居多),则需要执行以下步骤:

sudo su root

cd $home

然后执行安装面板的操作,可以访问宝塔官网获取面板安装脚本,https://www.bt.cn/download/linux.html

在这里我们执行:

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

安装过程中,我们需要输入一次 “Y” 以确认安装,安装完毕后会弹出如下提示

记录下Shell中显示的面板网址、登入帐号、密码。以后我们会用到。然后我们就可以关闭这个shell窗口了。

可选步骤:跳过账号绑定,请执行以下内容:

sed -i "s|if (bind_user == 'True') {|if (bind_user == 'REMOVED') {|g" /www/server/panel/BTPanel/static/js/index.js


0x03 初始化面板

【本步骤大约需要10分钟】

访问从第二步获取的面板网址,并输入帐号密码进入宝塔面板。进入面板后需要绑定宝塔帐号(若在上方执行了跳过帐号绑定,则可以直接进入系统)。进入系统后,弹出初始化面板对话框,在这里我们左侧的LNMP模式,但是仅勾选最上方的安装Nginx,并点击确定系统会将nginx加入安装队列。

在等待nginx安装的过程中,我们还需要安装一下PM2管理器。打开【软件商店】-【运行环境】并找到【PM2管理器】。点击后方的安装,系统也会将PM2管理器加入安装队列。

接下来我们点击左上角的黄色方框,等待安装完毕。 (此处需要耐心等待5-8分钟)

**请注意,本步骤完全安装完成后方可进行下一步骤


0x04 安装Fvtt系统程式

【本步骤大约需要1分钟】

打开宝塔面板首页中的【宝塔SSH终端1.0】,然后输入步骤1的Root帐号密码。并等待系统连接。然后再窗口中执行安装脚本:

wget https://sh.peatsuki.com/fvtt/BTPanelInstallFVTT.sh && sh BTPanelInstallFVTT.sh

等待安装完毕后FVTT会自动加入PM2管理器并启动。


0x05 配置反向代理

【本步骤大约需要2分钟】

首先我们回到 【软件商店】-【运行环境】 ,将【PM2管理器】添加到面板管理

然后我们点击【PM2管理器】选择项目列表,然后点击后方的【映射】。再新打开的窗口中输入你希望使用的域名,若不想使用域名,则直接输入服务器IP。

若此步使用了域名,需要进入域名控制面板中将DNS,配置该域名的解析地址为服务器IP。 我们找到【文件】并定位到如下目录【/root/foundrydata/Config/ options.json】然后右键编辑并修改下列两项内容:

"hostname": "your.domain.com",
"proxyPort": 80,

之后,我们就可以通过域名,或者IP直接访问FVTT。(不需要添加端口号)


0x06 配置动静分离和静态CDN

【本步骤大约需要8分钟】

因为FVTT本身的原因,无法支持简单的动静分离配置,websocket也无法简单的通过重定向来使用。故采取传统的静态内容301到第二个域名的方式进行动静分离。好在由于FVTT本身对于静态没有过于严格的校验,所以可以很简单的通过复制站点创造两份内容。

请使用05步骤创建一个静态专用域名映射,域名需要和主站点不相同。然后再网站栏,主站点找到配置文件,将其替换成如下内容(其中 your.domain.com 请修改为你的域名):

server {
server_name your.domain.com;
listen 80;
client_max_body_size 300M;
location ~ .*.(jpg|png|gif|webm|webp|woff2|svg|wav|mp3|hdr|db|js|css)$
{
rewrite ^(.*)$ http://your.domain.com$1 permanent;
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass http://localhost:30000;
}
}

然后再修改副站点的配置文件,将其替换成如下内容:

server {
server_name your.domain.com;
listen 80;
client_max_body_size 300M;
location / {
proxy_set_header Host $host;
fastcgi_hide_header Cache-Control;
add_header Cache-Control "public, max-age=0, s-maxage=3153600";
add_header Access-Control-Allow-Origin "*";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass http://localhost:30000;
}
}

然后我们打开CDN控制面板,将静态专用站点添加到CDN中,并配置对应的缓存规则。

然后我们前往域名管理中,将CDN提供的Cname配置到对应的静态站域名里。然后我们就可以静等CDN生效,通过主域名访问FVTT了。


0x07 【可选】配置对象存储

创建一个对象存储,将存储桶按照 FoundryVTT 用户目录下的Data目录搭建。

比如 /worlds/tomb-of-annihilation/

然后修改主域名的配置文件,新增以下字段(其中os.domain.com请修改为你的对象存储桶域名)

    location ^~ /worlds/tomb-of-annihilation/ {
        rewrite ^(.*)$ http://os.domain.com$1 permanent;
    }

然后进入对象存储或者对象存储关联的CDN中,找到【Response Header配置】,新增一项 Access-Control-Allow-Origin ,值为:*。这样FoundryVTT在跨域的情况下在可以正常加载图片。


0x08 【可选】配置SSL

【本步骤大约需要5分钟】

若在上方的第5步选择了域名,则可以进行SSL配置。你需要申请一个对应域名的免费证书,然后将证书放置于/wwwroot/your.domain.com/下。 若在上方第六步中配置了动静分离,则需要两份对应的证书。然后在两个站点的配置文件修改如下字段:

listen 443 ssl;

并在上方字段下方添加如下两行:

ssl_certificate /wwwroot/your.domain.com/fullchain.pem;
ssl_certificate_key /wwwroot/your.domain.com/privkey.pem;

然后修改主站点配置文件中下方内容:

rewrite ^(.*)$ https://your.domain.com$1 permanent;

最后在两个站点配置文件最底部添加如下内容:

# Optional, but recommend. Redirects all HTTP requests to HTTPS for you
server {
if ($host = your.domain.com) {
return 301 https://$host$request_uri;
}
listen 80;
listen [::]:80;
server_name your.domain.com;
return 404;
}

然后前往CDN,将静态证书配置到CDN上,然后设置回源类型为HTTPS即可。


0x09 双网卡并行方案

若需要使用双网卡方案,购买的服务器必须是【云服务器】而非【轻量应用服务器】,且你的计费类型必须为【带宽上移计费】。

首先、在你的服务器中添加第二块网卡,找到云服务器-【弹性网卡】,单机【绑定弹性网卡】增加第二块网卡。

其次、进入弹性公网IP页面,申请按量付费IP,并将带宽上限拉满。

然后在弹性IP页面新申请的IP信息后方点点击绑定,并选择上方刚才新建的弹性网卡即可。

【可选部分】:将按量IP和按宽带IP分别绑定两个域名,其中按量IP直接配置为服务器IP,按宽带IP配置为CDN加速。当访问按量付费IP连接FVTT时,从nginx上,将/worlds目录重定向到按宽带IP并使用CDN加速静态资源加载。


0x10 【提示】故障排错

1、目前已知DAE系统与动静分离存在BUG,若需要使用DAE系统,则需要将 /modules/dae/ 目录排除动静分离列表。具体需要新增主站配置文件如下:

location ^~ /modules/dae/ {
proxy_pass http://localhost:30000;
}

2、目前已知Midi-qol系统与动静分离存在BUG,若需要使用,则需要将 /modules/midi-qol/ 目录排除动静分离列表。具体需要新增主站配置文件如下:

location ^~ /modules/midi-qol/ {
proxy_pass http://localhost:30000;
}