代码仓库 gitea
没有用 gitlab,那个太吃资源了。
直到某天无聊翻群晖的应用市场,看到了 gitea,我才开始有属于自己的 git 仓库。所以我的 gitea 是在群晖应用市场安装的,没有装在 k8s 集群内(当然,它的官方文档里有关于在 k8s 集群里安装的方法)。
对于没有安装在 k8s 集群内的应用,为了能享受到集群里全自动 https 的福利,专门在集群里启了个 nginx 做代理。cicd 相关的服务也很需要 https,不然要到处配置允许访问 http 的服务。
nginx 相关配置
client_max_body_size 1G;
large_client_header_buffers 4 16k;
gzip on;
gzip_min_length 1k;
gzip_vary on;
# gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/html text/css text/javascript application/javascript application/json text/xml application/xml application/xml+rss image/svg+xml application/font-sfnt;
server {
listen 80;
server_name git.apihub.net;
if ($http_user_agent ~* "bot|facebook") {
return 403;
}
location /robots.txt {
return 200 'User-agent: *\nDisallow: /';
}
location / {
proxy_pass http://10.168.1.100:8418;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 80;
server_name hb.apihub.net;
location /v2/ {
proxy_pass http://10.168.1.100:15000;
}
location / {
proxy_pass http://hb-web:8080;
}
}
server {
listen 80;
server_name mirrors.apihub.net;
location / {
proxy_pass http://10.168.1.100:8081;
}
}
软件源 nexus3
nexus3 不止是 mvn 的镜子仓库,也可以做 npm、pypi 的加速。推荐 B站上的这个up主 的视频,里面有个 nexus3 系列。
这种 重网络和存储、轻计算、还只是内网访问自己一个人用的 应用,我也没有部署在集群里,安装到 群晖 docker 里了。
好的习惯,肯定要把 docker hub + github 里的介绍说明完整看一遍再动手。注意下面这个权限问题。

容器仓库 docker-registry
没有用 harbor。我只是要推拉一下镜像而已。同样是 重网络和存储、轻计算、一个人用 的应用。registry 安装到了 群晖 docker 里。
后来给它配了一个 web 页面,用的 klausmeyer/docker-registry-browser
打包构建 buildkit
没有用 jekins。它是一个功能很庞大的软件。HomeLab 场景下,没有运维团队帮忙,“点一下就构建完成”的背后,感觉需要巨量的运维领域知识的学习成本,很不值得。
HomeLab 场景下,也没有团队协作的负担。我用的 docker 底层的镜像构建工具 buildkit。用 Dockerfile 和 Makefile 实现一个命令行完成打包构建并推送容器镜像。可以复用很多开发岗已有的知识储备。
k8s 里部署 buildkitd
# 容器镜像
moby/buildkit:master
# 参数
--addr tcp://0.0.0.0:1234
# 容器安全上下文
privileged=true
# service 开放端口
1234



不用挂载持久化存储。没事别瞎搞服务器,就一年都不会被重启一次。构建过程中的缓存文件,直接让容器重启后丢失就行了,有 nexus3 内网软件源的加速,已经很快了。
使用 buildkitd
首先,需要写一个 Dockerfile,比如:
# 使用一个基础镜像
FROM hb.apihub.net/nginx:stable
# 将当前目录下的所有文件复制到镜像的指定路径
COPY ./dist /usr/share/nginx/html
COPY nginx.conf.template /etc/nginx/templates/default.conf.template
# 暴露容器的端口
EXPOSE 80
# 启动Nginx服务器
CMD ["nginx", "-g", "daemon off;"]
然后,要有个 Makefile:
build:
npm run docs:build
buildctl \
--addr tcp://buildkitd.cicd.svc.cluster.local:1234 \
build \
--frontend dockerfile.v0 \
--local context=. \
--local dockerfile=. \
--output type=image,name=hb.apihub.net/feling.net/pages:1.0.0,push=true
最后,运行 make build
命令就行了。
上面的例子中,make build 先执行了 npm run docs:build
命令,对一个前端项目进行构建,然后 buildctl
命令负责请求集群内的 buildkitd 服务执行 打包构建并推送镜像。
当然不止这一种写法,可以把整个流程都写到 Dockerfile 里。FROM node:22 as builder
、RUN git clone xxx
、再 FROM nginx:stable
、COPY --from=builder xx xx
。
我们需要深入掌握的,只有各种类型项目 Dockerfile 的写法,这可以是研发应具备的技能。Makefile 和 buildctl 命令,都只需要几分钟的时间入门,甚至看完上面那个 Makefile 的例子,就已经入门完了。
todo
buildkitd 实例内部,支持翻墙。FROM hb.apihub.net/nginx:stable
为什么是 hb.apihub.net,因为目前拉不到 docker hub 的镜像。