【香橙派4】从零开始搭建服务器并部署Nonebot2

【香橙派4】从零开始搭建服务器并部署Nonebot2

文章目录

  • 【香橙派4】从零开始搭建服务器并部署Nonebot2
    • 烧录固件到TF卡
    • 启动系统
    • 安装Python 3.10
    • 安装go-cqhttp
    • 安装Nonebot2
    • 启动脚本编写和验证
    • 开机脚本部署
    • 开启密钥登录
    • 安装cpolar开启内网穿透

烧录固件到TF卡

从官网下载固件Orangepi4_3.0.6_ubuntu_focal_desktop_xfce_linux5.10.43.img和必需的工具SD Card Formatter,Win32DiskImager。
打开SD Card Formatter,选择TF卡的磁盘号开始格式化。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第1张图片
格式化结束会出现弹窗提示,确定后关闭软件即可。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第2张图片
打开Win32DiskImager,选择要烧写的固件,点击写入按钮。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第3张图片
【香橙派4】从零开始搭建服务器并部署Nonebot2_第4张图片
【香橙派4】从零开始搭建服务器并部署Nonebot2_第5张图片
烧写结束后关闭软件即可。

启动系统

将TF卡插入卡槽,上电启动香橙派,第一次启动系统可能需要点时间。如果外接了显示屏,成功启动系统后可以看到以下的桌面。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第6张图片
如果连接了调试串口的话也能看到串口的输出信息。
连接wifi,并通过ifconfig命令查看香橙派的IP地址。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第7张图片
如果是直插网线的话eth0下面的即为IP地址。
使用linux系统或者wsl通过ssh命令连接开发板,windows下亦可使用putty等工具,这里不多赘述。

ssh root@开发板IP地址

出现如下欢迎界面即成功登录开发板。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第8张图片
先执行一下更新。

apt-get update
apt upgrade

重新设置一下时区。

dpkg-reconfigure tzdata

选择Asia,Shanghai。OK确定即可。设置完成后会出现当前的时间信息。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第9张图片

安装Python 3.10

下载并编译安装Python 3.10。

wget https://www.python.org/ftp/python/3.10.5/Python-3.10.5.tgz
tar -zxf Python-3.10.5.tgz
cd Python-3.10.5
./configure --prefix=/usr/local/python3/
make -j6 && make install #香橙派4是6核所以-j6六线程编译,这个根据开发板的核心数更改。

原先的固件预装的是Python3.8,这里我们删除原先的软链接并重新创建。

rm /usr/bin/python3
ln -s /usr/local/python3/bin/python3 /usr/bin/python3 
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip

使用python3 -V命令验证安装是否成功。
在这里插入图片描述

安装go-cqhttp

下载并安装go-cqhttp到指定目录。

wget https://github.com/Mrs4s/go-cqhttp/releases/download/v1.0.0-rc3/go-cqhttp_1.0.0-rc3_linux_arm64.deb
mkdir /usr/local/go-cqhttp && dpkg -i --instdir=/usr/local/go-cqhttp go-cqhttp_1.0.0-rc3_linux_arm64.deb

到go-cqhttp可执行所在目录进行配置。

cd /usr/local/go-cqhttp/usr/bin
./go-cqhttp

【香橙派4】从零开始搭建服务器并部署Nonebot2_第10张图片
退出程序,vi config.yml修改配置文件。填写QQ号,修改反向WS Universal 地址为ws://127.0.0.1:端口号/onebot/v11/ws。完整配置如下,QQ号需要自行填写,剩下的配置可以和我一样。

# go-cqhttp 默认配置文件

account: # 账号相关
  uin: 填写QQ号 # QQ账号
  password: '' # 密码为空时使用扫码登录
  encrypt: false  # 是否开启密码加密
  status: 0      # 在线状态 请参考 https://docs.go-cqhttp.org/guide/config.html#在线状态
  relogin: # 重连设置
    delay: 3   # 首次重连延迟, 单位秒
    interval: 3   # 重连间隔
    max-times: 0  # 最大重连次数, 0为无限制

  # 是否使用服务器下发的新地址进行重连
  # 注意, 此设置可能导致在海外服务器上连接情况更差
  use-sso-address: true
  # 是否允许发送临时会话消息
  allow-temp-session: false

heartbeat:
  # 心跳频率, 单位秒
  # -1 为关闭心跳
  interval: 5

message:
  # 上报数据类型
  # 可选: string,array
  post-format: string
  # 是否忽略无效的CQ码, 如果为假将原样发送
  ignore-invalid-cqcode: false
  # 是否强制分片发送消息
  # 分片发送将会带来更快的速度
  # 但是兼容性会有些问题
  force-fragment: false
  # 是否将url分片发送
  fix-url: false
  # 下载图片等请求网络代理
  proxy-rewrite: ''
  # 是否上报自身消息
  report-self-message: false
  # 移除服务端的Reply附带的At
  remove-reply-at: false
  # 为Reply附加更多信息
  extra-reply-data: false
  # 跳过 Mime 扫描, 忽略错误数据
  skip-mime-scan: false

output:
  # 日志等级 trace,debug,info,warn,error
  log-level: warn
  # 日志时效 单位天. 超过这个时间之前的日志将会被自动删除. 设置为 0 表示永久保留.
  log-aging: 15
  # 是否在每次启动时强制创建全新的文件储存日志. 为 false 的情况下将会在上次启动时创建的日志文件续写
  log-force-new: true
  # 是否启用日志颜色
  log-colorful: true
  # 是否启用 DEBUG
  debug: false # 开启调试模式

# 默认中间件锚点
default-middlewares: &default
  # 访问密钥, 强烈推荐在公网的服务器设置
  access-token: ''
  # 事件过滤器文件目录
  filter: ''
  # API限速设置
  # 该设置为全局生效
  # 原 cqhttp 虽然启用了 rate_limit 后缀, 但是基本没插件适配
  # 目前该限速设置为令牌桶算法, 请参考:
  # https://baike.baidu.com/item/%E4%BB%A4%E7%89%8C%E6%A1%B6%E7%AE%97%E6%B3%95/6597000?fr=aladdin
  rate-limit:
    enabled: false # 是否启用限速
    frequency: 1  # 令牌回复频率, 单位秒
    bucket: 1     # 令牌桶大小

database: # 数据库相关设置
  leveldb:
    # 是否启用内置leveldb数据库
    # 启用将会增加10-20MB的内存占用和一定的磁盘空间
    # 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能
    enable: true

  # 媒体文件缓存, 删除此项则使用缓存文件(旧版行为)
  cache:
    image: data/image.db
    video: data/video.db

# 连接服务列表
servers:
  # 添加方式,同一连接方式可添加多个,具体配置说明请查看文档
  #- http: # http 通信
  #- ws:   # 正向 Websocket
  #- ws-reverse: # 反向 Websocket
  #- pprof: #性能分析服务器
  # 反向WS设置
  - ws-reverse:
      # 反向WS Universal 地址
      # 注意 设置了此项地址后下面两项将会被忽略
      universal: ws://127.0.0.1:7070/onebot/v11/ws
      # 反向WS API 地址
      api: ws://your_websocket_api.server
      # 反向WS Event 地址
      event: ws://your_websocket_event.server
      # 重连间隔 单位毫秒
      reconnect-interval: 3000
      middlewares:
        <<: *default # 引用默认中间件

启动go-cqhttp./go-cqhttp,扫码登录。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第11张图片
登录成功后会在设备上记录登录信息。成功登录后我们先关闭程序,进行Nonebot的安装。

安装Nonebot2

使用脚手架安装pip install nb-cli,成功后ln -s /usr/local/python3/bin/nb /usr/bin/nb创建nb的软链接,这样我们就能使用nb命令了。
通过nb创建一个新的项目,Create a New Project,或者使用nb create也是一样的效果。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第12张图片
给项目命名。选择插件放在src文件夹下。
在这里插入图片描述
自带的插件,选择echo
在这里插入图片描述
适配器选择OneBot V11。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第13张图片
在成功创建项目的同时会在当前路径生成一个项目文件夹。我们进入项目文件夹内,修改配置文件vi .env.dev

HOST=127.0.0.1
PORT=7070 #端口号需要和go-cqhttp配置的一样
LOG_LEVEL=DEBUG
FASTAPI_RELOAD=true

启动脚本编写和验证

go-cqhttp和Nonebot的配置已经结束了,我们写个启动脚本让机器人跑起来。创建shell脚本touch startBot.sh,编辑内容如下:

cd /usr/local/go-cqhttp/usr/bin
./go-cqhttp -faststart &
cd /usr/local/pluto
nb run &

赋予权限chmod +x startBot.sh
启动机器人试试sh startBot.sh

【香橙派4】从零开始搭建服务器并部署Nonebot2_第14张图片
显示已连接到反向服务器,我们给发送/echo hello,能收到机器人的回复。这说明我们的机器人已经部署成功了。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第15张图片

开机脚本部署

通过rc.local开机脚本实现,我们先开启rc-local.service
修改vi /lib/systemd/system/rc-local.service,加上[Install]部分。

#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target

编辑vi /etc/rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
sleep 30 #延迟30s再执行,保证网络已经跑起来了
sh /usr/local/pluto/startBot.sh
exit 0

使能rc-local.service

systemctl enable rc-local.service
systemctl daemon-reload

重启开发板,systemctl status rc-local.service查看一下服务状态,可以看到开机脚本已经部署成功了。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第16张图片

开启密钥登录

创建密钥对。

ssh-keygen -t rsa

提示密钥存放路径,我们回车默认即可。之后提示设置密码,设置的话每次登录需要再输入密码,我们保证私钥文件安全的情况下可以不设置,回车即可。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第17张图片
生成成功之后部署密钥。

ssh-copy-id -i /root/.ssh/id_rsa.pub root@开发板IP地址

部署成功后我们将/root/.ssh/id_rsa私钥文件拷贝到电脑,可以通过scp命令或者windows下使用winscp工具拷贝到本地。
打开puttygen,load选择私钥文件,选择后Save private key。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第18张图片
【香橙派4】从零开始搭建服务器并部署Nonebot2_第19张图片
【香橙派4】从零开始搭建服务器并部署Nonebot2_第20张图片
这样就生成了putty的key文件,可以通过putty密钥登录开发板了。
我们将密码ssh登录禁用。编辑vi /etc/ssh/sshd_config,找到PasswordAuthentication yes修改为PasswordAuthentication no

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
#PermitEmptyPasswords no

重启ssh服务systemctl restart sshd.service。这样就禁用密码登录了。

安装cpolar开启内网穿透

安装cpolar。

curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

登录cpolar官网,查看authtoken。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第21张图片

cpolar authtoken xxxx #这里补上你的authtoken
systemctl enable cpolar
systemctl start cpolar

通过systemctl status cpolar查看服务状态,active就部署成功了。ssh的公网IP和端口号需要登录cpolar网站查看,免费的套餐一天一变。可以写个脚本爬取ip和端口,再调用putty自动登录,这里就不列出代码了。
【香橙派4】从零开始搭建服务器并部署Nonebot2_第22张图片

你可能感兴趣的:(python,linux,服务器,ubuntu)