Scvoet

Scvoet 查看完整档案

丽水编辑  |  填写毕业院校  |  填写所在公司/组织 scvoet.me 编辑
编辑

让世界听到你的声音

个人动态

Scvoet 赞了回答 · 10月16日

解决在 PHP 中该如何使用 PurgeCSS?

你可以用 gulp ,或者 webpack 来做,官方仓库下面就有插件仓库地址,根据说明照着做就可以了。
如果是传统项目,推荐 gulp ,如果是前后分类的项目,已经使用了 webpack 的就推荐使用 webpack 来做

Plugin - FullHuman/purgecss: Remove unused CSS

关注 4 回答 2

Scvoet 提出了问题 · 10月13日

解决在 PHP 中该如何使用 PurgeCSS?

我正在用 Tailwind CSS 写 Typecho 主题,因为 Tailwind 提供了丰富的类,而在我的使用中则仅用到了其中的几十个。这导致 CSS 大小造成不必要的冗余。这种情况 Tailwind 文档中提供了解决方案,即使用 PurgeCSS 移除未使用的类。
但在阅读文档的过程中,发现仅有在 Laravel 中使用的方案。我并不能将它用到 Typecho 主题开发中。

关注 4 回答 2

Scvoet 提出了问题 · 10月13日

解决在 PHP 中该如何使用 PurgeCSS?

我正在用 Tailwind CSS 写 Typecho 主题,因为 Tailwind 提供了丰富的类,而在我的使用中则仅用到了其中的几十个。这导致 CSS 大小造成不必要的冗余。这种情况 Tailwind 文档中提供了解决方案,即使用 PurgeCSS 移除未使用的类。
但在阅读文档的过程中,发现仅有在 Laravel 中使用的方案。我并不能将它用到 Typecho 主题开发中。

关注 4 回答 2

Scvoet 关注了标签 · 9月24日

rust

一门赋予每个人构建可靠且高效软件能力的语言。

关注 436

Scvoet 关注了标签 · 9月24日

golang

Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。Go是谷歌2009发布的第二款编程语言。

七牛云存储CEO许式伟出版《Go语言编程
go语言翻译项目 http://code.google.com/p/gola...
《go编程导读》 http://code.google.com/p/ac-m...
golang的官方文档 http://golang.org/doc/docs.html
golang windows上安装 http://code.google.com/p/gomi...

关注 25953

Scvoet 赞了文章 · 9月24日

突破 DockerHub 限制,全镜像加速服务

最近 DockerHub 修改了定价,对于免费帐号会限制 200 pulls/6小时,对于匿名帐号则限制 100 pulls/6小时。 本文我来介绍下如何使用 Cache 来应对此问题。

背景

DockerHub 是全世界最早也是最大的容器镜像仓库,托管着众多操作系统发行版及各类软件的 Docker 镜像。

在推进业务容器化的过程中,不可避免的,我们会需要使用来自 DockerHub 上的容器镜像。 无论是在个人本地环境中使用,还是用于跑测试服务

以下是两种主要的解决方案:

  • 构建一些公共基础镜像,存放在企业的私有镜像仓库中给业务方使用:

    这种方案下,如果业务方偶尔需要一些小众的/非基础的镜像,可能只是临时测试使用,那通常情况下是没必要将此类镜像作为基础镜像维护的。

    结果可能是:

    • 使用中直接从 DockerHub pull 镜像,网络状况不佳时,就是无尽的等待;
    • 先 pull 镜像,然后 docker tag 重 tag 后, push 到企业的私有镜像仓库中。这种情况下,如果没有较好的镜像管理规则,那么镜像仓库中就会存在各种无意义的镜像,造成存储资源的浪费。
  • 为 docker daemon 配置 Proxy 进行加速:

    • 众多国内镜像加速服务,仅提供 Docker 官方镜像的加速服务,个人/组织下的镜像不提供加速服务
    • 即使在不同节点上,下载相同的镜像,仍然需要通过网络加速,会产生额外的海外带宽成本;

并且近期 DockerHub 修改了其服务价格, 对于免费用户,进行了如下限制:

  • 未登录用户,每 6 小时只允许 pull 100 次
  • 已登录用户,每 6 小时只允许 pull 200 次

如果我们继续使用上述两种模式的话,由于出口 IP 是相对固定的,所以很容易触发 DockerHub 的配额限制。 此限制将于 11 月 1 日正式全面实施。

为了能 提升效率 ,以及 节约加速带宽成本 ,企业内部/个人就非常需要一个 DockerHub 全镜像加速服务了,也就是我们常说的 pull through cache

下面我来介绍下,如何利用 Docker 开源的项目 registry:2 来实现这一需求。

启动服务

使用 registry:2 部署镜像缓存服务很简单,这里先执行 docker pull registry:2 下载所需的镜像:

(MoeLove) ➜  docker pull registry:2
2: Pulling from library/registry
cbdbe7a5bc2a: Pull complete 
47112e65547d: Pull complete 
46bcb632e506: Pull complete 
c1cc712bcecd: Pull complete 
3db6272dcbfa: Pull complete 
Digest: sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551d
Status: Downloaded newer image for registry:2
docker.io/library/registry:2

最小化配置的 DockerHub 镜像缓存服务,只需要使用一个配置项 REGISTRY_PROXY_REMOTEURL 即可:

这里我顺便为它单独创建了一个名为 hub-cache 的 network ,以及创建了对应的 volume 。

(MoeLove) ➜  ~ docker network create hub-cache
19a39f873a23150d3bdaf021e040ccccb092ee3071884d64d52a92df0397b220
(MoeLove) ➜  ~ docker volume create hub-cache
hub-cache
(MoeLove) ➜  ~ docker run --name=cache -d --restart=always --network=hub-cache -v hub-cache:/var/lib/registry -p 5000:5000  -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io registry:2 
6cbdcbdcc2d62ec781479901c20be43184a48b2d73e06f04bd4693253c0c5a73
(MoeLove) ➜  ~ docker ps -l
CONTAINER ID   IMAGE        COMMAND                  CREATED         STATUS         PORTS                    NAMES
6cbdcbdcc2d6   registry:2   "/entrypoint.sh /etc…"   8 seconds ago   Up 6 seconds   0.0.0.0:5000->5000/tcp   cache

验证加速效果

启动一个全新的 Docker In Docker 容器进行验证,避免受到本地环境的影响。

通过传递 --registry-mirror http://cache:5000 ,将刚才启动的 registry 设置为 mirror 。

(MoeLove) ➜  ~ docker run  --network=hub-cache -d --privileged docker:dind --registry-mirror http://cache:5000 
73c56ac25d68927c9f5b0e458f2babc0699cf8595df0d1e86c021fd03d477384
(MoeLove) ➜  ~ docker exec -it $(docker ps -ql) sh
/ # 检查配置是否生效
/ # docker info --format '{{ .RegistryConfig.Mirrors }}' 
[http://cache:5000/]

/ # time docker pull prom/prometheus
Using default tag: latest
latest: Pulling from prom/prometheus
76df9210b28c: Pull complete 
559be8e06c14: Pull complete 
6a4bb3319487: Pull complete 
2cca90a64593: Pull complete 
d2014e464a99: Pull complete 
70b42590e4a2: Pull complete 
54645fcbd6cc: Pull complete 
67d9943de656: Pull complete 
b9c749b1af90: Pull complete 
9723d8eb5323: Pull complete 
7d20502d5322: Pull complete 
3e519cce6f63: Pull complete 
Digest: sha256:d43417c260e516508eed1f1d59c10c49d96bbea93eafb4955b0df3aea5908971
Status: Downloaded newer image for prom/prometheus:latest
docker.io/prom/prometheus:latest
real    0m 42.71s
user    0m 0.12s
sys     0m 0.09s


/ # docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
prom/prometheus     latest              cdfc440228d0        8 days ago          168MB

/ # docker rmi prom/prometheus                                     
Untagged: prom/prometheus:latest
Untagged: prom/prometheus@sha256:d43417c260e516508eed1f1d59c10c49d96bbea93eafb4955b0df3aea5908971
Deleted: sha256:cdfc440228d01d7a94937d7a047fa6461efc1b1806bb20677043fee032810830
Deleted: sha256:c72f348fd2f923996ea80222feb77e34aba9de397bd96206ddc3c8651adc306d
Deleted: sha256:e34df2c00334266a67bb846b958ba6eae3b1d5cdfe9d763707027a23e7c85100
Deleted: sha256:d2cb38310ada122064b7333bbfc12c67dc58acb30e29146b3ba1e24adc27a950
Deleted: sha256:7a87cd520d19a83b3582541aac4d95098ae5016b092e72eaf80dc54f587bf51e
Deleted: sha256:f84c79dceed6b5a27234c1291d0bdccab5c459d587f13934d74db9b9e79471c6
Deleted: sha256:f542b0cffe0fe16c31c98e7eed934d5fea5e598c03b53b4efd308a62e0e9c6a9
Deleted: sha256:f746b4a525727bcb79367d009d707ef45d75bac09aaa18a68c20a19046df0897
Deleted: sha256:09b45653ee7062c7cd754885bf46ebe554d0794573fb2e200acea8644e64670f
Deleted: sha256:867526c56b30e67493341ef33890aa242c1131e4bb4151e60011b4d450892d59
Deleted: sha256:86d629b358ee70bdb0f0a11c10915b8551e904fe337f9a8bfcad476977329532
Deleted: sha256:842455c528af7383ba4a0de424fc63664a0248581a191516d6dbf45195c69426
Deleted: sha256:1be74353c3d0fd55fb5638a52953e6f1bc441e5b1710921db9ec2aa202725569

/ # time docker pull prom/prometheus
Using default tag: latest
latest: Pulling from prom/prometheus
76df9210b28c: Pull complete 
559be8e06c14: Pull complete 
6a4bb3319487: Pull complete 
2cca90a64593: Pull complete 
d2014e464a99: Pull complete 
70b42590e4a2: Pull complete 
54645fcbd6cc: Pull complete 
67d9943de656: Pull complete 
b9c749b1af90: Pull complete 
9723d8eb5323: Pull complete 
7d20502d5322: Pull complete 
3e519cce6f63: Pull complete 
Digest: sha256:d43417c260e516508eed1f1d59c10c49d96bbea93eafb4955b0df3aea5908971
Status: Downloaded newer image for prom/prometheus:latest
docker.io/prom/prometheus:latest
real    0m 5.27s
user    0m 0.06s
sys     0m 0.03s

可以看到,在首次 pull prom/prometheus 镜像时,耗费了 42+s 的时间,而删除掉已下载的镜像后,再次 pull, 则只需要耗费 5+s 的时间。速度提升非常的明显。镜像加速效果达成

使用配置

对于 Linux 系统而言,仅需要在 /etc/docker/daemon.json 文件(如果没有此文件,直接创建即可)中写入你的镜像加速服务的域名,重启 docker daemon 即可(也可选择 reload 配置)。

{
        "registry-mirrors": [
                "https://hub-cache.moelove.info"
        ]
}

或者是在 docker daemon 的启动参数中加入 registry-mirror 配置项。

对于 Mac 和 Windows 用户,直接在 Docker Desktop 系统设置中,配置 registry-mirrors 即可。

注意 如果 Docker daemon 中配置了 HTTP_PROXYHTTPS_PROXY ,那么需要将加速域名配置在 NO_PROXY 中,避免被代理。

总结

本文介绍了如何使用 Docker 开源的 registry:2 搭建 DockerHub 的镜像加速服务。这里只介绍了最简单的配置。

但如果在企业环境中部署的话,需要有更多的配置。比如,可以通过配置 REGISTRY_HTTP_DEBUG_PROMETHEUS_ENABLED 暴露 Prometheus metrics ,用于监控服务可用性及查看 cache 的效果;可以对日志及相关字段进行配置;
为了避免在 11 月后,触发到 DockerHub 的流量限制,可以横向进行扩容,准备多出口 IP,以及配置账户等。

最近新发布的 Harbor v2.1 貌似多了一个作为 proxy cache 的特性,但它与本文介绍的 pull through cache 并不相同,使用 Harbor 的 proxy cache 特性,需要将待 pull 的镜像,设置成 <harbor_servername>/<proxy_project_name>/repo/name:tag 的形式,这样子只是省去了本文一开始介绍的那种手动重 tag 的操作,不够方便,但也是个很不错的特性了。


欢迎订阅我的文章公众号【MoeLove】

TheMoeLove

查看原文

赞 7 收藏 4 评论 0

Scvoet 赞了文章 · 5月31日

SegmentFault 思否开源项目支持计划启动,为你的开源项目助力!

SegmentFault 思否开源项目支持计划

很高兴可以看到,开源正迎来最好的发展时期。

20 年前的开源项目,基本上是由个人开发者主导的。但随着开源精神的发展以及开源文化的普及,越来越多的企业与科技公司参与到了开源生态的建设当中。

但归根结底,开源更多的是一种社会化活动,很多的项目创意也是来自个人或者小型团队。个人有了兴趣,有了想法,并进而动手形成项目,而后建立社区,或者成立公司继续推进。这种模式将会持续存在,也是技术创新的一种健康和合理途径。所以游离于大公司外的开源项目和植根于大公司内的开源项目,会长期共存。

但根据社区部分开源作者的反馈,大部分的优质个人开源项目很难进行有效的传播推广。


为助力优质开源项目成长, SegmentFault 思否社区作为服务于开发者的技术社区,正式推出「SFOSSP - 思否开源项目支持计划」,我们希望借助社区的资源对开源项目进行相关的宣传推广,并作为一个长期项目助力开源事业的发展,与广大开发者共建开源新生态。

一、思否提供哪些永久的免费支持资源?

  1. 为开源项目在社区创建技术标签 ,如「Flutter」「TDengine」等;
  2. 思否编辑团队协助进行开源项目报道的文案整理优化;
  3. 思否资讯板块配合开源项目的相关发布报道;

二、思否可参与报道的内容类型有哪些?

  1. 开源项目介绍
  2. 开源项目重大版本发布
  3. 开源项目重要的里程碑事件
  4. 开源项目重要的技术突破
  5. 更多的报道需求,请与思否编辑团队进行深度沟通交流

三、对于开源项目有哪些要求?

  1. 个人项目、团队项目、商业开源项目都可以申请参与;
  2. 开源项目需要有明确的应用场景以及较高的项目质量;
  3. 开源项目的负责人要对提供的报道内容真实性负责。

有意向的开源项目负责人或团队成员,可通过邮箱提供相应的信息(开源项目地址、项目介绍、团队介绍、联系方式等),以便提升交流的效率。

  • 联系邮箱:pr@segmentfault.com
  • 思否开源项目申请表:申请表

clipboard.png

查看原文

赞 36 收藏 5 评论 19

Scvoet 赞了文章 · 2月17日

Git分支命名规范

分支命名说明
主分支master主分支,所有提供给用户使用的正式版本,都在这个主分支上发布
开发主分支dev开发分支,永远是功能最新最全的分支
功能分支feature-*新功能分支,某个功能点正在开发阶段
发布版本release-*发布定期要上线的功能
修复发布版本分支bugfix-release-*修复测试bug
紧急修复分支bugfix-master-*紧急修复线上代码的 bug
主分支 Master

代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。
主分支必须是可用的、稳定的、可直接发布的版本,不能直接在主分支上开发。

开发主分支Dev

Master主分支只用来发布重大版本,日常开发应该在另一个分支上完成,我们把开发用的分支,叫做Dev。
这个分支可以用来生成代码的最新隔夜版本(nightly)。
如果想正式对外发布,就在Master分支上对Dev分支进行合并(merge)。
Dev分支代码永远是最新的,所有新功能以这个分支来创建自己的开发分支,该分支只做合并操作,不能直接在该分支上开发。

功能分支Feature

功能分支的名字,可以采用feature-*的形式命名,以自己开发的功能命名。
功能分支是分配开发不同的功能用的,从Dev创建功能分支,然后完成相应功能开发后合并回Dev分支并删除该功能分支

预发布分支Release

预发布分支名字,可以采用release-*的形式命名
预发布分支是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。
预发布分支是从Dev分支上分出来的,预发布结束之后(即测试没有问题之后),必须合并进Dev和Master。

修复预发布分支Release-bug

修复预发布分支的bug,可以采用release-bug-*的形式命名
在预发布版本测试出现bug时,从release分支创建分支进行bug修复,bug修复完成后在合并会release分支

紧急修补分支Bug

修补分支的名字,可以采用bugfix-master-*的形式。
该分支是为了紧急修复线上的bug。
软件正式发布之后,难免会出现bug。这时就需要创建一个分支,进行bug修补。
修补bug分支是从Master分支上面分出来的。修补结束之后,再合并进Master和Dev分支。
尽量避免线上问题的出现

注:一个分支尽量开发一个功能模块,不要多个功能模块在一个分支上开发.
feature分支申请合并之前,最好先pull一下dev分支下来,看一下有没有冲突,如果有冲突就先解决冲突后再合并回dev

查看原文

赞 2 收藏 1 评论 0

Scvoet 赞了文章 · 1月5日

开源文档管理系统 Wizard 1.2 发布

前段时间阿里正式发布了语雀,不得不说,在团队文档管理方面,语雀的用户体验确实做得非常不错。趁着这个热度,当时就想给我在2017年开源的 Wizard 项目写一篇文章,大概介绍一下 Wizard 支持的功能。但无奈刚好那段时间工作太忙,一直没有时间来好好梳理一下。

概述

Wizard 是一款开源的文档管理系统,支持 Markdown 文档,Swagger 文档以及表格文档,适应于中小规模的技术团队文档管理,完全免费。Wizard 并不是一款云产品,不提供任何云服务,如果你的团队想要使用他,你必须在自己公司内部独立部署。正因为这样,你的数据和技术文档安全是有保障的,不会泄露给任何不信任的第三方。

Wizard-功能预览图

更新内容

由于上次写文章来介绍 Wizard 是发布 1.0 版本,因此这里就把从 1.0 到 1.2 的所有主要更新内容都列出来了。

  • 增加 黑暗主题 的支持,你可以自由切换两款主题
  • 在 Markdown 模式下,实现了对 mermaid 绘制流程图,序列图,饼图,类图,状态图等各种图表的支持。 查看使用说明
  • 在 Markdown 模式下,增加了对数据库数据结构展示卡片的支持,现在,你可以直接将 SQL 建表语句放置在代码块中,Wizard 将会为你转换为表格展示。 查看使用说明
  • 实现跨项目移动文档功能
  • 文档导出功能,支持单个或者批量导出 PDF 或者 Markdown 文档
  • 增加“项目目录是否在首页展示”的支持,现在,你可以控制首页展示哪些项目目录了,参考 在首页隐藏项目目录
  • 表格类型文档 完善,现在作为正式功能,去掉 beta 标识
  • 文档差异对比 优化,文档差异对比更加清晰
  • Markdown 文档展示优化,展示效果更加友好,新建文档使用最新的 markdown 解释器,修复了之前的一些 bug
  • Markdown 增加 框架页展示 支持

更多功能更新参考项目的 Releases 页面。

功能概览

项目的地址为

https://github.com/mylxsw/wizard

作为一款开源的文档管理系统,Wizard 主要支持下面这些功能

  • 文档管理

    • Markdown 文档管理,支持各种功能扩展(流程图,LaTex,数据结构等)
    • Swagger API 文档管理
    • 表格 文档管理(类似于简化版的在线 Excel)
  • 用户权限

    • 类似于 Gitlab 的权限管理体系,你可以建立用户组,为一组用户分配项目的读写权限
    • 基于 LDAP 的统一身份认证(LDAP/活动目录),你可以将其接入到公司统一的账户管理体系,只需要修改几行配置
  • 文档评论
  • 文档变更历史,文档变更差异对比
  • 多主题自由切换
  • 项目分组,你可以将一些相关联的项目组成一个组,方便更快的检索文档
  • 其它

    • 文档附件
    • 文档分享
    • 阅读模式
    • 内容模板
    • 文档搜索
    • 等等

你可以访问 http://wizard.aicode.cc/ 在线体验 Wizard 的功能。

在线版本的 Wizard 由于服务器配置比较低,访问可能会比较慢,而且权限比较开放,任何人都可以编辑,内容比较乱一些。

部分功能展示

Markdown 文档展示

Swagger 文档展示

表格文档展示

文档差异对比

更多功能展示请查看项目的 Wiki 文档

关于代码

项目采用了 Laravel 框架开发,目前版本已经升级到 5.8(最开始为5.4,一路升级过来)。为了提高开发效率,保持架构的简洁,在开发过程中,一直避免引入过多的外部组件,尽可能的利用 Laravel 提供的各种组件,比如 AuthenticationAuthorizationEventsMailNotifications 等,非常适合用来学习 Laravel 框架。

总结

如果你在为公司寻找一款开源免费的 开发文档/API文档管理 工具,不妨考虑一下 Wizard 项目(多一个选择,为什么不尝试下呢),一定不会让你失望的。如果你是一名 PHP 或者 Laravel 新手,想找个项目学习一下如何用 Laravel 做 Web 开发,这个项目更加不能错过!

最后,赶紧去 Star 一波,顺便给我个 Star ,你的支持是我坚持下去的动力 !如果再能贡献点 Issues 或者 PR,那就更好啦 😄!

查看原文

赞 14 收藏 9 评论 0

Scvoet 关注了专栏 · 2019-08-09

Jerry Wang的SAP技术专栏

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使

关注 43

认证与成就

  • 获得 0 次点赞
  • 获得 4 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 4 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-11-18
个人主页被 72 人浏览