推荐工具: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

标签: none

添加新评论