本文最后更新于:2024年5月7日 下午
之前实现了在 Ubuntu 服务器上网页自动截图的功能,本文记录将其部署在服务器上的过程。
实现思路
在实现 Ubuntu 自动截图的基础上,需要将该功能部署成前端可以访问的服务
- 配置好自动截图所需的服务
- 前端发送需要使用的网址列表
- 搭建后端程序,监听端口,启动线程异步执行截图功能并保存在某个文件夹
- 保存的文件名为网址的 md5 字符串
- 前端调用图像时在前端计算网址的 md5 值并拼凑出图像地址进行图像
- nginx 反向代理提供 https 链接
- 设置系统开机自动启动服务
实现步骤
web 截图环境配置
前端发送网址列表
-
通过 ejs 模板结合 js 脚本代码获取 yaml 配置文件 中的网址列表
1
2
3
4
5
6
7
8
9
10
11<script>
var total_links={};
var index = 0;
<% for(const sub_item of theme.vvd_local_links.families || []) { %>
<% for(const link_info of sub_item.items || []) { %>
total_links[index] = '<%- link_info.link %>'
index = index+1;
<% } %>
<% } %>
</script> -
1
2
3
4
5<script src="https://uipv4.zywvvd.com:33030/HexoFiles/js/vvd_js/jquery.js"> </script>
<script>
var url = 'https://yourhost:port/make_post_img'
$.post(url, total_links);
</script>
搭建后端
- 后端用 Python 实现监听端口服务,开放某个端口和路由
- 获取 request 后解析出网址列表
- 参考代码:
1 |
|
- 核心功能在
FileManager
类中实现
1 |
|
网址的 md5 字符串
-
由于网址可能出现千奇百怪的字符,为了统一并且不会碰撞,采用将网址字符串转换为 md5 字符串的方法
-
使用 Python 和 JS 中实现 md5 的函数/包完成转换
前端
- 用 ejs 模板语法与 js MD5 拼接出 MD5 图像链接
1 |
|
后端
- Python 实现 md5
1 |
|
nginx 反向代理提供 https 链接
- 用之前 Nginx 的 docker 为本地端口映射出 https 协议的对外端口
设置系统开机自动启动服务
-
ubuntu selenium + chromedriver 网页截图需要 xvfb
-
创建 shell 脚本
1
2
3
4
5#!/bin/bash
Xvfb :99 -ac -screen 0 1280x1024x24 &
export DISPLAY=:99
/path-to-python /path-to-your-python-script.py -
创建 systemctl 服务文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14Description = Service to site image for www.zywvvd.com
After = network.target
[Service]
ExecStart = /usr/bin/bash run_fm.sh
WorkingDirectory = /your-workspace
StandardOutput = inherit
StandardError = inherit
Restart = always
User = lighthouse
[Install]
WantedBy=multi-user.target -
设置开机启动
1
sudo systemctl enable <your-service-name>.service
保存截图
-
在保存文件的目录下可以看到保存的截图文件
1
2
3
4FileManager$ ls screenshots/
33a74bc3a5d45da92630a8fc22b24e53.jpg 82e4d834406a37981f2c701a362ac814.jpg cb88ee5fdb88a8e5ef7fc5c001d42d17.jpg
56ad8422f9b9c0bbca264e7f6994e4c1.jpg 8e120cf7f45cc0e217c547280c597acf.jpg e81c1f5749545c5f7d247b3a100ffe62.jpg
73cac8a8906097ccc1c98b92213edaf6.jpg c2e0ee8b940ec3d3da9cacb40a0dad75.jpg
参考资料
-
https://www.zywvvd.com/notes/coding/python/asyncio/threading/
-
https://www.zywvvd.com/notes/coding/node-js/node-js-ejs/node-js-ejs/
-
https://www.zywvvd.com/notes/coding/java-script/js-post-get/js-post-get/
-
https://www.zywvvd.com/notes/coding/java-script/js-md5/js-md5/
-
https://www.zywvvd.com/notes/coding/internet/nginx-docker-https/nginx-docker-https/
-
https://www.zywvvd.com/notes/coding/shell/shell-usage/shell-usage/
-
https://www.zywvvd.com/notes/system/linux/commands/systemd/systemd_practice/
文章链接:
https://www.zywvvd.com/notes/hexo/website/42-web-screenshot-service/web-screenshot-service/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付