发表于: 2025-06-24 20:55:29
0 15
今天的计划:学习深度思考
42.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?
当我们在本地写好一个项目测试完毕后 我们一般都要把它上传到服务器上去
这里我们需要的操作都有什么呢
最低级的就是从本地打好war包上传服务器
不过在实际上我们都会使用一些版本管理工具像svn
目的是多人合作开发项目
任务三里面我们对此有一个详尽的使用
今天我们就在这里来谈一下如何从svn上自动下载部署到服务器上
2.知识剖析
我们先谈一下整体思路 要在svn上下载相关项目 然后服务器上打包
然后把war包放在容器内 这里我用的resin 最后重启resin
这些操作命令相信各位大佬都很熟悉 今天我们就用一个脚本实现一个命令解决
首先注意一下脚本文件的基础
程序必须以下面的行开始
#!/bin/sh
符号#!用来告诉系统它后面的参数是用来执行该文件的程序。
当编辑好脚本时,如果要执行该脚本,还必须使其可执行。
要使脚本可执行:编译 chmod +x 这样才能用./ 来运行
3.常见问题
3.1.执行权限问题
3.2.echo打印问题
3.打印变量问题
4.解决方案
4.1,使用sh 执行文件
4.2,echo 后面要有空格
4.3.用{}括起来
5.编码实战
直接贴代码把 更多更具体的可以看一下下文的视频
cat deploy.sh
#!/bin/sh
echo 停止resin服务
sh /opt/stop.sh
echo 停止svn服务
cd /
killall svnserve
echo 删除home下deploy
cd /home
rm -rf deploy/*
echo 从svn下载项目
cd deploy
svn co svn://120.92.4.210/student/task/trunk/baixiaoran/deploy
echo 项目打包
cd deploy
mvn install
echo 将war包复制到webapps下
cd target
cp *.war /home/resin-pro-4.0.53/webapps
echo 启动resin
sh /opt/start.sh
43.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?
在容器化部署中,选择单容器多服务还是单容器单服务,需要根据具体场景权衡。
1. 单容器多服务模式
特点:
- 多个Web服务(如Nginx+PHP+MySQL)运行在同一个容器内
- 通过Supervisor等进程管理工具维持多进程
优点:
- 资源占用较少(共享内核、减少重复系统进程)
- 服务间通信效率高(本地IPC或localhost)
- 部署简单(单一镜像)
缺点:
- 违反单一职责原则(排错、升级困难)
- 扩缩容粒度粗(必须整体伸缩)
- 依赖冲突风险(如Python 2/3共存问题)
- 日志混合难分离
典型场景:
- 本地开发环境快速搭建
- 遗留系统容器化过渡
- 强耦合的微服务(需同生命周期)
2. 单容器单服务模式
特点:
- 每个Web服务独立容器(Nginx、PHP、MySQL分别容器化)
- 通过Docker Compose/K8s编排协同
优点:
- 故障隔离性强(一个服务崩溃不影响其他)
- 独立版本升级(如只更新PHP版本)
- 细粒度扩缩容(可单独扩展Web层)
- 更符合云原生最佳实践
缺点:
- 资源开销略高(每个容器有独立OS层)
- 网络通信需要额外配置(需定义网络桥接)
- 编排复杂度较高
典型场景:
- 生产环境部署
- 微服务架构
- CI/CD自动化流程
3. 关键决策因素
维度 | 单容器多服务 | 单容器单服务 |
---|---|---|
故障排查 | 困难(日志混合) | 简单(隔离清晰) |
资源利用率 | 较高(共享内核) | 较低(每个容器有开销) |
安全风险 | 较高(特权服务共享) | 较低(最小化权限原则) |
滚动升级 | 必须整体重启 | 可逐个服务更新 |
技术异构性支持 | 困难(依赖环境需一致) | 灵活(不同语言/版本镜像) |
4. 建议方案
优先选择单容器单服务,尤其在:
- 生产环境(K8s集群化部署时)
- 团队具备DevOps能力
- 需要弹性伸缩的场景
例外情况考虑单容器多服务:
- 本地开发使用
docker-compose
简化 - 性能敏感且服务生命周期强绑定
- 资源极度受限的边缘设备
5. 折中实践
- Sidecar模式:主服务与辅助工具(如日志收集器)同容器
- 多阶段构建:构建时多服务,运行时分离
- 共享卷策略:通过Volume实现日志/文件共享
示例编排片段:
yamlyaml复制ya复制# docker-compose.yml(单容器单服务)services:
nginx:
image: nginx:alpine
depends_on: [app] app:
image: node:18
volumes: ["./app:/code"] db:
image: postgres:15
volumes: ["db-data:/var/lib/postgresql/data"]
现代容器编排平台(如Kubernetes)更倾向于单容器单服务模式,通过Pod概念实现紧密协作服务的协同调度,兼顾隔离性和协作效率。
明天的计划:学习深度思考
评论