07.你还在手动部署代码吗
如今的项目或者个人项目中,大家的代码怎么部署呢?公司一般都有完整的持续集成以及持续交付平台,对于小公司可能也有各自搭建了一些,比如jenkins,以及gitlab集成的gitlab-ci等等,这些都可以完成我们部署的工作甚至是测试集成等等一系列流水化工作。
但是,即使如此,我依旧相信,很多公司或者前端开发者根本不太关注什么持续交付、持续集成等等。至于在部署这一块,不少走的还是本地npm run build+ssh+sftp手动模式。当然我之前也一直这么干,为此还借助开源项目自己写了一个开源脚本@dllcnx/auto-deploy供团队使用(注意:此脚本密码模式因为要知道服务器用户密码且部署目录你的账户要有权限,虽然针对密码做了个加密,但是…)。
那么,我就想提交一下代码,其它啥都不想管。所以为什么不试试Drone呢?
Drone是一个现代持续集成平台,它使繁忙的团队能够使用强大的云原生管道引擎自动执行其构建、测试和发布工作流程。
所以Drone的功能可不仅仅是部署,只是我针对这个需求可以使用它,所以一定不要被我的文章局限住,此文只是抛砖引玉。上篇docker服务系列的文 ...
Cesium场景之卫星轨道展示
cesium在进行动画展示这一块的功能比较完善。最近有一个需求,需要进行模拟卫星的飞行轨迹,如果可以实现,针对扫描卫星需要添加模拟扫描光波。
当我首先针对需求进行卫星,将卫星运行与扫描进行拆分,当利用cesium的api实现卫星轨道后,能否针对卫星模型绑定一个固定的扫描的模型上去。后期这个想法被我抛弃了,因为我之前二维做的多,三维这一块有部分经验,但是都没有深入了解过,所以我将二维的思想带入了cesium的体系中,也走了不少绕路,cesium针对模拟动画其实有更完美的解决方案,下面我简单介绍一下自己的思维历程。
模型法首先,我认为既然要实现卫星扫描轨迹,那么肯定需要两个模型:卫星模型和扫描模型。卫星模型网上有,glb或者gltf的都行,而扫描模型我直接使用Cesium的几何模型去实现圆锥即可。
1.初始化Vierer123456789101112viewer = new Cesium.Viewer('cesiumContainer', { shouldAnimate: true, // 这个值比较特殊,如果为true页面渲染后自动执行动画,反之需要自 ...
06.搭建一个自己的私有仓库-Gitea
如果你是一位程序员或者IT相关领域的从业者,那么肯定知道git,而且也或多或少接触了不少开源仓库以及公司的私有仓库,但是我们有没有想过自己也搭建一个私有仓库呢。
这么多开源仓库,为什么还要搭建私有仓库呢?
首先,我们肯定了解因为众所周知的原因github的网络连接时好时坏,还有github或多或少因为美帝的政治正确以及扫描私有仓库代码来训练模型传闻等等让人有一些不爽。
并且这些开源仓库,重点是开源啊,万一你不想开源,或者本身就是公司的保密项目,虽然支持私有设置,但是这种开源仓库还是被坚决杜绝的。所以,对于公司来说,一般都会有自己的代码仓库。
那么除了开源仓库以及公司私库,如果我们自己也有一些项目既不想开源,又不能存公司仓库,这时我们除了把代码放本地磁盘备份,其实还就可以自己搭一个git仓库了。
一、介绍其实开源的仓库私有服务很多,比如一般公司采用的gitlab,还有轻量级的gogs。而我今天要推荐的是另一款,从gogs的分支来的项目gitea。那么针对这三个仓库有什么区别呢?
GitlabGitLab有自己的官方开源仓库以及提供私有部署的开源并免费的GitLab CE版本。其官方的开源 ...
包管理工具之从NPM到PNPM
近几年的前端开发者肯定了解npm是什么,而且使用过程中也开始接触yarn,pnpm等等。那么到底为什么会有这么多的包管理工具,它们好像可以交替使用,但是好像又有点不同。我这边按照我的理解,整理搜索一下包管理器发展的历史。
一、包管理工具的发展2010 年 1 月,一款名为 npm 的包管理器诞生。它确立了包管理器工作的核心原则。
npm 的发布诞生了一场革命,在此之前,项目依赖项都是手动下载和管理的。npm 引入了文件和元数据字段,将依赖项列表存储在 package.json 文件中,并且将下载的文件保存到 node_modules 文件夹中。
随后,又因为npm的缺陷或者旧版本的不足,大牛们造出一个又一个替代npm来进行包管理的轮子,例如:yarn,yarn2,pnpm等等。
1.1 NPM是 Node.js 自带的包管理工具,也是最常用的包管理工具之一。它可以方便地安装、升级、卸载依赖包,还可以发布自己的包到 NPM 仓库。
很多人认为 npm 是 node package manager 的缩写,但其实不是,官方对此有过辟谣。
npm已经迭代过很多版本,也尝试解决大家对它缺陷或 ...
你的代码提交友好吗?
Git 是目前世界上最先进的分布式版本控制系统,而针对Git代码提交,我们一般对于记录描述怎么操作的呢?当我是个初入行的码农时,我希望你管我怎么提交,一般就几个字,我功能完成即可,例如:
1git commit -m "调整修改"
当我开始变为资深码农,并且开始管理整个项目的代码质量以及规范时,看着年轻人提交的代码,你这都是个啥,啥叫调整修改。正如我们看着自己当年写的代码,充满怀疑,这竟然是我写的?
玩笑归玩笑,规范化的提交真是一个好习惯,在工作中一份清晰简介规范的 Commit Message 能让后续代码审查、信息查找、版本回退都更加高效可靠。
那么,快捷工具来了,commitizen/cz-cli。
Commit Message标准标准包含Header,Body,Footer三个部分.
12345<type>(<scope>): <subject>// ...<body>// ...<footer>
其中,Header 是必需的,Body 和 Footer 非必须。
HeaderHead ...
05.BT资源搜索之Jackett
上篇文章介绍利用docker搭建了下载服务,但是我们依旧需要去其它地方寻找影视资源,除了通过我们常用的网站外,有没有更快捷的方式呢?
答案当然是肯定的,本文就对上篇文章qBittorrent再次进行功能升级。
其实qBittorrent本身就可以通过安装插件来进行资源检索,除此之外,还有一个很强大的资源检索服务-Jackett,我们一步一步扩展。
qBittorrent添加搜索插件我们在qBittorrent主界面可以看到搜索选项。
python3环境
qBittorrent的插件是通过python实现,因此需要先安装python3。目前官方不再支持python 2 。我们上篇文章使用的镜像linuxserver/qbittorrent本身已经集成了python3,无需我们再安装,如果自己使用环境没有请自行安装环境。
安装插件
进入qBittorrent主界面->搜索->搜索插件->安装新插件
打开qBittorrent 插件官网 ,选择喜爱的磁力搜索引擎,拷贝对应插件后面的 插件下载按钮的链接地址,我们填入插件链接,点击ok即可添加。
如果我们因为网络 ...
04.BT下载
下载,是很多网络用户必备的需求之一。以往我们使用现成工具迅雷,我们必须保持开机,会员,合法等等要求,但是依托服务器,我们其实也可以搭建BT下载工具,只要你的硬盘够用,把种子或者链接进行加载,可以24小时运行下载。这些软件中,目前qBittorrent和Transmission最受欢迎的两位选手。
因为之前我搭建了界面化docker管理工具Portainer,所以我将使用Portainer的Stacks去搭建服务,其实如果不愿意使用Portainer,也可以直接利用docker-compose使用docker-compose脚本去启动服务。如果需要原生启动,也只需要把docker-compose的脚本按照对应命令转换为对应命令即可。
搭建搭建Transmissionstacks脚本(docker-compose脚本)123456789101112131415161718192021version: "2.1"services: transmission: image: linuxserver/transmission:latest container ...
01.Portainer-容器界面化管理工具
工欲善其事,必先利其器。
前言以前总喜欢自己搭建一些好玩的服务,如Jellyfin,NextCloud等等,刚开始原生搭建时每次都要环境版本折腾一些时间,例如jdk,数据库,多个服务各自依赖的版本又有不同要求,并且如果需要换服务器,环境迁移时真的很痛苦。
后来慢慢的docker火起来了。在我尝试接触docker后,我之后所有的服务有镜像的几乎全部使用docker去搭建,常见热门的一些好玩的项目几乎也都有官方的docker镜像,甚至我现在开发完的项目都是打包镜像后去进行部署,方便你我他。
刚开始习惯了docker搭建各种服务后,对我来说虽然比以前原生环境搭建幸福到天上了,但是也有一些不爽的地方,刚开始每次的服务容器启动我都是使用原生命令,而我经常因为需要更换路径,ip以及其它等等原因调整命令,只能杀掉容器重新编写命令,当然我发现这个问题后就采取了写shell脚本的形式,将每个容器的启动用脚本记录下来,然后修改脚本即可。
后续我又接触了docker-compose,这是docker官方的开源项目, 负责实现对docker容器集群的快速编排,其实我只用到他可以将docker的启动命令参数 ...
开发工具之自动化部署脚本
基于bgwd666的deploy发布脚本做了一些适合我自己的修改,在此万分感谢.
使用方法:
下载项目
1npm install @dllcn/auto-deploy -D
添加执行命令
1"deploy": "node ./node_modules/@dllcn/auto-deploy"
在项目根目录创建deploy.config.js文件:
1234567891011121314151617181920212223242526272829303132333435363738394041424344module.exports = Object.freeze({ development: {//测试 SERVER_PATH: 'xxx', // ssh地址 服务器地址 SSH_USER: 'root', // ssh 用户名 //方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 ...
浅谈闭包
浅谈闭包闭包的定义
闭包就是能够读取其他函数内部变量的函数。
例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成定义在一个函数内部的函数。
在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
为什么要使用闭包先介绍一下全局变量和局部变量的优缺点
全局变量:可以重用、但是会造成全局污染而且容易被篡改。
局部变量:仅函数内使用不会造成全局污染也不会被篡改、不可以重用。
所以,全局变量和局部变量的优缺点刚好相对。闭包的出现正好结合了全局变量和局部变量的优点。
何时使用闭包希望重用一个对象,但是又保护对象不被污染篡改时。
闭包产生的原因
官方解释:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。从这里可以看出闭包与环境有关,而与环境扯上关系就离不开作用域,然而JS作用域中特殊的就是词法作用域,这个词法作用域又称之为静态作用域或者闭包。静态作用域就是函数声明时,就已经定好的作用域,以后也不会改变的作用域。而JS的语言特性在JS代码运行的时候就已经把一切都定死了,作用域什么的都j定好了,闭包也随之而产 ...