【山竹记账后端】4.网站部署上线
大纲链接 §
[toc]
部署上线的时机
- 项目搭建早期就应该部署一个初始可启动的项目服务上线
- 大致跑通整个流程,逐步完善流程
- 方便渐进式地 排查问题 -> 修改代码 -> 实现功能代码
- 每次只需处理少数的 bug,及时揭露风险
1. 购买便宜的云服务器 ⇧
怎么把代码弄上线
- 弄出一个生产环境,用来运行最终代码
买服务器
机型
- 新手选最便宜的,一年到三年即可
- 如果还是觉得贵,可以按使用量付费,用完即毁(切记)
购买阿里云 按量付费 部署流程测试 ⇧
付费类型、可用区 ⇧
按量付费,按量付费实例不支持备案服务,仅作为部署流程测试,用完即停机,并且释放实例;之后重新购买稳定服务提供项目展示
- 付费类型-按量付费;暂时选择最便宜的
- 可用区:上海 可用区O 仅支持 ECS
- 同可用区内网免费:在同一个可用区内,云服务器、数据库(RDS)和对象存储(OSS)之间的内网通信是完全免费的
- 跨可用区流量收费:如果您将应用部署在可用区A,而数据库部署在可用区B(跨可用区高可用架构)
- 虽然能防灾,但云厂商会对这两个可用区之间传输的内网数据收取同地域跨可用区流量费
实例和镜像 ⇧
- 实例价格点击升序排列,选择最便宜的
- 镜像选
Ubantu最新版;不要免费加固,测完即毁
存储云盘 ⇧
- 调整为最低-20G
- 仅勾选-随实例释放
网络和安全组 ⇧
- 选择 按使用流量
- 峰值调整为最低 1M
- 其他选默认,之后可调整
管理设置 ⇧
- 登录凭证
- 登录名
- 密钥对
创建密钥对,导入公钥
ssh-keygen -t rsa -b 4096 -C "- 终端
bash命令cat ~/.ssh/id_rsa.pub粘贴内容
其他实例选项 ⇧
- 实例名称
- 主机名
购买成功跳转到控制台-实例界面
阿里云实例 ⇧
使用
ssh登录实例
在实例界面复制公网 ip
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35ssh root@xxx.xxx.xxx.xx The authenticity of host 'xxx.xxx.xxx.xx (xxx.xxx.xxx.xx)' can't be established. ED25519 key fingerprint is SHA256:nb3c1Xzh5c6PTaCB1I5H6DN4U86JA3i1vJ8aIoXs30xsdW8+67CQ. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? y Please type 'yes', 'no' or the fingerprint: yes Warning: Permanently added 'xxx.xxx.xxx.xx' (ED25519) to the list of known hosts. Welcome to Ubuntu 26.04.1 LTS (GNU/Linux 7.0.0-30-generic x86_64) * Documentation: https://docs.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/pro System information as of Mon Sep 14 05:24:27 PM CST 2026 System load: 0.15 Processes: 114 Usage of /: 33.4% of 19.32GB Users logged in: 0 Memory usage: 15% IPv4 address for eth0: xxx.xx.xxx.xxx Swap usage: 0% Expanded Security Maintenance for Applications is not enabled. 0 updates can be applied immediately. 1 additional security update can be applied with ESM Apps. Learn more about enabling ESM Apps service at https://ubuntu.com/esm The list of available updates is more than a week old. To check for new updates run: sudo apt update Welcome to Alibaba Cloud Elastic Compute Service !看到提示 Welcome to Alibaba Cloud Elastic Compute Service !
使用完确认是否已停机,并且释放实例
- 按量计费的实例停机后,云盘也会扣费,释放实例后才不会计费
购买腾讯云 ⇧
- 略
2. 服务器详细配置 ⇧
配置服务器
- 登录
- 不推荐使用 【用户名 + 密码】 登录,容易忘,不安全
- 推荐使用
ssh-copy-id上传公钥,使用ssh登录
- 防火墙
- 推荐开启 测试端口,如 3000、3001、5000、8000、8080
- 自行选择是否开启重要端口,因为需要备案,如 80、443
登录 ⇧
ssh root@xxx.xxx.xxx.xx- 保存密码登录可使用
ssh-copy-id root@xxx.xxx.xxx.xx
- 保存密码登录可使用
- 已登录,命令行无输入字符,按
Ctrl + D或者输入exit退出登录
防火墙(安全组配置) ⇧
创建安全组 ⇧
- 添加安全组配置
- 添加入栈端口
3000、3001、5000、8000、8080等
- 添加入栈端口
用户权限 ⇧
- 用户权限
- 推荐只在
root用户里安装Docker即可 - 每个应用创建一个 独立用户,并加入
docker用户组,方便管理 - 切记用
root用户管理所有应用,容易被攻击
- 推荐只在
- 发行版
- 新手推荐使用
Ubuntu次新版,因为教程多 - 高手自行选择发行版,推荐
CentOS次新版,因为稳定,适合生产环境
- 新手推荐使用
实操:ssh 用户登录保活 ⇧
root@server1: client_loop:send disconnect:Connection reset by peer
ssh默认有超时时间,一段时间后会进入假死状态,终端卡住不能操作- 需要配置连接断开超时设置
运行命令
vim /etc/ssh/sshd_config,在文件末尾添加如下内容:1 2 3# 添加 ClientAliveInterval 300 ClientAliveCountMax 5或者普通模式下 打
/Interval- 按
bb进入编辑该行,按x删除注释; - 按
s进入编辑该行,按i进入插入模式,输入300; - 按
Esc退出编辑模式,输入:wq保存退出
- 按
重启
sshd服务
|
|
参考
- SSH连接断开超时设置
- 解决SSH登录Linux长时间不操作就会自动断开问题
- 如何解决ssh远程连接自动断开的问题
- 怎样长时间保持SSH会话连接不断开?
- [原]Linux ssh远程连接断开问题处理办法
- 解决SSH自动断开无响应的问题
root 用户安装 docker ⇧
如果时腾讯云的服务器,默认已经安装好
docker,可以直接使用,这里演示阿里云服务器安装docker
默认去阿里云的镜像源安装
1 2 3 4 5 6# 1. 更新 apt 包索引,并安装依赖包以允许 apt 通过 HTTPS 使用仓库: apt update apt install ca-certificates curl install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc chmod a+r /etc/apt/keyrings/docker.asc
设置
docker的 apt 仓库
|
|
安装
docker引擎、containerd和docker-compose-plugin等
|
|
验证
docker镜像是否安装成功
|
|
参考
添加 mangosteen 用户,并加入 docker 用户组,authorized_keys 权限操作 ⇧
|
|
加入
docker用户组
|
|
按
Ctrl + D退出root用户,使用mangosteen用户登录1 2 3 4ssh mangosteen@your_server_ip # 此时登录会报错 # mangosteen@your_server_ip: Permission denied (publickey).
先再次进入
root用户,修改mangosteen用户的authorized_keys权限
|
|
也可以直接复制
root用户的authorized_keys到mangosteen用户的.ssh目录下
|
|
ls按住Alt + .可以切换到上一个目录,按住Alt + ,可以切换到下一个目录;查看authorized_keys这个文件是从root用户的~/.ssh/authorized_keys复制过来的,里面是公钥内容- 目前
mangosteen用户时无法访问authorized_keys 需要转交文件的控制权
1 2 3# chown mangosteen:mangosteen /home/mangosteen/.ssh/authorized_keys cd .. chown -R mangosteen:mangosteen .ssh
- 目前
chown命令是改变文件或目录的所有者和所属组-R递归修改目录下的所有文件和子目录mangosteen:mangosteen表示将所有权转交给mangosteen用户和mangosteen用户组.ssh是当前目录下的.ssh目录
此时 运行
ls -a可以看到.ssh目录的所有者和所属组已经变为mangosteen
``bash
``
此时重新退出再使用
mangosteen用户登录,应该就可以成功登录了
验证
mangosteen用户是否可以使用docker命令1 2docker ps docker run hello-world
参考
- ubuntu ユーザを追加して sudo 権限をつける
- Add a user
- Creating a New User in Ubuntu
- Linux: Create, or Remove User
- How do I create a new user account?
- How to add existing user to an existing group?
- Linuxでユーザーをグループに追加する
- How to Add User to Group on Ubuntu Linux (Usermod)
- Linux: Add User to Group
- How to Add User to Group on Ubuntu 26.04
注意把不用的服务器停机或释放实例
3. 部署思路 ⇧
配置后端生产环境:步骤 ⇧
- 准备一个新用户
- 准备好
docker - 上传
Dockerfile - 上传源代码
- 用
Dockerfile构建运行环境 - 在运行环境里运行源代码
- 使用
Nginx做转发- 源码会监听端口,假设
3000不直接访问 Nginx监听80,把80的请求转发到3000- 好处是
Nginx可以做 负载均衡、零宕机时间
- 源码会监听端口,假设
配置后端生产环境:版本更新 ⇧
- 上传新
Dockerfile - 上传新源代码
- 用新
Dockerfile构建运行环境 - 在新运行环境里运行新源代码
- 使用
Nginx做转发
配置前端生产环境 ⇧
前端哪有生产环境
- 将代码中的路径替换成
CDN路径 - 上传打包好的
CSSJS文件到CDN,如阿里云OSS、腾讯云COS - 将
html文件上传到后端服务器 - 使用
Nginx处理html文件请求,转发到CDN上的CSSJS文件
CDN只处理静态文件,好处是可以加速访问,减少服务器压力,降低成本CDN节点也离用户更近,会针对用户的地理位置,分配最近的服务器1 2 3/assets/1-xxxx.js # 修改资源前缀 https://cdn.com/jirengu/assets/1-xxx.js
具体实践过程之后处理,目前只处理后端
重点
- 如何做到自动化?
- 有哪些细节之前没有考虑过的?
- 有哪些问题还没有提到?
4. 在 wsl 宿主机里部署(Windows/macOS/Linux都适用) ⇧
检查端口是否被占用 ⇧
或者启动服务更换端口;或者重启
docker desktop
使用 window 作为生产环境 ⇧
添加后端路由根目录 ⇧
添加后端根目录对应的
Controller
生产环境打包脚本 pack_for_host.sh ⇧
使用
tar命令打包源代码,上传到宿主机
host.Dockerfile 宿主机运行镜像 ⇧
docker 构建部署启动脚本 setup_host.sh ⇧
流程 ⇧
- 在
linux宿主机里运行pack_for_host.sh脚本 - 在
window中运行setup_host.sh脚本
添加可执行权限
|
|
运行
setup_host.sh脚本
|
|
不会用 vim 怎么办?
- 不会用就千万别尝试,建议使用 nano 代替 vim 命令。
代码使用 Windows,是否适合 macOS / Linux 吗?
- 在
docker容器中 都是 Linux
5. $3 ⇧
6. $3 ⇧
7. $3 ⇧
8. $3 ⇧
参考文章
相关文章
- 作者: Joel
- 文章链接:
- 版权声明
- 非自由转载-非商用-非衍生-保持署名