前言

配置不够的话不建议安装在云服务器/Vercel,太慢,我的是2核2G的云服务器,加载很慢,反应也慢,应该是我的带宽不够,每次打开新文章都要等好久,或者清空缓存后也要加载好久。所以最好还是安装在本地。

另外图片上传有最大限制5M,建议还是先用Typora写,之后修改的时候再用Qexo。Typora反应快,而且图片可以用picgo的插件压缩,能节省oss的容量。

安装Qexo

方式一:Vercel部署

这种方式比较简单,直接按照官方文档部署就行

数据库可以用Vercel的,或者申请其他网站的免费数据库,如 Supabase | The Open Source Firebase Alternative,还可以用自己的云服务器的数据库,配置好环境变量即可

如postgresql就按照以下部署:

image-20240627115325872

image-20240625164926832

其他数据库根据官方文档填写其他变量

按照Qexo官方教程走的时候会报错,commend pip找不到,将Node.js版本改为18.x即可,如下

image-20240625161443718

之后再部署就没问题了。

问题

vercel国内无法访问,需要绑定自己的域名

可以用自己已经备案的域名,然后解析一个子域名绑定

image-20240627133145230

方式二:服务器部署

我的是腾讯云轻量型服务器,装的系统自带Docker,若没有Docker的话请先安装Docker

安装postgresql

教程:PostgreSQL数据库——Docker版本的postgres安装 & Navicat连接方式+导入向导使用 & SpringBoot结合Jpa使用PostgreSQL初步_postgres docker-CSDN博客

使用Navicat连接后,创建一个hexoblog数据库

image-20240627115848231

安装python3和pip

查看是否已安装

1
2
python --version
whereis pip

教程linux系统安装python3和pip - 码上测 - 博客园 (cnblogs.com)

配置

经过之前部署Hexo,应该已经有Git了,没有的话请自行安装,这里不予讲解。

  1. 挑选一个喜欢的目录,比如/home/repo/Qexo

  2. 运行命令

    1
    git clone https://github.com/Qexo/Qexo.git
  3. manage.py的同级目录下创建并修改 configs.py

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import 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
    16
    import 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'"
    }
    }
    }
  4. 依次执行以下命令

    1
    2
    3
    4
    pip3 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

    这里如果第一行命令报错的话可以依赖下载问题

  5. 测试

    打开浏览器,输入yoursite:8000即可开始Qexo的初始化(若无法访问的话先看看自己的云服务器的防火墙有没有添加规则,放行8000端口)

    image-20240627132816155

    这里我已经初始化过了,所以显示的是登录界面。

  6. 添加Hexo部署位置

    因为我之前服务器上只部署了Hexo的静态文件,所以肯定不能是服务器的位置,所以我在Github上创建了一个仓库,用来推送我的Hexo博客。

    这与hexo deploy互不影响,hexo deploy是自动推送到我服务器的git仓库,git push是我手动推送到github

    每次自己的hexo有更改记得既要hexo deploy又要git pull && git push,不然本地的Hexo无法读取到Qexo做的更改、Qexo无法读取到本地Hexo的更改。

    image-20240628160127617

    这里的github密钥需要进入Personal Access Tokens (Classic) (github.com),生成一个token,建议选classic,过期时间选无过期时间,给repo和workflow权限,生成的token记得保存好。

    image-20240628160423394

  7. 配置图床

    若是S3、FTP、GitHUb的图床直接看Qexo官方文档即可,我使用的是阿里云OSS

    image-20240628161135335

    应用密钥ID和密钥是创建储存桶时给你的,记得保存好,填入即可,找到储存桶的概览,最下面就有边缘节点,自定义域名是你访问图片的路径,http://+储存桶名称+边缘节点+路径,保存路径的话就自定义了,只要你其他的都填的没错,会自动给你创建文件夹。

    {YEAR}-{MONTH}-{DAY}-{md5}.{extName}是文件名称,这样可以保证不会重名,extName是文件后缀。

    我是用短横线连接,可以改成别的,但是最后的.{extName}一定不能少,另外不要用/连接,/是路径分隔符,你用/就会自动创建好几级目录。

    另外推荐开启防盗链

  8. 推荐使用后台运行,不然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
    2
    ps -ef |grep python   # 找到Qexo的进程,
    kill -9 pid #(pid为每一行的第二个id编码,表示的是该进程的父进程)

方式三:本地计算机部署

云服务器性能终究有限,还是自己的电脑性能强,反应快,所以最后还是决定在本地也装一个,数据库跟云服务器连接同一个即可,这样就不用重新配置了。

同样是准备好数据库和Git以及Python

安装Git网上找个教程就行,Python我推荐直接在Microsoft Store安装,会自动帮你配置好环境变量,超级方便。按喜好安装任意3.x版本的Python即可。

image-20240627134503487

部署

本地安装Qexo就简单多了,git clone 项目,进入目录,创建个配置文件configs.py,内容与上文服务器的一样。

在项目目录下用管理员身份打开powershall,没有这个选项的话就搜索cmd,然后以管理员身份运行,之后cd到项目目录(顺便一提,windows的cd到D盘的的命令是cd D:)。如果不用管理员身份运行的话,无法执行第一个命令

image-20240625163623271

进入到项目目录后执行以下命令:

1
2
3
4
pip3 install -r requirements_withoutmysql.txt
python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py runserver 127.0.0.1:8000 --noreload

第一个命令时间比较长,最后会提示成功安装xxxxx依赖,没报红就行

其余命令基本上不会输出什么东西,只要没报红就继续执行即可,最后一行命令是运行服务

打开浏览器,输入127.0.0.1:8000即可开始Qexo的初始化(用的是新库的话就根据提示初始化即可,如果像我一样用的是之前云服务器部署过的旧库,就直接用之前创建的用户名密码登录就行)

问题总结

依赖下载问题

  1. 腾讯云Docker环境自带的python版本太低,所需的依赖的版本高,无法下载,需要卸载原有python,重新安装(不用管pip)

    1. 卸载python3

      1
      rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps #卸载pyhton3
    2. 删除残余文件

      1
      whereis python3 |xargs rm -frv
    3. 查看现有安装的python

      1
      whereis python

      此时若还有其他的,如python,不用管,那些是yum或其他程序要用的python解释器

    4. 安装上面的教程安装 Python(下3.9.1的,3.7反正不行,3.8没试过,我直接下的3.10,结果后面有问题,版本太高有的依赖不兼容)

  2. pip源别用阿里云的,太慢,就用腾讯云的就行,速度起飞

  3. 下载依赖报错

    1
    2
    3
    4
    5
    6
    ERROR: 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.
    1. 将pip改为3.6版本

    2. 安装pip

      1
      yum install python3-pip
    3. 因为是另下的,不是和python一起安装的,所以需要添加到环境变量才能使用

    4. 在家目录下 vi ~/.bashrc,在文件最后加入下面代码:(不用修改,就原样添加就行)

      1
      export PYTHONPATH=/usr/local/lib/python3.6/site-packages/:$PYTHONPATH
    5. 使文件立即生效

      1
      source .bashrc
    6. 然后就可以调用命令

      1
      python3 -m pip install -r requirements_withoutmysql.txt
  4. 其他报错

    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

防盗链

  1. 登录阿里云控制台,找到OSS,进入储存桶

  2. 找到防盗链界面

    image-20240619134614503

  3. 白名单referer设置为你的域名/IP

    比如

    1
    2
    3
    4
    5
    http*://xxx.xxx.xxx.xxx     #这里是公网IP。为了博客可以正常显示文章图片,但无法查看大图
    http*://xxx.xxx.xxx.xxx/* #这里是公网IP。这个是为了在博客中点击图片可以查看大图,否则点击图片会无法显示
    http*://xxxxxxx.com #这里写域名。道理同上
    http*://xxxxxxx.com/* #这里写域名。道理同上
    *.console.aliyun.com #这是固定写法,可以不写,但这样你就无法在阿里的oss控制台中查看图片了
  4. 空referer设置为不允许

    but此选项会导致typora无法查看图片,但是总比被迫花钱强。我现在是typora放图片的时候自动存到同名文件夹,等我想发文章的时候再上传图片到OSS,之后修改文章直接去Qexo改,因为服务器是可以看到图片的。