基于fghrsh/live2d_api与fghrsh/live2d_demo可自建api与托管静态文件。
目前部署在www.dogcraft.top/wfq/进行测试。
API后端服务部署方法
通过观察发现,fghrsh/live2d_api是基于PHP的开箱即用型的api服务,在一般的基于php的动态博客里一般都会有已经安装配置好了的nginx+php环境,这里只需要将nginx配置文件写好就行了。
首先将github上的repo弄到本地
git clone https://github.com/fghrsh/live2d_api.git
这个repo比较大,如果网络不好要下载好一会,可以趁下载时间搞一下静态的html与JavaScript资源。
下载完成之后,配置一下nginx
server {
listen 80;
listen 443 ssl http2;
ssl_certificate /root/key/dog.pem;
ssl_certificate_key /root/key/dog.key;
server_name live2dapi.dogcraft.top; #域名
root /var/www/live2dapi/live2d/; #live2d_api的路径,确保不会出现权限问题
index index.html index.htm index.php;
add_header 'Access-Control-Allow-Origin' '*'; #允许跨域,这点很重要
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
add_header 'Access-Control-Allow-Headers' 'Content-Type';
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
#下面是php的相关设置
location ~ .*\.php(\/.*)*$ {
root /var/www/live2dapi/live2d/;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
需要注意的跨域问题,如果要在其他域名下使用live2d,或采用前后端分离,在nginx的配置里面要有
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
add_header 'Access-Control-Allow-Headers' 'Content-Type';
如果配置正常就可以进行下一步了。
前端html配置
通过阅读fghrsh/live2d_demo的readme.md可以通过autoload.js
的方式进行使用,只需要在相关页面添加一行JavaScript即可快速部署。但经过实践直接拿下来的源代码并不能直接使用,需要做出一系列的修改。release里的可以直接拿来用,我一开始没看见……
首先将github上的repo弄到本地
git clone https://github.com/fghrsh/live2d_demo.git
这个操作就快很多了
然后配置nginx
先配置nginx是为了能够方便调试,这些文件主要都是静态文件,nginx配置很简单,不要忘了加入跨域相关的配置
server {
listen 80;
listen 443 ssl http2;
ssl_certificate /root/key/dog.pem;
ssl_certificate_key /root/key/dog.key;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
add_header 'Access-Control-Allow-Headers' 'Content-Type';
server_name live2d.dogcraft.top;
root /var/www/live2dhtml/live2d/;
index index.html index.htm index.php;
}
对相关的js文件进行本地化修改
通过对原版的JavaScript观察,发现在调用js与css时,调用的*.min.js
和*.min.css
但repo里面没有这些东西,应该去掉min。为了防止写相对路径在其他url下使用失效,把相关路径改为绝对的url,改完之后的autoload.js
:
try {
$("<link>").attr({href: "https://live2d.dogcraft.top/assets/waifu.css?v=1.4.2", rel: "stylesheet", type: "text/css"}).appendTo('head');
$('body').append('<div class="waifu"><div class="waifu-tips"></div><canvas id="live2d" class="live2d"></canvas><div class="waifu-tool"><span class="fui-home"></span> <span class="fui-chat"></span> <span class="fui-eye"></span> <span class="fui-user"></span> <span class="fui-photo"></span> <span class="fui-info-circle"></span> <span class="fui-cross"></span></div></div>');
$.ajax({url: "https://live2d.dogcraft.top/assets/waifu-tips.js", dataType:"script", cache: true, success: function() {
$.ajax({url: "https://live2d.dogcraft.top/assets/live2d.js", dataType:"script", cache: true, success: function() {
/* 可直接修改部分参数 */
live2d_settings['hitokotoAPI'] = "hitokoto.cn"; // 一言 API
live2d_settings['modelId'] = 1; // 默认模型 ID
live2d_settings['modelTexturesId'] = 0; // 默认材质 ID
live2d_settings['modelStorage'] = false; // 不储存模型 ID
/* 在 initModel 前添加 */
initModel("https://live2d.dogcraft.top/assets/waifu-tips.json");
}});
}});
} catch(err) { console.log("[Error] JQuery is not defined.") }
其他的js也可以进行一样的修改。
最后修改waifu-tips.js
里面的后端api,改成刚刚自建的那一个就行了,其他的可以酌情修改。
测试与部署
找一个合适的网页,在</body>标签加入
<script src="https://live2d.dogcraft.top/assets/autoload.js"></script>
就可以了,如果提示没有jQuery,则在网页</head>前方加上
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
从cdn处导入jQuery
对服务器的影响
通过后期观测,发现每加载一个live2d模型需要多加载1-2MB的静态资源,可以采用cdn等方式进行进行加速,这个基于php的api也可以进行资源的动静分离,可以把相关的静态资源转移到cdn的云存储上,让api服务仅仅起到一个301跳转的作用。同样静态文件也可以通过github使用jsdeliver的cdn进行加速。不过我的网页好几周都不会有一个人来看,多这1-2MB的静态资源也无所谓……
啊啊啊,我终于可以了,
感谢博主!!
我自建api一直存在跨域的问题,
加了Allow-Origin一直没有效果,看着楼主把这个写在了location外面,我尝试了一下,终于生效了。。
我本来一直写在location里边!!