2026年3月

推荐工具:Putty、FinalShell(可视化SSH)

准备:项目项目目录结构

my-project/

├── backend/

│   ├── Dockerfile

│   └── publish/

├── frontend/

│   ├── Dockerfile

│   └── dist/

├── docker-compose.yml

├── .env

├── README.md

└── nginx/

    └── nginx.conf

然后发布前后端项目,注意配置环境改为生产模式

1. 使用root账户登入服务器,先修改密码,然后创建一个普通用户,给sudo权限

  • passwd root      修改root密码
  • adduser dev      创建dev用户 然后设置一个密码,默认信息不填直接entry
  • usermod -aG sudo dev   给sudo权限  ->  su - dev 切换为dev

2. 禁用密码认证,强制使用SSH密钥

  • ssh-keygen -t ed25519     生成 SSH 密钥对,执行后全程连按 3 次回车就行,默认保存位置如下
  • 本地公钥上传到服务器   type C:\Users\az102\.ssh\id_ed25519.pub | ssh -p 14609 dev@45.152.65.84 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && chmod 700 ~/.ssh"
  • 修改SSH配置文件  /etc/ssh/sshd_config
    • #禁止 root登录 (最安全)
      PermitRootLogin no
    • #白名单:仅允许 dev 用户登录  AllowUsers dev
    • #禁止密码登录(只允许key)
      PasswordAuthentication no
    • #启用公钥认证(必须)
      PubkeyAuthentication yes
    • #禁止挑战响应认证 (防旁路)
      ChallengeResponseAuthentication no
    • 禁止键盘交互认证(新版本替代ChalLengeResponse)KbdInteractiveAuthentication no
    • #是否启用PAM
      UsePAM yes
  • 重启 SSH 服务使配置生效 sudo systemctl restart ssh
  • 新开一个终端,不要关闭当前连接  不提示输入密码就是成功了  ssh -p 14609 dev@45.152.65.84

3. 配置防火墙(UFW)

  • sudo ufw limit 18108/tcp   1.先放行新SSH端口(关键),并且限制连接频率(防爆破更强)
    sudo ufw allow 80/tcp          2. 再放行常用端口
    sudo ufw allow 443/tcp      
  • 3.设置默认策略
    sudo ufw default deny incoming
    sudo ufw default allow outgoing
  • sudo nano /etc/ssh/sshd_config   4.修改SHH配置文件   Port 14609 ->  Port 18108
  • sudo systemctl restart sshd            5.重启SSH服务
  • ssh -p 18108 dev@45.152.65.84    6.关键:新开一个终端测试连接(不要断当前连接)
  • sudo ufw enable   7. 确认能连上之后,再启用防火墙
  • sudo ufw status  8.查看当前放行规则

4.设置更新系统安全补丁

  • sudo apt install unattended-upgrades -y     安装自动更新工具
  • sudo dpkg-reconfigure -plow unattended-upgrades  开启自动更新,只更系统级的安全漏洞补丁
  • 修改 /etc/apt/apt.conf.d/50unattended-upgrades         
  • Unattended-Upgrade::Allowed-Origins  中只保留   "${distro_id}:${distro_codename}-security";  其他注释

5.时区设置(影响日志/证书)+ Chrony 自动校时

  • sudo apt install chrony -y      按照 Chrony 自动校时
  • sudo timedatectl set-timezone Asia/Shanghai         设置时区
  • sudo systemctl enable --now chrony      「设置开机自启」 + 「立刻启动服务」
  • timedatectl      验证时间是否正确

6.安装基础工具(运维必备)

  • sudo apt install -y curl wget git vim unzip

7.开启Swap(小内存服务器必须 如果你是 1G / 2G 服务器)

  • # (1). 创建一个 2GB 大小的交换文件(快速创建,比传统命令快10倍) sudo fallocate -l 2G /swapfile
  • # (2). 设置权限:仅 root 能读写(安全必须!否则系统会警告) sudo chmod 600 /swapfile
  • # (3). 格式化为交换分区格式 sudo mkswap /swapfile
  • # (4). 立即启用 Swap(不用重启,立刻生效) sudo swapon /swapfile
  • # (5). 写入开机自动挂载配置 → **永久生效的核心!grep -q '/swapfile' /etc/fstab || echo '/swapfile none swap defaults 0 0' | sudo tee -a /etc/fstab
  • # (6). 确认是否配置成功   free -h
  • # (7). 查看 Swap 是否永久生效(核心,重启不丢失的关键) cat /etc/fstab
  • # (8). 优化Swap使用策略(永久生效+立即生效)
    • 物理内存用到 90% 才开始用 Swap(最适合小内存服务器)
    • echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf     
    • sudo sysctl -p
  • # (9).验证配置是否成功    cat /proc/sys/vm/swappiness    输出10

8. Fail2Ban(防爆破攻击)✅ 必装

  • sudo apt install fail2ban -y
    sudo systemctl enable fail2ban
    sudo systemctl start fail2ban
  • 新增配置  sudo nano /etc/fail2ban/jail.local    写入
    • [sshd]
      enabled = true
      port = 18108
      maxretry = 3
      findtime = 600
      bantime = 86400

  • # 1. 查看运行状态(显示 active(running) 就是成功) sudo systemctl status fail2ban
  • # 2. 查看已启用的防护规则(显示 sshd 就是SSH防护已开启) sudo fail2ban-client status

9. Ubuntu 安装 Docker & Docker Compose

  • 卸载旧版本(如果装过) 
    • sudo apt-get remove docker docker-engine docker.io containerd runc
  • 安装基础依赖 
    • sudo apt-get update
    • sudo apt-get install -y ca-certificates curl gnupg lsb-release
  • 添加 Docker 国内镜像源(关键)
    • sudo mkdir -p /etc/apt/keyrings
    • curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    • echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • 安装 Docker和Docker Compose    

    • sudo apt-get update

    • sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

  • 启动 Docker  和  containerd   

    • # 1. 设置 Docker 开机自启(重启服务器自动运行)

      • sudo systemctl enable docker

    • # 2. 设置 containerd 开机自启(必须配!)

      • sudo systemctl enable containerd

    • # 3. 先启动底层依赖 containerd

      • sudo systemctl start containerd

    • # 4. 再启动 Docker 服务

      • sudo systemctl start containerd

      • sudo systemctl start docker

  • 测试 Docker     

    • docker -v
  • 配置 Docker 国内镜像加速(阿里云镜像加速,只限阿里云服务器使用)

    • sudo mkdir -p /etc/docker                                            

    •  sudo nano /etc/docker/daemon.json              

    • {  "registry-mirrors": [    "https://krb3008y.mirror.aliyuncs.com",    "https://docker.m.daocloud.io"  ],  "log-driver": "json-file",  "log-opts": {    "max-size": "10m",    "max-file": "3"  },  "exec-opts": ["native.cgroupdriver=systemd"],  "live-restore": true}

       

  • 重启 Docker     

    • sudo systemctl daemon-reload         
    • sudo systemctl restart docker
  • 测试是否成功
    • sudo docker run hello-world
  • 设置 Docker 自动清理
    • crontab -e   打开定时任务编辑器
    • 0 3 * * 0 /usr/bin/docker system prune -f 在文件最后一行,粘贴这句话
    • crontab -l   验证是否设置成功

10. dev 用户未加入 docker 组

  • sudo usermod -aG docker dev     把当前用户加入 docker 组
  • newgrp docker 立即生效

10. 创建项目文件夹

  • mkdir -p /opt/docker/my-project-name

11. 进入项目目录 

  • cd /opt/docker/my-project-name

12. 上传项目到服务器

  • 使用 FinalShell 可视化上传(最直观)

13. 首次启动项目 

  • docker compose up -d --build

14. 修改了代码 / 修改了docker配置文件 / 修改了项目配置文件 / 重置环境,清空旧容器重新构建

  • docker compose down && docker compose up -d --build

推荐工具:Virtualbox、Ubuntu 、Putty、FinalShell(可视化SSH)

注意:本地部署 docker镜像问题,国内防火墙问题访问不了外网,需要配置国内镜像

准备:项目按目录结构

my-project/

├── backend/

│ ├── publish/

│ └── Dockerfile

├── frontend/

│ ├── dist/

│ ├── Dockerfile

│ └── nginx.conf

└── docker-compose.yml

然后发布前后端项目,注意配置环境改为生产模式

1.下载 VirtualBox : https://www.virtualbox.org/

2. 下载 ubuntu.iso 服务器版, 如 ubuntu-24.04.4-live-server-amd64.iso, 国内镜像: https://mirrors.aliyun.com/ubuntu-releases/

3. VirtualBox 创建 Ubuntu 虚拟机:

4. 打开 VirtualBox →新建虚拟机:

 

5. 启动虚拟机 → 安装 Ubuntu

6. 设置NAT网络 → 配置端口转发 → SSH 远程连接 → MySQL 数据库 → HTTP 网站

7. Ubuntu 安装 Docker & Docker Compose

  • 卸载旧版本(如果装过) sudo apt-get remove docker docker-engine docker.io containerd runc
  • 安装基础依赖 sudo apt-get update
                                sudo apt-get install -y ca-certificates curl gnupg lsb-release
  • 添加 Docker 国内镜像源(关键)

    sudo mkdir -p /etc/apt/keyrings

    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

    echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

  • 安装 Docker和Docker Compose    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

  • 启动 Docker        sudo systemctl start docker
                                    sudo systemctl enable docker

  • 测试  docker -v

  • 配置 Docker 国内镜像加速(非常重要)sudo mkdir -p /etc/docker
                                                                                   sudo nano /etc/docker/daemon.json              

  • { "registry-mirrors": [ "https://hub.mirrorify.net", "https://docker.1ms.run"] }

  • Ctrl + O → 按回车确认保存
  • Ctrl + X → 退出编辑器
  • 重启 Docker      sudo systemctl daemon-reload          sudo systemctl restart docker

  • 使用方式 docker compose  新方式
  • 测试是否成功 sudo docker run hello-world
  • 权限优化(不用每次 sudo) sudo usermod -aG docker $USER            后执行           newgrp docker

8. 上传项目到用户目录下 /home/你的用户名/项目  (本地测试),服务器推荐放到 /var/www/项目名

9. 进入项目目录 cd /home/test/my-project

10. 首次启动项目  docker compose up -d --build

11. 强制重新构建 + 重启: docker compose down && docker compose up -d --build

 

1.(推荐)虚拟机改为NAT模式(公网可访问)
2.确保启动 OpenSSH 服务,Linux 虚拟机放行防火墙22端口
3.先关闭虚拟机,设置虚拟机专家级,设置网络- 点击端口转发,【名称随意、协议TCP、主机IP留空、主机端口避免和宿主机现有端口冲突、子系统IP查询ip addr show、子系统端口22】
2026-03-24T10:57:04.png

4.测试 ssh 虚拟机用户名@127.0.0.1 -p 8022


1.虚拟机网络改为桥接模式,(公网访问不了,需要配置,暂时不清楚怎么配置)
2.执行 ip addr show
2026-03-24T07:44:47.png
3.192.168.1.105:虚拟机的 IP 地址 使用ssh工具连接就行 可以正常使用复制剪切

注意:这个ip地址是动态的
最简单方案:路由器绑定静态 IP(推荐)
1.先记好两个关键信息(从你刚才的截图里就能拿到):
-虚拟机 MAC 地址:08:00:27:a2:88:34
-想固定的 IP:192.168.1.105(就是你现在用的这个)
2.打开路由器管理页面
-一般在浏览器输入:192.168.1.1 或 192.168.0.1(看路由器底部标签)
-输入路由器管理员账号密码(也在路由器底部)
3.找到「IP/MAC 绑定」或「DHCP 静态分配」
-不同品牌叫法不一样,比如:
-TP-Link:应用管理 → DHCP 静态地址分配
-小米 / 红米:高级设置 → 局域网 → 静态 IP 分配
-华硕:LAN → DHCP 服务器 → 手动分配 IP
-新建一条规则:
--MAC 地址:填 08-00-27-a2-88-34
--IP 地址:填 192.168.1.105
-保存 / 应用
4重启虚拟机
-之后不管怎么重启,虚拟机都会一直拿到 192.168.1.105 这个 IP,再也不会变了 ✅