Skip to content

VPS 建站指南 ​

VPS 服务商 ​

海外 VPS 优惠/评测/推荐:科技 lion 官方网站 - KEJILION

磐石数据

我选择了 RackNerd 1 核 1G 一年 10 刀的极致性价比套餐,这使得我的机器资源比较吃紧,只能省着用,选择最轻量级的部署方式。

image-20260503214948023

性能优化 ​

重装 ​

在云服务平台选购完毕后,通常会让用户选择一个系统,个人喜欢选择最小化方式安装 Debian 系统,选择任意最近的两个稳定版本即可。如果没有初次安装的选项,控制台通常也会提供重装的选项。

image-20260626212533796

开启 Swap 区 ​

Swap 文件是 Linux 系统中用于扩展物理内存的一种机制。当系统的物理内存(RAM)不足时,Swap 文件可以将不常用的数据从内存转移到硬盘的交换区域,从而释放更多的内存供其他进程使用。

如果你的服务器内存比较吃紧,或者需要部署的网站和应用比较多,建议开启 Swap 区,内部其实是将一段物理磁盘即 swap 分区充当内存来使用,这个过程会出现换出(把进程暂时不用的内存数据存储到磁盘中)和换入(进程需要再次访问这些内存的时候,把它们从磁盘读到内存中)两个过程。

查看是否开启

shell
# 方法1:查看所有激活的swap设备/文件(看是否有输出)
swapon --show
# 方法2:查看内存概览,看Swap那一行的used/total
free -h
# 方法3:查看内核swap统计信息
cat /proc/swaps

官方建议 Swap 大小

{swap=mem∗2,swap≤1GBswap=mem∗1.5,1GB<swap≤2GBswap=mem2GB<swap≤8GBswap=mem∗0.5,swap>8GB

创建 Swap 文件,使用 dd 命令创建指定大小的 swap 文件:

bash
# 创建1GB的swap文件
sudo dd if=/dev/zero of=/var/swap bs=1024 count=1048576

格式化 Swap 文件

bash
# 将文件格式化为swap格式
sudo mkswap /var/swap

# 设置正确的权限
sudo chmod 0600 /var/swap

启用 Swap

bash
# 启用swap文件
sudo swapon /var/swap

# 验证swap是否启用
swapon -s

永久启用 Swap,为了系统重启后自动启用 swap,需要将其添加到 /etc/fstab 文件:

bash
# 添加swap文件到fstab
echo '/var/swap       swap             swap    defaults        0 0' >> /etc/fstab

禁用 Swap

bash
# 禁用swap文件
sudo swapoff /var/swap

# 验证swap是否已禁用
swapon -s

Swap 优化方式:

  • 调整 Swappiness
  • 调整 swap 的 I/O 调度

开启 BBR 加速 ​

BBR(Bottleneck Bandwidth and Round-trip propagation time)是 Google 开发的一种 TCP 拥塞控制算法。

相比传统的拥塞控制算法,BBR 有如下好处:

  • 提高网络吞吐量:更好地利用可用带宽
  • 减少延迟:降低网络延迟和抖动
  • 提升用户体验:特别适合高带宽、高延迟的网络环境
  • 自动适应:根据网络状况自动调整参数

内核版本要求:4.9 及以上,查看 当前内核版本:uname -r

开启 BBR 方式如下:

验证本系统是否兼容 BBR ,主流的 Debian/Ubuntu 版本通常都支持 BBR

bash
# 加载BBR算法模块,确保不报错
sudo modprobe tcp_bbr
#验证BBR模块是否已加载
lsmod | grep tcp_

预期输出:image-20260626214021923

修改/etc/sysctl.conf配置文件来启用 BBR

  • 设置了Fair Queuing(公平排队)作为默认的排队规则
  • 指定bbr作为拥塞控制算法。
bash
# 设置默认队列规则为fq
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf

# 设置TCP拥塞控制算法为bbr
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

# 应用配置
sysctl -p

验证 BBR 启用状态

bash
# 查看可用的拥塞控制算法
sysctl net.ipv4.tcp_available_congestion_control
# 预期输出 net.ipv4.tcp_available_congestion_control = reno cubic bbr

# 查看默认队列规则
sysctl net.core.default_qdisc
# 预期输出 net.core.default_qdisc = fq

# 查看当前使用的拥塞控制算法
sysctl net.ipv4.tcp_congestion_control
# 预期输出 net.ipv4.tcp_congestion_control = bbr

通过以上步骤,网络连接已经能够够享受到 BBR 带来的性能提升,包括更高的吞吐量和更低的延迟。

安全防护 ​

开启防火墙 ​

建议打开 systemctl,默认拒绝所有。但是好似云服务商的具有前置防火墙如安全组 (Security Group) / ACL 规则,这是位于服务器实例以外的“云上虚拟防火墙”。例如只要有安全组规则放行了 22 端口,流量就已经能进入系统,系统内部的 firewalld 再怎么阻止也无能为力了。

shell
# 查看firewalld服务状态
systemctl status firewalld
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙状态
firewall-cmd --state
# 查看防火墙规则
firewall-cmd --list-all

防暴力破解 fail2ban ​

服务器的 SSH/服务每天都会遭到大量登录尝试。

image-20260626205701620

查看日志:grep "Failed password" /var/log/auth.log | tail -20,几乎是每分钟 5 次。

image-20260626205824166

安装 fail2ban 可以实时扫描日志,识别重复失败的登录尝试后,自动向防火墙(如 iptables、firewalld、nftables)下发规则临时封禁恶意 IP,从而: 降低暴力破解成功率;

bash
apt install fail2ban -y
systemctl enable --now fail2ban # 添加开机自启动与启动

创建 /etc/fail2ban/jail.d/common.local 基本配置

ini
[DEFAULT]
# 白名单(替换为你信任的 IP)
ignoreip = 127.0.0.1/8 ::1 203.0.113.5
# 封禁 1 小时(可改为 86400 秒或 -1 永久)
bantime = 1h
# 在 10 分钟内统计失败次数
findtime = 10m
# 失败 5 次触发封禁
maxretry = 5
backend = auto

[sshd]
enabled = true
port = ssh
# debian/Ubuntu
logpath = /var/log/auth.log
# CentOS
#logpath = /var/log/secure

查看封禁列表

bash
fail2ban-client status sshd

手动解除封禁

bash
fail2ban-client set sshd unbanip 1.2.3.4

服务器管理 ​

一体式 ​

直接安装一体化的面板,适合新手入门,几乎包揽服务器所有模块,网站配置、运行环境、容器管理、数据库、防火墙、监控、终端等等,使用一体化面板管理服务器、网站和应用基本可以摆脱命令行。

常见的 Linux 运维管理一体化面板有:宝塔面板、1Panel、aaPanel

1Panel 安装脚本

shell
bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"

组合式 ​

如果不喜欢这类糅合了所有管理功能的面板,看起来十分的臃肿,用的不熟练容易找不到配置的位置。可以组合使用不同层面上的 web 管理工具,例如有些面板只专注于 Linux 系统管理,有些面板只做类 Nginx 的 HTTP 服务器可视化,有些面板是做 docker 容器的可视化编排和管理,这很好地体现了“单一职责”的理念。如果说你追求轻量级、视觉清新的管理方案可以采用这种方式。

我通过实际体验总结了有如下几个方案:

  • 高可用方案:Cockpit + nginx-ui + Portainer
  • 极致轻量级方案:Cockpit + nginx-proxy-manager + dockge
  • 我的方案:Cockpit + nginx-ui + dockge

以下介绍我的方案及安装部署步骤

安装 Cockpit,访问默认端口 9090,输入系统用户密码

bash
apt install cockpit -y

# 启动服务
systemctl start cockpit
# 验证服务状态
sudo systemctl status cockpit
# 验证服务自启动
sudo systemctl is-enabled cockpit

image-20260625181041128

安装 nginx-ui(提前或者之后安装 nginx),访问端口 9090

bash
bash -c "$(curl -L https://cloud.nginxui.com/install.sh)" @ install -r https://cloud.nginxui.com/

image-20260625181132274

Cockpit 如果需要通过 nginx 反向代理,需要编辑配置 /etc/cockpit/cockpit.conf

ini
[WebService]
Origins = https://cockpit.domain.tld wss://cockpit.domain.tld
ProtocolHeader = X-Forwarded-Proto

还要开启 WebScocket 保持实时的数据包发送,Nginx 示例配置如下

nginx
server {
    listen         80;
    listen         443 ssl;
    server_name    cockpit.domain.tld;

    location / {
        # Required to proxy the connection to Cockpit
        proxy_pass https://127.0.0.1:9090;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Required for web sockets to function
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Pass ETag header from Cockpit to clients.
        # See: https://github.com/cockpit-project/cockpit/issues/5239
        gzip off;
    }
}

安装适合家庭站和个人使用的 portainer-ce

bash
curl -L https://downloads.portainer.io/ce-sts/portainer-compose.yaml -o portainer-compose.yaml
mv portainer-compose.yaml compose.yaml
# 调整 compose.yaml 内容
docker compose up -d

image-20260625203221897

portainer 暂不支持多语言,若需要汉化,可以参考此汉化教程——Docker 安装 Portainer CE 监控面板和汉化教程 - 虞泽 - 博客园 或是直接下载汉化版本的 portainer。

由于无法 portainer 的编排功能无法自定义 docker-compose.yaml 路径 和 容器挂载的存储根路径,我最终还是选择了 dockge 来管理。

docker-compose.yaml 如下

yaml
services:
  dockge:
    image: louislam/dockge:1
    restart: unless-stopped
    ports:
      # Host Port : Container Port
      - 5001:5001
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/app/data
        
      # If you want to use private registries, you need to share the auth file with Dockge:
      # - /root/.docker/:/root/.docker

      # Stacks Directory
      # ⚠️ READ IT CAREFULLY. If you did it wrong, your data could end up writing into a WRONG PATH.
      # ⚠️ 1. FULL path only. No relative path (MUST)
      # ⚠️ 2. Left Stacks Path === Right Stacks Path (MUST)
      - /编排文件的存放位置,例如 /root/docker:/opt/stacks
    environment:
      # Tell Dockge where is your stacks directory
      - DOCKGE_STACKS_DIR=/opt/stacks

这样所有编排文件和容器配置都在一个总目录 /root/docker 之下

image-20260625234924380

你用命令行编排的容器,dockge 也能识别到,但是缺少了一些 docker 监控及配置等高级功能。

1panel ​

查看、修改账号信息

bash
1pctl user-info # 查看账号信息
1pctl update password # 修改密码

服务重启

1pctl restart core
1pctl restart agent
1pctl restart all

完全卸载

1pctl uninstall

sudo rm -rf /usr/local/bin/1panel
sudo rm -f /etc/systemd/system/1panel.service
sudo systemctl daemon-reload

自建机场 ​

自建机场

服务部署 ​

通过面板 或 Nginx 部署静态页面

通过面板 或 Node.js 部署 SSR 页面

搜索引擎优化(SEO) ​

部署完网站之后,虽然可以直接通过 url 访问我们的网站,但是我们无法通过搜索引擎检索到我们网站的相关内容,所以我们需要进行 网站验证,网站验证主要就是为了让各大搜索引擎收录我们的网站,这样可以让更多的人通过搜索引擎找到我们的网站。

参考资料 ​

Ubuntu/Debian 设置 Swap 虚拟内存

Debian/Ubuntu 开启 BBR 拥塞控制算法

谷歌 SEO 教程:手把手教你做 SEO 优化 2025 - 知乎

Last updated: