如何在tcb上装om并使其变身实用做站版

这篇文章给大家介绍如何在tcb上装om并使其变身实用做站版,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

从事雅安移动机房,服务器租用,云主机,网络空间,域名注册,CDN,网络代维等服务。

在tcb上安装onemanager

首先,从http://github.com/qkqpttgf/OneManager-php下载代码,先不上传到cloudbase空间,本地修改platform/tencentscf.php的GetGlobalVariable($event){...}函数体中的$_GET = $event['queryString']为$_GET = $event['queryStringParameters'],这样?admin等参数传递就正确了。然而程序还是得不到入口index.main_handler,直接使用cloudbase后台的新建函数只能用index.man作入口,手动修改入口可以执行,但程序会进一步得不到环境变量,我们可以统一使用cloudbase cli命令行工具全面定制:

cloudbase cli是一个nodejs程序。按腾讯产品文档在本地安装后tcb login --key登录,填入你的用户access keyid和keysecret,在本地做一个待上传目录,在此目录下写如下内容的cloudbaserc.json,同时准备子目录:functions/myonemanager/下放经过上面修改的onemanager代码,到待上传目录(你也可以建一个目录myonemanager,把om源码和cloudbaserc.json统统放进去不用建functions/myonemanager子目录,但是下面cloudbaserc.json中的functionroot要改为../):

{
  "envId": "你的环境",
  "functionRoot": "functions",
  "functions": 
  [{
    "name": "myonemanager",
    "timeout": 6,
    "runtime": "Php7",
    "installDependency": true,
    "handler": "index.main_handler有了这个就不用改入口了",
    "envVariables": {
      "Region":"ap-shanghai",
      "SecretId":"你的腾讯accesskeyid",
      "SecretKey":"你的腾讯accesskeysecret",
      "admin": "你要定义给后台的密码,明文",
      "sitename": "站点名,找一个在线base64转码后,将结果填这",
      "hideFunctionalityFile": "1",
      "disableChangeTheme": "1",
      "passfile": "密码文件名",
      "theme": "主题名",
      "timezone": "8",
      "disktag": "盘名1|盘名2",

      "盘名1": "{\"Drive_custom\": \"on\",\"Drive_ver\": \"CN\",\"client_id\": \"你的azure app portal for onemanager的client app id明文\",\"client_secret\": \"你的azure app portal for onemanager的client app secretbase64明文找一个base64转成结果填这\",\"diskname\": \"明文找一个base64转成结果填这\",\"domain_path\": \"明文找一个base64转成结果填这,形式是域名1:/目录1|域名2:/目录2......\",\"refresh_token\": \"看接下来手动获取方法\",\"token_expires\": 9999999999}",

      "盘名2": "{同盘1生成方式}"

    }
  }]
}

可以看到盘名1后面的参数是一个字串,然而它本身也是个json,将json转成字串供cloudbase识别的方法是将所有"都\转义一下,如果你嫌麻烦实在想图方便,可以在正常非cloudbase区或vps上直接搭建一个onemanager,注册盘,然后将结果填到上面。 上面的clientid和secretid,正常方式安装od是自动的,但其实你也可以手动https://portal.azure.cn/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps去生成,我这里是互联,新注册->任何组织目录中的帐户,多租户->重定向url:web,https://scfonedrive.github.io,这里可以直接看到client id了。看左边列,api权限不用设置,证书和密码->新客户端密码,期限永久,就看到secret了。 至于refresh token,也可以从https://service-36wivxsc-1256127833.ap-hongkong.apigateway.myqcloud.com/release/scf_onedrive_filelistor手动得到。token_expires填10位9。

cloudbaserc.json准备完毕,最后cd到这个目录,cloudbase functions:deploy,这样你就得到了一个完全手动和程序化的安装方式,后台改变256m到128m,触发路径/或/xx不能是/xx/结尾,以后deploy,提示覆盖直接确认即可。

更多让onemanager实用做站的考虑

我们知道,云函数主要是处理api结果的传送,在这里不能传递大量数据,保证一次http所有结果在最短的ms里完成,否则按调用次数和调用时长及内存占用的云函数会相应产生相对高的花费,查云函数后台,确保每次2ms内的调用是合理和正常的。故onedrive和托管onemanager等程序的空间(这二者最好是同一地域的,比如世纪互联配国内空间,国际版配港区空间)对提高调用速度至关重要,有些onedrive列表程序支持,前后端分离,云函数纯粹后端只返回api结果不包前端渲染。api速度快(列文件很快)如fodi.

处理静态资源问题和定制模板:

由于od是一个特殊的程序,它定位于网盘文件列表而非带资源的网站展示,它绑定的工作域名下,每一个路径,如果不是显式的?setup这种参数,就是文件调用,因此,它对所有js,css的引用,都是外部的(如果发现网页慢,将它换到快点的cdn地址)。这也是为了上面说的一次request/respon能尽快调用完成,所以od的templates都是不带静态asserts的。------ 所以并不推荐将静态template资源放在代码theme下,然后根据判断它是不是网盘文件进一步处理。

谈到od的templates,其实它也是网页模板技术的运用(本质就是定义一系列开头结尾组合形式的模板变量块,然后替换),你可以查看已有template自己写一个比如最简单的那个nexmoe1.html,,模板体逻辑通常是这样的:开头icon处理块,管理相关的style,前端样式style块,外部css和jss引用,渲染omf,md文件的逻辑块(require一个maked js然后根据md content在页面直接render),。列文件和目录的逻辑(其实又包括div逻辑块,js逻辑块),blaaaa.....。

加速和cdn:

我们知道网站速度至关重要。不光对用户对运营也是如此。要实用做站的话,必须要配cdn。对于CDN加速,比如要求文件静态化为各个url路径为目录名的目录下的index,html。onemanager有没有相关方面的支持呢

od是带缓存的。主要是存取到云函数backend空间的system temp目录中。这样列文件和目录的时间会相对变少。程序效果和体验会最佳。od内部对text文件(包括markdown)都是有1800秒缓存的。这个过程在common.php中,查看fetch files,render list主要函数,gethiddenpass()等类似函数。

对于md,上面说到它是在客户端通过client js来渲染从服务端拉取下来的内容的(如果发现大量md的网站慢,有可能这个js处在慢速cdn上,换个),,对于html则是跟md一样直接下载并output不经过主题渲染处理,相当于部署了一个静态页面。

本来它是在客户端生成的。其实在服务端也可完成md,比如下载一个php的渲染器mdparser.php,再在index.php中include 'mdparser.php';common.php中在对应headmd处理位置的地方作修改:

$parser = new HyperDown\Parser;            
$headmd = str_replace('', $parser->makeHtml(fetch_files(spurlencode(path_format(urldecode($path) . '/head.md'),'/'))['content']['body']), $tmp[0]);

$tmp = splitfirst($html, '');
$html = $tmp[0];
$tmp = splitfirst($tmp[1], '');

在服务端生成html作为api结果返回会稍微增加api时间,但结果更合理。你可以进一步把渲染好的html结果保存在cache中对应md地址的子目录index.html(而不是原来的raw md content)中,然后下回fetch到这个md地址,直接取cache,按处理html的方式,直接render。这样的“全站伪静态”对cdn也是有用的。

你也可以修改refreshcache的逻辑,od有一个refresh cache,它是先切换到当前目录下就refresh哪个目录的cache。且只工作在手动管理模式下,其实你可以把它做成自动静态化的,浏览到对应md位置就生成对应index.html到cache/md命名子目录下。然后在后台做一个一键md全站生成html到cache静态化按钮和功能。或者生成到cloudbase的存储中。---- 已经有这样的程序了,静态网站生成器作为云函数,生成静态文件到oss,云存储。像极了自动化的github page action。

关于如何在tcb上装om并使其变身实用做站版就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


当前标题:如何在tcb上装om并使其变身实用做站版
当前地址:http://pwwzsj.com/article/ihpies.html