120元就可以配自己的服务器!150元配置升级!
之前那个什么随身wifi,什么电视盒子不算服务器
- 机箱+散热+电源300w =35+12=47
- h61+4g+亮机u=45
- 硬盘=25(买了个拆机的固态120g)
- 4g=10(自己加了4g)
- 电源线=6
- cpu=35(买了e3 1220v2升级了一下配置)
总计168(感觉还行,送的散热我换上去了,有点nb)
硬件折腾过程
- 用的亮机u亮机,点半天点不亮(最后发现是cpu供电没插,难绷)
什么都排除了,硬盘,线,显示屏,最后发现是忘插了 - 我让硬盘卖家装了一个xp系统,(其实没必要装,就想让他分区一下),然后用u盘装了UbuntuService版,装到电脑上,链接参考:点我看装服务器版Ubuntu硬盘那一步可以直接默认,懒得设置了。
- 然后开机,发现硬盘只有一半,然后上网搜资料点我 HERE
软件折腾过程
-
这个服务器本意是设置成MC服务器,然后去搜了MC服务器教程,发现只要安装一个JAVA18以上,然后把win端的转移过来就行了。这一步没啥好讲的。
-
关键的一步,设置MC服务器开机自启动,点我看按这个来,但是会报错,
最后解决方式是在里面设置工作路径,和设置Forge端的里面的那个参数文件,有个最大内存啥的,我直接拉到8g了,我们也就大概10个人玩左右,爆不了内存。 -
第二关键的一步,搭一个qq机器人可以监控消息啥的,不知道现在有没有出新的,也不知道能用多久。点我去b站看视频教程切记选择手表扫码登录。
-
贴一下插件的代码:
from nonebot import on_command
from nonebot.rule import to_me
import requests
import socket
import subprocess
import os
import nonebot
pwd=""#这里输入sudo密码
from nonebot.adapters.onebot.v11 import (
Bot,
MessageEvent,
MessageSegment,
Message,
GroupMessageEvent,
ActionFailed,
)
from nonebot import get_driver
driver = get_driver()
@driver.on_bot_connect
async def do_something(bot: Bot):
try:
await bot.send_group_msg(group_id=int(群号), message="我复活辣~开冲MC!!!!\n原神启动!!!!")#群发如果风控就发送给下面两人
except Exception as e:
await bot.send_private_msg(user_id=int(账号), message="我复活辣~开冲MC!!!!\n原神启动!!!!")
await bot.send_private_msg(user_id=int(账号2), message="我复活辣~开冲MC!!!!\n原神启动!!!!")
ipserver = on_command("服务器", rule=to_me(), aliases={"ip", "IP"}, priority=10, block=True)
ipstart = on_command("开启服务器", rule=to_me(), aliases={"原神启动", "启动"}, priority=11, block=True)
ipdown = on_command("关闭服务器", rule=to_me(), aliases={"关闭MC", "关闭"}, priority=11, block=True)
ipshowdown = on_command("关机", rule=to_me(), priority=5, block=True)
def check_service_status(service_name): # 检查服务是否在运行
try:
status = subprocess.check_output(["systemctl", "is-active", service_name]).decode().strip()
if status == "active":
return f"MC服务器正在运行,请查询IP后进入!"
else:
return f"MC服务器未在运行,请输入原神启动来启动服务器"
except subprocess.CalledProcessError:
return f"无法找到 {service_name} 服务。"
except Exception as e:
return f"发生错误:{e}"
servercheck = on_command("MC状态", rule=to_me(), aliases={"MC", "mc"}, priority=20, block=True)
menu = on_command("菜单", rule=to_me(), aliases={"功能", "help"}, priority=25, block=True)
@ipserver.handle()
async def handle_function():
ip = requests.get('http://ifconfig.me/ip', timeout=1).text.strip()
ip2 = requests.get('http://ifconfig.me', timeout=1).text.strip()
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
ip3 = s.getsockname()[0]
s.close()
await ipserver.send(
"第一网络查询ip为:" + ip + "" + ":55556\n" + "第二网络查询ip为:" + ip2 + "" + ":55556\n" + "局域网查询ip为:" + ip3 + "" + ":56666")
@ipstart.handle()
async def handle_function():
password = pwd
command = 'systemctl start test.service'
str = os.system('echo %s | sudo -S %s' % (password, command))
await ipstart.send("已经开启了,请勿重复开启")
@ipdown.handle()
async def handle_function():
password = pwd
command = 'systemctl stop test.service'
str = os.system('echo %s | sudo -S %s' % (password, command))
await ipdown.send("已经关闭了,请勿重复关闭")
@ipshowdown.handle() # 关机
async def handle_function():
await ipshowdown.send("我会等你的喵!")
password = pwd
command = 'shutdown -h now'
command1 = 'systemctl stop test.service'#这个test和bot是我写的自启动的服务
command2 = 'systemctl stop bot.service'
str = os.system('echo %s | sudo -S %s' % (password, command1))
str = os.system('echo %s | sudo -S %s' % (password, command2))
str = os.system('echo %s | sudo -S %s' % (password, command))
@servercheck.handle() #
async def handle_function():
# 要检查的服务名称
service_name = "test.service"
# 调用函数并打印结果
result = check_service_status(service_name)
await servercheck.send(result)
@menu.handle() #
async def handle_function():
await menu.send(
"ip-----查看本机ip\n原神启动-----启动MC服务器\n关闭-----关闭MC服务器\nmc-----查看MC服务器是否在运行中\n状态-----查看服务器状态\n关机-----关闭本服务器\n")
- 因为这个nonebot隐藏了python,所以只能去安装别人的插件然后改他的代码(起码我是这么做的,然后记得那个勾子函数是在连接bot后启用) 。
6、nb的自启动,要把nb的绝对路径写下:
不然就会报错!
ExecStart=/home/User/.local/bin/nb run
总结
好玩!
虽然挺累,虽然还要读论文
呜呜呜Orz
原文连接:https://nighttell.netlify.app/2023/11/01/server/