docker compose完成简单项目部署

1. 项目环境

centos7 + docker + mysql + redis + ruoyi项目

ruoyi项目链接:https://gitee.com/y_project/RuoYi-Vue.git

2. 进行项目前后端代码打包

后端打包:

修改mysql连接的相关配置文件 RuoYi-Vue/ruoyi-admin/src/main/resources/application-druid.yml

修改redis连接的相关配置文件 RuoYi-Vue/ruoyi-admin/src/main/resources/application.yml

使用maven打包(这里使用容器目录挂载方式进行打包)

cd RuoYi-Vue
docker run -it --rm -v .:/opt/app -v /root/.m2:/root/.m2 -w /opt/app maven:3.8.8-sapmachine-11 mvn package

前端打包:

使用node打包(这里使用容器目录挂载方式进行打包)

cd ruoyi-uicd ruoyi-ui
docker run -it --rm -v .:/opt/app -w /opt/app node:18.20.3-alpine3.20 /bin/sh -c "npm install  --registry http://registry.npmmirror.com && npm run build:prod"

3. docker compose来构建服务

目录层级如下

将打包好的jar包放在java目录下用于构建镜像

将打包好的dist前端代码放到nginx中来构建镜像

sql目录用于存放用于导入的sql数据

database进行mysql数据目录的映射

./java/

dockerfile

FROM java:8u111-jdk
COPY . /opt/app
WORKDIR /opt/app
COPY start.sh /
CMD sh /start.sh

java.sh

sleep 10java -jar ruoyi-admin.jar

等待10秒是因为Java构建镜像需要关联mysql,需等待mysql镜像构建完成

./nginx/

nginx.conf

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;events {worker_connections 1024;
}http {log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;charset utf-8;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 4096;include             /etc/nginx/mime.types;default_type        application/octet-stream;server {listen       80;server_name  localhost;#charset koi8-r;#access_log  /var/log/nginx/host.access.log  main;location / {root   /usr/share/nginx/dist;try_files $uri $uri/ /index.html;index  index.html index.htm;}location /prod-api/{proxy_pass http://java.host:8080/; #注意这里的写法proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}}

dockerfile

FROM nginx:1.16.1COPY ./nginx.conf /etc/nginx/nginx.confCOPY ./dist /usr/share/nginx/distEXPOSE 80

docker-compose.yml文件

# 指定服务
services:nginx:# nginx镜像需要构建,将代码和配置文件拷贝进去build:context: ./nginxports:- "80:80"links:- java:java.hostdepends_on:- javajava:build:context: ./javalinks:- redis:redis.host- database:mysql.hostdepends_on:- database- redisredis:image: redisdatabase:image: mysql:5.7container_name: mysqlvolumes:# mysql官方镜像的功能,将sql文件挂载到这个目录下,会自动进行导入操作。- ./sql:/docker-entrypoint-initdb.d- ./database:/var/lib/mysqlenvironment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=ry-vuecommand:- --character-set-server=utf8mb4- --collation-server=utf8mb4_unicode_ci

4. 启动docker compose

docker compose up

构建完成后出现下面现象,ruoyi项目就启动成功了,访问本机ip的80端口就行

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浙江零排参加全国水科技大会暨技术装备成果展览会(成都)并作主论坛演讲

2024年5月13日-15日中华环保联合会、福州大学、上海大学等联合举办的2024年全国水科技大会暨技术装备成果展览会在成都顺利举办。浙江零排城乡规划发展有限公司司受邀参加,首日有幸听取徐祖信院士、任洪强院士、汪华林院士等嘉宾的主旨报告。主旨报告后,…

Java过滤特殊空格nbsp;

现象: 用Java处理excel文件中的以下字符串时,想去除此空格,却发现用String.trim()没有直到预期效果: 原因: 在网上找了下,应该是这其实是html中经常使用的一种特殊空格字符  处理&a…

第八十九周周报

学习目标: 论文 学习时间: 2024.05.25-2024.05.31 学习产出: 一、论文 SAN: INDUCING METRIZABILITY OF GAN WITH DISCRIMINATIVE NORMALIZED LINEAR LAYER 将GAN与切片最优输运联系起来,提出满足方向最优性、可分离性和单射…

Redis基础操作命令

Redis基础操作命令非常丰富,涵盖了多个方面,包括全局操作、字符串操作、哈希操作、列表操作、集合操作以及有序集合操作等。以下是Redis基础操作命令的归纳和详细解释: 1. 全局操作 ping:检查Redis服务是否运行正常,…

DBeaver连接Elasticsearch

一、下载DBeaver 二、连接: 1、一定要选择开源的 Open Distro Elasticsearch 2、填写地址: 3、选择“URL”,将https改为http 否则会报SSL错误 4、测试连接

JavaScript笔记三-JavaScript常用对象

1、数字对象(Number) 1.1 、属性 属性描述Number.MAX_VALUEJavaScript 中所能表示的最大值Number.MIN_VALUEJavaScript 中所能表示的最小值Number.NaN非数字Number.NEGATIVE_INFINITY负无穷,在溢出时返回Number.POSITIVE_INFINITY正无穷&am…

C语言 | Leetcode C语言题解之第123题买卖股票的最佳时机III

题目&#xff1a; 题解&#xff1a; #define max(a, b) ((a) < (b) ? (b) : (a))int maxProfit(int* prices, int pricesSize) {int buy1 -prices[0], sell1 0;int buy2 -prices[0], sell2 0;for (int i 1; i < pricesSize; i) {buy1 max(buy1, -prices[i]);sell…

与牢霍沟通——Linux操作系统原理

硬件层 计算机由何组成&#xff1f; 我们现在手中的计算机&#xff0c;无论配置如何&#xff0c;是笔记本还是台式&#xff0c;都由三部分构成&#xff1a; 输入设备&#xff1a;键盘&#xff0c;鼠标...中央处理器&#xff1a;cpu&#xff0c;显卡&#xff0c;磁盘...输出设…

com.alibaba.fastjson.TypeReference JSON 泛型类型(详解)

系列文章目录 文章目录 系列文章目录一、简介二、构造方法 一、简介 com.alibaba.fastjson.TypeReference 即类型引用&#xff0c;用于指定我们使用 com.alibaba.fastjson 进行 json 转换时的对象类型。 官方解释&#xff1a; 表示泛型的类型。Java 还没有提供表示泛型类型的…

Vue 框选区域放大(纯JavaScript实现)

需求&#xff1a;长按鼠标左键框选区域&#xff0c;松开后放大该区域&#xff0c;继续框选继续放大&#xff0c;反向框选恢复原始状态 实现思路&#xff1a;根据鼠标的落点&#xff0c;放大要显示的内容&#xff08;内层盒子&#xff09;&#xff0c;然后利用水平偏移和垂直偏…

代码随想录算法训练营第三十三天| LeetCode1005.K次取反后最大化的数组和、LeetCode134. 加油站、LeetCode135. 分发糖果

#LeetCode 1005. Maximise Sum Of Array After K Negations #LeetCode 1005. 视频讲解&#xff1a;贪心算法&#xff0c;这不就是常识&#xff1f;还能叫贪心&#xff1f;LeetCode&#xff1a;1005.K次取反后最大化的数组和_哔哩哔哩_bilibili 这个题目中用到了两次局部最优&am…

14-alert\confirm\prompt\自定义弹窗

一、认识alert\confirm\prompt 下图依次是alert、confirm、prompt&#xff0c;先认清楚长什么样子&#xff0c;以后遇到了就知道如何操作了。 二、alert操作 先用driver.switch_to.alert方法切换到alert弹出框上&#xff1b;可以用text方法获取弹出的文本信息&#xff1b;acce…

Spring Cloud | 客户端 “负载均衡器“ : Ribbon

目录: 1. 什么是 "负载均衡" ? ( 通过 "负载均衡" 可以将 "用户请求" "分发" 到 不同的服务器&#xff0c;以此来提高 "性能" 和 "可靠性" )2. "负载均衡" 的 分类 &#xff1f;3. 认识 Ribbon :3.1 R…

【蓝桥杯国赛】动态规划

“动态规划”在蓝桥杯中的出题类型&#xff0c;主要为两种&#xff0c; 要格外注意&#xff0c;每一次 dp 的迭代更新&#xff0c;都是针对于当前位置下的“所有情况”进行的&#xff0c; 应着眼于当前位置的每一种情况。 类型一&#xff1a;一共有多少种情况&#xff1f; 1…

Flutter 中的 ScrollConfiguration 小部件:全面指南

Flutter 中的 ScrollConfiguration 小部件&#xff1a;全面指南 Flutter 是一个功能强大的 UI 框架&#xff0c;它允许开发者使用 Dart 语言来构建高性能、美观的移动、Web 和桌面应用。在 Flutter 中&#xff0c;滚动是用户界面中一个常见的交互元素。ScrollConfiguration 是…

使用 Apache Commons Exec 自动化脚本执行实现 MySQL 数据库备份

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

C# 中的字符与字符串

简介 在C#编程语言中&#xff0c;字符和字符串是处理文本数据的基础。字符是单个的字母或符号&#xff0c;而字符串是字符的集合。本篇博客将详细介绍C#中的字符类型 char 和字符串类型 string&#xff0c;以及它们的基本操作。 字符类型 char char 类型在C#中用于表示单个字…

Part 3.1 深度优先搜索

深度优先搜索&#xff08;DFS&#xff09;&#xff0c;即按照深度优先的顺序搜索的算法。 深度优先搜索一般使用栈来实现。 [USACO1.5] 八皇后 Checker Challenge 题目描述 一个如下的 6 6 6 \times 6 66 的跳棋棋盘&#xff0c;有六个棋子被放置在棋盘上&#xff0c;使得…

介绍HDD、SSD、U盘:存储技术的恢复原理与安全保存私密文件的方法

随着数字存储技术的飞速发展&#xff0c;硬盘驱动器&#xff08;HDD&#xff09;、固态驱动器&#xff08;SSD&#xff09;和USB闪存驱动器&#xff08;U盘&#xff09;已经成为我们日常生活中不可或缺的部分。尽管这些设备在存储数据方面表现出色&#xff0c;但数据丢失问题仍…

Vue不使用v-model的时候怎么监听数据变化?

在Vue中&#xff0c;如果你不想使用v-model来监听数据变化&#xff0c;你仍然可以通过其他几种方式来实现。v-model实际上是v-bind&#xff08;或简写为:&#xff09;和v-on&#xff08;或简写为&#xff09;的语法糖&#xff0c;它同时处理了数据的双向绑定&#xff1a;将值绑…