# hiding_face **Repository Path**: chiro-wave/hiding_face ## Basic Information - **Project Name**: hiding_face - **Description**: hiding face - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-11 - **Last Updated**: 2025-12-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README --- title: 软件工程实践 --- 本仓库用于25软件工程实践 小组实验 ## 开发日志 ### 2025-09-21 王家祥记 Ubuntu 24.04 server 版本内置的Python版本为`3.12.3`,第一天尝试配置Python的flask框架。 #### TODO 由于服务器开发时候的某些要求,这里决定采用config.json文件定义服务器启动的端口等信息。 因此需要安装python处理json文件的库,这一内容,相对应该比较的简单。(待完成),可以使用默认配置。 #### 安装flask框架 在Ubuntu 24.04 server版本下,安装库不能直接使用pip,因此安装的命令可以设置为: ```shell sudo apt install python3-flask ``` #### 代码规范 考虑到多人开发的需求,我在代码的开头增加了一个开头用于标注每个文件应该需要的信息,后续可以增补。 #### TODO2 * 进行数据库表的定义(尝试注册了一下Hugging Face在填写用户的表的时候,出现了下列图片, 数据库设计的时候可以参考使用) ![Hugging Face User Info](./README/HuggingFaceUserInfo.png) * redis+postgresql的配置 * flask通过注册api实现数据库操作和返回响应。 * 对象存储MinIO的配置 * 前端看情况是要用react了,但是感觉用vue也可以,感觉可以尝试讨论一下。 上述TODO,只是一个粗略的,从个人技术栈,认为实现比较容易的,暂时先这样,其余内容,留待日后开发。 ### 2025-09-22 王家祥记 #### Readme修改 对于开发日志记录进行了一定的修改,便于后续使用思维导图进行可视化增强。 #### User表,和UserInfo表 接下来尝试配置数据库,为了方便进行数据库的配置,先行设计一个User表,便于后续的测试。 User { uid(唯一) name(唯一) email(唯一) password(需进行加密) } 暂时设计为上述四个值,创建数据库的表格式,可以后续补充。 #### 数据库的安装 postgresql的安装和配置可见:[postgresql安装教程](https://mkdocs.cflmy.cn/Tech/Web/Postgresql/Postgresql/) redis安装和使用教程可见:[Redis安装教程](https://mkdocs.cflmy.cn/Tech/Web/Redis/Redis/) 安装python连接postgresql的方式为: ```shell sudo apt install python3-psycopg2 ``` #### 测试文件以及代码的规范化 我将测试文件移动到了test/env目录下,表示进行环境的测试。 #### 完成初始化操作 由于使用了Python的内部库,因此json库是不需要额外安装的直接引入即可,才外我尝试了进行应用的初始化 的一些操作,在这里,我的代码规范为,一切文件和文件夹的名称都使用小写进行标识,对于两个单词以上的 名称,使用下划线`_`进行标识,对于类名,我使用了全大写来进行标识,对于引用的类实例化对象,则采用驼峰命名法。 此外,为了避免有些文件在外部允许访问,我设定了保护函数,使得除了start.py和test文件夹下的函数都不能被外界访问。 #### .gitignore的添加 我添加了gitignore文件,保证部分不需要被同步的缓存文件不会被同步到远程存储库中。 ### 2025-09-23 王家祥记 #### 静态路由的添加 我在manager文件夹下添加了route_manager文件,这是用于进行路由管理的软件,我初始化了一些简单的内容, 但是大部分内容都没有完成,四个函数还需要添加并完成。 ### 2025-09-24 王家祥记 #### 创建前端项目 考虑到安装环境的需求,在npm,yarn,pnpm等前端包管理工具中,pnpm相对更.具有优越性。 安装pnpm的步骤大致如下(仍为Ubuntu 24.04 server版本) ```shell sudo apt update sudo apt install npm npm install -g pnpm ``` 接下来就可以创建一个vite项目了,我在创建前端项目的时候,将这个项目文件夹命名为vite,表示是一个vite项目的意思。 使用的前端框架为react,代码设定为Typescript。 若要实时的预览前端的效果,使用下面的命令: ```shell pnpm run dev ``` 如果要构建静态文件,请使用命令: ```shell pnpm run build ``` 上述命令,会在vite文件夹下创建一个dist文件夹,这个文件夹会被git ignore,因此每次拉取后, 都应当重新应用这个命令,得到最新的静态文件。 ### 2025-09-25 王家祥记 #### 后端与前端的交互 由于后端的项目需要返回前端的静态资源,在route_manager.py中设置了静态资源返回的内容 但我个人对这里的代码简洁性不太满意,但是在多次测试之后,这算是比较合理且能够正确获得 静态资源的方式,如果审阅代码后,能够得到更好的结果,请尝试修改,提高代码的规范性。 #### cookie管理 在route_magaer中添加了对cookie的管理内容,需要注意,为了尽可能的统一后续的增删改查 等操作,这里分别将cookie的增删改查操作,设置为create_cookie,delete_cookie,select_cookie, 而update_cookie由于不会使用,因此注释掉了。 另外在这里提出规范,对于增删改查操作,定义方法的对应关系如下: create: POST delete: DELETE select: GET update: PUT ### 2025-09-28 王家祥记 #### 数据库新建 我创建了一个sql数据库,创建了我们应用开发的时候需要使用的数据库和用户,可以通过远程连接,远程连接的 地址和数据库密码我会发在群里,现在我们还处在开发阶段,可以使用本地数据库进行开发,只要对接不存在 问题即可。 #### 四个TODO 接下来安排四个TODO: * 配置用于对象存储的miniIO -- 难度未知,我也是第一次用 * 书写用户API(包括建立数据库表,进行数据库操作) -- 难道中等,已经给出框架 * 仿造Hugging Face写前端 -- 难度中等,可以使用AI,但是预计代码量比较大 * 书写session操作的相关路由 -- 难度相对较低,但不建议使用AI,因为这个代码使用频繁,最好能够给出完善的注释。 #### k8s和miniIO 这两个是运维的配置部分,下面的内容都是我在尝试创建的时候,使用的命令,可能会出现错漏。 ##### 安装kubectl ```shell curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256" echo "$(cat kubectl.sha256) kubectl" | sha256sum --check ``` 我进行实际安装的时候,发现安装缓慢,正在尝试寻找合适的方式加速安装。 获取上述内容后,进行安装的方式为: ```shell sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl ``` 安装完成后,可以利用下面的方式,检验安装是否是成功的: ```shell kubectl version --client kubectl version --client --output=yaml ``` 在安装之后,由于在开发环境中,还需要安装minikube。 ### 2025-10-02 王家祥记 ##### 安装minikube ```shell curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64 ``` 在测试之后,我发现安装这个文件需要占据133MB大小的内容,而且在不配置代理的情况下, 下载速度十分的缓慢,因此建议还是在安装到本地之后通过远程连接上传到服务器比较的合适。 接下来需要启动minikube: ```shell minikube start ``` !!!!!!!!!!!!! 我安装之后发现没有办法成功的启动,启动也存在问题,正在寻找问题并修复。 !!!!!!!!!!!!! #### 配置docker和rancher 感觉直接配置k8s命令行进行手操配置难度太陡峭,所以决定先进行简单的操作,先尝试安装rancher, 安装rancher需要docker,安装和配置的步骤为: 下面的两个不错的blog: [](https://gt2kk.cn/blog/ubuntu/2025-05-30-ubuntu-docker) [](https://www.oryoy.com/news/jie-jue-docker-guo-nei-jing-xiang-yuan-bu-sheng-xiao-wen-ti-pei-zhi-yu-chang-jian-cuo-wu-jie-xi.html) 接下来使用下面的命令安装rancher: ```shell docker run --privileged -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher ``` 这里我将对外的端口配置为580和5443主要是为了防止后续可能会占用其他的端口。 配置完成之后打不开,暂时先不采用这种方式进行配置,采取其他的方式进行进一步的尝试。 ### 2025-10-9 王家祥记 在10月2日配置的内容存在诸多错漏,尚未配置成功。 #### 配置minikube 在进行了一番挣扎之后,还是使用代理进行尝试,由于在root下进行运行,因此启动的命令需要设置为: ```shell minikube start --force ``` 应该能够在运行下面的命令后看到对应的节点: ```shell kubectl get nodes ``` #### 安装miniIO 获得yaml文件 ```shell curl https://raw.githubusercontent.com/minio/docs/master/source/extra/examples/minio-dev.yaml -O ``` > 注这个文件需要我们进行修改,在: ```shell nodeSelector: kubernetes.io/hostname: minikube #kubernetes.io/hostname: kubealpha.local # Specify a node label associated to the Worker Node on which you want to deploy the pod. # 需要进行修改,改为实际的节点。 ``` 更改为我们需要的节点。 接着利用这个yaml文件进行创建节点: ```shell kubectl apply -f minio-dev.yaml ``` 如果创建出现了问题,请先将原来的删除,再创建一个新的: ```shell kubectl delete pod minio -n minio-dev kubectl apply -f minio-dev.yaml -n minio-dev ``` 为了控制台访问和API访问的测试,请按照下面的命令进行端口的转发: ```shell kubectl port-forward pod/minio 9000 9090 -n minio-dev ``` 需要特别注意的是,在官方文档中有一个错误,访问浏览器的端口应该为9090,我也不太清楚为什么官方文档错误写成了9001. 但是这里是一个需要特别注意的点。 有时候可以使用下面的方式进行日志的查看: ```shell kubectl logs minio -n minio-dev ``` ### 2025-10-10 王家祥记 #### minio问题解决 重新启动发现存在镜像拉取不稳定的情况,在minikube虚拟机中进行代理的配置非常的不方便,但是 可以通过在宿主机拉取镜像再复制到minkube中这个操作,例如: ```shell docker pull quay.io/minio/minio:latest docker images | grep quay.io/minio/minio minikube image load quay.io/minio/minio:latest ``` 接着进入minkube虚拟机: ```shell minikube ssh sudo docker image list ``` 此外,为了保证从本地进行镜像的建立,我修改了配置的文件: ```shell spec: containers: - name: minio image: quay.io/minio/minio:latest imagePullPolicy: Never # 新增修改,强制从本地加载镜像 ``` 确保从本地镜像启动。 #### 暴露服务端口到外部 暴露minio的服务端口到外部需要使用ingress,配置的方式大致如下: ```shell minikube addons enable ingress #启用ingress插件 kubectl get pods -n ingress-nginx #检查配置情况 ``` 我在进行上述配置的时候失败了,在宿主机尝试拉取镜像: ```shell docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.6.2 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.13.2 ``` 成功拉取后再复制进入minikube: ```shell minikube image load registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.13.2 minikube image load registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.6.2 ``` 镜像复制完成后再通过通过禁用插件后重新启用来完成操作: ```shell minikube addons disable ingress minikube addons enable ingress ``` 上述操作仍然存在很多的问题,可能需要一些新的操作才可以: 将配置信息导出 ```shell minikube addons disable ingress minikube addons configure ingress > ingress-deploy.yaml ``` 上述方式我配置之后还是会失败的,继续进行尝试: ```shell wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml ``` 更改名称为ingress-deploy.yaml 接着利用这个文件进行配置: ```shell kubectl apply -f ingress-deploy.yaml -n ingress-nginx ``` 这里出现了问题,在生产环境还是需要ingress的,但是学习环境暂时还是使用nodeport来代替吧。 ```shell kubectl apply -f minio-nodeport.yaml -n minio-dev ``` ### 2025-10-11 王家祥记 #### minio密码的修改和测试阶段的暴露端口 我修改了minio的密码现在我们还在测试阶段,因此密码我直接明文存储进了配置文件中, 查看`minio-dev.yaml`文件就可以直接查看密码和用户名。 对应的代码为: ```shell # 新增环境变量配置初始用户名和密码 env: - name: MINIO_ROOT_USER value: "admin" - name: MINIO_ROOT_PASSWORD value: "testPeriodPass" ``` 我新增了nodeport的端口转发功能: ```shell --- # 为 MinIO 提供持久化的端口转发和内部访问地址 apiVersion: v1 kind: Service metadata: name: minio-service namespace: minio-dev # 与 MinIO Pod 同命名空间 spec: selector: app: minio # 匹配 MinIO Pod 的 label(metadata.labels.app: minio) ports: - name: api # MinIO API 端口(S3 兼容接口) port: 9000 # Service 暴露的端口 targetPort: 9000 # 转发到 Pod 的 9000 端口 - name: console # MinIO 控制台端口 port: 9090 # Service 暴露的端口 targetPort: 9090 # 转发到 Pod 的 9090 端口 type: NodePort ``` 要查看转发后的端口可以通过下面的命令: ```shell kubectl get services -n minio-dev ``` 或者通过minikube的这个命令: ```shell minikube service minio-service -n minio-dev ``` 会自动显示出minikube的节点ip和地址。 ### 2025-10-12 舒佳豪记 #### Session API 完成说明 - 已完成 Session API 路由与实现,包含: - POST /api/session/create - GET /api/session/read - GET /api/session/read/ - PUT /api/session/update - PUT /api/session/update/ - DELETE /api/session/delete - DELETE /api/session/delete/ - GET /api/session/keys - GET /api/session/status - 路由注册架构: - 统一入口:src/api/all_api.py 负责集中注册各 API;其中 APISESSION(server) 在构造时注册全部 Session 路由 - 触发注册:src/manager/route_manager.py 在 __api_route__ 中实例化 ALLAPI(self.Server) #### 如何测试(自动化测试脚本) 1) 启动后端服务(默认读取 config.json 的端口,目前为 1234): ``` python src/start.py ``` 2) 在另一个终端运行内置测试脚本(脚本会自动读取端口并使用同一 HTTP 会话保持 Cookie): ``` python test/route/test-session.py ``` 3) 预期: - 首次 GET /api/session/status 返回不存在(exists=false) - POST /api/session/create 返回 201,包含 session_id / created_at / last_accessed - GET /api/session/read 能看到前一步写入的数据 - PUT /api/session/update / PUT /api/session/update/ 更新成功,返回 updated_keys - GET /api/session/keys 返回键列表 - DELETE /api/session/delete/ 删除指定键成功;DELETE /api/session/delete 清空会话成功 - 测试脚本打印 PASS/FAIL 与详细响应 JSON #### 参考文件 - 路由实现:src/api/api_session.py - 统一注册:src/api/all_api.py - 路由管理:src/manager/route_manager.py - 服务器启动与密钥设置:src/server/web_server.py - 端口与密钥配置:config.json - 测试脚本:test/route/test-session.py ### 2025-10-16 王家祥记 #### 数据库管理文件的相关说明 数据库要完成加锁等事务的操作,还有增删改查等,这里尝试使用AI进行一次生成,如果出现问题 请进行回退。 这一次的生成主要针对 - 1. 数据库配置管理 :从环境变量和配置文件中加载PostgreSQL连接信息,使用create_db_dbuser.sql中定义的默认数据库名称和用户名。 - 2. 数据库连接池 :实现了简单的连接池管理机制,支持多连接和自动重连功能。 - 3. 增删改查API :提供了完整的数据库操作接口,包括: - execute_query:执行单条SQL语句 - execute_transaction:执行多条SQL事务 - get_data:查询表数据 - insert_data:插入数据 - update_data:更新数据 - delete_data:删除数据 - 4. 数据库锁机制 :实现了基于线程的锁系统,为每个表和操作类型提供独立的锁,确保并发操作的安全性。 - 5. Redis接口预留 :为将来实现Redis数据库功能预留了redis_get、redis_set和redis_delete等接口。 - 6. 错误处理 :所有数据库操作都包含完整的异常捕获和日志记录机制。 #### 关于全局变量文件 在实际使用中,我感觉全局变量存在危险性,而且不便于代码的维护,因此我删去了全局变量文件 唯一需要进行维护的只有Init.Config这个部分包含了config.json中的所有内容。 TODO 其实进行这一步的操作我也有些纠结,在后续部分我们可以进行一定的讨论,是否进行全局变量的设置。 #### 修改config.json 我增加了config.json中有关数据库相关操作的部分,数据库信息将会从这里读取。 #### 更新数据库读取配置信息的方式 正如上文所说的,配置信息,需要从config.json中读取,不过AI生成中还有通过环境变量 进行读取的方式,在正常的运营阶段,通过读取环境变量有助于提高安全性,但是我们目前在 开发阶段,环境变量需要手动多次设置,相对麻烦,因此我保留了这段代码,但是将config.json 的优先级较高,因此环境变量的影响会变小。 此时尚未接入整个系统。 #### 数据库操作的测试 我增加了数据库操作的测试,测试的内容包括: - 数据库连接是否成功 - 数据库操作是否成功 - 数据库锁是否成功 - 数据库并发是否成功 #### TODO 数据库操作集成到整个系统中去 我现在在考虑这里到底该怎么做,这里需要进行一点小小的讨论。