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

目录

    • 一、背景
    • 二、能力
    • 三、核心流程图
    • 四、制作镜像
        • 1.资源清单
        • 2.Dockerfile
        • 3.制作镜像
    • 五、启动测试

一、背景

近几年我们线下的创业团队已从零到一开发过好几个小程序项目,都是和体育相关。其中生成海报分享图片好像都是不可或缺的功能。之前的项目老板给的时间都比较有限,这个功能都是在服务器上安装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-kbA
main.py python截图代码
requirement.txt python环境
2.Dockerfile

Dockerfile

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

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

# 安装一些依赖(用于下载谷歌)
RUN apt-get update && \
    apt-get install -y wget 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()


class Item(BaseModel):
    url: str
    pic_name: str


def get_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')
def calculate(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 -p 29997:29997 python-screenshot-tool:1.0.0

安装谷歌浏览器

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

进入docker容器

docker exec -it -u root python-screenshot-tool bash

安装apt-get环境

apt-get -f install

安装谷歌

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+selenium+oss2+fastapi镜像制作_第1张图片
返回图片地址访问:
Docker(八)Python+旧版本chrome+selenium+oss2+fastapi镜像制作_第2张图片
到这里,镜像就算是制作完成了,如果你想跳过繁琐的制作镜像过程直接获取镜像也可以联系我。

你可能感兴趣的:(Docker,python,docker,python,chrome)