m0_61806533 2024-03-29 19:30 采纳率: 22.2%
浏览 14

使用ansible剧本批量部署jdk+tomcat+jenkins+nginx,实现访问nginx就能访问到jenkins服务

使用ansible剧本批量部署jdk+tomcat+jenkins+nginx,实现访问nginx就能访问到jenkins服务,这个怎么做呢

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-29 19:30
    关注

    引自免费微信小程序:皆我百晓生

    在Ansible中,你可以通过编写一个deploy_jdk_tomcat_jenkins nginx playbook来批量部署JDK、Tomcat、Jenkins和Nginx服务器,并且确保只有特定的URL(通常是http://jenkins/service)可以连接到Nginx,其他URL都不能访问Jenkins服务。以下是详细的步骤:

    1. 设置基础环境

      • 安装必要的依赖:确保你的环境中已经安装了以下 Ansible 库和模块:
        pip install ansible-roles-jdk tomcat django django-napoleon django-celery
        
    2. 创建deploy.yml playbook文件

      • 首先,创建一个 deploy.yml 文件,内容如下:
      ---
      hosts: localhost
      tasks:
        - name: Deploy JDK
          roles:
            - jdk
            - jdk_apt
            - jdk_docker
      
        - name: Deploy Tomcat
          roles:
            - tomcat
            - tomcat_apt
            - tomcat_docker
      
        - name: Deploy Jenkins
          roles:
            - jenkins
            - jenkins_apt
            - jenkins_docker
      
        - name: Deploy Nginx
          roles:
            - nginx
            - nginx_apt
            - nginx_docker
      
        - name: Deploy Service URLs
          tasks:
            - name: Configure service URL patterns for JENKINS
              when: condition == 'JENKINS_URL' == 'http://jenkins/service'
              uses: playbooks/jenkins/_tasks/deploy_jenkins.yml
              with:
                url_pattern: http://{jenkins_container_ip}/service/{service_name}
      
        - name: Configure service URL patterns for NGINX
              when: condition == 'NGINX_URL' == 'http://jenkins/service'
              uses: playbooks/nginx/_tasks/deploy_nginx.yml
              with:
                url_pattern: http://{jenkins_container_ip}/service/{service_name}
      
      • deploy.yml 中,定义了四个任务:jdk, tomcat, jenkins, 和 nginx
      • jdk 任务将所有配置为运行Java的Docker容器部署到本地主机上。
      • tomcat 任务将所有的Apache Tomcat镜像部署到本地主机上,并进行相应配置。
      • jenkins 任务将所有的Jenkins实例和Web应用部署到本地主机上。
      • nginx 任务将所有的Nginx镜像部署到本地主机上,并进行相应配置,其中定义了一个URL映射规则,当 JENKINS_URLNGINX_URLhttp://jenkins/service 时,只有 http://{jenkins_container_ip}/service/{service_name} 这个URL可以访问到 Jenkins 服务。
    3. 构建 Docker 容器

      • 使用 docker-compose up 命令构建每个容器项目。例如,如果你有 jdk 的容器项目结构如下:

        └── jdk
          ├── .dockerignore
          ├── build
          │   ├── context
          │   └── dockerfile
          └── spec
            ├── main
            ├── tags
            └── volumes
                ├── etc
                ├── lib
                └── tmp
          └── docker-compose.yml
        
      • /etc/hosts 文件中的内容替换为你想要作为主机名的服务器地址。

      • 编写 docker-compose.yml 文件,内容如下:

        version: '3'
        services:
          jdk:
            image: yourjdk_image
            container_name: jdk
            ports:
              - "8081/TCP:8081"
            environment:
              - JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
            volumes:
              - /etc/hosts:/etc/hosts
        
          tomcat:
            image: tomcat:latest
            container_name: tomcat
            ports:
              - "8081/TCP:8081"
            environment:
              - TomcatHome=/opt/tomcat
            volumes:
              - ./conf:/opt/tomcat/conf
            expose:
              - "8081/TCP"
        
          jenkins:
            image: yourjenkins_image
            container_name: jenkins
            volumes:
              - /var/run/docker.sock:/var/run/docker.sock
            environment:
              - HBASE_JAVA_OPTS=-XX:+UseSun始态互斥锁
            expose:
              - "8080/TCP"
        
          nginx:
            image: nginx:latest
            container_name: nginx
            volumes:
              - ./data:/var/www/html
            expose:
              - "80/TCP:80"
            depends_on:
              - jenkins
              - tomcat
        
      • 使用 docker-compose build 命令构建每个容器项目,并将其复制到相应的目录中。

      • 使用 docker-compose up 命令启动各个容器项目,注意要根据项目的依赖关系和实际情况对它们进行配置。

      • 当全部容器项目成功启动后,你应该可以在终端中查看每个容器的服务状态,如 jdk 可以通过 telnet 或者 curl 工具直接访问,而 tomcatjenkins 的端口也可以正常访问。

    4. 测试服务运行情况

      • 使用 docker ps 或者 docker-compose ps 命令查看容器的状态,确认它们都已经成功启动并监听到了相应的端口。
      • 在浏览器中输入 http://localhost:8081 来检查对应的端口是否能打开。通常情况下,新创建的容器应该会被重启,所以如果能够访问预期的服务,则说明所有的服务都已正确部署并进行了网络通信。
    5. 测试 JENKINS_URLNGINX_URL 端口映射规则

      • 使用浏览器(如 Chrome、Firefox)访问 http://localhost:8081/service 来检查 JENKINS_URL 是否正确指向 http://jenkins/service,同时验证 NGINX_URL 是否也能正确指向 http://jenkins/service
      • 如果所有端口都能够正确转发请求,那么整个场景下的需求就得到了满足。
    6. 添加安全性

      • 对于更复杂的逻辑,可能需要加入防火墙策略来限制对外部资源的访问权限。这可以通过在 nginxjenkins 中添加HTTP_PROXYHTTPS_PROXY参数来实现。
      • 根据实际环境,可能还需要添加额外的安全组规则,以便外部用户只能访问指定的主机IP范围内的资源。
    7. 维护与更新

      • 在部署过程中,定期监控容器的健康状况,确保它们在后台持续运行,且不会因为重启或升级而导致服务不可用。
      • 更新和修复可能会导致服务出现问题的库或框架版本。
      • 考虑部署到多台或多可用的服务器集群,以进一步提高服务的可靠性。

    以上就是在 Ansible 中批量部署 JDK、Tomcat、Jenkins 和 Nginx 服务器并实现访问 Jenkins 服务的方案。由于 Ansible 模块的具体实现细节可能因版本不同有所差异,因此这里提供的是一个基本示例。在实际应用中,你需要根据你的具体需求和部署环境来进行调整和优化。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月29日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?