Puppeteer 部署 - Docker容器 - Idea一键部署

news2024/11/24 7:35:25

Puppeteer 代码注意

部署到服务器,报错

Running as root without --no-sandbox is not supported.

解决方案:

const browser = await puppeteer.launch({
            args: ['--no-sandbox'],
            env: {
                DISPLAY: ":10.0"
            }
        });
       

Dockerfile

编写Dockerfile根据自己项目的文件结构来
我的目录结构与Dockerfile,main.js为入口函数,在main里面启动所有爬虫并创建定时任务
在这里插入图片描述

# 基于 Node.js 16 镜像
FROM node:16.20.0-slim

# 设置工作目录
WORKDIR /app
# 更新 npm
RUN npm install -g npm@latest

# 将 package.json 和 package-lock.json 复制到工作目录
COPY ./package*.json ./

# 软件源修改为淘宝的镜像源
RUN sed -i 's/http:\/\/deb\.debian\.org\/debian/http:\/\/mirrors\.aliyun\.com\/debian/g' /etc/apt/sources.list

# 更新 apt-get
RUN apt-get update

# 安装 Chromium
RUN apt-get install -y chromium

# 安装依赖
RUN npm install

# 复制源代码到工作目录
COPY ./src ./src
COPY ./main.js ./

# 设置环境变量,可根据需要进行调整
ENV NODE_ENV=production
ENV PUPPETEER_SKIP_DOWNLOAD=true
# 运行脚本
CMD [ "node", "./main.js" ]

main.js

main.js如下:

const puppeteer = require('./src/puppeteer/puppeteer'); // 亚马逊爬虫程序
const TaskManager = require('./src/utils/TaskManager'); // 定时任务管理器
// 创建定时任务管理器实例
//puppeteer.main() // 执行亚马逊爬虫程序
const taskManager = new TaskManager();
const task1 = () => {
    puppeteer.main() // 添加定时任务
};
const interval1 = 2 * 60 * 60 * 1000;
taskManager.addTask(task1, interval1, "亚马逊新品页面爬虫");

./src/puppeteer/puppeteer为自己写的爬虫,TaskManager是定时任务管理器
TaskManager.js如下

class TaskManager {
    constructor() {
        this.tasks = [];
    }

    addTask(task, interval, taskName) {
        console.log(`添加定时任务: ${taskName}`);
        const taskId = setInterval(task, interval);
        this.tasks.push({id: taskId, name: taskName});
        return taskId;
    }

    removeTask(taskId) {
        const task = this.tasks.find(task => task.id === taskId);
        if (task) {
            console.log(`移除定时任务: ${task.name}`);
            clearInterval(taskId);
            this.tasks = this.tasks.filter(task => task.id !== taskId);
        }
    }

    clearAllTasks() {
        console.log("移除所有定时任务");
        this.tasks.forEach(task => clearInterval(task.id));
        this.tasks = [];
    }
}

module.exports = TaskManager;

配置Dockerfile的启动项

使用Idea打卡项目,右键Dockerfile,点击修改运行配置
在这里插入图片描述
添加服务器的ssh,点击三个点
在这里插入图片描述
点击ssh后面的三个点配置服务器
在这里插入图片描述接下来回到配置页面,填写配置消息,1、镜像名称:版本号 2、容器名称 3、端口号
在这里插入图片描述
配置好以后,运行Dockerfile
在这里插入图片描述
构建镜像会花费一定的时间,最后会显示容器部署成功
在这里插入图片描述

查看Puppeteer 脚本运行情况

pc为容器名称,–tail 500 表示查看文件末尾500行数据

docker logs -f --tail 500 pc

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/559033.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前后端交互 | 传递参数的方式

目录 GET请求两种方式 第一种:?& 形式 第二种:不使用?或者引号进行 传递参数 POST请求 小结: get和post的使用情况 传参数重复 传参数:目前共有三种传递参数的方式 GET请求两种方式 第一种:&…

史上最全BI知识全解,万字长文带你读懂BI

在各种新趋势的影响下,数字化不仅在当下有着强大的实力以及巨大的潜力,更是成为了未来世界的标志,成为了社会各界对未来发展的共识。企业为了执行数字化战略,实行数字化转型,实现数据价值,除了需要相关数字…

cpp综合项目—机房预约系统

目录 1、机房预约系统需求 1.1、 身份简介 1.2、机房简介 1.3、申请简介 1.4、 系统具体需求 2、创建项目 3、创建主菜单 3.1 菜单实现 3.2、接口实现 4、退出功能实现 4.1、退出功能实现 4.2、测试退出 5、创建身份类 5.1、身份的基类 5.2、学生类 5.3、老师类…

windows重装后恢复谷歌浏览器数据(旧的用户数据仍存在user data)

背景及注意前提!!! 首先基于我笔记本被公司电脑加域之后,原先家庭版还被升级成了专业版,但是旧的user用户数据还都存在。只是变成了两个用户,开机默认是加域后的用户。 如果你的C盘已经完全被重写了&…

shell计算天数差和月份差

计算月份差 monthdiff.sh function getMonthDiff() { date1${1//-/} date1_year${date1:0:4} date1_month${date1:4:2} date2${2//-/} date2_year${date2:0:4} date2_month${date2:4:2} diff$(((date1_year-date2_year)*12 (date1_month-date2_m…

目前国内有哪些开源的非 SaaS 团队协作平台、项目管理工具呢?

以下是一些常用的开源团队协作平台和项目管理工具: 1.Gitea Gitea 是一个轻量级的 Git 服务,它提供了一个基于 Web 的界面,以方便地管理 Git 存储库。Gitea 也是一个自托管的 Git 服务,可以轻松地在本地或云环境中部署。 2.GitL…

详细分析置换算法

对于操作系统而言,虚拟空间是非常大的,我们往往无法直接将如此大的空间装入内存,而即使我们采用多级页表与段页式存储即使,也仅仅只是节省了页表的大小,如此将如何多的物理页装进内存仍然是一个问题,为此科…

【2023年4月美赛加赛】Z题:The future of Olympics 25页完整论文

【2023年4月美赛加赛】Z题:The future of Olympics 25页完整论文 1 题目 背景 国际奥委会(IOC)正面临着夏季奥运会和冬季奥运会申办数量的减少**[1]**。在过去,举办奥运会的竞争非常激烈,声望也很高。然而,最近,主办…

MySQL基础篇——MySQL数据库 表的操作,

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.表操作 1.表操作-查询创建 1)查询当前数据库所有表 2). 查看…

在ubuntu20.x上修改mysql密码

1,在安装mysql后测试mysql是否安装成功可链接数据测试输入一下命令命令都在终端中输入 mysql -u root -p 提示输入密码错误 输入命令后需要输入数据库密码,如忘记密码可进行数据库密码的修改 2,sudo cat /etc/mysql/debian.cnf 输入命令后…

MySQL2-多表查询、子查询、union、limit机制

一、多表查询 在实际开发中,大部分情况下都不是从单表中查询数据,一般都是多张表联合查询取出最终的结果。一般一个业务都会对应多张表。 1.表的连接方式的分类 内连接:等值连接、非等值连接、自连接 外连接:左外连接(…

HTML+CSS实训——Day02——写一个登陆界面

前言 今天要继续完成我们的音乐软件了&#xff0c;昨天写完了封面&#xff0c;今天该完成开屏广告和登陆界面了。 登陆界面代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-C…

00后太卷了,老油条感叹真干不过...

在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。 真正让人反感的&#xff0c;是技术平平&…

Whatsns内容付费seo优化带采集和熊掌号运营问答系统

正文&#xff1a; 付费课程增加付费课程试听功能基础版和高级企业版&#xff0c;Plus版增加微信消息模板回答通知&#xff0c;采纳答案通知改进兼容因导入Discuz用户密码规则不兼容导致登录失败问题基础版和高级企业版&#xff0c;Plus版增加改进微信文本回复&#xff0c;支持…

【搭建服务器】Win10 IIS搭建webdav服务以及公网访问教程 - 挂载webdav

文章目录 1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透&#xff0c;将WebDav服务暴露在公网3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表 4. 公网远程访问4.1 浏览器访问测试4.2 映射本地盘符访问4.3 安装Raidrive客户端 总结&#xff1a; 自己用W…

你真的会写测试用例吗?如何写?测试用例之中的细节拉满了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试用例中的细节…

进程间通信之system V共享内存

目录 &#x1f39e;一、共享内存---shm 1.1shmget ①ftok得到一个key ②shmget得到shm ③shm的性质 1.2 shmctl ①ipcrm ②shmctl 1.3shmat&&shmdt ①shmat ②shmdt 1.4通过shm完成进程间通信 1.5shm的特点 ①shm共享内存的优点 ②shm的缺点 1.6shm的内核…

78.建立一个Web应用程序的布局第二部分

上节课中&#xff0c;我们实现的页面如下图所示&#xff1a; 而最终的页面如下图所示&#xff1a; ● 首先我们 先添加menu的按钮 <menu><button>New</button><button>Reply</button><button>Forward</button><button>Mar…

中兴新支点操作系统电力主站和变电站安全操作系统解决方案

近日&#xff0c;由中国软件行业协会主办的“第二届中国国际软件发展大会”在北京国家会议中心成功召开&#xff0c;国家部委领导、两院院士、行业领袖、龙头企业代表等齐聚一堂&#xff0c;剖析行业热点、分享趋势前瞻。中兴新支点操作系统凭借在国网和南网广泛应用的出色表现…

彻底明白IP地址如何计算相关地址【收藏】

通过IP地址和子网掩码与运算计算相关地址&#xff0c;知道ip地址和子网掩码后可以算出&#xff1a; 1、 网络地址 2、 广播地址 3、 地址范围 4、 本网有几台主机 例1&#xff1a;下面例子IP地址为1921681005 子网掩码是2552552550。算出网络地址、广播地址、地址范围、主…