微服务项目容器编排docker-compose.yml、Dockerfile文件模板、相关配置文件、shell脚本

nacos Dockerfile(不需要特殊处理,使用docker conpose可以不写)

# 基础镜像
FROM nacos/nacos-server
# author
MAINTAINER jianglifeng<jlifeng@foxmail.com>
# 复制conf文件到路径
COPY ./conf/application.properties /home/nacos/conf/application.properties

redis Dockerfile(不需要特殊处理,使用docker conpose可以不写)

# 基础镜像
FROM redis
# author
MAINTAINER jianglifeng<jlifeng@foxmail.com>
#执行命令
RUN mkdir -p /home/nc/redis
# 挂载目录
VOLUME /home/nc/redis
# 指定路径
WORKDIR /home/nc/redis
# 复制conf文件到路径
COPY ./conf/redis.conf /home/nc/redis/redis.conf

nginx Dockerfile (不需要特殊处理,使用docker conpose可以不写)

# 基础镜像
FROM nginx
# author
MAINTAINER jianglifeng<jlifeng@foxmail.com>
#执行脚本
RUN mkdir -p /home/nc/projects/nc-ui
# 挂载目录
VOLUME /home/nc/projects/nc-ui
# 指定路径
WORKDIR /home/nc/projects/nc-ui
# 复制conf文件到路径
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
# 复制html文件到路径
COPY ./html/dist /home/nc/projects/nc-ui

业务服务 Dockerfile(直接换上对应服务的jar)

# 基础镜像
FROM  openjdk:8-jre
# author
MAINTAINER jianglifeng<jlifeng@foxmail.com>
#执行脚本
RUN mkdir -p /home/nc/projects/nc-ui
# 挂载目录
VOLUME /home/nc
# 指定路径
WORKDIR /home/nc
# 启动服务,启动环境从环境变量文件.env中获取
ENTRYPOINT java -jar $JAVA_OPTS jar文件名.jar

docker-compose.yml

version : '3.7'
services:
#  生产环境使用单独的nacos
  nc-nacos:
    container_name: nc-nacos
    image: nacos/nacos-server
    build:
      context: ./nacos
    environment:
      - MODE=standalone	
      - TZ=Asia/Shanghai
    volumes:
      - ./nacos/logs/:/home/nacos/logs
      - ./nacos/conf/application.properties:/home/nacos/conf/application.properties
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"
  nc-redis:
    container_name: nc-redis
    image: redis
    build:
      context: ./redis
    ports:
      - "6380:6379"
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./redis/conf/redis.conf:/home/nc/redis/redis.conf
      - ./redis/data:/data
    command: redis-server /home/nc/redis/redis.conf
  nc-nginx:
    container_name: nc-nginx
    image: nginx
    build:
      context: ./nginx
    ports:
      - "70:80"
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./nginx/html/dist:/home/nc/projects/nc-ui
      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/logs:/var/log/nginx
    depends_on:
      - nc-gateway
    links:
      - nc-gateway
  nc-gateway:
    container_name: nc-gateway
    build:
      context: ./nc/gateway
      dockerfile: dockerfile
    ports:
      - "8080:8080"
    environment:
      - TZ=Asia/Shanghai
      - JAVA_OPTS=${JAVA_OPTS}      
    volumes:
      - ./logs/nc-gateway:/home/nc/logs/nc-gateway
      - ./nc/gateway/jar/xx-gateway.jar:/home/nc/xx-gateway.jar
    depends_on:
      - nc-redis
      - nc-nacos
    links:
      - nc-redis
      - nc-nacos
  nc-auth:
    container_name: nc-auth
    build:
      context: ./nc/auth
      dockerfile: dockerfile      
    ports:
      - "9200:9200"
    environment:
      - TZ=Asia/Shanghai 
      - JAVA_OPTS=${JAVA_OPTS}     
    volumes:
      - ./logs/nc-auth:/home/nc/logs/nc-auth
      - ./nc/auth/jar/xx-auth.jar:/home/nc/xx-auth.jar
    depends_on:
      - nc-redis
      - nc-nacos
    links:
      - nc-redis
      - nc-nacos
  nc-modules-system:
    container_name: nc-modules-system
    build:
      context: ./nc/modules/system
      dockerfile: dockerfile    
    ports:
      - "9201:9201"
    # 部分环境变量从.env文件中获取
    environment:
      - OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID}
      - OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET}
      - JAVA_OPTS=${JAVA_OPTS}
      - TZ=Asia/Shanghai      
    volumes:
      - ./logs/nc-system:/home/nc/logs/nc-system
      - ./nc/xx/system/jar/xx-modules-system.jar:/home/nc/xx-modules-system.jar
    depends_on:
      - nc-redis
      - nc-nacos
    links:
      - nc-redis
      - nc-nacos

nginx配置文件(https自行编写)

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /home/nc/projects/nc-ui;
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }

        location /prod-api/{
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://ruoyi-gateway:8080/;
        }

        # 避免actuator暴露
        if ($request_uri ~ "/actuator") {
            return 403;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

脚本

docker环境变量文件
在这里插入图片描述
如果定义的环境变量名与宿主机的一样,则优先宿主机上的。

# 对象存储AK
OSS_ACCESS_KEY_ID=123
OSS_ACCESS_KEY_SECRET=321
# jvm参数
JAVA_OPTS=-Dspring.profiles.active=prev

部署脚本deploy.sh

#!/bin/sh

# 使用说明,用来提示输入参数
usage() {
	echo "Usage: sh 执行脚本.sh [port|base|modules|stop|rm]"
	exit 1
}

active=.env.$2

# 启动基础环境(必须)
base(){
	docker-compose up -d nc-redis nc-nacos
}

# 启动程序模块(必须),指定启动环境(生产、非生产)
modules(){
	docker-compose --env-file $active up -d 容器名称列表
}

# 关闭所有环境/模块
stop(){
	docker-compose stop
}

# 删除所有环境/模块
rm(){
	docker-compose rm
}

# 删除所有镜像
rmi(){
	docker rmi 镜像名称列表
}
# 根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"port")
	port
;;
"base")
	base
;;
"modules")
	modules
;;
"stop")
	stop
;;
"rm")
	rm
;;
*)
	usage
;;
esac

批量复制文件到对应目录copy.sh

#!/bin/sh

# 复制项目的文件到对应docker路径,便于一键生成镜像。
usage() {
	echo "Usage: sh copy.sh"
	exit 1
}


# copy html
echo "begin copy html "
cp -r ../jar-dist/dist/** ./nginx/html/dist


# copy jar
echo "begin copy xx-gateway "
cp ../jar-dist/xx-gateway.jar ./nc/gateway/jar

echo "begin copy xx-auth "
cp ../jar-dist/xx-auth.jar ./nc/auth/jar

echo "begin copy xx-modules-system "
cp ../jar-dist/xx-modules-system.jar ./nc/modules/system/jar

echo "begin copy xx-modules-file "
cp ../jar-dist/xx-modules-file.jar ./nc/modules/file/jar

echo "begin copy xx-modules-marketing "
cp ../jar-dist/xx-modules-marketing.jar ./nc/modules/marketing/jar


目录结构

docker/
│  copy.sh
│  deploy.sh
│  docker-compose.yml
│
├─nacos
│  │  dockerfile
│  │
│  └─conf
│          application.properties
│
├─nc
│  ├─auth
│  │  │  dockerfile
│  │  │
│  │  └─jar
│  │          readme.txt
│  │
│  ├─gateway
│  │  │  dockerfile
│  │  │
│  │  └─jar
│  │          readme.txt
│  │
│  └─modules
│      ├─file
│      │  │  dockerfile
│      │  │
│      │  └─jar
│      │          readme.txt
│      │
│      ├─marketing
│      │  │  dockerfile
│      │  │
│      │  └─jar
│      └─system
│          │  dockerfile
│          │
│          └─jar
│                  readme.txt
│
├─nginx
│  │  dockerfile
│  │
│  ├─conf
│  │      nginx.conf
│  │
│  └─html
│      └─dist
│              readme.txt
│
└─redis
    │  dockerfile
    │
    └─conf
            redis.conf

日志输出模板logback.xml(放到resources目录下)

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 日志存放路径 -->
	<property name="log.path" value="logs/nc-xx" />
   <!-- 日志输出格式 -->
	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

    <!-- 控制台输出 -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>

    <!-- 系统日志输出 -->
	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/info.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
			<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 日志最大的历史 60天 -->
			<maxHistory>60</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
	</appender>

    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 日志最大的历史 60天 -->
			<maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
			<!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
			<!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 系统模块日志级别控制  -->
	<logger name="com.xx" level="info" />
	<!-- Spring日志级别控制  -->
	<logger name="org.springframework" level="warn" />

	<root level="info">
		<appender-ref ref="console" />
	</root>

	<!--系统操作日志-->
    <root level="info">
        <appender-ref ref="file_info" />
        <appender-ref ref="file_error" />
    </root>
</configuration>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/96428.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity Canvas动画不显示的问题

问题描述: 我通过角色创建了一个walk的动画&#xff0c;当我把这个动画给到Canvas里面的一个image上&#xff0c;这个动画就不能正常播放了&#xff0c;经过一系列的查看我才发现&#xff0c;canvas里面动画播放和非canvas得动画播放&#xff0c;他们的动画参数是不一样的。一个…

项目详细描述

目录、 一、SOC智能游戏机&#xff08;集创赛-西南赛区三等奖&#xff09; 二、AXI2AHB Bridge 三、基于FPGA智能导盲拐杖&#xff08;FPGA竞赛全国二等奖&#xff09; 三、基于FPGA的倾角监测系统 四、图像压缩核心算法 一、SOC智能游戏机&#xff08;集创赛-西南赛区三等…

Kubernetes快速进阶与实战:构建可靠的容器化应用平台

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 1. 什么是Kubernetes&am…

数据分析基础-数据可视化学习笔记03-可视化的符号与表示-图形符号学

概念 图型符号学&#xff08;Cartographic Symbolization&#xff09;是地图学领域中的一个重要概念&#xff0c;涉及到如何使用不同的符号、颜色、图案和标记来在地图上表示地理信息和数据。图型符号学旨在传达地理信息&#xff0c;使得地图能够清晰、有效地传达各种空间数据…

【PHP】PHP基本语法

1、PHP标记 当解析一个文件时&#xff0c;PHP 会寻找起始和结束标记&#xff0c;也就是 <?php 和 ?>&#xff0c;告诉 PHP 开始和停止解析二者之间的代码。此种解析方式使得 PHP 可以被嵌入到各种不同的文档中去&#xff0c;而任何起始和结束标记之外的部分都会被 PHP…

CK-GW06-E03与汇川PLC的EtherNet/IP通信

准备阶段&#xff1a; CK-GWO6-E03网关POE交换机网线汇川PLC编程软件汇川AC801-0221-U0R0型号PLC 1.打开汇川PLC编程软件lnoProShop(V1.6.2)SP2 新建工程&#xff0c;选择对应的PLC型号&#xff0c;编程语言选择为“结构化文本&#xff08;ST&#xff09;语言”&#xff0c;然…

python项目实战

文章 项目1&#xff1a;外星人入侵游戏项目2&#xff1a;数据可视化2.1 matplotlib2.2 csv文件格式2.3 json文件格式2.4 使用Web API2.4.1 什么是Web API?2.4.2 处理API响应 2.5 使用Pygal可视化仓库 项目3&#xff1a;Web应用程序3.1 Django入门3.1.1 建立项目3.1.2 创建应用…

00-音视频-概述

有很多场合会使用的音视频&#xff0c;比如安防、视频闸机、影音播放器、视频通话&#xff0c;短视频等等。 从摄像头采集到用户观看&#xff0c;这中间涉及到了很多技术。 用户一般观看的高清视频1080P30帧。若按24位RGB对视频进行存储&#xff0c;一个60分钟视频所占空间 …

c++学习之vector的实现

在学习实现vector之前我们会看到对于库中的vector的实现&#xff0c;这里并非使用在学习string那样的定义方式&#xff0c;而是利用迭代器&#xff0c;也就是指针来实现的&#xff0c;这在功能的实现时极大的方便了我们。 那么我们就模仿库这样的方式实现我们呢经常会用到的一些…

如何保证跨境传输的安全性?

随着互联网时代的到来&#xff0c;全球文件传输频率不断增加&#xff0c;市场经济的发展也对信息共享提出更高要求。传统电话交流已无法满足跨国企业的需求&#xff0c;企业内部诸如Web、电子邮件、企业资源计划&#xff08;ERP&#xff09;、网络电话&#xff08;VOIP&#xf…

巨人互动|游戏出海游戏出海的趋势如何

随着全球游戏市场的不断扩大和消费者需求的多元化&#xff0c;游戏出海作为游戏行业的重要战略之一&#xff0c;正面临着新的发展趋势。本文小编将讲讲游戏出海的趋势&#xff0c;探讨一下未来游戏出海的发展方向与前景。 巨人互动|游戏出海&2023国内游戏厂商加快“出海”发…

实训笔记8.25

实训笔记8.25 8.25笔记一、Flume数据采集技术1.1 Flume实现数据采集主要借助Flume的组成架构1.2 Flume采集数据的时候&#xff0c;核心是编写Flume的采集脚本xxx.conf1.2.1 脚本文件主要由五部分组成 二、Flume案例实操2.1 采集一个网络端口的数据到控制台2.1.1 分析案例的组件…

Day50|动态规划part11:188.买卖股票的最佳时机IV、123. 买卖股票的最佳时机III

188. 买卖股票的最佳时机IV leetcode链接&#xff1a;188 题「买卖股票的最佳时机 IVopen in new window」 视频链接&#xff1a;动态规划来决定最佳时机&#xff0c;至多可以买卖K次&#xff01;| LeetCode&#xff1a;188.买卖股票最佳时机4 给你一个整数数组 prices 和一…

递归算法学习——子集

目录 一&#xff0c;题目解析 二&#xff0c;例子 三&#xff0c;题目接口 四&#xff0c;解题思路以及代码 1.完全深度搜索 2.广度搜索加上深度优先搜索 五&#xff0c;相似题 1.题目 2.题目接口 3.解题代码 一&#xff0c;题目解析 给你一个整数数组 nums &#xff0c…

Acwing796.子矩阵的和

理解二维前缀和&#xff1a; #include <iostream>using namespace std;const int N 1010;int a[N][N], s[N][N];int main() {int n, m, q;cin >> n >> m >> q;for (int i 1; i < n; i)for (int j 1; j < m; j) {scanf("%d", &a…

2023高教社杯数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米&#xff0c;宽为12米&…

本地部署 CodeLlama 并在 VSCode 中使用 CodeLlama

本地部署 CodeLlama 并在 VSCode 中使用 CodeLlama 1. CodeLlama 是什么2. CodeLlama Github 地址3. 下载 CodeLlama 模型4. 部署 CodeLlama5. 在 VSCode 中使用 CodeLlama6. 使用WSGI启动服务7. 创建 start.sh 启动脚本 1. CodeLlama 是什么 Code Llama 是一个基于 Llama 2 的…

WebSocket详解以及应用

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;websocket、网络、长连接、前端☀️每日 一言&#xff1a;任何一个你不喜欢而又离不开的地方&#xff0c;任何一种你不喜欢而又无法摆脱的生活&#xff0c;都是监狱&#xff01; 一、前言 我们在…

用wireshark流量分析的四个案例

目录 第一题 1 2 3 4 第二题 1 2 3. 第三题 1 2 第四题 1 2 3 第一题 题目&#xff1a; 1.黑客攻击的第一个受害主机的网卡IP地址 2.黑客对URL的哪一个参数实施了SQL注入 3.第一个受害主机网站数据库的表前缀&#xff08;加上下划线例如abc&#xff09; 4.…

智慧展馆展厅5G+LoRa+蓝牙人员定位系统解决方案

展览业是现代高端服务业的重要组成部分&#xff0c;作为新兴的服务行业&#xff0c;展览业串联着工业、农业、商贸等诸多产业&#xff0c;能够有效拉动产业和消费增长&#xff0c;是中国发展潜力较大的行业之一。如今各个行业越来越多地举办各类展会&#xff0c;由于展馆展厅规…