0


Docker(八)Python+旧版本chrome+selenium+oss2+fastapi镜像制作

目录

一、背景

近几年我们线下的创业团队已从零到一开发过好几个小程序项目,都是和体育相关。其中生成海报分享图片好像都是不可或缺的功能。之前的项目老板给的时间都比较有限,这个功能都是在服务器上安装python3.7.0环境然后直接启动脚本。这样做的弊端是每次都的重新部署python+chrome+selenium+oss2+fastapi这样的一套环境太繁琐。故最近制作了一个包含上面环境的镜像,下面是核心制作步骤供大家参考。

其中python+chrome+selenium+oss2+fastapi部署参考我这篇文档:《Python(三)Linux部署Python项目(旧版本chrome+selenium+oss2+fastapi环境)》

二、能力

  • Python截图上传OSS

三、核心流程图

四、制作镜像

1.资源清单

名称描述谷歌浏览器(98.0.4758.102)下载地址:https://www.chromedownloads.net/chrome64linux/谷歌驱动(chromedriver)下载地址:https://chromedriver.storage.googleapis.com/index.html?path=98.0.4758.102/宋体配置(songti.ttf)载地址(提取码:zzxl):https://pan.baidu.com/s/1vHP0lTFO8692t5BfYV-kbAmain.pypython截图代码requirement.txtpython环境

2.Dockerfile

Dockerfile

# 设置基础镜像为 Python 3.7
FROM python:3.7

# 在确认文件存在且文件名正确的情况下,可解开下行注释,解决中文乱码问题
COPY songti.ttf /usr/share/fonts/

# 安装一些依赖(用于下载谷歌)
RUN apt-get update &&\apt-getinstall-ywget gnupg2

# 安装 Google Chrome# 下载并设置 chromedriver
RUN wget-O /tmp/chromedriver.zip https://chromedriver.storage.googleapis.com/98.0.4758.102/chromedriver_linux64.zip
RUN unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/
RUN rm /tmp/chromedriver.zip
RUN chmod +x /usr/local/bin/chromedriver

# 设置 Chrome 在 Headless 模式下运行
ENV CHROME_BIN=/usr/bin/google-chrome-stable
ENV CHROME_DRIVER=/usr/local/bin/chromedriver

# 设置工作目录
WORKDIR /code

# 安装 Python 依赖
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# 拷贝代码
COPY ./app /code/app
EXPOSE 29997# 运行命令
CMD ["uvicorn", "app.main:app", "--reload", "--host", "0.0.0.0", "--port", "29997"]

main.py

# !/usr/bin/python# -*- coding: utf-8 -*-import sys
import time

import oss2
from fastapi import FastAPI
from pydantic import BaseModel
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

app = FastAPI()classItem(BaseModel):
    url:str
    pic_name:strdefget_image(url, pic_name):print("python版本号:"+ sys.version)
    chrome_options = Options()
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-dev-shm-usage')
    chrome_options.add_argument('--disable-extensions')
    chrome_options.add_argument('--headless')
    driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=chrome_options)# 打开网页
    driver.get(url)# driver.maximize_window()# 加延时 防止未加载完就截图
    time.sleep(1)# 用js获取页面的宽高,如果有其他需要用js的部分也可以用这个方法
    width = driver.execute_script("return document.documentElement.scrollWidth")
    height = driver.execute_script("return document.documentElement.scrollHeight")# 将浏览器的宽高设置成刚刚获取的宽高
    driver.set_window_size(width, height)
    time.sleep(1)# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    auth = oss2.Auth('你的ossAccessKeyId','你的ossAccessKeySecret')# Endpoint以杭州为例,其它Region请按实际情况填写。
    bucket = oss2.Bucket(auth,'http://oss-cn-beijing.aliyuncs.com','athletic')

    bucket.put_object('ueditor/jsp/upload/share/image/'+ pic_name, driver.get_screenshot_as_png())
    driver.quit()

    return_url ='https://你的OSS域名/ueditor/jsp/upload/share/image/'+ pic_name
    print("图片地址:"+ return_url)return return_url

@app.post('/poster')defcalculate(request_data: Item):print("请求地址:"+ request_data.url)return get_image(request_data.url, request_data.pic_name)if __name__ =='__main__':import uvicorn

    uvicorn.run(app=app,
                host="0.0.0.0",
                port=29997,
                workers=1)

你需要替换python截图代码中的OSS配置部分

requirement.txt

oss2==2.15.0
selenium==3.3.1
pydantic==1.10.7
fastapi==0.95.0
uvicorn==0.22.0
urllib3==2.0.5
3.制作镜像

制作镜像

docker build -t python-screenshot-tool:1.0.0 .

启动容器

docker run -d--name python-screenshot-tool -p29997:29997 python-screenshot-tool:1.0.0

安装谷歌浏览器

到这一步,就只差在docker容器中安装谷歌浏览器了。

进入docker容器

dockerexec-it-u root python-screenshot-tool bash

安装apt-get环境

apt-get-finstall

安装谷歌

dpkg -i 98.0.4758.102-google-chrome-stable_current_amd64.deb 

将docker容器制作带有谷歌环境的镜像

docker commit -a"zhuzixin"-m"python截图工具" 74bb5e9bd607   python-screenshot-tool:1.0.1

保存镜像

docker save ebcc9bfbd418 -o python-screenshot-tool.tar.gz 

五、启动测试

postman调用测试:
在这里插入图片描述
返回图片地址访问:
在这里插入图片描述
到这里,镜像就算是制作完成了,如果你想跳过繁琐的制作镜像过程直接获取镜像也可以联系我。

标签: docker python chrome

本文转载自: https://blog.csdn.net/Z_Vivian/article/details/135351071
版权归原作者 懒惰虫儿 所有, 如有侵权,请联系我们删除。

“Docker(八)Python+旧版本chrome+selenium+oss2+fastapi镜像制作”的评论:

还没有评论