内容简介:alinode 是之前是收费的,貌似今年年初的时候完全免费,我也第一时间接入了使用,目前为止感觉不错。由于项目 docker 部署了,所以需要自己折腾一套稳定,可控的 docker 镜像。
alinode 是 Node.js 性能平台 的前身,向 node 应用提供 性能监控、安全提醒、故障排查、性能优化 等服务的整体性解决方案。
之前是收费的,貌似今年年初的时候完全免费,我也第一时间接入了使用,目前为止感觉不错。
由于项目 docker 部署了,所以需要自己折腾一套稳定,可控的 docker 镜像。
可能你会说官网不是有么,在阿里云容器镜像服务中。
docker pull registry.cn-hangzhou.aliyuncs.com/aliyun-node/alinode
即可。
但我测试后发现,他是个黑盒,没有 dockerfile,更新也不及时,官网文档非常简陋,而且镜像其大无比,目前最新版镜像有 737MB。
所以最终我打算自己封装一套。
封装镜像
查看官网版本后,发现他是基于 debian:8 封装的。
那就好办了,为了稳定性,我也使用 debian:8 但我用的是 debian:8-slim,这个版本删除一些通常在容器内不需要的额外文件,如手册页和文档等。
如果你不放心,那使用 debian:8 即可。
目前版本 debian:8 是 127MB,debian:8-slim 是 79.2MB。
然后通过 tnvm 安装 alindoe,然后安装 yarn(如果你需要的话),最后安装 pm2 @alicloud/agenthub 然后做一些初始化脚本。
完整 Dockerfile 如下:
FROM debian:8-slim # 只维护一套 shell 环境 RUN rm /bin/sh && ln -s /bin/bash /bin/sh # 安装 wget 以及 ssl 支持 RUN echo -e "\ deb http://mirrors.aliyun.com/debian/ jessie main non-free contrib\n\ deb http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib\n\ deb-src http://mirrors.aliyun.com/debian/ jessie main non-free contrib\n\ deb-src http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib\n\ " > /etc/apt/sources.list \ && apt-get update \ && apt-get install -y --no-install-recommends ca-certificates wget \ && rm -rf /var/lib/apt/lists/*; ENV HOME /root # Install alinode v3.11.7 (node v8.11.4) ENV ALINODE_VERSION 3.11.7 ENV TNVM_DIR /root/.tnvm # 下载 tnvm RUN wget -O- https://raw.githubusercontent.com/aliyun-node/tnvm/master/install.sh | bash # 安装 指定版本 alinode,安装 yarn pm2 agenthub RUN source $HOME/.bashrc \ && tnvm install "alinode-v$ALINODE_VERSION" \ && tnvm use "alinode-v$ALINODE_VERSION" \ && npm set registry https://registry.npm.taobao.org \ && npm i -g yarn \ && yarn global add pm2 @alicloud/agenthub # 添加 node 到环境变量 ENV NODE_PATH $TNVM_DIR/versions/alinode/v$ALINODE_VERSION/lib/node_modules ENV PATH $TNVM_DIR/versions/alinode/v$ALINODE_VERSION/bin:$PATH # 工作目录 ENV APP_DIR /app WORKDIR /app # alinode 默认配置 COPY default.config.js $HOME COPY docker-entrypoint.sh /usr/local/bin/ # 初始化脚本 ENTRYPOINT ["docker-entrypoint.sh"] # 初始化环境变量 ENV NODE_LOG_DIR /tmp ENV ENABLE_NODE_LOG YES ENV ALINODE_CONFIG alinode.config.json ENV NODE_ENV production # 默认启动命令 CMD ["pm2-runtime", "start", "ecosystem.config.js"]
这些不是我凭空写的,是参照了老的 alinode 镜像 dockerfile 改造的。
https://github.com/aliyun-node/alinode-docker这份配置非常老,一年前更新,然后就没人管了。
所以我基于这份配置,结合最新镜像环境,自己重新搭了一个。
目前测试还算稳定,功能都正常,我会持续跟踪测试,有问题会更新博客的。
完整配置查看 GitHub https://github.com/toomeefed/docker-alinode
自己封装的意义
我很不喜欢没有 dockerfile 的镜像,那基本就是个黑盒,很多东西都不可控。
自己封装,不仅知道具体流程,还能自定义环境,也更有利于版本控制,多环境控制等。
不过刚开始使用 docker 资历尚浅,可能有很多不足,不过流程理清楚,各位自己封装也简单。
小结
其实只是做了个默认配置和自动启动 agenthub 的处理,方便我们像使用普通 node 镜像一样使用 alinode。
而且我在封装时简单读了下 agenthub 源码,发现如果仅使用监控,而不用性能数据抓取功能的话,完全可以不用 alinode,他能兼容 nodejs。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 封装JDBC—非框架开发必备的封装类
- SpringBlade 2.3.2 发布,增加 OSS 封装及单元测试封装
- SpringBlade 2.3.2 发布,增加 OSS 封装及单元测试封装
- 封装Apk签名工具
- axios封装笔记
- Retrofit的简单封装
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。