DOCKER(国内镜像源,安装相关微服务组件,py以及jar包的docker打包(上传私有云以及输出本地文件))

前言

        之前单独在旧的帖子下面更新的时候,码字码了1000多字的时候电脑蓝了,重启什么东西都没有,我红了。平台上面的自动保存是针对新文章的。

        这周因为隔壁有项目要验收了,我的好大哥就把我派过去配合赶进度了,还体验了一下单休,yysy,双休和单休就是不一样,周日一从床上爬起来就想,咦,怎么明天又上班了,还是双休好啊,虽然事情有点多,但还是腾出时间记录和学习了一些新知识,java的docker部署走了一遍后,自己做的flask+VUE3也走了一遍,今天就总结一下。

利用现有微服务框架软件熟悉docker部署以及微服务部署

        之前好大哥不是给我公司的服务器上划了一块linux虚拟机给我吗,我就想哥们这老东西笔记本跑oa,还得在自己的电脑安个虚拟机跑windows跑这些,不如挪去服务器上。(没错笔者一开始蠢蠢的用了windows虚拟机跑这些,实际上后来在服务器是用linux搞了一遍,又在linux上用docker实现了一遍。。。。😅)(给个建议,远程连接就最好用Xshell之类带有Xftp的可视化的文件传输平台,可以直接在本机软件打开更改(比如vscode,直接ctrl+s保存)不用vim等指令在linux里修改配置,虽然有点倒反天罡,但用多了确实很香)

        这周接触的就是docker,公司oa的微服务架构MySQL+redis+rabbitmq+nacos,使用公司的服务器上的linux系统部署docker,注意,使用docker的部署将会比传统的安装占用更大的物理空间,因为docker在进行打包的时候会一致打包所需要的环境,而且不同容器的环境相互独立。但这也有一个好处,他能让这些打包后的容器转移至其他地方仍然还能正常运行。

        因为我不可能将公司的文件发出,使用我这里推荐使用若依RuoYi的前后端分离项目,或者是微服务框架来尝试部署docker训练,我也通过若依的前后端分离项目实现了一次docker部署和打包上传云仓库,微服务框架的若依项目估计和我之前接触的公司项目差不多,先部署好nacos,在java配置好网关(nacos),在nacos写好相应的配置文件,估计微服务框架的application不用更改,每个项目都有readme.md文件有相关的内容。微服务框架教程,没用过可以看一看的教程,不过推荐自己上网看看相关的  

(建议做好redis数据库的选用和mysql数据库的命名,以防出现不必要的数据复用)

 docker国内镜像可能的解决方法以及安装过程

        首先,就是docker的安装只看源和github的源(个人认为CloudFlare可以更换为阿里云的私人仓库实现,本人没有尝试)。下面的第一个链接可以实现大部分人的需求,重要组件可以考虑设置为开机自启动。

        docker||不行试试这个mysql||不行试试这个Nacos||不行试试这个redis

​出现这个就是安装成功了

mysql的docker安装过程中error1045但不是密码问题

        在使用mysql安装时,出现了我设的密码MySQL不认我这个密码,尝试密码很多次后,发现mysql就是不认这个密码,重安好多次发现mysql就是不认密码。解决方法:需要提前准备配置文件写入后进行映射,上面有链接那个(mysql的链接中有相关内容)。

ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)

 其他转移mysql数据库出现的情况

         不同版本的MySQL安装使用,也会可能存在意料之外的错误,docker容器的mysql版本为8.7,原运行环境的MySQL为8+,运行后出现错误,因为5.7有更严格的规则,输入的数字没经过强制转换可能会报错,而8+版本看起来是自动将数字从字符转为了数值。

打包为docker容器

        无论打包什么文件为docker容器,打包的过程都需要docker软件的支持,但是可以先准备配置文件,转移至有docker软件/组件的环境中打包。docker的配置文件就是dockerfile。

dockerfile各个参数

python(因为笔者一开始做了py+VUE3的小项目,所以一起做了)

        先说打包python,建议下载pipreqs库,再进行requirement的所需环境输出,否则直接打印requirement表会输出当前环境的所有库。

`pipreqs` 是一个自动扫描 Python 项目并生成项目所依赖的第三方库列表的工具。这个库可以帮助开发者快速生成 `requirements.txt` 文件,确保在不同环境中重现相同的依赖关系,从而保证项目的可移植性和一致性。### 如何安装 `pipreqs`:
你可以通过 Python 的包管理器 pip 来安装 `pipreqs`。打开命令行工具,输入以下命令:
```
pip install pipreqs
```### 如何使用 `pipreqs`:
使用 `pipreqs` 生成依赖文件的基本命令格式如下:
```
pipreqs /path/to/project
```
这会在指定的项目目录下生成 `requirements.txt` 文件。你还可以指定输出文件的名称,排除特定依赖库,以及指定 Python 解析版本等。例如:
- 指定输出文件:```pipreqs /path/to/project --output-file requirements.txt```
- 排除特定依赖:```pipreqs /path/to/project --exclude package_name```
- 指定 Python 版本:```pipreqs /path/to/project --python 3.6```
- 生成包含版本号的依赖文件:```pipreqs /path/to/project --use-wheel```### 注意事项:
- `pipreqs` 会分析项目的 `import` 语句来找出所需的依赖库,确保不会遗漏任何必要的库 。
- 如果在生成依赖文件时遇到编码问题,比如在 Windows 系统上,可以使用 `--encoding=utf-8` 参数来指定编码格式 。
- 使用 `pipreqs` 生成的 `requirements.txt` 比直接使用 `pip freeze` 更为精确,因为它只会包含项目中实际使用到的库 。使用 `pipreqs` 生成依赖列表后,你可以使用以下命令来安装这些依赖:
```
pip install -r requirements.txt
```这是一个非常实用的工具,可以大大节省管理项目依赖的时间,并且减少手动管理依赖时可能出现的错误。

        我的python文件左右3kb,所需库只有4个,在经过docker打包后变成1G多,如果你不喜欢下一个小小的pipreqs库,也对时间和内存没什么太大了留恋的话,你就让他去吧。

        关于过大的python打包,下面的这个教程也有拆分打包的方法。

        这里是python文件的打包教程, 

这里是jar的打包过程

        这里是java文件的打包教程。

c++打包(9/4补充)

        笔者在4月5月左右自己敲了一个简易漏风没什么技术含量的c++原生的服务器,支持多线程,但也就充其量是一个前端url请求的转发。

        然后了呢,这几天在公司这边帮忙进行压力测试和一些url请求的测试(虽然我感觉就是打发我找点事做,但他们刚做出来的一些功能涉及部分数据库的增删改查有点问题,还是测得出来的)。

        就想着拿jmeter能不能试一试之前的项目,把他搬到公司服务器上。(一开始还和工友说jmeter不是和postman差不多吗,用过才发现在进行压力测试这方面jmeter真的好用,可以设计爆发式访问端口,可以测试服务器与数据库的访问压力,可以自定义设计的地方很多,还可以设计测试的数据导入进行压力访问)

        有点偏题了,当时想,c++的程序跑完之后不是有编译后的可执行程序吗,那我直接拿过来不就行了,还打什么包啊?我真聪明!

         结果我的原先的linux是ubuntu的22.04版本的,而公司服务器上的是centos7,运行的时候直接就回报了环境依赖版本不匹配,版本过低。我想导师给我的服务器上也没有什么别的东西,干脆就升个级吧,结果centos没有这些高版本的依赖升级。👉🤡

        这就是docker的魅力时刻了,盲目的更新依赖可能导致旧的软件不能使用,打包docker就不用考虑这些麻烦事了,那么docker的c++打包也其实和上面类似,我们都需要准备好打包docker的配置文件就是dockerfile,在里面做好相关的设置,上网一看,大多都是对原文件的打包,那么就没有对编译后文件的打包吗,docker打包更像是一个虚拟环境将所需的环境克隆在这个虚拟空间里一起打包,那么对编译后的文件进行打包那肯定也是没问题的,再在上网找了一圈,找到了相关的内容。

c++相关打包教程 进阶就是可执行文件打包

        在那个环境下运行的程序,最好在那个环境打包,这就意味着你需要在那个环境部署docker,当然在上面的教程中,你也可以使用docker下载相应的编译器,通过编译器容器环境编译你的原代码再进行打包。


部署多个前端网页跳转的nginx配置

        这里是nginx部署多个服务的方法。

        注意,无论是docker部署,nginx的转发配置,都需要关注端口

这是docker运行指定端口的样式,注意一定要规划好宿主机的端口,不然你会很痛苦的。

docker run -d -p 5000:5000 test02#这将启动一个后台容器,并将容器的 5000 端口映射到宿主机的 5000 端口。如果你的应用使用了不同的端口,请相应地更改端口号。

        docker容器内的ip地址相关不大清楚目前,不知道容器具体的通讯方式,估计也是桥接。在flask的开放ip设置为0.0.0.0,一开始设置为宿主机ip结果无效,前端无法通过预留端口连接容器。

if __name__ == "__main__":app.run(debug=True,host='0.0.0.0' ,port=5000)#别摁抄啊

利用阿里云创建私有仓库上传docker

        python的打包过程非常的慢,java非常迅速,出来的python容器成品也非常大,然后尝试上传私有云。还是这个 我估摸这这个也可以使用上面那位赛博仙人的方法,摆脱使用第三方库。(也就是使用CloudFlare,也可以尝试CloudFlare上传个人容器)

可以用不同版本分割为不同的容器。除了云上传,也可以尝试打包为tar文件,具体问问ai吧。

实现效果

        

         像怎么开机自启啊,相关的docker指令也要了解一下,linux的相关帮助文档都可以 -h调出,实在不行就去问ai吧。

 python一个看起来简单小小的项目,花费了非常长的时间和空间,那1.17G就是打包后的

 (8/26日记)

补充(9/1)若依的数据监控密码以及所带来的思考

        在回顾和熟悉若依服务的时候,发现若依网页之中有一个数据监控模块,可是点进去发现需要密码,而他并不是通用密码。

    

        这里是他的密码,而我这里并不是只想说这个的。我当时的思考过程是这样的,用户以及管理员的密码都是通过数据库进行存储,那么是否我可以通过数据库的表单直接获取用户的账号和密码,这是否意味着,如果有人通过服务器漏洞获取到数据,用户的数据将会遇到极大的风险,甚至通过加入不存在的用户和密码制造特权账户。

        然而我们在mysql中,会看到这个(数据库部署在服务器上了,只能给大家火看这个哩)

        其中的29开头以及8e开头那个很长的字符串,就是密码,这显然不是通过明码保存的密码(你也可以放置粘贴试试),这说明密码进行了加密,继续猜测大佬写代码的时候是国际化的写法😅,通过搜索username以及password。

        我们可以发现是前端对用户的密码进行了加密的操作。(仔细一想,如果前端在传输数据过程中被人截胡,确实会直接暴露密码,而在前端过程就对数据加密,安全性也更高)

 

        通过追踪decrypt函数的调用,我们来到了这个页面,我们可以看到是对数据用公钥加密,解密用私钥,通过的是RSA非对称的密钥生产加密,但我想总感觉怪怪的,为什么前端放置的是公钥和密钥,一般是,前端数据通过公钥加密,在传输到后端跳转的过程中利用私钥解密,在进行与数据库对比,但是这样虽然保证了他人不能通过前端文件获取到公钥密钥,但是这样也要求了服务器将需要存放原始密码(数据安全这一块到底算前端的锅还是后端的锅?),需要保证数据库的安全要高?

        这一块对于我来说是盲区,毕竟这两种方法各有优缺,服务器存放原始密码可以避免忘记密码无法更改的尴尬,但是服务器存放加密密码可以减轻加密负担,在传输过程中不会出现明码传输,但是后端的私钥方案可以有更高的灵活性,但在服务器到数据库的过程中将以明码形式传输,有风险。

        望大佬指教。

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

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

相关文章

java fastxml json 科学计数法转换处理

背景: 由于 canal 切换为 tx dbbridge后,发现dbbridge对于canal的兼容性存在较大问题,从而引发 该文档的实践。 就目前发现 dbbrige 的字段 大小写 和 数据类型格式 从binlog 写入kafka 同canal 都会存在差异。 canal之前导出都是小写&…

【ArcGIS/GeoScenePro】Portal和Server关系

简介 以下是ArcGIS的整体架构图 上图简化后 从图中我们可以看出可以将其分为三层其中: 最上层:应用层 中间层(门户):连接应用层和服务器,对server上发布的服务进行管理、分享和权限分配 最低层:服务器(Server层) 其中Enterprise = portal(中间层)+server(最底…

Tomato靶场渗透测试

1.扫描靶机地址 可以使用nmap进行扫描 由于我这已经知道靶机地址 这里就不扫描了 2.打开网站 3.进行目录扫描 dirb http://172.16.1.113 发现有一个antibot_image目录 4.访问这个目录 可以看到有一个info.php 5.查看页面源代码 可以发现可以进行get传参 6.…

3. GIS后端工程师岗位职责、技术要求和常见面试题

本系列文章目录: 1. GIS开发工程师岗位职责、技术要求和常见面试题 2. GIS数据工程师岗位职责、技术要求和常见面试题 3. GIS后端工程师岗位职责、技术要求和常见面试题 4. GIS前端工程师岗位职责、技术要求和常见面试题 5. GIS工程师岗位职责、技术要求和常见面试…

表连接查询之两个left join与递归SQL

一、如下SQL1 SELECT i.*,su1.name as createName,su2.name as updateNameFROM information ileft join sys_user su1 on su1.idi.create_idleft join sys_user su2 on su2.idi.update_id 二、分析 1、SELECT i.*,su.name as createName,sua.name as updateName FROM informati…

深度学习特征提取魔改版太强了!发文香饽饽!

要说CV领域经久不衰的研究热点,特征提取可以占一席,毕竟SLAM、三维重建等重要应用的底层都离不开它。 再加上近几年深度学习兴起,用深度学习做特征提取逐渐成了主流,比传统算法无论是性能、准确性还是效率都更胜一筹。 目前比较…

汽车制造商设备运维案例

汽车产线有很多传动设备需要长期在线运行,会出现老化、疲劳、磨损等问题,为了避免意外停机造成损失,需要加装一些健康监测设备,监测设备运行状态。天津三石峰科技采用无线温振传感器汇聚网关方案,将现场设备数据数据上…

linux~~目录结构远程登录教程(xshell+xftp)

目录 1.目录结构 2.远程登录xshell 2.1所需工具 2.2了解虚拟机IP 2.3查看是否正常连接 2.4xshell进行连接 3.文件传输xftp7 3.1xftp6安装 3.2相关设置 3.3效果展示 3.4文件之间的传输过程 1.目录结构 bin目录里面主要存放这个我们经常使用的指令,例如这个…

科研绘图系列:R语言PCoA图(PCoA plot)

介绍 PCoA(主坐标分析,Principal Coordinate Analysis)是一种多维数据的降维技术,它用于探索高维空间中样本之间的关系。PCoA通常用于生态学、遗传学和其他领域的数据分析,以揭示样本或个体之间的相似性或差异性。 PCoA图的作用: 数据降维:PCoA可以将高维数据(如物种…

RKNPU2从入门到实践 ---- 【8】借助 RKNN Toolkit lite2 在RK3588开发板上部署RKNN模型

前言 作者使用的平台为Ubuntu20.04虚拟系统,开发板为瑞芯微RK3588,开发板上的系统为Ubuntu22.04系统。 一、任务 完成RKNN模型的部署,RKNN模型的部署是将RKNN模型放到开发板上,应用程序可以加载RKNN模型,从而在嵌入式…

Markdown 语法大全详解

Markdown 语法大全详解 Markdown是一种轻量级标记语言,排版语法简洁,让人们更多地关注内容本身而非排版。它使用易读易写的纯文本格式编写文档,可与HTML混编,可导出 HTML、PDF 以及本身的 .md 格式的文件。因简洁、高效、易读、易…

Node.js模块系统

大家好呀,今天我们来认识以下Node.js的模块系统。 模块系统 目录 模块系统 node项目 创建一个完整的node项目 模块之间的引用 模块的导入 模块的分类 核心模块的引用 获取模块的导出对象 小结 node项目 一个node项目,单有JS文件是不行的&#xff…

Linux操作系统中的进程查看与进程调度

一.进程查看 什么是进程? 进程 process 计算机执行任务的最小单位,在计算机上运行一个应用软件可能会产生多个进程, 二.进程查看——ps -aux ps命令查看进程 如上图所示,是ps命令加上aux选项产生的结果,其作用是…

数字芯片中I/O单元及电源domain布局中SIPI的考虑

芯片设计的物理实施过程通常也简称为布局布线(P&R,Place-and-Route),布局一般被分为布局规划(Floorplan)和标准单元摆放(Place)两个过程。而其中的布局规划是芯片后端物理实现过…

大模型的实践应用28-基于ChatGLM大模型搭建智能自助用药问答系统、药物智能管理系统的应用详解

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用28-基于ChatGLM大模型搭建智能自助用药问答系统、药物智能管理系统的应用详解。 随着人工智能技术的发展,我们的生活在许多方面都得到了改善。本文将介绍如何利用现有的大模型(如:ChatGLM2-6b,百川,通义千问)构建一…

Golang | Leetcode Golang题解之第385题迷你语法分析器

题目: 题解: func deserialize(s string) *NestedInteger {index : 0var dfs func() *NestedIntegerdfs func() *NestedInteger {ni : &NestedInteger{}if s[index] [ {indexfor s[index] ! ] {ni.Add(*dfs())if s[index] , {index}}indexreturn…

Linux【6】系统

时间日期 date日期 cal——当月日历 cal -y 今年的日历 磁盘占用df du df 剩余空间 du 目录下的文件大小 进程ps ps aux a——其他用户 u——详细状态 x——没有控制终端 只看CPU占用高的进程top kill pid代号 ——杀死程序 通配符(简略版) …

conda create创建失败

如图一样,每次创建环境都显示连接不上,换了各种源各种方法都不行,最后把.condarc给删掉就能正常下载了,我类目了

Tekton简介,安装和构建最简单ci/cd

简介 Tekton是一种基于k8的支持CI/CD的operator。 说到持续集成,我们比较熟悉的有jenkins,gitlab ci等,但只有Tekton是云原生的。 既然Tekton是一种operator,那就必须了解它的CRD,然后我们定义CR,让Tekt…

如何使用Jmeter关联influxDB?

一、添加"添加后端监听器" 二、后端监听器实现选择,"org. apache. jmeter. visualizers. backend. influxdb.InfluxdbBackendlistenerClient" 三、修改"influxdbUrl:自己的主机、application:取一个项目名" 四、influxDB&…