项目部署与上线
项目部署与上线
王貔貅多环境
ChatGPT:
多环境指在软件开发过程中,为了满足不同的需求和环境,开发人员需要在不同的环境中进行开发、测试和部署。常见的多环境包括开发环境、测试环境、预生产环境和生产环境等。每个环境都有自己的特点和要求,例如开发环境需要更多的调试工具和测试数据,而生产环境需要更高的性能和可靠性。多环境的使用可以保证软件在不同的环境中都能够正常运行,并且可以提高软件开发的效率和质量。
简单来说,多环境就是将同一套项目代码根据实际情况来调整配置并部署到不同的机器上。
ChatGPT:
- 避免生产环境出现问题:多环境可以帮助开发人员在不同的环境中进行测试和验证,确保软件在生产环境中运行时没有问题。
- 提高开发效率:开发人员可以在不同的环境中进行不同的测试和验证,从而提高开发效率。
- 降低风险:通过多环境,可以降低生产环境出现问题的风险,同时也可以降低测试和部署过程中出现问题的风险。
- 适应不同的需求:不同的环境适用于不同的需求,可以针对不同的需求进行不同的配置和测试,从而满足不同的用户需求。
- 保护数据安全:多环境可以保护数据的安全,例如开发环境中的数据可能是模拟数据,而生产环境中的数据则是真实数据,需要进行保护。
总结:
- 每个环境互不影响,防止开发、测试中危险操作影响正式业务
- 区分不同的阶段(不同的环境有不同的要求和特点):开发 / 测试 / 开发
- 对项目进行优化
- 本地日记级别
- 精简依赖,节省项目体积
- 项目环境 / 参数的调整,如
JVM
参数
ChatGPT:
多环境可以按照不同的分类方式进行划分,以下是常见的多环境分类方式:
- 按照使用者划分:可以将多环境划分为开发环境、测试环境、预生产环境和生产环境等。
- 按照部署方式划分:可以将多环境划分为本地环境、云环境、虚拟化环境和容器化环境等。
- 按照操作系统划分:可以将多环境划分为Windows环境、Linux环境、Mac环境等。
- 按照网络划分:可以将多环境划分为内网环境、外网环境、测试网络环境等。
- 按照应用程序划分:可以将多环境划分为Web应用程序环境、移动应用程序环境、桌面应用程序环境等。
- 按照数据源划分:可以将多环境划分为开发数据库环境、测试数据库环境、生产数据库环境等。
不同的多环境分类方式可以满足不同的需求和场景,开发人员可以根据实际情况选择适合自己的多环境分类方式。
- 本地环境,通常是自己的电脑,localhost(127.0.0.1)。
- 开发环境(远程开发),大家同连一台机器
- 测试环境(测试) 开发 / 测试 / 产品,单元测试 / 性能测试 / 功能测试 / 系统集成测试,独立的数据库、独立的服务器
- 沙箱环境(实验环境,测试环境的一种):为验证某功能,一个完全隔离的环境。
- 预发布环境(体验服):和正式环境一致,正式环境数据库,寻找更多问题
- 正式环境(线上,公开对外访问的项目):尽量不要改动,保证上线前的代码“完美”运行。
前端多环境
- 请求地址
- 开发环境:
localhost:端口号
- 线上环境:域名,例如
user-backend.wpixiu.cn
- 开发环境:
1 | startFront(env){ |
-
启动方式
- 开发环境:
npm run start
(本地启动,监听端口、自动更新) - 线上环境:
npm run build
(项目构建打包),可以使用serve
工具启动(npm i -g serve
)
- 开发环境:
-
项目配置
不同的项目(框架)都有不同的配置文件,如
umi
的配置文件是config
- 开发环境可以在配置文件后添加对应的环境名称后缀来区分开发环境和生产环境
- 开发环境:
config.dev.ts
- 生产环境:
config.prod.ts
- 公共配置:
config.ts
后端多环境
SpringBoot
项目,通过application.yml
添加不同的后缀来区分配置文件
1 | java -jar .\user-center-backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod |
- 依赖的环境地址
- 数据库地址
- 缓存地址
- 消息队列地址
- 项目端口号
- 服务器配置
项目部署
原始部署
部署前端
web服务器:Nginx
、Apache
、Tomcat
安装Nginx
服务器:
-
使用系统自带的软件包管理器快速安装,比如
yum
-
官网。nginx: download,一定选择稳定版!
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51# 服务器内下载
# 此时处于/root目录下
mkdir services
cd services/
curl -o nginx-1.24.0.tar.gz https://nginx.org/download/nginx-1.24.0.tar.gz
# 解压
tar -zxvf nginx-1.24.0.tar.gz
./configure
# 安装相关依赖
yum install pcre pcre-devel -y
yum install openssl openssl-devel -y
./configure
# 设置系统配置参数
./configure --with-http_ssl_module --with-http_v2_module --with-stream
# 编译
make
# 安装
make install
# 添加环境变量
vim /etc/profile
# 在最后一行添加
export PATH=$PATH:/usr/local/nginx/sbin
# 使文件配置生效
source /etc/profile
nginx
# 可查看哪个端口被哪个进程占用了,查看启动情况
netstat -ntlp
# 根据项目修改配置文件
cd /usr/local/nginx/conf
cp nginx.conf nginx.default.conf
cat nginx.conf
vim nginx.conf
# 查看Nginx的启动者
ps -ef|grep 'nginx'
# 注意配置user与当前用户一致
# 重新加载配置
nginx -s reload
部署后端
根据项目需求进行安装
- 安装JAVA
1 | yum install -y java-1.8.0-openjdk* |
- 安装Maven,Maven – Download Apache Maven
1 | cd /root/services |
- 部署后端
1 | # 下载代码 |
1 | #手动上传已打包好的jar包 |
宝塔 Linux 部署
Linux 可视化 运维面板 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 (bt.cn)
方便管理服务器,方便安装软件
1 | # 某串神秘代码,会的人能看懂它的作用 |
Docker 部署
Docker是一个开源的应用程序容器化平台,它可以帮助软件工程师打包、部署和运行应用程序。使用Docker,开发人员可以将应用程序及其所有依赖项(如库、框架、工具等)打包到一个称为容器的独立运行环境中。这使得应用程序在不同的环境中运行时具有一致的表现和可移植性。Docker还提供了一套API和工具集,使得容器可移植、可扩展和可自动化化部署和管理,这使得应用程序的部署和管理变得更加高效和可靠。因此,Docker被广泛应用于云计算、微服务、持续交付和容器编排等领域。
docker
是容器,可以将项目的环境(如Java、Nginx)和项目代码一起打包成镜像,所有人(有权限)都能下载镜像,更容易分发和移植。部署只需下载镜像,启动镜像即可。可以理解为软件安装包。
Docker
安装:Get Started | Docker
Dockerfile,用于指定构建Docker镜像的方法。一般情况下不需要完全从0自己去写,建议去github
、Gitee
等代码托管平台参考同类项目(如SpringBoot
)
Dockerfile
编写:
-
FROM
依赖的基础镜像 -
WORKDIR
工作目录 -
COPY
从本机复制文件 -
RUN
执行命令 -
CMD/ENTRYPOINT
指定运行容器时默认执行的命令,ENTRYPOINT
可附加额外参数在 Dockerfile 中,ENTRYPOINT 和 CMD 都是用于指定容器启动时要运行的命令或程序。但它们的作用不同。
ENTRYPOINT 指定容器启动时要执行的可执行文件或脚本,并将其他命令作为参数传递给该可执行文件或脚本。ENTRYPOINT 一般用于指定容器的主要应用程序或服务,并在其它命令行参数中指定特定的选项和参数。对于多个 ENTRYPOINT 声明,只有最后一个生效。
CMD 用于在容器启动时提供默认的命令或程序。如果用户在执行 docker run 命令时没有显式指定要运行的命令,则会使用 CMD 中定义的默认命令或程序来启动容器。如果用户在执行 docker run 命令时指定了要运行的命令,则 CMD 中定义的默认命令或程序将被忽略。如果使用多条 CMD 命令,则只有最后一个 CMD 命令生效。
在实际使用中,可以根据具体需求选择使用 ENTRYPOINT、CMD 或两者一起使用。通常建议将主要应用程序(如 nginx、MySQL 等)作为 ENTRYPOINT,将一些需要传递参数的选项作为 CMD,以便用户在运行容器时灵活地进行配置。例如:
1
2
3
4
5
6
7复制代码FROM debian:latest
WORKDIR /app
COPY . /app
RUN apt-get update && apt-get install -y nginx
EXPOSE 80
ENTRYPOINT ["nginx"]
CMD ["-g", "daemon off;"]上述示例中,将 nginx 作为 ENTRYPOINT,并将 “-g daemon off;” 选项传递给 CMD。这将使 NGINX 在前台运行,并且在接收到 SIGTERM 信号后正常退出。
需要注意的是,在实际使用中,还可以通过 docker run 命令行参数或编写自定义脚本来覆盖 ENTRYPOINT 和 CMD 中指定的命令,因此使用时需要进行充分的测试,确保容器能够按照预期工作。
1 | # 后端 |
根据Dockerfile
构建镜像:
1 | # docker build -t xxx 所在目录 |
Docker构建优化:减小尺寸、减少构建时间(如多阶段构建,丢弃之前阶段不需要的内容)
docker run
启动
1 | docker run -p 80:80 -v -d user-center-front:v0.0.1 |
虚拟化
- 端口映射:把本机的资源和容器内部的资源进行关联
- 目录映射:把本机的端口和容器应用的端口进行关联
进入容器
1 | # 查看容器id,[container-id] |
杀死容器
1 | docker kill [container-id] |
查看日志
1 | docker logs [container-id] |
查看镜像
1 | docker images |
强制删除镜像
1 | docker rmi -f (镜像名) |
Docker容器平台部署
- 云服务商容器平台(腾讯云、阿里云)
- 面向某个领域的容器平台(微信云托管)花钱!
容器平台的好处
- 不需输入命令来操作,更方便
- 不用在控制台操作,更简单
- 大厂运维,更省心
- 其他:监控、告警、存储、负载均衡、自动扩容、流水线······