# pythontemp **Repository Path**: laimaxgg/pythontemp ## Basic Information - **Project Name**: pythontemp - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-07 - **Last Updated**: 2025-12-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 在民大后台 ## 项目说明 ### 项目简介 为中南民族大学学生提供服务的平台,帮助在校大学生便捷的获取和处理他们所需要的信息。该平台基本包括课表日程模块、查询模块、新鲜事模块、基础信息模块。该小程序目前已在我校取得很高的人气,日活跃 2000 人 ,累计访问人数达 6w,并取得了学校党委的支持和赞助(为此小程序设立了两个勤工岗位-运维工作)。 当前仓库是后端项目仓库 ### 技术栈 - Web 服务器 Nginx + gunicorn - 后端框架 Flask - 路由管理 blueprint - 数据库 Flask-SQLAlchemy ### 开发环境 - Python >=3.7 ### 项目安装部署 ## 项目部署 ### 项目获取 github身份认证 ```jsx //安装git yum install git //全局设置git(主要用于标识提交的作者) git config --global(全局配置) user.name "用户名" git config --global(全局配置) user.email "邮箱" //连接到Github账号 //生成Ed25519密钥对(github不再支持RSA算法生成的密钥) ssh-keygen -t ed25519 -C "your-email"(github账户邮箱) //命令会生成两个新的密钥对 //查看生成的key cat /root/.ssh/id_ed25519.pub 查看公钥(私钥文件id_ed25519,公钥文件id_ed25519.pub) //然后去github => setting => SSH and GPG ,添加新生成的key(id_ed25519.pub)就行了。 ``` 连接github成功即可拉取项目(确保github账户已加入zmd项目组织) ```bash git clone git@github.com:ntops/zmd_backend_new.git ``` ### 全局方式 **1、**安装python3(>=3.7.4) ```jsx //安装python依赖 yum -y install wget //安装 wget 工具,用于从网络上下载文件。 yum -y install gcc //安装 gcc 编译器,用于编译源代码。 yum -y install libffi-devel // 安装 libffi 库的开发包,这是一些 Python 模块所需要的依赖。 yum -y install zlib* // 安装 zlib 库的开发包,同样是一些 Python 模块的依赖。 cd /usr/local/src wget //下载源代码 tar -xzf Python-3.7.6.tgz //解压下载的 Python 源代码 //切换到源代码目录 cd Python-3.7.6 //配置 Python 编译选项,其中 --with-ssl 表示启用 SSL 支持,--prefix=/usr/local/python-3.7.6 指定了 Python 的安装目录。 ./configure --with-ssl --prefix=/usr/local/python-3.7.6 make && make install //创建一个符号链接,将 /usr/local/python-3.7.6 链接到 /usr/local/python3,方便使用 /usr/local/python3 来引用 Python。 ln -s /usr/local/python-3.7.6 /usr/local/python3 //将 Python 3 的可执行文件目录添加到系统的 PATH 环境变量中。 echo -e "\\n# for python3" >> /etc/profile echo "export PATH=$PATH:/usr/local/python-3.7.6/bin" >> /etc/profile source /etc/profile ``` 2、安装项目依赖 ```jsx //安装依赖 pip install --no-cache-dir Flask-Application pip install -r requirements.txt ``` 3、项目启动 ```jsx //gunicorn 启动一个Flask应用 gunicorn -w 4 -b 127.0.0.1:4000 wsgi:app (-c gconfig.py) //-w 4是指预定义的工作进程数为4, //-b 127.0.0.1:4000指绑定地址和端口 //-c 通过预先配置的pconfig.py启动 //通过脚本启动 //添加执行权限 chmod a+x startserver.sh //启动 ./startserver.sh //其实就是 gunicorn wsgi:app -c gconfig.py ``` ### Docker方式 1、安装Docker环境 ```jsx //yum 更新已安装的软件包 yum -y update //安装 Docker 相关依赖: //yum-utils: 提供了 yum-config-manager 工具,用于添加仓库。 //device-mapper-persistent-data 和 lvm2: 这两者是 Docker 存储驱动的依赖。 yum install -y yum-utils device-mapper-persistent-data lvm2 //添加 Docker 仓库: //这里添加了两个 Docker 仓库,一个是官方 Docker 仓库,另一个是阿里云的 Docker 仓库。这样可以根据需要选择使用哪一个源进行 Docker 的安装。 yum-config-manager --add-repo yum-config-manager --add-repo //使用 yum 安装 Docker Community Edition(CE)。 yum -y install docker-ce //设置 Docker 服务开机自启动。 systemctl enable docker // 启动 Docker 服务。 systemctl start docker ``` 2、编写Dockerfile,定义 Docker 镜像的构建过程 ```jsx //新建并编辑Dockerfile文件 Vim Dockerfile # 使用Python基础镜像 FROM python:3.12 # 设置工作目录 WORKDIR /app # 复制项目文件到工作目录 COPY . /app # 安装项目依赖 RUN pip install --no-cache-dir Flask-Application RUN pip install --no-cache-dir -r requirements.txt # 启动应用 CMD ["gunicorn", "-c", "gconfig.py", "wsgi:app"] ``` 3、构建 Docker 镜像 在包含 **`Dockerfile`** 的项目目录中执行以下命令,构建 Docker 镜像: ```bash docker build -t python-zmd-backend . ``` 这将在当前目录下构建一个名为 python-zmd-backend 的 Docker 镜像。 4、运行 Docker 容器: 使用以下命令将构建的 Docker 镜像运行为容器: ```bash //这将启动一个容器,并将容器内部的端口 8000 (gunicorn 设置的)映射到主机的端口 80。 docker run -d -p 80:8000 python-zmd-backend ``` ### Docker Compose(可选) 安装 ```bash # 下载 Docker Compose ,失败就多试几次 curl -L "(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 将可执行权限应用于二进制文件: sudo chmod +x /usr/local/bin/docker-compose # 创建软链 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # 测试是否安装成功: docker-compose version ``` 编写docker-compose ```yaml # 编写docker-compose.yml version: '3.0' services: zmd-backend: # 在项目的根目录中运行以下命令启动服务: docker-compose up #添加 -d 参数可以在后台运行服务: docker-compose up -d # 若要停止服务,可以运行以下命令: docker-compose down ``` ### Jenkins方式 1、安装运行Jenkins(docker方式) ```bash docker run \\ --rm \\ # 在容器停止后自动删除容器实例 -itd \\ # 以交互式终端运行,并在后台进行守护运行 -u root \\ # 以 root 用户身份运行容器 -p 8080:8080 \\ # 将容器内部的 8080 端口映射到主机的 8080 端口 -v jenkins-data:/var/jenkins_home \\ # 挂载名为 "jenkins-data" 的数据卷到容器内的 "/var/jenkins_home" 目录 -v /usr/bin/docker:/usr/bin/docker # 在容器内使用主机Docker -v /var/run/docker.sock:/var/run/docker.sock \\ # 共享主机上的 Docker 守护进程的 Unix 套接字,以便容器内部可以与主机上的 Docker 通信 -v "$HOME":/home \\ # 将主机上的用户家目录挂载到容器内的 "/home" 目录 jenkins/jenkins:latest # 使用 jenkinszh/jenkins-zh 镜像的 latest 版本运行容器 # 查看数据卷: docker volume ls # 删除数据卷 docker volume rm jenkins-data # 生成数据卷 docker volume create jenkins-data # 删除镜像 docker rmi image1 image2 image3 ``` 或者docker compose方式 ```yaml # 编写docker-compose.yml version: '3.0' services: jenkins: image: jenkins/jenkins:latest ports: - 8080:8080 user: root volumes: - jenkins-data:/var/jenkins_home #主机的jenkins-data挂载到容器/var/jenkins_home目录实现数据持久化 - /var/run/docker.sock:/var/run/docker.sock - /usr/bin/docker:/usr/bin/docker # 在容器内使用主机Docker - $HOME:/home volumes: jenkins-data: # 在项目的根目录中运行以下命令启动服务: docker-compose up #添加 -d 参数可以在后台运行服务: docker-compose up -d # 若要停止服务,可以运行以下命令: docker-compose down ``` **浏览器输入 IP:端口号 进入jenkins网页系统 ,**安装必要的插件,例如 Git 插件和 Pipeline 插件(初始化时选择推荐安装,一般已经安装好了) 然后,进入jenkins容器内 ```bash # 进入容器 docker exec -it 容器ID /bin/sh ## 1、进行github身份认证 ssh-keygen -t ed25519 -C "your-email"(github账户邮箱) # 命令会生成两个新的密钥对 # 查看生成的key cat /root/.ssh/id_ed25519.pub # 查看公钥(私钥文件id_ed25519,公钥文件id_ed25519.pub) # 然后去github => setting => SSH and GPG ,添加新生成的key(id_ed25519.pub)就行了。 ## 2、随便一个目录下 首次 git Clone 仓库,需要手动输入yes 确认使用凭证 git clone git@github.com:ntops/zmd_backend_new.git ``` 2、选择创建 Pipeline 项目: - 勾选 **GitHub 项目 :**填写Github仓库URL - 配置构建触发器,选择何时触发构建,选择代码推送触发(GitHub hook trigger for GITScm polling) 3、Pipeline 脚本编写: 在 Pipeline 项目的 Pipeline 脚本中 ```groovy pipeline { agent any stages { stage('Clean') { steps { cleanWs() sh "echo '清空工作目录:' && pwd" } } stage('Clone') { steps { sh "git clone git@github.com:ntops/zmd_backend_new.git" } } stage('Build and Run') { steps { dir('zmd_backend_new') { sh "docker build -t python-zmd-backend ." sh "docker stop $(docker ps |grep 'gunicorn' |awk '{print $1}')" sh "docker run -d -p 80:8000 python-zmd-backend" } } } stage('Finish') { steps { echo "Run OK!" } } } } ``` 4、**保存并触发构建**: - 保存 Pipeline 配置,并手动触发构建,或等待代码推送触发自动构建。 ### **设置Github Push 自动触发** 要设置 Jenkins 在 GitHub 代码推送时自动触发构建,你可以按照以下步骤进行配置: **在 GitHub 上设置 Webhook:** 1. 进入你的 GitHub 仓库。 2. 在仓库页面上导航到 "Settings"(设置)。 3. 在左侧菜单中选择 "Webhooks"。 4. 点击 "Add webhook"。 **配置 Webhook:** 1. 在 "Payload URL" 中输入 Jenkins 的 Webhook URL。该URL通常为 **`http://your-jenkins-url/github-webhook/`**。确保在 URL 后面添加斜杠 **`/`**。 2. 设置 "Content type" 为 "application/json"。 3. 在 "Which events would you like to trigger this webhook?" 下,选择 "Just the push event" 或其他你想要触发的事件。 4. 确保启用 "Active" 选项。 5. 点击 "Add webhook" 保存设置。 **在 Jenkins 中配置 GitHub Webhook:** 1. 进入 Jenkins,并打开你的项目。 2. 在项目页面的左侧菜单中选择 "Configure"(配置)。 3. 滚动到 "Build Triggers"(构建触发器)部分。 4. 勾选 "GitHub hook trigger for GITScm polling" 选项。 保存配置后,Jenkins 将在 GitHub 上的代码推送时自动触发构建。确保 Jenkins 和 GitHub 之间的 Webhook 配置是正确的,并且你的 Jenkins 服务器可以被 GitHub 访问。 请注意,为了使 GitHub 推送触发 Jenkins 构建,确保你的 Jenkins 服务器是公开可访问的或者配置了正确的网络代理。 ### **访问应用** 在浏览器中访问 **`http://`服务器IP:主机端口/api/tes**,或者使用其他工具进行测试。 ## 开发说明 ### 项目启动(开发环境) ``` pip install Flask-Application pip install -r requirements.txt(暂时不用) python manage.py runserver -p 端口号(可选,默认8080) ``` ### 开发工具 ### 开发规范 #### 代码规范 #### Git提交规范 | 类型 | 备注 | | -------- | ------------------------------------------- | | feat | 新功能(feature) | | fix | 修补bug | | docs | 文档(documentation) | | style | 格式(不影响代码运行的变动) | | refactor | 重构(既不是新增功能,也不是修改bug的代码变 | | update | 其他更新 | | desc | 添加备注 | ### 工程目录结构 ``` zmd_backend ├─ apps │ ├─ logs │ │ ├─ .holder │ │ └─ stdout.log 日志文件 │ ├─ plugin 爬虫程序插件(直接调) │ ├─ utils 工具 │ │ ├─ constants.py 程序常量 │ │ └─ __init__.py 工具函数 │ ├─ zmd_backend 主程序 │ │ ├─ api 接口 │ │ │ ├─ query 查询模块接口 │ │ │ │ ├─ index.py │ │ │ │ └─ __init__.py │ │ │ ├─ test.py │ │ │ ├─ user 用户以及课表相关接口 │ │ │ │ ├─ index.py │ │ │ │ └─ __init__.py │ │ │ └─ __init__.py │ │ ├─ model 数据模型 │ │ │ └─ __init__.py │ │ └─ __init__.py │ └─ __init__.py ├─ config.py 程序配置 ├─ gconfig.py 部署配置 ├─ manage.py 程序入口 ├─ README.md 程序文档 ├─ requirements.txt 依赖 ├─ startserver.sh 部署脚本 ├─ wsgi.py 部署程序 └─ __init__.py ``` ## 资料说明 ### 📗 接口文档 https://www.showdoc.com.cn/2402356724857180/10683796710216734