为了不断地熟悉Python的操作,并和自己的项目or专业发展方向结合,我前段时间系统化学习了 机器学习的内容。Python的操作确实不难,现在各种大厂出品的AI助手代码能力也是超强,手把手的指导工作。

为了继续学习Python并投入未来的实际应用,我决定建立个人网站。目前的定位是写博客、转发文章、保存整理已公开的文献、接入大语言模型;未来可能建立一个数据库,整理我们实验室的实验材料。

昨天我从MARKSYSTEM公司订购了VPS,单核CPU+2GB RAM+40GB SSD,2TB流量,速度100mbps,最便宜的档位就能满足我的需求;奇怪的是爱尔兰机房竟然比法兰西的每个月贵2欧,什么鬼?更有趣的是芬兰的机房每个月贵10欧。

经过几个小时的pending,昨天晚上收到公司的邮件说VPS已经准备好,哇哦。今天早上一看已经受到了1002次登录root账号的攻击,什么鬼???接下来只好:

一、基础防护

1.登录服务器

ssh root@IP Address

2.改用密钥登录,注意保存好私有密钥文件

3.安装主流防火墙软件并开启

4.禁用密码登录root用户,建立一个普通用户;避免被暴力破解;使用nano工具

yum install nano
nano /etc/ssh/sshd_config

找到文件中的项目并修改:

PermitRootLogin no
PasswordAuthentication no
Port #自己喜欢的端口#

二、建立网站架构

1.总体架构:

客户端 → Nginx(反向代理 + HTTPS)
                ↓
        Uvicorn/Gunicorn(FastAPI)
                ↓
            PostgreSQL

2.安装PostgreSQL和相关依赖:

yum update -y
yum install git python3 python3-pip python3-devel gcc nginx -y
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql15 postgresql15-server #安装SQL和依赖、更新仓库

/usr/pgsql-15/bin/postgresql-15-setup initdb

systemctl enable postgresql-15 #开机自启
systemctl start postgresql-15

sudo -u postgres psql #进入数据库

3.进入数据库以后使用SQL语言,

CREATE DATABASE fastapi_db;
CREATE USER fastapi_user WITH PASSWORD 'StrongPassword123!';
GRANT ALL PRIVILEGES ON DATABASE fastapi_db TO fastapi_user;
\q

4.创建FastAPI目录和应用

mkdir -p /var/www/fastapi_app
cd /var/www/fastapi_app
python3 -m venv venv
source venv/bin/activate
pip install fastapi uvicorn gunicorn psycopg2-binary

nano /var/www/fastapi_app/main.py #创建文件

进入main.py文件后使用Python语言:

from fastapi import FastAPI
import psycopg2

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "This page is running!"}

5.创建 Gunicorn/Uvicorn systemd 服务:

nano /etc/systemd/system/fastapi.service

[Unit]
Description=FastAPI Application
After=network.target

[Service]
User=root
WorkingDirectory=/var/www/fastapi_app
Environment="PATH=/var/www/fastapi_app/venv/bin"
ExecStart=/var/www/fastapi_app/venv/bin/gunicorn -k uvicorn.workers.UvicornWorker main:app --bind 127.0.0.1:8000

Restart=always

[Install]
WantedBy=multi-user.target

之后启动FastAPI服务:

systemctl daemon-reload
systemctl enable fastapi
systemctl start fastapi

6.配置 Nginx 反向代理:

nano /etc/nginx/conf.d/fastapi.conf

server {
    listen X;  #X是自己选择的端口
    server_name your_domain_or_ip;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

测试并重启Nginx:

nginx -t
systemctl restart nginx

访问http://IP地址,应该可以看到

{"message": "This page is running!"}

三、购买域名

和copilot battle了一番以后还是选择了CloudFlare,毕竟是巨厂而且在爱尔兰有节点。选好域名并输入信用卡号,付钱钱。

在CloudFlare的操作界面中打开防护程序,设置A类DNS链接到自己的服务器公网IP

四、安全优化

简单来说就是只允许Cloudflare IP 访问 选择的端口(假设为X端口)

firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=173.245.48.0/20 accept'
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 port port=X protocol=tcp drop'
#只允许CloudFlare来源的X端口并拒绝其他
firewall-cmd --reload

五、通用更新流程

ssh root@你的服务器IP
cd /var/www/fastapi_app
nano main.py
sudo systemctl restart fastapi
curl http://127.0.0.1:8000

浏览器登录成功:

纪念一下我的网站的上线。下次做一个网页头像,跟着教程做一个博客系统出来。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐