一、启用https

我把网址告诉实验室的小伙伴,他输入手机,结果出现了CloudFlare的521错误。定睛一看,我只启用了http,而他的手机浏览器自动补上了https。经过查看Nginx配置,我发现443端口未监听,也没有https证书。所以首先让我们加上https的认证,用到工具certbot:

yum install -y certbot python3-certbot-nginx
certbot --nginx -d XXX.com  #你的域名

ss -tlnp | grep :443  #确认443端口状态

手机输入网址,https登录成功。

二、强化防火墙

查看CloudFlare的页面的时候,发现昨天一天产生了几千次的查询,很明显被爬虫盯上了。更奇怪的是我用ssh登录的时候显示“上次登录失败的IP是XXX”,就我这个人畜无害的小网站竟然也有人攻击?只好加强一波防火墙设置,启用防护规则:

# 1. 创建自定义配置文件
cat > /etc/fail2ban/jail.d/custom.local << 'EOF'
[sshd]
enabled = true
port = ssh
logpath = /var/log/secure
maxretry = 5
bantime = 1h
findtime = 10m

[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 1d
findtime = 10m

[nginx-bad-request]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 10
bantime = 1h
findtime = 10m
EOF

# 2. 重新加载Fail2Ban配置
fail2ban-client reload

不看不知道,一看才发现已经有34次ssh登录失败,已找到3个IP并封禁,正在监控2个IP。无语中......再次提醒童鞋们注意保护个人服务器安全,可以搞一个密钥并拒绝root权限通过ssh密码登录。

常用管理命令如下“

# 查看所有被封禁的IP
fail2ban-client status sshd

# 手动解封IP
fail2ban-client set sshd unbanip <IP地址>

# 手动封禁IP
fail2ban-client set sshd banip <IP地址>

# 查看实时日志
tail -f /var/log/fail2ban.log

# 查看iptables规则
iptables -L f2b-sshd -v -n

三、找一个好用的AI助手

对于我这种非专业的程序员来说,手搓代码可能耗时费力,甚至语法都记不清楚。这时候就需要借助AI的帮助。如果要直接copy AI生成的代码,各种文件路径需要提前说明;这让我想到了程序员交接的运维手册。于是我叫AI生成了一个.md手册(Claude),记录我的服务器架构和各种文件路径,还有防火墙、监听端口的配置。

小范围搓代码来说的话,可以先把这个运维文档喂给AI,然后提出需求。亲测效率非常高。

另一种实现方式:VScode插件Continue,接入AI大模型

以前的程序员室友建议我使用VScode写代码,确实感受到了他的优势。首先向阿里云大模型申请一个API_key,目前每个大模型都提供1 million token的试用,推荐qwen3-coder-480b-a35b-instruct或者qwen3-coder-plus。或者选用Deepseek code V2,听说效果差不多而且很实惠。

下载Continue插件之后,添加大模型,手动配置文档,config.yaml。结合Continue官方的配置文件,一顿操作之后终于成功接入了。

---
name: Qwen3 Coder 480B A35B
version: 1.1.0
schema: v1
models:
  - name: qwen3-coder-plus
    provider: openrouter
    model: qwen3-coder-plus
    apiBase: "https://dashscope.aliyuncs.com/compatible-mode/v1"
    apiKey: "你的API key"
    defaultCompletionOptions:
      contextLength: 262144
    capabilities:
      - tool_use
    roles:
      - apply
      - chat
      - edit

(备注:这个是Continue手动添加大模型API时跳出来的config.yaml文档的内容,并不是Python语言)

成功在VScode中接入千问3,@服务器的运维文档,然后就让AI帮我写代码吧!

(备注:VScode官方也可以直接接入Github Copilot,代码能力也很强,直接打开右侧边栏登录)

四、图形化文件管理

习惯了在Windows的资源管理器里操作,文件管理还是用鼠标点点点,复制粘贴还是Ctrl+V更便捷。调查了一番,决定用webmin;他不仅可以管理文件,还能在线编辑,还能查看服务器状态和信息,还能接入PostgreSQL,还能管理防火墙,一步到位。

#Perl依赖
sudo dnf install perl -y

#下载Webmin 官方 RPM 包
wget https://prdownloads.sourceforge.net/webadmin/webmin-2.105-1.noarch.rpm

#安装并启动
sudo dnf install webmin-2.105-1.noarch.rpm -y
sudo systemctl enable --now webmin

#开放端口(以10000为例)
sudo firewall-cmd --add-port=10000/tcp --permanent
sudo firewall-cmd --reload

浏览器中输入https://你的服务器IP:10000即可访问

Webmin 默认使用自签名证书,所以浏览器会提示“不安全”,你点“继续访问”即可。登录用户名是服务器用户名(root 或其他用户,注意此处webmin和VPS操作系统的用户不相通);密码默认就是SSH 密码。

五、添加网页的Favicon

Favicon其实就是收藏夹图标,相当于网站Logo。

尝试了一堆生成SVG的工具,最后选了一个还算是满意的;先凑合着用,以后自己试一试illustrator搞一个更好看的版本。把图片文件命名为x.svg

1.创建static目录,授予权限

mkdir -p /var/www/fastapi_app/static
chmod -R 755 /var/www/fastapi_app/static

2.从PC上传x.svg到VPS

scp "C:\Users\Documents\x.svg" root@服务器IP:/var/www/fastapi_app/static/

当然,如果使用图形文件系统就更简单了。

经过我的一番尝试,直接使用Nginx代理favicon没成功,也不知道哪里出了问题。干脆修改一下网站架构,在根目录(主页)上使用html,然后在下层的功能中再使用fastapi。所以我们要建立html主页。

六、建立html主页

#创建目录
mkdir -p /var/www/fastapi_app/static/site

#创建首页
nano /var/www/fastapi_app/static/site/index.html

index.html文件中写入:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>My page</title>
    <link rel="icon" type="image/svg+xml" href="/x.svg">
</head>
<body>
    <h1>This page is working</h1>
    <p>Welcome to the site.</p>
</body>
</html>

在Nginx代理的设置文件中加入:(这一段要加入.conf文件的server{}之内,声明静态文件之后)

location = / {
    root /var/www/fastapi_app/static/site;

    try_files $uri $uri/ @fastapi;

}

重启Nginx代理:

nginx -t
nginx -s reload

最后别忘了让Claude帮忙更新.md运维手册,方便之后再和AI对话,然他给我打工写代码。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐