前言
之前单独在旧的帖子下面更新的时候,码字码了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文件的打包教程。
部署多个前端网页跳转的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非对称的密钥生产加密,但我想总感觉怪怪的,为什么前端放置的是公钥和密钥,一般是,前端数据通过公钥加密,在传输到后端跳转的过程中利用私钥解密,在进行与数据库对比,但是这样虽然保证了他人不能通过前端文件获取到公钥密钥,但是这样也要求了服务器将需要存放原始密码(数据安全这一块到底算前端的锅还是后端的锅?),需要保证数据库的安全要高?
这一块对于我来说是盲区,毕竟这两种方法各有优缺,服务器存放原始密码可以避免忘记密码无法更改的尴尬,但是服务器存放加密密码可以减轻加密负担,在传输过程中不会出现明码传输,但是后端的私钥方案可以有更高的灵活性,但在服务器到数据库的过程中将以明码形式传输,有风险。
望大佬指教。