搭建个人网站中踩过的坑(index)
对于每个互联网初学者而言,学习过程也是一个创造的过程。
无论是遵从互联网开源精神,还是为了打造个人IP,将自己的成果展示出来与大伙交流感觉就很酷
为了将我学习开发一年多以来的成果展示出来,作为个人价值的体现,我从头开始研究如何搭建我的博客
预计展示的内容有:
- 学习笔记
- 服务提供
- 自我介绍
主要要做的工作:
- 初始博客搭建
- 通过hexo创建模板
- 选择具体themes,编写相应config
- 即可通过github.io访问到初始博客
- 为了在博客中提供服务,租借云服务器
购买阿里云ECS
设法部署前后端项目
【这个在我的流程中是最烦的,因为我的后端有java + python,需要各自协调版本问题,在Linux中手动安装python以及各种依赖会有很多莫名其妙的问题,并且java + python的配置交织在一台服务器上,一旦由于python配置太乱想要重置云盘还会影响Java,需要想个办法隔离配置(比如Anaconda)】
- 购买域名
成果展示:
潜在问题记录:
- vue第一个页面加载太慢,具体而言一个js文件content download 二十多秒,初步怀疑ECS带块太低
- GPT接口暂未调通
- 后端ECS通过Anaconda管理Python版本消耗略大
- myAIs服务用户体验较差,尽快把新版本从本地迁移到云服务器
接下来逐步更新过程中踩到的坑
关于阿里云ECS
-
ECS提供不同操作系统层面实现的Linux,早期我从Alibaba Cloud Linux,自认为阿里自定义过性能一定更适合做云服务器吧;实际上由于网上的相关配置教程都是基于主流CentOS,Ubuntu等等,用阿里魔改版可能有诡异的bug
我遇到的问题如下:
- 由于项目需要在python中install openai,于是必须要python高版本;当用阿里魔改版操作系统安装Python3.11时,无法自动安装stuptools和pip,后续手动安装setuptools时说明操作系统缺失zlib模块,zlib需要重新安装;而CentOS应该自带了zlib模块。
- 我下载好pip 23后,依然无法安装pandas1.1.5之后的版本,这个有点匪夷所思
阿里云文档中没有关于魔改版安装Python即依赖的教程,提了相应工单后那边的大佬也建议我换其他版本操作系统。
-
关于Python及其依赖的版本冲突问题
Linux的yum自带Python2.7,阿里魔改版还自带Python3.6,但这些并不是问题,简单改下软连接即可 我遇到的问题:
- 当安装openai接口时,缺失_ssl依赖,但不清楚安装哪个版本的openssl,按照csdn某篇博客安装某个版本后,执行具体代码时又出现异常:‘无法从ssl中导入SSL_VERSION_NUMBER’,之后尝试降低openai版本,始终未能搞定;最后通过Anaconda解决的版本冲突的问题
Conda环境管理器如何解决依赖冲突问题?
其他Python依赖管理工具如poetry,virtualenv等暂未了解
关于java & SpringBoot
-
SpringBoot项目的正常getMapper接口,外界无法访问到
在SpringBoot项目中,常规而言只需要定义好Controller类中的RequestMapping接口就可以接受到外界的访问,如下
但是诡异的是偶尔会莫名其妙报404找不到路径定义;
这种bug是最让人手足无措的,因为这违背了SpringMVC的基本特性,想向低层探索并不简单
最后问题归因于SpringBoot3.0.3该版本自身缺陷,切换3.0.11后bug修复【中文互联网没人说这个版本的缺陷,Maven中也没有说明,但是实际bug确实被我碰出来了】
-
Java代码如何调用Python脚本
Java调用Python程序方法总结(最全最详细)_java可以调用python接口吗-CSDN博客
我参考其中Java通过Process类启动进程的方法
具体而言:
- Win下 Java核心代码:
String[] args1 = new String[3]; args1[0] = "python"; //args1[0] = "C:\\Users\\PycharmProjects\\pythonProject\\.venv\\Scripts\\python.exe"; args1[1] = modules.path; args1[2] = content; Runtime runtime = Runtime.getRuntime(); Process proc = runtime.exec(args1); InputStream is = proc.getInputStream(); byte[] bytes = is.readAllBytes(); String ansOrigin = new String(bytes, Charset.forName("gbk"));
- Win下python核心代码:
content = sys.argv[1] client = OpenAI( api_key="KEY", base_url="https://api.moonshot.cn/v1", ) completion = client.chat.completions.create( model="moonshot-v1-8k", messages=[ {"role": "system", "content": "你是 Kimi,由 Moonshot AI " "提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI " "为专有名词,不可翻译成其他语言。"}, {"role": "user", "content": content} ], temperature=0.3, ) print(completion.choices[0].message.content)
此处在Java代码中传入的三个参数,就是在命令行输入的三个内容
同理在Java代码中将第一个参数使用python具体地址,结果也可以执行(因为在命令行世界输入python.exe的具体地址也能启动python)
经测验,Linux中第一个参数无论传入python具体路径,还是软连接后的python也都可以执行
同时sys.argv获取参数默认从1开始
关于Vite
- vite项目默认只监听localhost,需要在配置文件vite.config.js中配置host为0.0.0.0时才能接收到外界访问
转载自:https://juejin.cn/post/7372364678410027047