Skip to content

环境配置

Bluefissure edited this page Apr 25, 2022 · 27 revisions

系统环境相关的安装与配置,以Ubuntu系统为例。

Windows 请参考 獭窝配置教程(Windows)

LNMP

Linux+Nginx+Mysql+PHP的环境, 有能力的可以自行编译安装,实际需要的组件是 Nginx & Mysql

注意,Mysql 5.5已不支持Django2.1以上版本,如需要高版本Django请安装Mysql的5.6版本或以上。

如果啥都不懂推荐使用军哥的一件LNMP脚本安装,地址:https://lnmp.org/install.html

当然,如果你像我一样够懒或是小白用户也可以请务必通过安装宝塔面板一键安装。

Redis

sudo apt-get install redis-server

RabbitMQ

兔子队列的坑比较多,最好先更新源,装最新版erlang,再装最新版rabbitmq,可以参考https://www.rabbitmq.com/install-debian.html

当然,直接安装的版本也可能没有问题,是否安装最新版取决于你想不想折腾了

国内的服务器请直接安装,官方源慢死你。

具体的命令可能如下,请烧高香它不报错:

#换源,安装Erlang 
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
sudo dpkg -i erlang-solutions_1.0_all.deb
sudo apt-get update
sudo apt-get install erlang

#换源,安装RabbitMQ 
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash   #这个命令很可能卡住,请尽情重试或手动安装
sudo apt-get update
sudo apt-get install rabbitmq-server

目前我的机器上的版本是RabbitMQ 3.7.9 Erlang 21.1

如果希望使用web来观察队列情况,可以

sudo rabbitmq-plugins enable rabbitmq_management

使用浏览器访问 http://127.0.0.1:15672 使用默认的guest/guest用户登录即可。

出于安全的考虑,guest这个默认的用户只能通过 http://localhost:15672 来登录,其他的IP无法直接使用这个账号。如果希望远程登录web,需要自行添加superuser,这方面内容还请自行Google或百度。

Python版本管理

安装Pyenv

建议使用pyenv,地址:https://github.com/pyenv/pyenv,一键脚本如下:

curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash

当然,如果不嫌麻烦(或是科研dalao),也可以通过Anaconda创建虚拟环境。

脚本跑完之后会有提示 按照提示修改自己的~/.bash_profile~/.bashrc

# 打开配置文件
nano ~/.bashrc

# 复制刚才提示中的类似这三段添加到最后
# 不能直接复制我的,每个人的不一样
export PATH="/home/ubuntu/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

# 使自己的profile生效
source ~/.bashrc

安装 Python3

# 安装前置依赖(Cent OS)
yum -y install gcc
yum -y install make
yum -y install zlib zlib-devel
yum -y install readline readline-devel readline-static
yum -y install openssl openssl-devel openssl-static
yum -y install sqlite-devel
yum -y install bzip2-devel bzip2-libs
yum -y install python-devel mysql-devel
yum -y install python3-devel
# 安装Python3.9(如果很慢参考下文换TUNA源)
pyenv install 3.9.0

创建虚拟运行环境

  1. 创建 OtterBot 运行的虚拟环境

    pyenv virtualenv 3.9.0 venv-ffxivbot-39
  2. 切换到项目所在目录

    cd /home/ubuntu/

Clone并编写配置

  1. clone 项目到本地

    git clone -b master https://github.com/Bluefissure/OtterBot.git
    cd OtterBot
  2. 将项目文件夹的环境设置为 virtualenv

    pyenv local venv-ffxivbot-39

    如果没有错误,此时在此目录下运行命令会有(venv-ffxivbot-39)的前缀,那么,恭喜你创建了一个干净的python环境

  3. 安装依赖

    pip install -r requirements.txt 

    如果很慢,可以将软件源切换到TUNA

    wget https://tuna.moe/oh-my-tuna/oh-my-tuna.py
    python oh-my-tuna.py

项目配置修改

复制OtterBot/FFXIV/settings_example.pyOtterBot/FFXIV/settings.py,找到ALLOWED_HOSTS相关代码,修改为:

ALLOWED_HOSTS = ['127.0.0.1', '*']

否则无法远程访问,再找到DATABASE相关代码,按照下面修改:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'FFXIV',  #数据库名
        'USER': 'root',  #数据库用户
        'PASSWORD': 'PASSWORD',  #数据库密码
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}

数据库初始化

  1. 建立FFXIV数据库

    mysql -uroot -p # 输入安装LNMP时mysql的密码
    create database FFXIV; # 创建数据库,请注意要与settings.py里保持一致
    
  2. 迁移数据库(注意每次数据库结构更新需要重新迁移)

    python manage.py makemigrations ffxivbot# 通过djang ORM 给ffxivbot建立initial migration
    python manage.py migrate # 通过djang ORM 建立所需数据库表 
    
  3. 初始化基础数据 某些基础的数据(比如boss名称、天气、服务器、gif沙雕图之类的)被导出到了db文件夹内,需要进入导入数据库文件:

    python manage.py loaddata db/*.json; # 通过Django导入数据库 文件
    

    请注意,如果数据库结构不匹配,可能会出奇怪的问题,这时可以自己看看报错然后向上天祈祷解决(大概)。

业务配置修改

复制OtterBot/ffxivbot/config_example.jsonOtterBot/ffxivbot/config.json,修改对应的设置:

  • WEB_BASE_URL: 网站地址,会用来生成配置文件的上报地址,请务必填写正确。
  • QQ_BASE_URL:用来存储云吸的图片的老服务器,无需改动。
  • ACCESS_TOKEN:遗留配置项,无需改动
  • SECRET_KEY:遗留配置项,无需改动
  • RANDOMORG_TOKEN:https://random.org的API Token,需要申请。业务中的/lottery命令需要用到
  • WHATANIME_TOKEN: https://trace.moe/的API Token,需要申请。业务中的以图搜番需要用到
  • ***_URL:各项服务的URL,除非地址迁移等原因无需改动
  • TULING_API_KEY:图灵机器人的token,请关闭密码认证功能。业务中的艾特聊天需要用到。
  • OCR_TYPE:OCR服务商,目前只支持"baidu""tencent"。建议使用百度,辣鸡腾讯云太贵。
  • BAIDU_OCR_ACCESSTOKEN:参考百度云的鉴权认证机制获取Access Token,每个月需要刷新一次。
  • TENCENT_OCR_SECRET***:腾讯云OCR的SecretID与SecretKey,用于OCR识别。
  • CONFIG_GROUP_ID:獭窝管理群群号。机器人会自动检索申请入群是否为本窝用户并自动通过加群请求。
  • ADMIN_ID:獭窝窝主的QQ号。业务中的留言功能会推送到此账号。
  • ADMIN_BOT:窝主的机器人QQ号。业务中的留言功能通过此机器人推送。
  • TIMEFORMAT*:日期格式,无需改动。
  • GLOBAL_EVENT_HANDLE:这是干啥用的?
  • BOT_FATHER:机器人的默认父亲姓名(其实就是个replace("图灵工程师爸爸",BOT_FATHER)
  • BOT_MOTHER:机器人的默认母亲姓名(其实就是个replace("图灵工程师妈妈",BOT_MOTHER)
  • USER_NICKNAME:机器人对与其聊天的人的默认称呼(其实就是个replace("小主人",USER_NICKNAME)

系统检查

python manage.py check

如果返回了System check identified no issues (0 silenced).则说明系统环境安装完成。

测试项目是否能正常运行

python manage.py runserver 0.0.0.0:8080 

如果没有报错,可以访问服务器IP:8080添加机器人了。

创建管理员账号

python manage.py createsuperuser # 按照提示创建即可

然后,就可以登录服务器IP:8080/admin来检查天气、boss副本等数据是否成功添加。

如果使用管理员登录网站出现 User has no QQ user 的问题,请前往 IP:8000/admin 界面登录,然后给管理员用户绑定一个QQ。