Virtualbox+Ubuntu 阿里云 Docker 部署.NET Core 8 API 和 Vue 前端 生产级部署方案
推荐工具: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
- #禁止 root登录 (最安全)
- 重启 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