在云端服务器上进行一次qexo后台部署,在服务器上实现使用hexo管理后台。

准备

  • 服务器
  • 域名
  • qexo源码:【前往下载】,也可以后面用 git clone 下载。

qexo搭建

  1. 下载所需的文件

    使用终端执行:

    1
    git clone https://ghproxy.com/https://github.com/Qexo/Qexo.git
  2. 在qexo目录下创建一个configs.py文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import pymysql
    pymysql.install_as_MySQLdb()
    DOMAINS = ["服务器IP","你的域名"]
    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': '数据库名',
    'USER': '数据库用户',
    'PASSWORD': '数据库密码',
    'HOST': '127.0.0.1',
    'PORT': '3306',
    'OPTIONS': {
    "init_command": "SET sql_mode='STRICT_TRANS_TABLES'"
    }
    }
    }
  3. 在qexo目录下执行安装python依赖包

    1
    pip3 install -r requirements_withoutmsyql.txt

    在这一步大部分人都是会出现报错的,这跟你服务器安装的系统有关,也或者可能跟你安装的python版本有关,这里要根据报错来解决,总之在这一步就要考验你的水平了。

  4. 开始运行qexo

    1
    python3 manage.py makemigrations && python3 manage.py migrate

    如果看到 ERROR: Provider获取失败, 跳过(functions.py.<module>[line:55]), 不用理会这一报错,这是正常现象。

  5. 先执行文件来确定你是否配置成功

    如果无法访问是因为没有开放8000的端口,这里要添加端口规则,使端口能够被访问。

    1
    python3 manage.py runserver 0.0.0.0:8000

  6. 安装进程守护管理器插件

    这里我使用的是supervisor插件,这是为了使进程常驻,如果你不使用这个插件,关闭终端后,qexo就会关闭了,所以这个插件是必须的。

    1
    python3 manage.py runserver 0.0.0.0:8000 --noreload

域名访问

直接使用目录是无法使用的,这里要进行反向代理,这样才能使用域名进行访问qexo。

FAQ

测试使用了Debian系统,无法直接安装需求的包,这里就使用了虚拟环境路径,但在使用的时候,进程守护管理器插件会提示找不到django模块,这里就进行了路径的修改。

虚拟环境安装

1
2
3
python3 -m venv /path/to/venv
source /path/to/venv/bin/activate
pip install -r requirements.txt

进程守护管理器插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[program:qexo]
command=/path/to/venv/bin/python /www/wwwroot/你的域名路径/manage.py runserver 0.0.0.0:8000 --noreload
directory=/www/wwwroot/admin.hctr.tk
autorestart=true
startsecs=3
startretries=3
stdout_logfile=/www/server/panel/plugin/supervisor/log/qexo.out.log
stderr_logfile=/www/server/panel/plugin/supervisor/log/qexo.err.log
stdout_logfile_maxbytes=2MB
stderr_logfile_maxbytes=2MB
user=root
priority=999
numprocs=1
process_name=%(program_name)s_%(process_num)02d