为Hexo添加后台管理系统-Qexo
前言
配置不够的话不建议安装在云服务器/Vercel,太慢,我的是2核2G的云服务器,加载很慢,反应也慢,应该是我的带宽不够,每次打开新文章都要等好久,或者清空缓存后也要加载好久。所以最好还是安装在本地。
另外图片上传有最大限制5M,建议还是先用Typora写,之后修改的时候再用Qexo。Typora反应快,而且图片可以用picgo的插件压缩,能节省oss的容量。
安装Qexo
方式一:Vercel部署
这种方式比较简单,直接按照官方文档部署就行
数据库可以用Vercel的,或者申请其他网站的免费数据库,如 Supabase | The Open Source Firebase Alternative,还可以用自己的云服务器的数据库,配置好环境变量即可
如postgresql就按照以下部署:
其他数据库根据官方文档填写其他变量
按照Qexo官方教程走的时候会报错,commend pip找不到,将Node.js版本改为18.x即可,如下
之后再部署就没问题了。
问题
vercel国内无法访问,需要绑定自己的域名
可以用自己已经备案的域名,然后解析一个子域名绑定
方式二:服务器部署
我的是腾讯云轻量型服务器,装的系统自带Docker,若没有Docker的话请先安装Docker
安装postgresql
使用Navicat连接后,创建一个hexoblog数据库
安装python3和pip
查看是否已安装
1 | python --version |
配置
经过之前部署Hexo,应该已经有Git了,没有的话请自行安装,这里不予讲解。
挑选一个喜欢的目录,比如/home/repo/Qexo
运行命令
1
git clone https://github.com/Qexo/Qexo.git
在
manage.py
的同级目录下创建并修改configs.py
1
2
3
4
5
6
7
8
9
10
11
12
13import psycopg2
DOMAINS = ["127.0.0.1", "yoursite"] # yoursite指你的网站域名或者IP
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql', # 不用动
'NAME': '*******', # 数据库名称
'USER': '*******', # 数据库用户
'PASSWORD': '*******', # 数据库密码
'HOST': 'xxx.xxx.xxx.xxx', # 数据库地址
'PORT': '5432', # postgresql默认是5432,如果你用的别的端口记得改
}
}这是postgresql的配置文件,若想用mysql官网有给出示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import pymysql
pymysql.install_as_MySQLdb()
DOMAINS = ["127.0.0.1", "yoursite.com"]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'qexo',
'USER': 'root',
'PASSWORD': 'password',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {
"init_command": "SET sql_mode='STRICT_TRANS_TABLES'"
}
}
}依次执行以下命令
1
2
3
4pip3 install -r requirements_withoutmysql.txt # requirements.txt也可以,只是咱们用的不是mysq,没必要安装mysql的依赖
python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py runserver 0.0.0.0:8000 --noreload这里如果第一行命令报错的话可以依赖下载问题
测试
打开浏览器,输入yoursite:8000即可开始Qexo的初始化(若无法访问的话先看看自己的云服务器的防火墙有没有添加规则,放行8000端口)
这里我已经初始化过了,所以显示的是登录界面。
添加Hexo部署位置
因为我之前服务器上只部署了Hexo的静态文件,所以肯定不能是服务器的位置,所以我在Github上创建了一个仓库,用来推送我的Hexo博客。
这与
hexo deploy
互不影响,hexo deploy
是自动推送到我服务器的git仓库,git push
是我手动推送到github每次自己的hexo有更改记得既要
hexo deploy
又要git pull && git push
,不然本地的Hexo无法读取到Qexo做的更改、Qexo无法读取到本地Hexo的更改。这里的github密钥需要进入Personal Access Tokens (Classic) (github.com),生成一个token,建议选classic,过期时间选无过期时间,给repo和workflow权限,生成的token记得保存好。
配置图床
若是S3、FTP、GitHUb的图床直接看Qexo官方文档即可,我使用的是阿里云OSS
应用密钥ID和密钥是创建储存桶时给你的,记得保存好,填入即可,找到储存桶的概览,最下面就有边缘节点,自定义域名是你访问图片的路径,http://+储存桶名称+边缘节点+路径,保存路径的话就自定义了,只要你其他的都填的没错,会自动给你创建文件夹。
{YEAR}-{MONTH}-{DAY}-{md5}.{extName}
是文件名称,这样可以保证不会重名,extName是文件后缀。我是用短横线连接,可以改成别的,但是最后的.{extName}一定不能少,另外不要用/连接,/是路径分隔符,你用/就会自动创建好几级目录。
另外推荐开启防盗链
推荐使用后台运行,不然windterm一关,Qexo就断了
1
nohup python3 manage.py runserver 0.0.0.0:8000 --noreload >/dev/null 2>&1
没有nohup就安装,随便找个教程就行linux中安装&配置nohup_nohup 安装-CSDN博客
后续要是想关闭Qexo的话进行如下操作:
1
2ps -ef |grep python # 找到Qexo的进程,
kill -9 pid #(pid为每一行的第二个id编码,表示的是该进程的父进程)
方式三:本地计算机部署
云服务器性能终究有限,还是自己的电脑性能强,反应快,所以最后还是决定在本地也装一个,数据库跟云服务器连接同一个即可,这样就不用重新配置了。
同样是准备好数据库和Git以及Python
安装Git网上找个教程就行,Python我推荐直接在Microsoft Store安装,会自动帮你配置好环境变量,超级方便。按喜好安装任意3.x版本的Python即可。
部署
本地安装Qexo就简单多了,git clone 项目,进入目录,创建个配置文件configs.py,内容与上文服务器的一样。
在项目目录下用管理员身份打开powershall,没有这个选项的话就搜索cmd,然后以管理员身份运行,之后cd到项目目录(顺便一提,windows的cd到D盘的的命令是cd D:
)。如果不用管理员身份运行的话,无法执行第一个命令
进入到项目目录后执行以下命令:
1 | pip3 install -r requirements_withoutmysql.txt |
第一个命令时间比较长,最后会提示成功安装xxxxx依赖,没报红就行
其余命令基本上不会输出什么东西,只要没报红就继续执行即可,最后一行命令是运行服务
打开浏览器,输入127.0.0.1:8000即可开始Qexo的初始化(用的是新库的话就根据提示初始化即可,如果像我一样用的是之前云服务器部署过的旧库,就直接用之前创建的用户名密码登录就行)
问题总结
依赖下载问题
腾讯云Docker环境自带的python版本太低,所需的依赖的版本高,无法下载,需要卸载原有python,重新安装(不用管pip)
卸载python3
1
rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps #卸载pyhton3
删除残余文件
1
whereis python3 |xargs rm -frv
查看现有安装的python
1
whereis python
此时若还有其他的,如python,不用管,那些是yum或其他程序要用的python解释器
安装上面的教程安装 Python(下3.9.1的,3.7反正不行,3.8没试过,我直接下的3.10,结果后面有问题,版本太高有的依赖不兼容)
pip源别用阿里云的,太慢,就用腾讯云的就行,速度起飞
下载依赖报错
1
2
3
4
5
6ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts.
We recommend you use --use-feature=2020-resolver to test your packages with the new resolver before it becomes the default.
botocore 1.34.128 requires urllib3<1.27,>=1.25.4; python_version < "3.10", but you'll have urllib3 2.0.7 which is incompatible.
aliyun-python-sdk-core 2.15.1 requires jmespath<1.0.0,>=0.9.3, but you'll have jmespath 1.0.1 which is incompatible.将pip改为3.6版本
安装pip
1
yum install python3-pip
因为是另下的,不是和python一起安装的,所以需要添加到环境变量才能使用
在家目录下 vi ~/.bashrc,在文件最后加入下面代码:(不用修改,就原样添加就行)
1
export PYTHONPATH=/usr/local/lib/python3.6/site-packages/:$PYTHONPATH
使文件立即生效
1
source .bashrc
然后就可以调用命令
1
python3 -m pip install -r requirements_withoutmysql.txt
其他报错
1
ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'OpenSSL 1.0.2k-fips 26 Jan 2017'. See: https://github.com/urllib3/urllib3/issues/2168
原因:requests包引入了urllib3,而新版本的urllib3 需要OpenSSL 1.1.1+以上版本,否则报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+,currently the ‘ssl’ module is compiled with ‘OpenSSL 1.0.2k-fips 26 Jan 2017’. See: https://github.com/urllib3/urllib3/issues/2168,而且去官网查看的时候,发现对于1.1.1之前的版本已经不再支持了,所以需要安装新的版本用于支持。
执行以下命令:
1
pip install urllib3==1.26.15
防盗链
登录阿里云控制台,找到OSS,进入储存桶
找到防盗链界面
白名单referer设置为你的域名/IP
比如
1
2
3
4
5http*://xxx.xxx.xxx.xxx #这里是公网IP。为了博客可以正常显示文章图片,但无法查看大图
http*://xxx.xxx.xxx.xxx/* #这里是公网IP。这个是为了在博客中点击图片可以查看大图,否则点击图片会无法显示
http*://xxxxxxx.com #这里写域名。道理同上
http*://xxxxxxx.com/* #这里写域名。道理同上
*.console.aliyun.com #这是固定写法,可以不写,但这样你就无法在阿里的oss控制台中查看图片了空referer设置为不允许
but此选项会导致typora无法查看图片,但是总比被迫花钱强。我现在是typora放图片的时候自动存到同名文件夹,等我想发文章的时候再上传图片到OSS,之后修改文章直接去Qexo改,因为服务器是可以看到图片的。