从零搭建个人网站的第2天
本文记录了服务器安全优化与开发工具配置的全过程。首先解决HTTPS访问问题,通过certbot配置SSL证书并启用443端口。接着加强防火墙防护,使用fail2ban阻止SSH暴力破解和异常请求。为提高开发效率,作者配置了VS Code的Continue插件接入AI助手(Qwen3),并建立了运维文档辅助开发。此外还部署了Webmin实现图形化管理,解决了favicon显示问题,并创建了HTML主
一、启用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对话,然他给我打工写代码。
更多推荐



所有评论(0)