首页
最新活动
服务器租用
香港服务器租用
台湾服务器租用
美国服务器租用
日本服务器租用
新加坡服务器租用
高防服务器
香港高防服务器
台湾高防服务器
美国高防服务器
裸金属
香港裸金属服务器
台湾裸金属服务器
美国裸金属服务器
日本裸金属服务器
新加坡裸金属服务器
云服务器
香港云服务器
台湾云服务器
美国云服务器
日本云服务器
CDN
CDN节点
CDN带宽
CDN防御
CDN定制
行业新闻
官方公告
香港服务器资讯
帮助文档
wp博客
zb博客
服务器资讯
联系我们
关于我们
机房介绍
机房托管
登入
注册
帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
联系客服
服务器资讯
/
香港服务器租用
/
香港VPS租用
/
香港云服务器
/
美国服务器租用
/
台湾服务器租用
/
日本服务器租用
/
官方公告
/
帮助文档
实战:Docker Compose 下 Nginx、Java、Mysql 和 Redis 服务协同部署(包含解决浏览器访问Linux部署服务器本地资源问题)
发布时间:2024-03-08 12:58:10 分类:帮助文档
实战:Docker Compose 下 Nginx、Java、Mysql 和 Redis 服务协同部署(包含解决浏览器访问Linux部署服务器本地资源问题) 1. 背景 在该实战中,我们将探讨如何使用Docker Compose协同部署Nginx、Java、Mysql和Redis服务,实现一个视频上传与展示的应用。具体需求如下: Java应用负责上传视频和图片资源到Nginx目录下,作为资源服务器。Nginx服务作为静态资源服务器,通过URL访问已上传的视频和图片资源。Java服务通过读取数据卷挂载的/data/init.properties文件获取服务器的IP地址,用于拼接资源的访问URL。 2. 实现步骤 2.1 配置Java应用读取服务器IP 我们使用Spring的@Profile注解和InitConfig类,读取部署时挂载的/data/init.properties文件,获取服务器IP。 拓展:优化,可以在项目所部署的服务器上,写一个获取服务器IP的脚本(Centos系统Docker获取宿主机IP地址,MAC地址,磁盘序列号和CPU序列号的shell脚本),然后java通过运行该脚本获取服务器IP,如果买了域名,那更好了,直接省掉拼接服务器IP的步骤。 import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Profile; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Component; import java.io.*; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.Set; @Profile({"pro", "docker"}) @Component @Data public class InitConfig { private String serverIp; @Bean public Map
loadLinuxConfig() { Properties prop = new Properties(); try (InputStream in = new BufferedInputStream(Files.newInputStream(Paths.get("/data/init.properties")))) { prop.load(new InputStreamReader(in, StandardCharsets.UTF_8)); } catch (IOException e) { log.error("Failed to load local configuration file InitConfig.properties", e); } Set
keySet = prop.stringPropertyNames(); Map
configMap = new HashMap<>(); for (String key : keySet) { String value = prop.getProperty(key); log.info("Configuration loaded: key={}, value={}", key, value); configMap.put(key, value); } serverIp = configMap.get("data.serverIp"); return configMap; } } 2.2编写init.properties文件 data.serverIp该key根据自己需求随意取名。 data.serverIp=192.168.xx.xx 2.3调整Java资源列表展示接口 返回列表给前端的时候,将获取到的服务器IP拼接到资源的Url中。 @Autowired private VideoInfoMapper videoInfoMapper; @Autowired private InitConfig initConfig; / * 获取资源视频列表 * * @return {@link ResponseResult } * @param type 视频类型 * @param search 搜索关键词 * @author yangz */ @Override public ResponseResult
> getVideoList(String type, String search) { List
videoList = videoInfoMapper.selectByTypeAndSearch(type, search); for (VideoInfo videoInfo : videoList) { // 构建相对路径 String relativePath = videoInfo.getFileName(); // 构建完整的 URL,拼接 Nginx 的部署路径 videoInfo.setUrl( "http://"+initConfig.getServerIp()+":yourPort/static/" + relativePath); // 同样处理 imageUrl String relativeImagePath = videoInfo.getImageName(); videoInfo.setImageUrl("http://"+initConfig.getServerIp()+":yourPort/static/" + relativeImagePath); } return new ResponseResult<>(videoList); } 2.4 编写Docker Compose 文件 这里volumes_from属性将Nginx容器的数据卷挂载到Java容器中,实现了两个容器之间数据卷的共享。 这是因为Nginx容器中的/usr/share/nginx/static目录包含了Java上传的静态资源,而volumes_from确保了Java容器可以访问这个目录。这样,Nginx就能够正确地服务Java上传的资源了。 version: '3' services: # Nginx nginx: image: nginx:1.22.0 container_name: nginx_education restart: always ports: - "yourPort:8868" - "83:80" volumes: - ./nginx/html:/usr/share/nginx/html - ./nginx/static:/usr/share/nginx/static - ./nginx/nginx.conf:/etc/nginx/nginx.conf privileged: true # MySQL mysql: image: mysql:5.7 ports: - "yourPort:3306" container_name: mysql_education restart: always environment: MYSQL_ROOT_PASSWORD: yourPassword volumes: - ./mysql:/var/lib/mysql - ./init/:/docker-entrypoint-initdb.d/ # Redis redis: image: redis:5.0.3 container_name: redis_education command: "/usr/local/bin/redis-server /usr/local/etc/redis/redis.conf --appendonly yes" restart: always ports: - "yourPort:6379" volumes: - ./redis:/data - ./redis.conf:/usr/local/etc/redis/redis.conf - ./logs/redis:/logs # Java java: image: java:8 container_name: education ports: - "yourPort:jarPort" environment: - TZ=Asia/Shanghai - LANG=en_US.UTF-8 volumes: # 映射Java应用程序jar文件 - ./xxx-education-xxx-0.0.1-SNAPSHOT.jar:/data/xxx-education-xxx-0.0.1-SNAPSHOT.jar # 映射Java应用程序的初始化配置文件 - ./init/init.properties:/data/init.properties # 映射Java应用程序的日志目录 - ./logs:/logs # 使用volumes_from属性,挂载Nginx容器的数据卷到Java容器 volumes_from: - nginx # Java应用程序的入口命令 entrypoint: nohup java -jar /data/xxx-education-xxx-0.0.1-SNAPSHOT.jar --spring.profiles.active=docker > nohup.out & depends_on: - redis - mysql restart: on-failure networks: default: external: name: my-education 2.5 Nginx配置 在Nginx的配置中,我们配置了/static/路径的访问规则,通过rewrite ^/(.+)/$ /$1 permanent;将URI结尾的斜杠去掉,并使用alias指定静态资源的路径。 注意:172.17.0.1是Docker在部署docker-compose时创建的默认网关地址。在容器网络中,这个地址充当了容器之间直接通信的网关。通过配置Nginx时使用这个地址,使得即使服务器IP变化,也不需要修改Nginx的代理配置。这样一来,容器之间的通信可以通过网关地址和端口进行,实现了更加灵活和方便的部署方式。 server { listen yourPort; location / { root /usr/share/nginx/html/dist; index index.html index.htm; try_files $uri $uri/ /index.html; } # 配置静态资源访问的路径 location /static/ { rewrite ^/(.+)/$ /$1 permanent; alias /usr/share/nginx/static/; } location /prod-api/ { client_max_body_size 1000m; proxy_pass http://172.17.0.1:jarPort/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } 3. 部署与访问 使用docker-compose up -d命令启动所有服务。 访问Java容器中的日志文件,查看Java应用启动时是否正确加载了服务器IP。 通过浏览器访问http://serverIP:Port/static/,验证Nginx是否正确访问了Java上传的资源。 4. 结语 通过这个实战,我们成功搭建了一个多服务协同部署的环境,其中Nginx作为静态资源服务器,Java负责业务逻辑。利用Docker Compose,我们实现了服务的快速部署和环境一致性,为开发和测试提供了便利。
上一篇
香港太平洋宽频
下一篇
免费打香港电话软件
相关文章
e站被墙了怎么办
猫头虎分享已解决Bug -- 服务器过热(Server Overheating):OverheatingWarning, ThermalShutdown
Ncp出现在美国欧洲会怎么样
eNSP实验日记四(防火墙配置)
腾讯云4核8G12M服务器支持多少人在线?
活动目录服务详细操作
aws亚马逊云国际站代理商:亚马逊云服务器如何创建账号购买服务器流程?
连接VPN后无法联网
COW AI接入到微信 保姆教程 (部署在服务器,插件安装)
香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价
7*24H在线售后
高可用资源,安全稳定
1v1专属客服对接
无忧退款试用保障
德讯电讯股份有限公司
电话:00886-982-263-666
台湾总部:台北市中山区建国北路一段29号3楼
香港分公司:九龙弥敦道625号雅兰商业二期906室
服务器租用
香港服务器
日本服务器
台湾服务器
美国服务器
高防服务器购买
香港高防服务器出租
台湾高防服务器租赁
美国高防服务器DDos
云服务器
香港云服务器
台湾云服务器
美国云服务器
日本云服务器
行业新闻
香港服务器租用
服务器资讯
香港云服务器
台湾服务器租用
zblog博客
香港VPS
关于我们
机房介绍
联系我们
Copyright © 1997-2024 www.hkstack.com All rights reserved.