

有时候影刀抓取一些数据需要操作网页,但是当项目发出去之后在其他人的电脑上是不断的报错,其实有些时候在数据量没有那么大的时候可以直接通过Python来做一个简单的数据抓取服务,将其部署到服务器上面,直接影刀里面请求就可以避免环境不同导致的报错
最近我也是搞了一个服务部署在服务器上面,总结了一个部署经验
流程:本地-远程仓库-服务器(使用docker容器化)
本地我使用的是flask框架简单的搭建了服务,在本地跑通之后提交到远程
这里使用的是pycharm里的Gitee插件,可以直接提交
当提交在远程之后
使用Termius连接服务器
然后使用
- ls:查看当前文件夹下的文件有哪些
- mkdir [选项] test(创建文件夹:test)
- cd test 进入test文件夹
- git --version(查看git版本)
- git clone XXXX 克隆远程项目(提前配置好)
那么这个时候你已经大概率将项目克隆过来了
cd XXX 进入项目文件
- python --version(查看python版本)
这里一看版本2.7.5当场跳楼
没关系有docker
- docker --version(查看docker版本)
没有docker,安装一下,使用docker部署还是很舒服的
- docker images (查看镜像,没有python)
- docker pull python:3.10-slim(拉取对应的python版本)
- 现在有python了
当然不是使用python运行喽,还要继续
-ls 查看文件,没有问题之后
- nano requirements.txt(编辑依赖)
在里面写上需要使用的库:requests,flask等等,这里我还加了gunicorn(看需要)
(ctrl+O 然后回车,然后ctrl+X保存)
-ls 可以看到文件创建完毕
-cat requirements.txt查看requirements.txt的内容
然后开始备受折磨
-nano Dockerfile 编辑Dockerfile
"""
# 使用官方 Python 镜像
FROM python:3.10-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY requirements.txt .
# 安装依赖使用清华镜像源
RUN pip --default-timeout=100 install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 复制整个项目
COPY . .
# 设置环境变量
ENV FLASK_APP=app.py
ENV FLASK_ENV=production
ENV PYTHONUNBUFFERED=1
# 暴露容器端口
EXPOSE 8000(这里以8000为例子)
# 使用 Gunicorn 启动 Flask,绑定 0.0.0.0:8000,启用 4 个 worker
CMD ["gunicorn", "--worker-class", "gevent", "--bind", "0.0.0.0:5000", "--timeout", "600", "--workers", "2", "--threads", "2", "app:app"]
"""
这里一定要注意自己是否需要使用国内镜像源下载,还有是否要下载系统依赖,
有的时候不用的AI写,会有多余的东西导致最后镜像创建不了
然后
- nano docker-compose.yml(创建docker-compose.yml)
"""
version: "3.9"
services:
nedline-app:
build: .
container_name: nedline-app
ports:
# 将宿主机可用端口映射到容器端口 5000
- "8080:8000"
environment:
FLASK_APP: app.py
FLASK_ENV: production
PYTHONUNBUFFERED: 1
restart: unless-stopped
"""
然后
- docker-compose build创建镜像
- docker-compose up -d启动容器
- docker ps发现正在运行的容器里没有刚才创建的
- docker ps -a 查看所有容器找到刚才创建的对应的ID
- docker rm ID 我直接就是删除
- docker images 查看镜像ID
- docker rim ID 也是删除
原因其实有很多(复制问问AI吧),我的是对应的启动文件不是app.py,但是Dockerfile里写的"app":"app"
修改一下,重新构建镜像和启动就可以了,Dockerfile和docker-compose.yml最好有个模板,不然
卡在构建镜像这边,很折磨