发表于: 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实现日志/文件共享

示例编排片段:

yaml
复制
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概念实现紧密协作服务的协同调度,兼顾隔离性和协作效率。



明天的计划:学习深度思考


返回列表 返回列表
评论

    分享到