首页 文章 精选 留言 我的

精选列表

搜索[一键安装包],共10011篇文章
优秀的个人博客,低调大师

roomGPT —— 使用 AI 一键生成房间设计图

roomGPT 可使用 AI 为你的房间生成新设计,上传现有的房间照片,它会给你一个高大上的新房间设计。 只需要给你的房间拍一张照,或是房间的 3D 效果图,并将其上传,即可用 AI 生成对应的梦幻房间效果图。 原理:使用 ControlNet 的 ML 模型来生成房间的变体ML ,模型托管在 Replicate上。房间照片将使用 Next.js API 路由上传,并通过此 ML 模型重新生成,并返回生成的房间图片。

优秀的个人博客,低调大师

一键到位「GitHub 热点速览 v.22.32」

上上周在 B 站观看了智能键盘——瀚文的制作过程,本周 GitHub 热榜上出现了它的软硬件开源项目 HelloWord-Keyboard,如果你的动手能力强不妨来自己搞一把带有“显示屏”、不再是换键帽的客制键盘。 本周 GitHub 官方在其社交平台上推荐了个可在你业务时间把玩的项目,一个钢琴训练器,搭配上你的 MIDI 键盘优雅旋律信手拈来。至于,其他实用的开源项目请阅读本文的目录一一详细了解吧~ 以下内容摘录自微博@HelloGitHub 的 GitHub Trending 及 Hacker News 热帖(简称 HN 热帖),选项标准:新发布 | 实用 | 有趣,根据项目 release 时间分类,发布时间不超过 14 day 的项目会标注 New,无该标志则说明项目 release 超过半月。由于本文篇幅有限,还有部分项目未能在本文展示,望周知 🌝 本文目录 本周特推 1.1 真·生产力键盘:HelloWord-Keyboard 1.2 钢琴训练器:piano-trainer GitHub Trending 周榜 2.1 C++ 异步框架:userver 2.2 TS 全文索引:lyra 2.3 实时消息服务:nsq 2.4 git 服务:onedev 2.5 Erlang 类型检查:eqwalizer 往期回顾 1. 本周特推 1.1 真·生产力键盘:HelloWord-Keyboard 本周 star 增长数:2,100+ New 硬核开源 up 主稚晖君的新作品——智能键盘,名:瀚文的键盘软硬件开源了。瀚文键盘使用模块化设计,左侧的多功能场景交互模块可以替换成各种自定义组件,默认使用的是一个带电子墨水屏以及 FOC 力反馈旋钮的 Dynamic 组件;键盘使用稚晖君开发的基于 ARM Cortex-M 芯片的键盘固件以及模块固件;键盘本体使用移位寄存器方式实现优化的按键扫描电路;模块以及键盘本体可以单独使用,也可以通过串口协议进行相互通信和调用。 本次的键盘稚晖君和 up 主 Xikii 合作,按照后者的视频介绍,这把键盘将会在他的店铺上架,而不带左侧电子屏幕、只是单个键盘并提供连接接口的客制键盘定价应该低于 ¥2,499。当然你也可以根据稚晖君开源的这个项目,自己动手做一把。 GitHub 地址→https://github.com/peng-zhihui/HelloWord-Keyboard 1.2 钢琴训练器:piano-trainer 本周 star 增长数:100+ GitHub 官方推荐的一个钢琴训练项目,Piano Trainer 支持多种方式、采用多种音调来练习钢琴,搭配 MIDI 使用最佳。特性: 兼容 MIDI; 多平台支持 Linux、macOS、Windows 均可使用; 可视化调试; GitHub 地址→https://github.com/ZaneH/piano-trainer 2. GitHub Trending 周榜 2.1 C++ 异步框架:userver 本周 star 增长数:850+ New 一个开源的异步框架,提供了丰富的抽象组件用于快速、方便地构建 C++ 微服务、服务和程序。它有效地解决了 I/O 交互问题,用户可无感知地使用它来进行操作。 GitHub 地址→https://github.com/userver-framework/userver 2.2 TS 全文索引:lyra 本周 star 增长数:2,200+ New Lyra 采用 TypeScript 编写的全文索引引擎,具有快速、内存化、错别字容错等特性。它的使用简单,先创建一个数据库实例并设置索引模式(schema)即可,通过 https://nearform.github.io/lyra/demo/ 可在线体验 Lyra。 GitHub 地址→https://github.com/nearform/lyra 2.3 实时消息服务:nsq 本周 star 增长数 550+ NSQ 是 simplequeue 的继承者,设计应对大规模的实时消息处理,可每天处理数十亿消息。特性: 支持去中心化的拓扑结构,以提供高可用、消除单点故障; 满足海量消息传递需求; 通过将部分消息持久化到磁盘中,绑定单个进程的内存痕迹; 配置简单; 升级直接; GitHub 地址→https://github.com/nsqio/nsq 2.4 git 服务:onedev 本周 star 增长数:1,050+ 一个自托管的 git 服务,自带 CI/CD 以及看板功能。此外,onedev 具有支持检索、正则查询代码、静态分析代码变更、定制化 issue 状态和区域等特性。 GitHub 地址→https://github.com/theonedev/onedev 2.5 Erlang 类型检查:eqwalizer 本周 star 增长数:300+ New WhatsApp 开源的 Erlang 类型检查工具。部分使用方法如下: {deps, [ {eqwalizer_support, {git_subdir, "https://github.com/whatsapp/eqwalizer.git", {branch, "main"}, "eqwalizer_support"}} ]}. {project_plugins, [ {eqwalizer_rebar3, {git_subdir, "https://github.com/whatsapp/eqwalizer.git", {branch, "main"}, "eqwalizer_rebar3"}} ]}. GitHub 地址→https://github.com/WhatsApp/eqwalizer 3. 往期回顾 往期回顾: 你的工具包已到货「GitHub 热点速览 v.22.31」 造!又有新的生产力语言了「GitHub 热点速览 v.22.30」 以上为 2022 年第 32 个工作周的 GitHub Trending 🎉如果你 Pick 其他好玩、实用的 GitHub 项目,记得来 HelloGitHub issue 区和我们分享下哟 🌝

优秀的个人博客,低调大师

华为音频编辑服务带你一键伴奏分离!

华为音频编辑服务的音源分离功能支持人声与人声,人声与伴奏,人声与乐器元素(即所有乐器单独提取)。 首先,我们来看一段使用华为音频编辑服务提取的《Dream it Possible》伴奏Demo。 (查看示例效果请访问: https://developer.huawei.com/consumer/cn/forum/topic/0202660512438950947?fid=18?ha_source=hms1) 接下来,带您演示如何实现Demo中伴奏分离的效果↓↓↓: 第一步,我们需要准备想要获取伴奏的歌曲素材。 MP3格式最佳,其他音频格式转换请参考第二步2.4进行转换。 如果只有视频格式,请参考第二步2.5进行音频提取。 第二步,接入华为音频编辑服务。 开发实战 开发准备 1.1项目级build.gradle里配置Maven仓地址 buildscript { repositories { google() jcenter() // 配置HMS Core SDK的Maven仓地址。 maven {url 'https://developer.huawei.com/repo/'} } dependencies { ... // 增加agcp插件配置。 classpath 'com.huawei.agconnect:agcp:1.4.2.300' } } allprojects { repositories { google() jcenter() // 配置HMS Core SDK的Maven仓地址。 maven {url 'https://developer.huawei.com/repo/'} } } 1.2 文件头增加配置 apply plugin: 'com.huawei.agconnect' 1.3 应用级build.gradle里配置SDK依赖 dependencies{ implementation 'com.huawei.hms:audio-editor-ui:{version}' } 4在AndroidManifest.xml文件中申请如下权限 <!--震动权限--> <uses-permission android:name="android.permission.VIBRATE" /> <!--麦克风权限--> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!--写存储权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--读存储权限--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!--网络权限--> <uses-permission android:name="android.permission.INTERNET" /> <!--网络状态权限--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--网络状态变化权限--> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 代码开发 2.1创建您应用自定义的activity界面,用于选择音频,并将该音频文件路径用如下方式返回给音频编辑SDK。 // 将音频文件路径List返回给音频编辑页面 private void sendAudioToSdk() { // 获取到的音频文件路径 filePath String filePath = "/sdcard/AudioEdit/audio/music.aac"; ArrayList<String> audioList = new ArrayList<>(); audioList.add(filePath); // 将音频文件路径返回给音频编辑页面 Intent intent = new Intent(); // 使用sdk提供的HAEConstant.AUDIO_PATH_LIST intent.putExtra(HAEConstant.AUDIO_PATH_LIST, audioList); // 使用sdk提供的HAEConstant.RESULT_CODE为结果CODE this.setResult(HAEConstant.RESULT_CODE, intent); finish(); } 2.2在UI界面导入音频时,SDK会发送一个action值为com.huawei.hms.audioeditor.chooseaudio的intent以跳转到该activity。因此,该activity“AndroidManifest.xml”中的注册形式如下。 <activity android:name="Activity "> <intent-filter> <action android:name="com.huawei.hms.audioeditor.chooseaudio"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> 2.3启动音频编辑页面,点击“添加音频”,SDK会主动调用2.1定义的activity。添加完音频,就可以进行音频编辑、特效添加等操作,完成后导出编辑的音频。 HAEUIManager.getInstance().launchEditorActivity(this); 2.4如果您的原声歌曲素材不是MP3格式,此步骤将可以完成音频格式转换。 调用transformAudioUseDefaultPath接口进行音频格式转换,转换后的音频文件导出到默认路径。 // 音频格式转换接口 HAEAudioExpansion.getInstance().transformAudioUseDefaultPath(context,inAudioPath, audioFormat, new OnTransformCallBack() { // 进度回调(0-100) @Override public void onProgress(int progress) { } // 转换失败 @Override public void onFail(int errorCode) { } // 转换成功 @Override public void onSuccess(String outPutPath) { } // 取消转换 @Override public void onCancel() { } }); // 取消转换任务接口 HAEAudioExpansion.getInstance().cancelTransformAudio(); 调用transformAudio接口进行音频格式转换,转换后的音频文件导出到目标路径。 // 音频格式转换接口 HAEAudioExpansion.getInstance().transformAudio(context,inAudioPath, outAudioPath, new OnTransformCallBack(){ // 进度回调(0-100) @Override public void onProgress(int progress) { } // 转换失败 @Override public void onFail(int errorCode) { } // 转换成功 @Override public void onSuccess(String outPutPath) { } // 取消转换 @Override public void onCancel() { } }); // 取消转换任务接口 HAEAudioExpansion.getInstance().cancelTransformAudio(); 2.5 如果您的素材是一段视频,可以调用extractAudio接口进行音频提取,从视频中提取音频文件导出到指定目录。 // outAudioDir提取出的音频保存的文件夹路径,非必填 // outAudioName提取出的音频名称,不带后缀,非必填 HAEAudioExpansion.getInstance().extractAudio(context,inVideoPath,outAudioDir, outAudioName,new AudioExtractCallBack() { @Override public void onSuccess(String audioPath) { Log.d(TAG, "ExtractAudio onSuccess : " + audioPath); } @Override public void onProgress(int progress) { Log.d(TAG, "ExtractAudio onProgress : " + progress); } @Override public void onFail(int errCode) { Log.i(TAG, "ExtractAudio onFail : " + errCode); } @Override public void onCancel() { Log.d(TAG, "ExtractAudio onCancel."); } }); // 取消音频提取任务接口 HAEAudioExpansion.getInstance().cancelExtractAudio(); 2.6调用getInstruments和startSeparationTasks接口进行伴奏提取。 // 获取提取伴奏类型ID,后面将此ID传给接口 HAEAudioSeparationFile haeAudioSeparationFile = new HAEAudioSeparationFile(); haeAudioSeparationFile.getInstruments(new SeparationCloudCallBack<List<SeparationBean>>() { @Override public void onFinish(List<SeparationBean> response) { // 返回的数据,包括伴奏的类型ID } @Override public void onError(int errorCode) { // 失败返回 } }); // 设置要提取的伴奏参数 List instruments = new ArrayList<>(); instruments.add(“伴奏id”); haeAudioSeparationFile.setInstruments(instruments); // 开始进行伴奏分离 haeAudioSeparationFile.startSeparationTasks(inAudioPath, outAudioDir, outAudioName, new AudioSeparationCallBack() { @Override public void onResult(SeparationBean separationBean) { } @Override public void onFinish(List<SeparationBean> separationBeans) {} @Override public void onFail(int errorCode) {} @Override public void onCancel() {} }); // 取消分离任务 haeAudioSeparationFile.cancel(); 最后,我们就可以得到想要的歌曲伴奏了。 如果想要实现demo的效果,可以使用视频编辑软件添加图片和文字歌词进行合成。 了解更多详情>> 访问华为开发者联盟音频编辑服务官网 获取开发音频编辑服务指导文档 华为音频编辑服务开源仓库地址:GitHub、Gitee 华为HMS Core官方论坛 解决集成问题请到Stack Overflow 关注我们,第一时间了解HMS Core最新技术~

优秀的个人博客,低调大师

Gitea 1.15.0 发布,一键部署的自助 Git 服务

Gitea 1.15.0 现已发布,该版本合并了 488 个拉取请求。 部分更新内容 BREAKING 升级到最新版本的 golang-jwt,并且go 升级到 1.15 更改了 :latest 在 docker 上的映射 更严格的 app.ini 权限,Gitea 创建这个文件时,app.ini 的默认文件权限模式已更改为 -rw------- Webhook重构。Webhook 有效负载已更改,因此 Secret 字段不再作为有效负载的一部分传递,并且历史记录显示了在 Webhook 中发送的真实 URL 添加了非对称 JWT 签名密,Gitea 将默认使用非对称密钥对进行 JWT 签名 清理 issue_indexer 队列的设置层次结构 将默认队列设置更改为低 go-routines 合并资产处理中间件 将 StaticUrlPrefix 重命名为 AssetUrlPrefix,具有使用 StaticUrlPrefix 的自定义模板的管理员将需要更新这些模板以使用 AssetUrlPrefi 使用标记类来渲染外部标记 将节点更新到 v12 添加 /assets 作为公共文件的根目录 使 Markdown 中的链接绝对指向存储库而不是服务器 继承子日志部分的日志级别 SECURITY 使用 SECRET_KEY 加密 db 中的 LDAP 绑定密码 删除 Dockerfiles 中的随机密码 正确创建 git-daemon-export-ok 文件 不在探索视图中显示私人用户的存储库 更新节点 tar 依赖到 6.1.6 FEATURES 更新 Go-Git 以利用 LargeObjectThreshold 支持文本文件的自定义 mime 类型映射 添加 LRU 内存缓存实现 本地化电子邮件模板 将授权密钥中的命令设为模板 添加在分支页面中创建分支的可能性 添加电子邮件标题 使任务列表复选框可点击 在比较页面上添加选择标签 添加 cron 作业以从数据库中删除旧操作 在打开的存储库上打开通用 cat 文件批处理和批处理检查 添加标签保护 添加推送到远程镜像仓库 为 SVG 文件添加图像差异 添加 LFS 迁移和镜像 改进 WIP 草案 PR 的通知 禁用 Stars 配置选项 使用签名令牌进行 GPG 密钥所有权验证 OAuth2 自动注册 更多详细内容,请查看更新公告。

优秀的个人博客,低调大师

一键导出全部邮件到本地,彻底解放双手

大家好,我是辰哥 大家可能会遇到这样一种情况:有没有什么办法可以将邮箱里面的邮件全部下载到本地(包括图文、压缩附件、文档附件等)。比如HR、收集意见的工作人员甚至是一些负责收邮件的老师等人都会遇到这种情况。 今天辰哥就教大家如何利用Python去下载邮箱中的全部邮件,本文核心库主要是zmail。 01、准备工作 **1.安装库 ** pipinstall zmail 通过上面的命令即可安装zmail 导入库 import zmail 2.开启****POP3/SMTP服务 在程序中登录QQ邮箱不是使用qq邮箱密码,是使用POP3/SMTP服务口令,所以我们这里先获取口令 第一步:登录qq邮箱点击设置,再点账户 第二步:开启POP3/SMTP,点击开启后会生成一段字符串(token),这里辰哥已经开启了 02、下载全部邮件 1.登录账户 下载的全部邮件都会保存在文件夹chenge中 2.读取全部邮件 目标:下载全部的邮件。所以这里获取到邮件数,并通过循环去遍历 3.创建保存文件夹 这里提取邮件日期和主题,在chenge文件夹下为该邮件创建文件夹(到时候保存正文内容和附件) 4.保存邮件正文 判断本地是否存在该邮件命名的文件夹,不存在则创建。 提取正文内容保存到正文文本.txt,txt中的格式如下: 5.保存附件 一行代码就可以将附件,包括正文中的插图直接下载保存到指定文件夹中 03、演示程序 1.邮件示例 这里准备了两份邮件(一份图+文,一份附件+文) 一份图+文 这份邮件有正文,正文插图,图片附件 一份附件+文 这份邮件有正文,正文插图,压缩包附件 2.执行程序 结果如下: 04、小结 本文讲解了如何通过Python教大家如何利用Python去下载邮箱中的全部邮件,不明白的地方可以在下方留言信,一起交流。 为了大家方便学习,辰哥把本文的完整源码上传,需要的公众回复:邮件下载

优秀的个人博客,低调大师

Gitea 1.14.2 发布,一键部署的自助 Git 服务

Gitea 1.14.2 现已发布,该版本修复了一些重要 bug,并合并了 44 个 pr。Gitea 的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。项目采用 Go 作为后端语言,只要生成一个可执行程序即可。并且他还支持跨平台,支持 Linux、 macOS 和 Windows 以及各种架构,除了x86、amd64,还包括 ARM 和 PowerPC 。 部分更新内容 API 使更改存储库设置适用于空存储库 在 API 中添加拉动 "合并" 的通知主题状态 BUGFIXES 确保 ctx.written 在调用 issues(...) 后被检查 除非禁用了拉取,否则在提交图中使用拉取 如果没有设置 GIT_DIR,请正确设置它 修复存储库未被采用的错误 回退以将 IsAnInteractiveSession 用于 SVC 修复转储中的版本表设置 修复简单区域内删除时关闭按钮的变化 ENHANCEMENTS 显示拉取请求的无冲突合并消息 问题列表对齐调整 实现删除发布附件和更新发布附件的名称 添加占位符文本以部署关键文本区域 详细内容请查看更新公告。

优秀的个人博客,低调大师

Gitea 1.13.3 发布,一键部署的自助 Git 服务

Gitea 1.13.3现已发布,该版本修复了一些重要 bug,并合并了 21 个 pr。Gitea 的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。项目采用 Go 作为后端语言,只要生成一个可执行程序即可。并且他还支持跨平台,支持 Linux、 macOS 和 Windows 以及各种架构,除了x86、amd64,还包括 ARM 和 PowerPC 。 部分更新内容 SECURITY 将默认的哈希密码算法从 argon2 调回 pbkdf2,直到找到更好的算法 BUG 修复 修复文件提交日志的分页 如果在设置中使用了 SQLite 但不支持,则打印相应的错误信息 修正显示时间 删除存储库时,只明确关闭非本存储库的 PR 在链接帐户页上设置 HCaptchaSiteKey 在启动时禁用损坏的 OAuth2 提供程序 回退转让权限检查 修复 oauth2 应用程序编辑视图中的双重警报 防止 PersistableChannelUniqueQueue 中的竞争 不会假设所有 40 个字符的字符串都是 sha1 允许使用问题模板设置组织标签 在单个 LDAP SSHPublicKey 属性中接受多个 SSH 密钥 修复有关 ListOptions 和 stars/watchers 分页的错误 修复帐户删除过程中 GPG 密钥删除的问题 详细内容请查看更新公告。

优秀的个人博客,低调大师

Gitea 1.13.2 发布,一键部署的自助 Git 服务

Gitea 1.13.2现已发布,该版本修复了一些重要 bug,并合并了 28 个 pr。Gitea 的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。项目采用 Go 作为后端语言,只要生成一个可执行程序即可。并且他还支持跨平台,支持 Linux、 macOS 和 Windows 以及各种架构,除了x86、amd64,还包括 ARM 和 PowerPC 。 部分更新内容 SECURITY 移除 Fuzzer 提供的字符串中的部分标签 将安全(仅 http)属性添加到 lang cookie ENHANCEMENTS 如果发布发布者被删除,使用 ghost 用户 BUG 修复 内部 ssh 服务器遵守密码、MAC 和 KeyExchange 设置 在迁移中设置名称 Mapper 修复 Wiki 预览 code.gitea.io/sdk/gitea v0.13.1 升级到 v0.13.2 ChangeUserName:在数据库问题上重命名用户文件 修复 lfs 预览错误 确保 u2f 超时时显示超时错误信息 修复死锁,并在评论删除时删除受影响的反应 在路由器/编辑器中使用路径而非文件路径 首先检查标签模板是否存在 修复 v141 迁移 将 Request.URL.RequestURI() 用于 fcgi 使用 Context 提供的 ServerError 修复编辑标签表单初始化 修复 mailIssueCommentBatch 以获取拉取请求 详细内容请查看更新公告。

优秀的个人博客,低调大师

「Spring Boot 2.4 新特性」一键构建Docker镜像

背景 在我们开发过程中为了支持 Docker 容器化,一般使用 Maven 编译打包然后生成镜像,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便。docker-maven-plugin 插件就是为了帮助我们在 Maven 工程中,通过简单的配置,自动生成镜像并推送到仓库中。 spotify 、fabric8 这里主要使用的主要是如下两种插件 spotify 、fabric8 , ... -配置通过 xml 定义出 Dockerfile 或者挂载外部 Dockerfile 通过调用 Docker remote api 构建出镜像 pig 微服务平台所有的容器化都是基于此构建 <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> ... -配置通过 xml 定义出 Dockerfile 或者挂载外部 Dockerfile </plugin> <plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> ... -配置通过 xml 定义出 Dockerfile 或者挂载外部 Dockerfile </plugin> 执行相应的插件周期即可 mvn docker:build && mvn docker:push jib 项目每次发布实际上变更的代码量不大,尤其依赖的 jar 变动的可能性较小,如果使用前两种插件构建镜像,会导致每次都全量构建,会导致存储和带宽资源浪费。 jib 是 Google 于 18 年 7 月发布的一个针对 Java 应用的构建镜像的工具(支持 Maven 和 Gradle) ,好处是能够复用构建缓存,能够加快构建,减小传输体积 <!--配置通过 xml 定义出 Dockerfile ,本质上和外挂 Dockerfile 并无区别--> <plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> </plugin> mvn jib:dockerBuild 以上三种方案的问题 在实际开发过程中,大部分的 spring boot 项目构建 Dockerfile 都是相同,不需要通过的 XML 或者通过外挂 Dockerfile 来重新定义 以上插件需要对 Dockerfile 的定义知识有相对的了 对开发并不友好 没充分理由 Spring Boot 2.3 以后的 Jar 分层技术。 解决方案 Spring Boot 2.4 推出了自己的 docker 构建工具 整合在原有的 spring-boot-maven-plugin 中,只需要配置对应目标仓库和主机信息即可完成镜像构建。 如下配置即可完成上图中 通过开发机器在不安装 Docker 的同时,通过 192.168.0.10 的 Docker Remote API 完成镜像构建并发布到 192.168.0.20 的镜像仓库 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <name>192.168.0.20/pig4cloud/${project.artifactId}</name> <!-- 执行完build 自动push --> <publish>true</publish> </image> <!--配置构建宿主机信息,本机不用配置--> <docker> <host>http://192.168.0.10:2375</host> <tlsVerify>false</tlsVerify> <publishRegistry> <username>username</username> <password>password</password> <url>192.168.0.20</url> </publishRegistry> </docker> </configuration> </plugin> 执行以下命令即可完成 镜像的构建和自动发布 mvn spring-boot:build-image 其他说明 docker host 配置不生效 如下图 ① 处配置 <host></host> 节点,但是 ② 报错提示 host 不一致 检查本地是否配置 $DOCKER_HOST 环境变量,经过阅读源码后发现优先读取此变量。 ⋊> ~ echo $DOCKER_HOST 11:07:51 tcp://172.17.0.111:2375 网络支持 截取部分构建过程中的日志,如下需要从 github 下载相关的依赖 约 100M ,这个过程大概率会失败。建议通过配置代理或者使用国外 ECS 来解决。 :: Spring Boot :: (v2.4.0) [INFO] > Running creator [INFO] [creator] Downloading from https://github.com/bell-sw/Liberica/releases/download/8u275+1/bellsoft-jre8u275+1-linux-amd64.tar.gz [INFO] [creator] JVMKill Agent 1.16.0: Contributing to layer [INFO] [creator] Downloading from https://github.com/cloudfoundry/jvmkill/releases/download/v1.16.0.RELEASE/jvmkill-1.16.0-RELEASE.so [INFO] [creator] Downloading from https://repo.spring.io/release/org/springframework/cloud/spring-cloud-bindings/1.6.0/spring-cloud-bindings-1.6.0.jar [INFO] [creator] Verifying checksum [INFO] [creator] 192.168.0.20/pig4cloud/demo:latest [INFO] [INFO] Successfully built image '192.168.0.20/pig4cloud/demo:latest' [INFO] > Pushing image '192.168.0.20/pig4cloud/demo:latest' 100% [INFO] > Pushed image '192.168.0.20/pig4cloud/demo:latest' [INFO] BUILD SUCCESS 项目推荐: Spring Cloud 、Spring Security OAuth2的RBAC权限管理系统 欢迎关注

优秀的个人博客,低调大师

Gitea 1.12.4 发布,一键部署的自助 Git 服务

Gitea 1.12.4现已发布,该版本共合并了 24个pr。Gitea 的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。项目采用 Go 作为后端语言,只要生成一个可执行程序即可。并且他还支持跨平台,支持 Linux、 macOS 和 Windows 以及各种架构,除了x86、amd64,还包括 ARM 和 PowerPC 。 新版本更新内容如下: SECURITY 在 oauth2 provider redirect中的 Escape provider name 在密码重置页面上的 Escape Email 当读取 expired sessions 时- expire them ENHANCEMENTS 可在编译时配置的 StaticRootPath BUG 修复 修复显示与删除问题相关的问题。 为缓存确认的过期时间 修复 diff 路径取消引用的问题 改进 HTML 转义助手 models:打破循环 拥有写权限的人员的默认空合并列表 跳过对 /api/internal 的 SSPI 认证尝试。 防止 NPE 对带有无效注释的行进行注释 删除 hardcoded ES indexername 修复了防止向私人组织转移的错误 密钥不应验证已撤销的电子邮件地址 不要在 http/https 子模块链接上添加前缀 修复 compare 时忽略的login 修复 Stats indexer 和 OAuth2 中的错误日志记录 将 google/go-github 升级到 v32.1.0 在 feed 页面上渲染 Commit 信息的表情符号 修复了使用 Git 2.28 时不相关分支上的 diff 处理 发布说明:https://blog.gitea.io/2020/09/gitea-1.12.4-is-released/

优秀的个人博客,低调大师

一键实现自动化部署(灰度发布)实践

在过去几年的DevOps的浪潮中,自动化、持续集成这两个概念早已深入人心(互联网技术人)。比尔盖茨先生曾经都说过:“任何技术在一个业务中使用的第一条规则就是,将自动化应用到一个高效的操作上将会放大高效。第二条就是自动化应用到一个低效操作上,则放大了低效率。” 自动化部署也逐渐成为各中小型企业追求的方向,那么,今天民工哥就自动化部署的概述、自动化部署的工具、自动化部署的流程、自动化部署实践等4个方面,与大家一同来讨论、交流一下关于中小企业自动部署的问题。 1、自动化部署概述 1.1 什么是自动化部署 一句简单的话概括:部署的过程中所有的操作全部自动化,无需人工手工干预。 1.2 自动部署的好处 传统的部署方式如下: 运维人员手工使用Scp、Xftp等方式来传输数据 手工登录服务器执行git pull 、svn update等命令进行更新代码的操作 开发人员手工编译打包,然后通过内网传输给运维人员 运维人员通过rz上传的方式上传到目标服务器,然后,执行重命名原包、拷贝新包到目标目录,再执行服务应用重启命令完成整个部署过程 看似非常简单,也不是很麻烦,但是一旦项目多,部署频繁,这种情况下就会大大降低工作效率。民工哥之前工作中就有这类体验,公司的活动类项目高达100+,很多都是需要快速上线及下线、或者更新的,手工部署真的累。 传统的部署方式有以下的缺点: 整个过程都需要人员参与,占用大量的时间,效率低下 上线、更新、回滚速度慢 存在一定的管理混乱,人为误操作的机率增大 所以,自动化部署的优势就通过这种对比显现出来了!! 2、自动化部署的工具 有自动动部署的概念,就需要自动化部署的工具,今天来介绍下一些这方面的工具给大家,怎么用?如何用?大家根据实际需求来定,一切不以需求来定的工具、流程、方法等都是耍流氓。 2.1 Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins应该说是目前最好用的持续集成工具之一,它的插件非常多,安装也很方便,功能相当的强大、灵活,最大的缺点就是学习成本较高。 2.2 ElectricFlow ElectricFlow 是一个发布自动化工具,提供免费的社区版本,你可以在VirtualBox上运行。ElecticFlow支持大量插件和基于Groovy的 DSL,CLI,APIs。 2.3 Microsoft Visual Studio 微软DevOps产品的基础之一是 Visual Studio。 Visual Studio允许用户定义版本定义,自动化运行,跟踪版本等等。 2.4 Octopus Deploy Octopus Deploy创建目的是为了.NET应用的自动化部署。你可以在一台服务器安装或在Azure里做成实例。 2.5 IBM UrbanCode 2013年被IBM公司收购,UrbanCode 自动化部署到本地或云环境。 2.6 AWS CodeDeploy Amazon的自动化部署工具CodeDeploy,有着令人印象深刻的客户名单、平台与语言无关。 2.7 DeployBot DeployBot 可以链接任何Git存储库,并且允许手动或自动部署到多种环境。DeployBot提供大量集成,包括通过Slack部署的能力。 2.8 Shippable Shippable 规定了它们自己的“DevOps支柱”和它们自己的CI平台,运行依靠称为minions的基于Docker的容器。 2.9 TeamCity TeamCity 是一个来自Jet Brains的CI服务器。TeamCity 有智能的配置功能和拥有官方Docker镜像服务器和代理。 2.10 Bamboo Bamboo Server 是CI,由来自在Atlassian的人们提供,他们是Jira和Confluence的制造者。Bamboo公布“integrations that matter”并提供一个“small teams”包,捐赠给 Room to Read慈善事业。 2.11 Codar Codar 是一个HP的持续部署解决方案。部署使用Jenkins触发。 2.12 CircleCI CircleCI 是一个CI解决方案,强调灵活性、可靠性和速度。CircleCI提供从资源到创建到部署的解决方案,并且支持大量的语言和应用。 2.13 Gradle Gradle 是一个被一些业内最有名的例如LinkedIn, Netflix, 和Adobe所使用的创建工具。Gradle使用Groovy创建脚本,按惯例构建框架,并认为构建工具同时作为Apache的Ant的通用工具。 2.14 Automic Automic 试图应用DevOps原理给一些后端应用,允许他们从已经在过去几年里许多前端、基于web的应用相同的实践上受益。 2.15 Distelli Distelli 专门在任何地方部署Kubernetes集群,除了可以在任何云或物理服务器上使用。根据TechCrunch这篇文章,Distelli 在2015年12月获得了280万美元的资金,是由前AWS员工Rahul Singh创立的。 2.16 XL Deploy XL Deploy 是一个来自XebiaLabs的应用发布自动化工具,支持大量插件和环境,使用无代理架构。 2.17 Codeship Codeship是服务器托管CI解决方案,通过原生Docker支持定制。 2.18 GoCD 一个CD服务器,强调可视化工作流,GoCD 是一个开源项目,由ThoughtWorks公司赞助开发。 2.19 Capistrano Capistrano 是一个开源部署工具,使用Ruby开发。Capistrano 文档具有脚本语言和“理智的,富有表现力的API。” 2.20 Travis CI Travis CI 可以同步到你的GitHub账户,允许自动化测试和部署。Travis CI是一个免费的开源项目。 2.21 BuildBot BuildBot 是一个开源的基于Python的持续集框架,自称为“内含有电池的框架”。BuildBot是面向罐装的解决方案用例,目前还不够灵活。 3、自动化部署的流程 大概的流程步骤如下: 获取代码 编译打包 移除目标服务器 解压文件到目标目录 拷贝差异化文件 重启服务 测试 重新加入集群 继续下一个节点或一组节点 如果在测试时出现问题,则需要回滚到上一次稳定版本。 一般可以将需要回滚的版本先列出来,然后将现有的软链接文件删除,重新将上一个版本的源文件生成一个软链接至目标目录,然后重新启动服务,进行自动化测试,最终加入集群。 4、自动化部署实践 说完了一堆的理论东东,接下来就是需要实践操作了,我之前也写过一个自动化的脚本,如下图: 这里列举两个实例,这两个实例是由网友提供,具体的实例如下: 4.1 使用shell脚本实现java灰度发布 脚本使用环境: 1、操作系统:centos 6.5 64位 2、代码使用gitlab进行管理 3、代码每次上线通过tag控制 4、前端使用haproxy实现负载均衡,使用haproxy socat实现RS的平滑上下线 5、WEB container使用tomcat实现 6、项目构建使用maven 使用脚本注意事项: 1、 发布机器需要能够解析web服务器主机名,并且配置ssh通信 2、 变量中的目录以及用户等信息需要自己创建,脚本没有做判断自己创建。我这里web服务器是使用ansible进行部署的,相关目录和用户都会自动创建。 3、代码的部署使用tag,但是代码的更新使用软连接来控制,回滚则切换到上一个软连接 4、由于java是编译型语言,我们使用maven来进行编译,所以需要安装maven环境。 5、关于环境配置文件:配置文件为自己手动维护,每次都是删除git仓库拉取下来的配置文件,把对应环境的代码文件复制进编译目录进行编译。 脚本代码大概的步骤如下: #!/bin/bash # 设置时间变量 CTIME=$(date "+%Y-%m-%d-%H-%M") # 项目名称,建议和gitlab仓库名称一致 project= # 本地代码目录(gitlab拉取代码后存放目录) CODE_DIR=/data/gitlab/"$project" # 临时代码目录,用来修改配置文件和编译打包代码 TMP_DIR=/data/tmp/"$project" # 用来存放war包 WAR_DIR=/data/war/"$project" # 对应环境配置文件 deploy_conf=/data/conf/pro/"$project"/* # 代码中的配置文件路径 local_conf=$TMP_DIR/src/main/resources/config # 远程主机名称 REMOTE_HOST="tomcat-01 tomcat-02" # 远程主机代码目录 REMOTE_CODE_DIR=/data/webapps/"$project" # 远程主机用户 REMOTE_USER=root # 远程主机war包存放目录 REMOTE_WAR_DIR=/data/war/ # 代码临时目录 CODE_TMP=/data/code_tmp/ # 上线日志 DEPKOY_LOG=/data/log/pro_log.log # 脚本使用帮助 usage(){ echo $"Usage: $0 [deploy tag | rollback_list | rollback_pro ver]" } # 拉取代码 git_pro(){ if [ $# -lt 1 ];then echo "请传入tag" exit 1 fi tag=$1 cd $CODE_DIR && git checkout master && git pull && git checkout $1 if [ $? != 0 ];then echo "拉取代码失败" exit 10 fi cd $CODE_DIR && git pull 2>/dev/null >/dev/null # 推送代码到临时目录 rsync -avz --delete $CODE_DIR/ $TMP_DIR/ 2>/dev/null >/dev/null } # 设置代码的配置文件 config_pro(){ echo "设置代码配置文件" rm -f $local_conf/config.properties ......... } # 打包代码 tar_pro(){ echo "本地打包代码" cd $TMP_DIR && /usr/local/maven/bin/mvn clean compile war:war && cp target/"$project".war "$WAR_DIR"/"$project"_"$tag"_"$CTIME".war } # 推送war包到远端服务器 rsync_pro(){ echo "推送war包到远端服务器" for host in $REMOTE_HOST;do scp "$WAR_DIR"/"$project"_"$tag"_"$CTIME".war $REMOTE_USER@$host:$REMOTE_WAR_DIR done } # 解压代码包 solution_pro(){ echo "解压代码包" for host in $REMOTE_HOST;do ssh $REMOTE_USER@$host "unzip "$REMOTE_WAR_DIR""$project"_"$tag"_"$CTIME".war -d "$CODE_TMP""$project"_"$tag"_"$CTIME"" 2>/dev/null >/dev/null done } # api测试 test_pro(){ # 运行api测试脚本,如果api测试有问题,则退出部署 if [ $? != 0 ];then echo "API测试存在问题,退出部署" exit 10 fi } # 部署代码 deploy_pro(){ echo "部署代码" ................... sleep 3 # 执行api测试 test_pro ssh haproxy "echo "enable server $project/$host" | /usr/bin/socat /var/lib/haproxy/stats stdio" done } # 列出可以回滚的版本 rollback_list(){ echo "------------可回滚版本-------------" ssh $REMOTE_USER@$REMOTE_HOST "ls -r "$CODE_TMP" | grep -o $project.*" } # 回滚代码 rollback_pro(){ echo "回滚中" for host in $REMOTE_HOST;do ............................. sleep 3 ssh haproxy "echo "enable server $project/$host" | /usr/bin/socat /var/lib/haproxy/stats stdio" done } # 记录日志 record_log(){ echo "$CTIME 主机:$REMOTE_HOST 项目:$project tag:$1" >> $DEPKOY_LOG } # 代码执行选项设置 main(){ case $1 in deploy) git_pro $2; config_pro; tar_pro; rsync_pro; solution_pro; deploy_pro; record_log $2; ;; rollback_list) rollback_list; ;; rollback_pro) rollback_pro $2; record_log; ;; *) usage; esac } main $1 $2 4.2 使用shell实现php代码自动发布 脚本适应环境: 1、操作系统:centos 6.5 64位 2、代码使用gitlab进行管理 3、代码每次上线和回滚通过tag控制 补充:如果需要在你的企业使用我的这种部署方式,还需要有相应环境规范以及git分支管理规范。 使用脚本注意事项: 1、 发布机器需要能够解析web服务器主机名,并且配置ssh通信 2、 变量中的目录以及用户等信息需要自己创建,脚本没有做判断自己创建。我这里web服务器是使用ansible进行部署的,相关目录和用户都会自动创建。 3、代码的部署使用tag,回滚原则为回滚到上个tag版本,所以部署脚本本身没有备份代码。 4、如果需要过滤一些临时目录或者日志目录,可以在rsync推送代码的时候使用–exclude选项进行过滤,示例脚本中过滤了.git目录和config.php文件是不会部署的。 #!/bin/bash # 设置时间相关变量 CTIME=$(date "+%Y-%m-%d-%H-%M") # 项目名称,建议和gitlab仓库名称一致 project=test # 本地代码目录(gitlab拉取代码后存放目录) CODE_DIR=/data/gitlab/pro/$project/ # 远程主机 REMOTE_HOST="LNMP-01.fblinux.com LNMP-02.fblinux.com" # 远程主机代码目录 REMOTE_DIR=/data/www/fblinux/ # 远程主机用户 REMOTE_USER=root # 远程主机代码执行用户 CODE_USER=php # 上线日志 DEPKOY_LOG=/data/log/pro_log.log #脚本使用帮助 usage(){ echo $"Usage: $0 [deploy tag]" } #拉取代码 git_pro(){ if [ $# -lt 1 ];then echo "请传入tag" exit 1 fi echo "拉取代码" cd $CODE_DIR && git checkout master && git pull && git checkout $1 if [ $? != 0 ];then echo "拉取代码失败" exit 10 fi cd $CODE_DIR && git pull } #推送代码服务器 rsync_pro(){ for host in $REMOTE_HOST;do echo "推送代码到服务器$host" rsync -rPv -P --delete --exclude="config.php" --exclude=".git" $CODE_DIR -e 'ssh -p 22' $REMOTE_USER@$host:$REMOTE_DIR if [ $? != 0 ];then echo "推送代码失败" exit 10 fi echo "代码授权" ssh $REMOTE_USER@$host "chown -R $CODE_USER $REMOTE_DIR" if [ $? != 0 ];then echo "代码授权失败" exit 10 fi done } #记录日志 record_log(){ echo "$CTIME 主机:$REMOTE_HOST 项目:$project tag:$1" >> $DEPKOY_LOG } main(){ case $1 in deploy) git_pro $2; rsync_pro; record_log $2; ;; *) usage; esac } main $1 $2 以上就是两个实际的生产部署实例的配置环境、注意事项及代码等讲解。 读者如果需要上述两个实例的完整代码请在 民工哥技术之路 公众号后台回复 “自动化部署”来获取脚本完整代码的下载地址。 参考资料如下: https://dzone.com/articles/21... http://www.fblinux.com/?p=489 http://www.fblinux.com/?p=476 民工哥,一个爱折腾的技术人,10多年IT职场老司机,欢迎一同交流,共同进步,共同成长!!!

优秀的个人博客,低调大师

TranslationPlugin v2.9 发布,代码文档一键翻译

TranslationPlugin v2.9发布了,新增了以下功能: Quick Documentation翻译 感谢Nikolay Tropin(来自JetBrains) 提供的功能实现! 我们增加了对Quick Documentation的翻译支持。现在,你可以随时随地对代码中的文档进行翻译,而不是受限于源代码中的文档注释。例如在 Windows 平台中,当你使用Ctrl+Q查看Quick Documentation时,你得到的将是已翻译好的文档。 单词本支持导出为txt文本

优秀的个人博客,低调大师

Gitea 1.11.0 发布,一键部署的自助 Git 服务

Gitea 1.11.0 发布了,这是一个主要版本,此版本合并了 481 个 pr。 从此版本开始,Gitea 需要NodeJS和npm以从源码构建。下边看看亮点。 Markdown 使用goldmark渲染 blackfriday由 goldmark 替换,旨在与CommonMark 保持一致。 Gitea logo 可作为 emoji 使用 diff 可以展开 可以从 pr 中关闭/重新打开 issue 模板仓库 issue 页面中添加选项以选择多个仓库 团队可以选择授予所有组织仓库权限 Windows 上通过 SSPI 支持单点登录 push 直接创建仓库 现在不必从 Web UI 创建仓库,可以直接 push 到有权创建仓库的命名空间。不过需要进行一些配置。 使用“Alt + 单击”快捷键排除标签来过滤 issue/pr 基本仓库 LFS 管理 详情查看发布公告: https://blog.gitea.io/2020/02/gitea-1.11.0-is-released

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册