该端仅为作者练手所开发,如需更好的红薯服务,请转至新的仓库烤红薯开源版
对接基于 requests
开发的 Auto XHS 前端;
提供一系列前端对应的登录
、创建
、搜索
、评论
等接口;
配备了日志存储
、查阅进程配置
等功能,方便维护。
部署环境: 腾讯云轻量级应用服务器 + CentOS 7.6 64bit
项目目录:/projects/auto-xhs
存放 Flask 项目的所有源码(当前仓库)
Git
安装 git
yum update
yum install -y git
克隆项目
mkdir /projects
cd /projects
git clone git@github.com:gupingan/auto-xhs-backend.git
# 克隆后续需要的一些工具
git clone git@gitee.com:xiaogugyx/server-deployment-kit.git
调整文件名称
mv auto-xhs-backend/ auto-xhs
mv server-deployment-kit/ serverkit
node.js
此处顶级大坑,无力吐槽~~
安装 nodejs
cd /projects/serverkit/nodejs
tar xvf node-v18.17.1-linux-x64.tar.xz
mv node-v18.17.1-linux-x64 ~
ln -s /root/node-v18.17.1-linux-x64/bin/node /usr/local/bin/node
ln -s /root/node-v18.17.1-linux-x64/bin/npm /usr/local/bin/npm
# 以上来源于 腾讯云 官方的文档 https://cloud.tencent.com/document/product/213/38237
# 不出意外的话就要出意外了
node -v
""" error:
node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)
"""
安装 gcc-8
yum install centos-release-scl
yum install -y devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
echo "source /opt/rh/devtoolset-8/enable" >> /etc/profile
source /etc/profile
安装 make4.3
cd /projects/serverkit/nodejs
# 或者 wget https://ftp.gnu.org/gnu/make/make-4.3.tar.gz
tar -xzvf make-4.3.tar.gz && cd make-4.3/
./configure --prefix=/usr/local/make
make && make install
cd /usr/bin/ && mv make make.bak
ln -sv /usr/local/make/bin/make /usr/bin/make
安装 glibc-2.28
cd /projects/serverkit/nodejs
# 或者 wget http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
tar xf glibc-2.28.tar.gz
cd glibc-2.28/ && mkdir build && cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
安装 libstdc++.so.6
yum install libstdc++.so.6 -y
cd /projects/serverkit/nodejs
# 或者 wget http://ftp.de.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.3.0-6_amd64.deb
ar -x libstdc++6_8.3.0-6_amd64.deb
tar -xvf data.tar.xz
cp usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25 /usr/lib64/
rm -rf /usr/lib64/libstdc++.so.6
ll /usr/lib64/libstd*
ln -s /usr/lib64/libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6
Done.
node -v
npm -v
但是,压根没有必要照着上面的做,可以运行我提供的两个 .sh 文件中的任意一个,setup-nodejs1.sh
是利用了 nodejs 官方自动安装的脚本,setup-nodejs2.sh
则是上述手动安装补坑的脚本文件,执行 sh 文件前务必记得修改好权限。
# 接下来不要忘记安装依赖哦
cd /projects/auto-xhs
npm install jsdom
Python3.10
安装 gcc
yum install -y gcc
安装 openssl
yum remove openssl
cd /opt
yum install -y wget
wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz --no-check-certificate
tar -zxf openssl-1.1.1n.tar.gz
cd openssl-1.1.1n
./config --prefix=/usr/local/openssl shared zlib
make && make install
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/openssl/lib" >> /etc/profile
source /etc/profile
下载其他依赖
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
yum install -y libffi-devel zlib1g-dev
yum install zlib* -y
下载 Python 源码
cd /projects/serverkit/python
# 或者 wget https://www.python.org/ftp/python/3.10.10/Python-3.10.10.tgz
解压 & 编译 & 安装
# 解压 tgz 包
tar -zxf Python-3.10.10.tgz
# 编译并安装
cd Python-3.10.10
./configure --prefix=/usr/local//python3 --with-openssl=/usr/local//openssl
make && make install
# 链接
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
ln -s /usr/local/python3/bin/python3 /usr/bin/python
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
# 验证
cd ..
python
# 输入以下代码 无报错则完成
import ssl
import _ssl
安装
pip install virtualenv
创建
mkdir /envs
virtualenv /envs/xhs --python=python3.10
激活
source /envs/xhs/bin/activate
安装项目的依赖项
# 务必按上述方式激活虚拟环境
cd /projects/auto-xhs
pip install -r requirements.txt
# 当然,还有一个 xhsAPI 是我自己写的包,通过此途径无法直接安装
安装 xhsAPI 包(温馨提醒:之前的 jsdom 是否安装了?)
点击我跳转,下载发行版到服务器端,在虚拟环境下通过 pip 本地安装。
因某些缘故不可公开,请在 Issues 中留下您的邮箱,免费发送 xhsAPI
包给您
MySQL
安装 MySQL 的分支
yum install -y mariadb-server
设置开机启动并启动服务
systemctl enable mariadb
systemctl start mariadb
# 查看
systemctl status mariadb
# 出现 Active: active (running) 即可
账号初始化并执行sql
cd /projects/auto-xhs
mysql -u root -p
# 导入项目数据库
source auto_xhs_db.sql;
# 更新root密码
UPDATE mysql.user SET password=password('<your-password>') WHERE mysql.user='root';
FLUSH PRIVILEGES;
# 创建用户
INSERT INTO mysql.user(user, host, password) values ('normal', '%', password('<your-password>'));
FLUSH PRIVILEGES;
# 赋予权限
GRANT ALL PRIVILEGES ON auto_xhs_db.* to normal@'%';
FLUSH PRIVILEGES;
完成以上操作后你会发现,创建的用户 normal
在本地无需密码就能登录,为了安全性考虑,我们需要删除某些本地用户。
SELECT User, Host, Password FROM mysql.user;
""" input
+--------+---------------+-------------------------------------------+
| User | Host | Password |
+--------+---------------+-------------------------------------------+
| root | localhost | *1880C4770E85923D54E015CA6FBCE031713FFC4A |
| root | vm-0-4-centos | *1880C4770E85923D54E015CA6FBCE031713FFC4A |
| root | 127.0.0.1 | *1880C4770E85923D54E015CA6FBCE031713FFC4A |
| root | ::1 | *1880C4770E85923D54E015CA6FBCE031713FFC4A |
| | localhost | |
| | vm-0-4-centos | |
| normal | % | *1880C4770E85923D54E015CA6FBCE031713FFC4A |
+--------+---------------+-------------------------------------------+
"""
DELETE FROM mysql.user WHERE User='' and Password='';
FLUSH PRIVILEGES;
你还需要在 config.py
中写上你设置的密码。
uwsgi
安装
source /envs/xhs/bin/activate
pip install uwsgi
基于 uwsgi
运行
cd /projects/serverkit/
vim uwsgi-tool.sh
# 修改 INI="/projects/xhsweb/backend/xhs_uwsgi.ini" 对应的值
# 改为 /projects/auto-xhs/xhs_uwsgi.ini
chmod 777 uwsgi-tool.sh
./uwsgi-tool.sh start
将来你可能需要重启或者关闭↓
./uwsgi-tool.sh restart
./uwsgi-tool.sh stop
拉取项目后:
无论你是经过三还是四,你都需要进行管理员账号的初始化,至于如何注册和管理更多的账号,请参考另一个终端项目 auto-xhs-admin(设置好服务端地址后,尽量打包成 exe)。
回到正题:启动好服务器后,通过访问接口 /api/admin/init
提示如下后,你就已经获得了专属的管理员账号(默认账号:adminer
+ 默认密码:123456
)
{
"success": true,
"msg": "初始化管理员账号成功",
"data": {}
}
这个账号可以登录在管理员端,也可以登录在客户端,但是请不要同时登录,token 在登录时会生成新的值,导致前一登录状态失效!建议管理员账号请通过管理员端修改密码和账号,在客户端尽量使用普通用户的账号,避免去使用管理员账号。