分类 博客建设 下的文章

一、VueTorrent简介

VueTorrent是一个基于Web的BitTorrent客户端,它提供了一个干净、直观的用户界面,让您可以轻松地管理和下载torrent文件。VueTorrent利用了现代Web技术(如Vue.js、Node.js和WebTorrent)的强大功能,使得在浏览器中下载和分享大型文件变得轻松便捷。

VueTorrent的特点

  • 简洁的用户界面:VueTorrent的设计简约直观,用户可以快速上手并找到所需的功能。
  • 跨平台支持:由于是基于Web的技术,VueTorrent可以在任何操作系统和设备上运行,只要有现代浏览器。
  • 实时进度跟踪:VueTorrent会实时显示种子和下载任务的进度,方便您随时了解当前状态。
  • 种子创建功能:除了下载,VueTorrent还支持创建和分享自己的种子文件。
  • 多种下载选项:VueTorrent允许您自定义下载设置,例如选择要下载的文件、设定全局下载速度限制等。
  • 可扩展性:VueTorrent支持插件系统,您可以添加新功能以适应您的需求。
  • 支持日间/夜间模式:老外开发的系统,非常人性化,支持夜间模式

- 阅读剩余部分 -

【保姆级教程】CentOS7宝塔面板部署兰空图床

前言:之前一直用的chevereto做图床,用了五六年了,但是最近不知道怎么回事,首页连图片都展示不出来了。搞了很久没有搞定,于是转向了是用另外一款兰空图床,记录一下部署教程。

兰空图床

一、环境要求

兰空图床要求PHP版本大于等于PHP >= 8.0.2,而数据库要求为Mysql 5.7+/PostgreSQL 9.6+/SQLite 3.8.8+/SQL Server 2017+中的一种。

建议的版本是PHP 8.1 + MySQL 5.7,如果使用的是PHP 8.2,在安装的时候会报错“服务器错误”:

需要参考文章安装兰空图床时出现500服务器错误的解决方案来解决。

在安装前,先到官网下载源码文件放到网站上,下载地址:lsky releases

二、安装PHP扩展

图床依赖fileinfo/imagemagick/exif三个扩展,在php的控制面板中可以一键安装:

三、允许使用不安全的函数

部分函数因为安全问题在安装时默认被禁止使用,但图床要使用,需要在禁用列表中删除。

用到的函数列表:readlink/symlink/putenv/getenv/exec/shell_exec/chmod/chown

PHP的配置文件中移除对这些函数的删除即可:

禁用函数

四、关闭防跨站攻击

“网站 - 网站目录”的配置中,关闭“防跨站攻击”,同时将运行目录设置为/public

五、设置伪静态

在网站的面板中,填入以下代码到伪静态配置中:

location / {
  try_files $uri $uri/ /index.php?$query_string;
}

六、开始安装

用浏览器打开网站,会自动进入安装页面并检查环境是否满足,如果不满足则会报错,根据错误信息检查上面的环境都弄好了:

安装好后点击“下一步”就可以进入安装引导页面了:

填写数据库和管理员信息:

完成安装:

七、安装完成后的配置

7.1 禁止访客注册和上传

在控制面板的系统设置中,可以关闭注册功能和游客上传功能,如果只是给自己用,建议全部关闭:

7.2 修改存储空间大小

在系统设置中修改图床的容量,默认是500M,可根据需要调整大小:

7.3 修改存储位置

兰空图床支持本地存储以及多类远程存储,比如腾讯云的COS以及阿里云的OSS等。在存储策略中可以新建策略来设置图片的存储位置:

一、问题情况

部署兰空图床时,提示“服务器错误”,错误码500:

兰空图床500服务器错误

问题原因

我的部署环境为PHP8.2,官方建议的是8.1,版本不对有些代码不兼容

二、解决方案

2.1 修改代码兼容

修改vendor/nesbot/carbon/src/Carbon/Traits/Creator.php的第928行,将

private static function setLastErrors(array $lastErrors)

修改为:

private static function setLastErrors($lastErrors)

参考:Laravel Carbon\Carbon::setLastErrors()

几个月前,沉寂了多年的typecho终于又更新版本了,先是更新到了1.20,然后没多久又更新到了1.2.1。

当时发现更新后立马就把博客给更新了,结果使用过程中发现配置的复选框一直无法保存。最后查看了github的issue,才找到了问题原因。

在typecho/var/Widget/Themes/Config.php的第74行:

$form->getInput($key)->value($this->options->{$key}); 

这行代码中,从options中拿值,但是因为测试复选框新加入的,options中并没有对应的值,导致给了一个空的值给测试复选框 $this->getInput('testBlock')

当主题选项保存的时候,is_array 中的数据是从 $this->getInput('testBlock') 拿 value,但前面程序已经设置为空值,所以在收集提交选项数据时候,以下代码判断不通过,返回 null ,最终导致保存勾选无效.

解决方案

修改上面的代码为:

if (isset($this->options->{$key})) {
    $form->getInput($key)->value($this->options->{$key});
}

参考

主题启用后,添加复选框选项无效

fix: adding checkbox options after theme initialization cannot be saved.

typecho一直都是用的mysql作为数据库存储,最近因为服务器到期需要迁移网站,所有的服务都转到docker了,迁移起来略显麻烦,因此就想抛弃mysql了,直接使用sqlite作为存储。这样迁移网站只要复制一下db文件就可以了,不用每次都得搭个mysql或者容器,简单方便。

typecho本身就是支持sqlite的,只不过在安装的时候如果选择了mysql,就没有办法在界面上更改数据库类型了,要修改只能通过改代码配置来完成。数据库的配置放在网站根路径下的config.inc.php文件中,有这么一段:

/** 定义数据库参数 */
$db = new Typecho_Db('Pdo_Mysql', 'tp_');
$db->addServer(array (
  'host' => 'db',
  'user' => 'xxxxx',
  'password' => 'xxxxxx',
  'charset' => 'utf8',
  'port' => '3306',
  'database' => 'typecho',
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);

要想改成sqlite的方式,只需修改配置为以下内容即可:

/** 定义数据库参数 */
$db = new Typecho_Db('Pdo_SQLite', 'tp_');
$db->addServer(array (
  'file' => '/xx/xx/xx/xx.db',
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);

修改之后即可生效,但这里还缺少了重要的一步:迁移数据。如何迁移数据可参考使用Navicate迁移Mysql到Sqlite

迁移完成后的几处安全建议:

  1. 不要将db文件放到网站目录内,可能导致db文件通过外部链接下载
  2. db文件命名尽量随机,不要轻易被人猜出
  3. 如果db文件放在网站目录内,要在nginx配置设置访问db文件直接返回404

迁移之后如何验证切换成功了:

  1. 确认网站可以正常访问
  2. 每查看一次网站,都会导致db文件更新,可通过后台查看文件更新时间是不是最新

进入到数据库,过滤出当前用户的信息:

select uid, name, password from typecho_users where name = 'xxxx';

imagef8d830a33dd445e8.png

修改第三列的密码为e10adc3949ba59abbe56e057f20f883e

update typecho_users set password = 'e10adc3949ba59abbe56e057f20f883e' where name = 'xxxx';

然后使用密码123456登陆,重新修改密码就可以了。

使用hexo generate命令时报错:

INFO  Start processing
FATAL Something''s wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html
Template render error: Error: expected end of comment, got end of file
    at Object._prettifyError (/web/hexo/node_modules/nunjucks/src/lib.js:35:11)
    at Template.render (/web/hexo/node_modules/nunjucks/src/environment.js:526:21)
    at Environment.renderString (/web/hexo/node_modules/nunjucks/src/environment.js:364:17)
    at /web/hexo/node_modules/hexo/lib/extend/tag.js:66:9
    at Promise._execute(/web/hexo/node_modules/bluebird/js/release/debuggability.js:303:9)
    at Promise._resolveFromExecutor (/web/hexo/node_modules/bluebird/js/release/promise.js:483:18)
    at new Promise (/web/hexo/node_modules/bluebird/js/release/promise.js:79:10)
    at Tag.render (/web/hexo/node_modules/hexo/lib/extend/tag.js:64:10)
    at Object.tagFilter [as onRenderEnd] (/web/hexo/node_modules/hexo/lib/hexo/post.js:266:16)
    at /web/hexo/node_modules/hexo/lib/hexo/render.js:65:19
    at tryCatcher (/web/hexo/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/web/hexo/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/web/hexo/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/web/hexo/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/web/hexo/node_modules/bluebird/js/release/promise.js:693:18)
    at Async._drainQueue (/web/hexo/node_modules/bluebird/js/release/async.js:133:16)
    at Async._drainQueues (/web/hexo/node_modules/bluebird/js/release/async.js:143:10)
    at Immediate.Async.drainQueues [as _onImmediate] (/web/hexo/node_modules/bluebird/js/release/async.js:17:14)
    at runCallback (timers.js:794:20)
    at tryOnImmediate (timers.js:752:5)
    at processImmediate [as _immediateCallback] (timers.js:729:5)

- 阅读剩余部分 -