GithubHelp home page GithubHelp logo

qexo / qexo Goto Github PK

View Code? Open in Web Editor NEW
1.5K 13.0 236.0 10.08 MB

A Quick, Powerful and Pretty Online Manager for Hexo.

License: GNU General Public License v3.0

Python 35.24% Shell 0.25% HTML 64.39% Dockerfile 0.07% Makefile 0.05%
hexo vercel blog

qexo's Introduction

Qexo

一个快速、强大、漂亮的在线 Hexo 编辑器,您的 Star 是对我最大的支持。

请查看 文档

特色功能

  • 自定义图床上传图片
  • 在线配置编辑
  • 在线页面管理
  • 开放 API
  • 自动检查更新
  • 在线一键更新
  • 快速接入友情链接
  • 简单的说说短文
  • 类似不算子的统计
  • 自动填文章模板

你可能需要

快速上手

常见问题

这里汇集了一些常见的问题,如果你遇到同样的问题,请先尝试如下的回答

什么是 API 密钥

在您完成初始化之后可在设置界面修改/创建 API 密钥,用于 Webhook 中的身份验证。若留空系统会随机生成一个 API 密钥

Webhook 是什么

Qexo 中的 Webhook 指 /api/webhook 用于自动化操作,目前可用于自动清除缓存

安装后出现 504 Time out

  1. 您的数据库没有正确配置或没有允许所有 IP 白名单访问,可在 MongoDB 控制台进行修改,修改完成后一定要重新部署
  2. 删除并重建数据库,注意区域一定要选择 AWS / N. Virginia (us-east-1)

安装/更新后出现 5xx 错误

Qexo 每个 Release 都经过 Dev 分支的测试,一般情况下不会出现较大问题,如果你遇到了500等错误,请尝试以下步骤

  1. 检查数据库配置
  2. 清除浏览器缓存
  3. 在高级设置中点击“修复”按钮
  4. 若无法登录请使用API: yoursite.com/pub/fix?token={$APIKEY}
  5. 保留数据库配置的环境变量并重新 Fork 仓库部署
  6. 重新部署整个程序
  7. 尝试 Dev 分支

AssertionError("xxx object ... its id attribute is set to None.")

请检查你是否曾使用过0.01或0.1版本,这两个版本有严重问题,请重新创建数据库并部署

如何创建子目录下的文章

在文章名一栏填写 dir/filename 例如您希望创建 source/_posts/about/me.md 则需要输入 about/me

KeyError: 'XXX'

表示并没有获取到 "XXX" 这个环境变量,请根据表格添加后 Redeploy

名称 意义 示例
DOMAINS 你所允许通信的安全域名 注意双引号而且是英文半角 [".vercel.app", "127.0.0.1", ".yoursite.com"]
MONGODB_HOST MongoDB 数据库连接地址 mongodb+srv://cluster0.xxxx.mongodb.net
MONGODB_PORT MongoDB 数据库通信端口 默认应填写 27017 27017
MONGODB_USER MongoDB 数据库用户名 abudu
MONGODB_DB MongoDB 数据库名 Cluster0
MONGODB_PASS MongoDB 数据库密码 JWo0xxxxxxxx

Github 配置校验错误

如果配置中遇到问题,可以访问 HPP校验助手 自检配置,若确认无误,可检查仓库内是否有已经发布的文章

注意:Github 仓库一定为您 Hexo 自动化部署所在的仓库

Vercel 用量问题

Vercel 的无服务器函数用量对于 Qexo 来说是充裕的,但这依然抵挡不住有心之人的攻击行为,所以要保护好自己后台地址,不过好在 Vercel 不会随意扣费,所以在资源用完之后并不会产生费用,若依然不放心可以考虑部署在自己的服务器上 #服务器部署#

在线更新失败了

检查高级设置中的 VERCEL_TOKEN 和 PROJECT_ID 是否正确为 Qexo 的部署项目

其他问题

如果还有问题,可以发 issue 或加入 HexoPlusPlus交流群 询问

鸣谢

捐赠

作为一个开源项目,本项目不会给我带来任何直接收益。如果您觉得本项目对您有帮助,您的支持是我最大的动力。

您可以在备注中添加您的称呼和网址博客,大于或等于 1 元的捐助都将在 文档页面 永久显示 支付宝&微信

qexo's People

Contributors

am-abudu avatar dingjunyao avatar fgaoxing avatar kylinholmes avatar mis1042 avatar musnows avatar sysfox avatar yzl3014 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

qexo's Issues

圖床設置

我嘗試在使用imgur來當圖床 但好像不太行 (圖1)
我按下一步也不能skip這個部分 無論按下一步/完成都陣出 (圖2)
請問有其他可行方案嗎?
image
image

文件管理

加个文件管理器呗,github老不好用。带上传和下载

建议 or 问题

  1. 更新以前文章没有给加上更新时间
  2. 生成文章的时候可不可以自动生成abbrlink之类的东西(当然,也就使用这个插件的用户需要,如果有什么更好的生成永久链接的方法请告诉我
  3. 能不能支持cdn引入表情,微软的那个属实有点少、
  4. 引用的vditor可以添加 切换编辑模式功能 嘛,我挺喜欢即时渲染的,虽然Ctrl+Alt+8可以切换。还有就是要是添加了这个按钮,希望可以设置默认编辑模式/狗头护体
  5. 暂时想到这些,想到其他再提。

邮箱推送

将通知同时推送到邮箱,发布或更新文章时推送到读者,代替谷歌,请制作页面供读者输入邮箱。你也遇到了这个问题吧,谷歌不能用!

openAPI

加入api支持,使用qexo网站/api,基本的增删改查以及小工具,参数如下(我想的)

文章加密

大概是这样

<script>
    (function(){
        if('{{ page.password }}'){
            if (prompt('请输入文章密码') !== '{{ page.password }}'){
                alert('密码错误!');
                history.back();
            }
        }
    })();
</script>

右键

加入右键菜单,并且禁止F12

汉化

把所有英文选项和错误码,汉化,错误可以提供错误码

自定义指令

为了达到wordpress的效果,请允许自定义python指令,并提供Qexo-py库

在线安装

修改package.json,来在线安装插件,须先检测是否存在该插件,然后在部署,并可选自动升级

开放API接口

基于API密钥开放API接口,不再仅限于Webhook事件

我加了volantis友联适配

请写在wiki中谢谢!

侧边栏:

<ul class="list entry navigation" id="list entry navigation"></ul>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/hexo/friends/friends.css"/>
<script src="https://cdn.jsdelivr.net/gh/Fgaoxing/blog-cdn@main/source/js/side-friends.js"></script>
<script>loadQexoFriends("list entry navigation", ""网址")</script>

DZ O%1@J%FIQ@ZF` GAZCA2

页面:

<div class="friends-group"><div id="friend-content" class="friend-content"></div></div>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/hexo/friends/friends.css"/>
<script src="https://cdn.jsdelivr.net/gh/Fgaoxing/blog-cdn@main/source/js/friends.js"></script>
<script>loadQexoFriends("friend-content", "网址")</script>

F(X EF3JI$BXV~G{IPG1%MS

全新部署到 Vercel 时:Error: Command "./now_build_staticfiles.sh" exited with 1

完全按照 Wki 中 “Vercel 部署”进行操作。

1.3 和 1.3.1 都会报相同错误并构建失败。

完整部署日志:

Building

23:52:07.556 | Cloning github.com/JonnyJong/Qexo (Branch: master, Commit: 10f6dab)
23:52:08.911 | Cloning completed: 1.356s
23:52:09.318 | Analyzing source code...
23:52:09.351 | Warning: Due to builds existing in your configuration file, the Build and Development Settings defined in your Project Settings will not apply. Learn More: https://vercel.link/unused-build-settings
23:52:12.128 | Installing build runtime...
23:52:14.477 | Build runtime installed: 2.349s
23:52:17.155 | Installing build runtime...
23:52:19.843 | Build runtime installed: 2.688s
23:52:27.946 | No Build Cache available
23:52:31.461 | Collecting Django==3.2.9
23:52:31.483 | Downloading Django-3.2.9-py3-none-any.whl (7.9 MB)
23:52:31.747 | Collecting PyGithub==1.55
23:52:31.753 | Downloading PyGithub-1.55-py3-none-any.whl (291 kB)
23:52:31.814 | Collecting PyJWT==2.3.0
23:52:31.831 | Downloading PyJWT-2.3.0-py3-none-any.whl (16 kB)
23:52:31.904 | Collecting PyNaCl==1.4.0
23:52:31.918 | Downloading PyNaCl-1.4.0-cp35-abi3-manylinux1_x86_64.whl (961 kB)
23:52:32.014 | Downloading asgiref-3.4.1-py3-none-any.whl (25 kB)
23:52:32.060 | Collecting certifi==2021.10.8
23:52:32.066 | Downloading certifi-2021.10.8-py2.py3-none-any.whl (149 kB)
23:52:32.482 | Collecting cffi==1.15.0
23:52:32.490 | Downloading cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (405 kB)
23:52:32.543 | Collecting charset-normalizer==2.0.7
23:52:32.549 | Downloading charset_normalizer-2.0.7-py3-none-any.whl (38 kB)
23:52:32.596 | Downloading djongo-1.3.6.tar.gz (331 kB)
23:52:32.639 | Preparing metadata (setup.py): started
23:52:32.882 | Preparing metadata (setup.py): finished with status 'done'
23:52:32.911 | Collecting dnspython==2.1.0
23:52:32.918 | Downloading dnspython-2.1.0-py3-none-any.whl (241 kB)
23:52:32.961 | Collecting idna==3.3
23:52:32.967 | Downloading idna-3.3-py3-none-any.whl (61 kB)
23:52:32.975 | Requirement already satisfied: pip==21.3.1 in /usr/local/lib/python3.6/site-packages (from -r requirements.txt (line 12)) (21.3.1)
23:52:33.002 | Collecting pycparser==2.21
23:52:33.007 | Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
23:52:33.786 | Collecting pymongo==3.12.1
23:52:33.794 | Downloading pymongo-3.12.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (506 kB)
23:52:33.977 | Collecting pytz==2021.3
23:52:33.985 | Downloading pytz-2021.3-py2.py3-none-any.whl (503 kB)
23:52:34.092 | Collecting requests==2.26.0
23:52:34.097 | Downloading requests-2.26.0-py2.py3-none-any.whl (62 kB)
23:52:34.567 | Collecting setuptools==59.2.0
23:52:34.576 | Downloading setuptools-59.2.0-py3-none-any.whl (952 kB)
23:52:34.635 | Collecting six==1.16.0
23:52:34.638 | Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
23:52:34.673 | Collecting sqlparse==0.2.4
23:52:34.679 | Downloading sqlparse-0.2.4-py2.py3-none-any.whl (38 kB)
23:52:34.760 | Collecting urllib3==1.26.7
23:52:34.767 | Downloading urllib3-1.26.7-py2.py3-none-any.whl (138 kB)
23:52:34.842 | Collecting wheel==0.37.0
23:52:34.847 | Downloading wheel-0.37.0-py2.py3-none-any.whl (35 kB)
23:52:35.081 | Collecting wrapt==1.13.3
23:52:35.087 | Downloading wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (78 kB)
23:52:35.170 | Downloading Deprecated-1.2.13-py2.py3-none-any.whl (9.6 kB)
23:52:35.264 | Collecting typing-extensions
23:52:35.270 | Downloading typing_extensions-4.0.0-py3-none-any.whl (22 kB)
23:52:35.350 | Collecting dataclasses
23:52:35.356 | Downloading dataclasses-0.8-py3-none-any.whl (19 kB)
23:52:35.601 | Using legacy 'setup.py install' for djongo, since package 'wheel' is not installed.
23:52:35.816 | Installing collected packages: typing-extensions, pycparser, wrapt, urllib3, sqlparse, six, pytz, idna, charset-normalizer, cffi, certifi, asgiref, requests, PyNaCl, pymongo, PyJWT, Django, deprecated, dataclasses, wheel, setuptools, PyGithub, dnspython, djongo
23:52:39.042 | Attempting uninstall: setuptools
23:52:39.042 | Found existing installation: setuptools 40.6.2
23:52:39.073 | Uninstalling setuptools-40.6.2:
23:52:39.240 | Successfully uninstalled setuptools-40.6.2
23:52:40.383 | Running setup.py install for djongo: finished with status 'done'
23:52:40.398 | Successfully installed Django-3.2.9 PyGithub-1.55 PyJWT-2.3.0 PyNaCl-1.4.0 asgiref-3.4.1 certifi-2021.10.8 cffi-1.15.0 charset-normalizer-2.0.7 dataclasses-0.8 deprecated-1.2.13 djongo-1.3.6 dnspython-2.1.0 idna-3.3 pycparser-2.21 pymongo-3.12.1 pytz-2021.3 requests-2.26.0 setuptools-59.2.0 six-1.16.0 sqlparse-0.2.4 typing-extensions-4.0.0 urllib3-1.26.7 wheel-0.37.0 wrapt-1.13.3
23:52:40.398 | WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
23:52:40.776 | Traceback (most recent call last):
23:52:40.777 | File "manage.py", line 22, in
23:52:40.777 | File "manage.py", line 18, in main
23:52:40.777 | execute_from_command_line(sys.argv)
23:52:40.777 | File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 419, in execute_from_command_line
23:52:40.778 | utility.execute()
23:52:40.778 | File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 363, in execute
23:52:40.778 | settings.INSTALLED_APPS
23:52:40.778 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 82, in getattr
23:52:40.778 | self._setup(name)
23:52:40.778 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 69, in _setup
23:52:40.778 | self._wrapped = Settings(settings_module)
23:52:40.778 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 170, in init
23:52:40.779 | mod = importlib.import_module(self.SETTINGS_MODULE)
23:52:40.779 | File "/usr/local/lib/python3.6/importlib/init.py", line 126, in import_module
23:52:40.779 | return _bootstrap._gcd_import(name[level:], package, level)
23:52:40.779 | File "", line 994, in _gcd_import
23:52:40.779 | File "", line 971, in _find_and_load
23:52:40.779 | File "", line 955, in _find_and_load_unlocked
23:52:40.779 | File "", line 665, in _load_unlocked
23:52:40.779 | File "", line 678, in exec_module
23:52:40.779 | File "", line 219, in _call_with_frames_removed
23:52:40.780 | File "/vercel/path1/core/settings.py", line 22, in
23:52:40.780 | ALLOWED_HOSTS = json.loads(os.environ["DOMAINS"])
23:52:40.780 | return _default_decoder.decode(s)
23:52:40.780 | File "/usr/local/lib/python3.6/json/decoder.py", line 339, in decode
23:52:40.780 | obj, end = self.raw_decode(s, idx=_w(s, 0).end())
23:52:40.780 | File "/usr/local/lib/python3.6/json/decoder.py", line 357, in raw_decode
23:52:40.780 | raise JSONDecodeError("Expecting value", s, err.value) from None
23:52:40.780 | json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)
23:52:40.925 | Traceback (most recent call last):
23:52:40.925 | File "manage.py", line 22, in
23:52:40.925 | main()
23:52:40.925 | File "manage.py", line 18, in main
23:52:40.925 | execute_from_command_line(sys.argv)
23:52:40.926 | utility.execute()
23:52:40.926 | File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 363, in execute
23:52:40.926 | settings.INSTALLED_APPS
23:52:40.926 | self._setup(name)
23:52:40.926 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 69, in _setup
23:52:40.926 | self._wrapped = Settings(settings_module)
23:52:40.926 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 170, in init
23:52:40.926 | mod = importlib.import_module(self.SETTINGS_MODULE)
23:52:40.926 | File "/usr/local/lib/python3.6/importlib/init.py", line 126, in import_module
23:52:40.926 | return _bootstrap._gcd_import(name[level:], package, level)
23:52:40.926 | File "", line 994, in _gcd_import
23:52:40.926 | File "", line 971, in _find_and_load
23:52:40.926 | File "", line 955, in _find_and_load_unlocked
23:52:40.927 | File "", line 678, in exec_module
23:52:40.927 | File "", line 219, in _call_with_frames_removed
23:52:40.927 | File "/vercel/path1/core/settings.py", line 22, in
23:52:40.927 | ALLOWED_HOSTS = json.loads(os.environ["DOMAINS"])
23:52:40.927 | File "/usr/local/lib/python3.6/json/init.py", line 354, in loads
23:52:40.927 | return _default_decoder.decode(s)
23:52:40.927 | File "/usr/local/lib/python3.6/json/decoder.py", line 339, in decode
23:52:40.927 | obj, end = self.raw_decode(s, idx=_w(s, 0).end())
23:52:40.927 | File "/usr/local/lib/python3.6/json/decoder.py", line 357, in raw_decode
23:52:40.927 | raise JSONDecodeError("Expecting value", s, err.value) from None
23:52:40.927 | json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)
23:52:41.071 | Traceback (most recent call last):
23:52:41.071 | File "manage.py", line 22, in
23:52:41.072 | main()
23:52:41.072 | File "manage.py", line 18, in main
23:52:41.072 | File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 419, in execute_from_command_line
23:52:41.072 | utility.execute()
23:52:41.072 | File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 363, in execute
23:52:41.072 | settings.INSTALLED_APPS
23:52:41.072 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 82, in getattr
23:52:41.072 | self._setup(name)
23:52:41.072 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 69, in _setup
23:52:41.072 | self._wrapped = Settings(settings_module)
23:52:41.072 | File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 170, in init
23:52:41.072 | mod = importlib.import_module(self.SETTINGS_MODULE)
23:52:41.072 | return _bootstrap._gcd_import(name[level:], package, level)
23:52:41.073 | File "", line 994, in _gcd_import
23:52:41.073 | File "", line 971, in _find_and_load
23:52:41.073 | File "", line 955, in _find_and_load_unlocked
23:52:41.073 | File "", line 665, in _load_unlocked
23:52:41.073 | File "", line 678, in exec_module
23:52:41.073 | File "", line 219, in _call_with_frames_removed
23:52:41.073 | File "/vercel/path1/core/settings.py", line 22, in
23:52:41.073 | ALLOWED_HOSTS = json.loads(os.environ["DOMAINS"])
23:52:41.073 | File "/usr/local/lib/python3.6/json/init.py", line 354, in loads
23:52:41.073 | return _default_decoder.decode(s)
23:52:41.073 | File "/usr/local/lib/python3.6/json/decoder.py", line 339, in decode
23:52:41.073 | obj, end = self.raw_decode(s, idx=_w(s, 0).end())
23:52:41.073 | File "/usr/local/lib/python3.6/json/decoder.py", line 357, in raw_decode
23:52:41.073 | raise JSONDecodeError("Expecting value", s, err.value) from None
23:52:41.073 | json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)
23:52:41.097 | Error: Command "./now_build_staticfiles.sh" exited with 1

提议

希望支持把图片上传到source/img/
图片存放在网上的图床(free)容易挂,都用hexo了,还能用得起付费服务嘛(好吧,主要我7bu账号不知道为什么被冻结了,好像好久没登录,现在账号还要买了居然)

图片上传通过md5生成新的文件名(避免中文名称太过难看
仅使用Vditor上传时会自动生成
图片页面添加上传图片功能

友链API

加入友联申请API,和加友联及删友联

初始化github配置

在初始化github配置时一直提示校验失败,问下这个Github密钥是github的token吗

图床功能希望添加GitHub+jsDelivr图床

个人认为github+jsd图床方案自主管控比别家API图床更自由更安全,能否加入图片上传到账号指定Github仓库并生成cdn.jsdelivr.net/gh/username/repo@branch/filename.png这样链接的功能?可以参考这个图床系统。有webp转换,哈希文件名,压缩功能就更好了,谢谢!

小問題

image
這個位置我應該填hexo blog的project ID / Qexo的project ID?

增加颜色自定义

1.增加颜色自定义2.深色模式3.菜单增加自定义按钮(有直接跳转,和嵌在另一侧)

搜索

加入配置和页面和友链的搜索

自动更新

A pull request already exists for am-abudu:master.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.