文章摘要
静莹莹

起因

前几天不是过生日嘛,正好我的电脑配置不太够用了,我妈就给我买了一台新电脑作为生日礼物(如果你好奇是哪个型号的话,机械革命无界15X Pro),就是我现在用来码字的这一台。于是我之前用的那台电脑(ThinkPad E450)终于是光荣退休了,成了我的备用机(距离它发布已经11年了这台电脑可是真不容易啊),而家里面的原来的那台卡的不行连打开 edge 都要等两分钟的 ThinkPad X250也终于彻底退位了(真不敢想象我的这个博客最开始还是在那台电脑上开始搞的),正好我上个月搞那些项目的时候发现有好多网站都是要用服务器部署的,但是阿里云腾讯云啊这些的服务器对我来说还是有点贵,特别是它还是续费制,所以我就想拿这台电脑作为服务器部署一些东西,于是在征得我爸的同意之后,这台电脑就正式变成我的服务器了,说实话 X250 这个外观作为服务器简直毫无违和感,正正方方的直角边框配上 Linux 简直比配 Win10 还好看,所以我们就正式发车啦!

电脑配置

制造商: Lenovo
型号: ThinkPad X250
产品名称: 20CLA272CD
CPU: Intel® Core™ i3-5010U CPU @ 2.10GHz
GPU: Intel® HD Graphics 5500(集显)
内存: 4.0 GiB

安装 Linux 系统

其实这一步不是必要的,Windows Server 也可以作为轻量级的服务器的操作系统,而且入门门槛更低,毕竟 Windows 谁不会用是吧,我妈的服务器就是装的 Windows Server,但是 Windows Server 占用的性能确实更高,而且 Linux 作为很多软件的老家,如果不主要运行 Microsoft 生态应用的话用起来肯定支持度更高一点,当然以上都是我为了用 Linux 找的借口(bushi),我想用 Linux 的原因总结起来只有一条 —— Windows 看腻了,想试试其他的操作系统(对就是这么任性,毕竟运行一个小网站的服务器本来就用不着那么多这个那个的嘛)

Linux 发行版我选的是Manjaro,桌面环境选的是 KDE Plasma,选这些也没有什么特别的,就是让 DeepSeek 给我推荐了几个,然后看那个好看选的哪个。界面好看是我选 Linux 的第一条件,因为我后面还是想要用这台电脑上上网啊什么的,其他的地方我感觉都没什么差别,就让 Deepseek 帮我推荐就好了。

我这个 Manjaro 是图形化安装的,有些发行版要使用命令行安装,这个可以自己去找教程

安装步骤:

  1. 前往Manjaro官网,下载iso文件(有三个桌面环境的版本可以选,我选的是 KDE Plasma 版,其实三个都挺好看的)
  2. 前往Rufus 写盘工具官网,下载 Rufus 写盘工具
  3. 准备一个空间大于 8GB 的U盘
  4. 使用 Rufus 写盘工具将 iso 文件写入U盘内(注意:此步骤将格式化该U盘,请提前为U盘中的文件做好备份)
  5. 写入完成之后点击关闭,拔出U盘,插入你想要安装 Linux 系统的电脑中,重启电脑
  6. 每个品牌的电脑具体需要按哪个键使用U盘作为第一启动项的有可能不一样,反正我的电脑是自动就能直接进入U盘,好像是之前有设置过
  7. 等它启动完毕后会出现下面的这个欢迎页面,点击 Launch Installer,根据指示将 Manjaro 安装到你的电脑
  8. 安装完毕之后重启即可

OK 那 Manjaro 发行版到这里就安装结束了,如果有什么其他需求比如说安装中文输入法什么的可以去问Deepseek,他讲得还是蛮详细的。

需要安装:

需要安装:

基础服务:

Nginx(Web 服务器软件)

MariaDB(数据库)

PHP & Python(脚本运行环境)

控制界面

宝塔面板(服务器控制界面)

安全配置:

ufw(选装)(防火墙)

Fail2ban(入侵防御)

内网穿透

CloudFlare Tunnel

安装基础服务

安装Web服务器(Nginx)

1
2
3
4
sudo pacman -Syu
sudo pacman -S nginx
sudo systemctl start nginx
sudo systemctl enable nginx

检测:访问 http://localhost 出现 “Welcome to nginx” 页面即为安装成功

安装数据库(MariaDB)

1
2
3
4
5
sudo pacman -S mariadb
sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation

安装PHP环境集成

1
2
3
sudo pacman -S php php-fpm php-mysqli  # 安装PHP核心及MySQL扩展
sudo systemctl start php-fpm
sudo systemctl enable php-fpm

安装Python环境

1
sudo pacman -S python python-pip python-virtualenv

验证

1
2
3
sudo systemctl status nginx
sudo systemctl status php-fpm
sudo systemctl status mariadb

三个服务都应该是 active (running)。

安装宝塔面板

宝塔面板是一款图形化的管理界面,可以通过网页管理站点/数据库等。我之前刚开始搞这个博客的时候因为 CloudFlare 的 Umami API 服务报错 1101 搜解决办法的时候还在 Windows 上安装了一个,虽然最后没用上,但至少积累了一点经验是吧

安装依赖

1
sudo pacman -S curl wget tar unzip

安装

1
2
wget -O install.sh http://download.bt.cn/install/install_panel.sh
sudo bash install.sh

安装完成后他会输出登录端口、地址、账号、密码

防火墙放行宝塔端口并保存

1
2
3
sudo iptables -I INPUT -p tcp --dport 888 -j ACCEPT
sudo iptables-save > /etc/iptables/iptables.rules
sudo systemctl restart iptables

把8888改成你的端口号(我的是42570)

访问测试

在服务器上访问http://<你的服务器IP>:<你的端口号>/<随机安全入口>

在连接上同一个 WiFi 的另一台设备上访问http://<你的服务器IP>:<你的端口号>/<随机安全入口>

随机安全入口在安装完成后会有提示。

设置开机自启动

1
sudo nano /etc/systemd/system/bt.service

在里面输入(粘贴):

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=BT Panel Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/bt start
ExecStop=/usr/bin/bt stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

粘贴完后,按下 Ctrl + O,回车确认保存,然后按 Ctrl + X 退出编辑器。

最后执行:

1
2
3
sudo systemctl daemon-reload
sudo systemctl enable bt
sudo systemctl start bt

安全配置

(可选)换用UFW防火墙(适合新手)

清除 iptables 规则

1
2
3
4
5
6
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X

关闭 iptables 服务

1
2
sudo systemctl stop iptables
sudo systemctl disable iptables

安装并启用 ufw

1
2
3
4
5
6
sudo pacman -S ufw
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 22/tcp # SSH(修改端口后需更新规则)
sudo ufw allow 42570/tcp # 宝塔(换成自己的端口)
sudo ufw enable

确认 ufw 状态

1
sudo ufw status verbose

ufw 命令

添加端口:sudo ufw allow 端口/协议

删除端口:sudo ufw delete allow 端口/协议

查看状态:sudo ufw status

SSH安全加固

修改配置

打开文件

1
sudo nano /etc/ssh/sshd_config

#Port22 改为 Port 2222

#PermitRootLogin prohibit-password 改为 PermitRootLogin no

#PasswordAuthentication yes 改为 PasswordAuthentication no

前面的#号要去掉

Ctrl + O,回车确认保存,然后按 Ctrl + X 退出编辑器。

执行:

1
sudo systemctl restart sshd

设置防火墙放行新端口

如果你用的是 ufw,执行:

1
2
sudo ufw allow 2222/tcp
sudo ufw reload

如果用 iptables,执行:

1
2
sudo iptables -I INPUT -p tcp --dport 2222 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/iptables.rules

安装并配置Fail2ban

1
2
3
sudo pacman -S fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

配置 /etc/fail2ban/jail.local,保护SSH和宝塔端口:

1
sudo nano /etc/fail2ban/jail.local
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[DEFAULT]
# 监控规则的默认设置
ignoreip = 127.0.0.1/8 ::1 # 忽略本机IP,避免误封
bantime = 3600 # 封禁时间,单位秒,这里1小时
findtime = 600 # 统计时间窗口,单位秒,这里10分钟
maxretry = 5 # 最大失败次数,超过后封禁

[sshd]
enabled = true # 启用SSH监控
port = 2222 # 你自定义的SSH端口,默认22则写22
filter = sshd # 过滤规则,fail2ban自带
logpath = /var/log/auth.log # SSH登录日志路径(根据你的系统日志路径调整)
maxretry = 5

[bt_panel]
enabled = true # 启用宝塔面板监控
filter = bt_panel # 过滤规则,需自定义(见下文)
port = 42570 # 宝塔面板端口
logpath = /www/server/panel/logs/error.log # 宝塔面板日志路径(请确认路径)
maxretry = 5
bantime = 7200 # 宝塔封禁时间2小时

Ctrl + O,回车确认保存,然后按 Ctrl + X 退出编辑器。

1
sudo nano /etc/fail2ban/jail.local
1
2
3
[Definition]
failregex = .*ERROR.*Login.*from <HOST>
ignoreregex =

Ctrl + O,回车确认保存,然后按 Ctrl + X 退出编辑器。

启动和管理 Fail2ban

启动 Fail2ban 服务:

1
2
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

查看 Fail2ban 状态:

1
sudo fail2ban-client status

查看某个监控 jail 状态,比如 SSH:

1
sudo fail2ban-client status sshd

查看被封禁的 IP:

1
sudo iptables -L -n -v

或者

1
sudo fail2ban-client status bt_panel

内网穿透(使用 CloudFlare Tunnel )

这里因为我对 CloudFlare 比较熟悉,对它也算蛮有好感,所以我就用 CloudFlare Tunnel 了,其实还有好多其他方式可以进行内网穿透,这里我就不再赘述了

注册 CloudFlare 账号

打开https://www.cloudflare.com/zh-cn/ ,注册账号

添加域名

可以参考我这篇文章:

就算你已经有你自己的域名了也可以看看怎么托管到 CloudFlare 那一段

安装 Cloudflared (在服务器上)

1
sudo pacman -S cloudflared

登录并授权 Tunnel

1
cloudflared tunnel login

执行后,它会输出一个登录链接,将它复制到浏览器打开,选择你 Cloudflare 帐号里托管的域名,认证完成后,会在本地生成一个 .cert.pem 文件(在 ~/.cloudflared/ 目录)

创建 Tunnel

1
cloudflared tunnel create my-tunnel

my-tunnel 可以随便换成其他的

运行完了之后会生成一个 id 和一个 json 文件的存储位置,记下来。

配置 Tunnel

1
2
sudo mkdir -p /etc/cloudflared
sudo nano /etc/cloudflared/config.yml

进入文件编辑界面后向文件内添加:

1
2
3
4
5
6
7
tunnel: <tunnel-id>    # 上一步创建隧道时生成的ID
credentials-file: /your/file/path/<tunnel-id>.json # 上一步给你的文件位置

ingress:
- hostname: your.domain.com # 你的域名
service: http://127.0.0.1:42570 # 宝塔面板所在服务地址(端口改成自己的)
- service: http_status:404 # 兜底规则

Ctrl + O,回车确认保存,然后按 Ctrl + X 退出编辑器。

运行 Tunnel

启动隧道:

1
cloudflared tunnel run my-tunnel

开机自启动 & 改成后台服务

因为 CloudFlare Tunnel 要一直占用着一个窗口,有点烦,我们可以把它改成后台服务

首先先按 ctrl + c 停止服务

然后运行

1
2
3
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared

这样就可以在后台运行了,想要看运行状况的话运行

1
systemctl status cloudflared

给宝塔面板配置域名

  1. 给你要绑定的域名添加 dns 记录
    类型:CNAME

    名称:(自定)

    目标:<你的-tunnel-id>.cfargotunnel.com

    代理状态:已代理(橙色小云)

  2. 配置 Tunnel 访问宝塔面板
    先在 Cloudflare 的 Tunnel 配置文件里添加一个路由,让 bt.yoxo.top 指向你本地的宝塔端口。

    找到 config.yml(一般在 /etc/cloudflared/config.yml,如果没有你可以自己创建):

    1
    sudo nano /etc/cloudflared/config.yml

    进入文件编辑界面后向文件内的ingress添加:

    1
    2
    - hostname: your.domain.com # 你要绑定的域名
    service: http://127.0.0.1:42570 # 宝塔面板所在服务地址(端口改成自己的)
  3. 在宝塔面板 > 设置中“绑定域名”那一栏输入你要绑定的域名

  4. 在地址栏中输入绑定的域名 + 安全入口(在宝塔面板里面看)

OK 到这里你的服务器就已经配置完成了,后面就是保持服务器开机联网,然后在服务器或者其他电脑上登录你绑定的宝塔面板页面控制服务器就好啦!

后记

我搞这一趟用了整整一天时间(真的是一整天,从8月10号的17:58搞到8月11号的17:25),主要就是修各种报错,在这里我要特别感谢我的两位得力助手:Deepseek 和 ChatGPT,我基本上就是跟着他们的指示一步一步做出来的,他们也不厌其烦的帮我修报错,没有他们我绝对是搞不好这个服务器的。

我后面使用服务器做的项目全都会放在下面,如果我出教程了的话也会放在下面,请多多关注哦!

项目

空无一物~