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

随笔3个月前发布 辣椒辣辣
37 0 0

前言

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

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

        这周因为隔壁有项目要验收了,我的好大哥就把我派过去配合赶进度了,还体验了一下单休,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(国内镜像源,安装相关微服务组件,py以及jar包的docker打包(上传私有云以及输出本地文件))

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

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

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

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

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文件的打包教程。

部署多个前端网页跳转的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(国内镜像源,安装相关微服务组件,py以及jar包的docker打包(上传私有云以及输出本地文件))

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

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

 python一个看起来简单小小的项目,花费了非常长的时间和空间,那1.17G就是打包后的DOCKER(国内镜像源,安装相关微服务组件,py以及jar包的docker打包(上传私有云以及输出本地文件))

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

 (8/26日记)

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

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

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

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

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

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

        其中的29开头以及8e开头那个很长的字符串,就是密码,这显然不是通过明码保存的密码(你也可以放置粘贴试试),这说明密码进行了加密,继续猜测大佬写代码的时候是国际化的写法😅,通过搜索username以及password。DOCKER(国内镜像源,安装相关微服务组件,py以及jar包的docker打包(上传私有云以及输出本地文件))

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

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

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

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

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

        望大佬指教。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...