内网自部署存储迁移到自部署的 S3

内网自部署存储迁移到自部署的 S3 1. 存储的烦恼 我日常会使用一些自部署的服务,如写作的 Affine、代码服务 Gitea、备忘录记录服务 memos 记录自己的碎碎念。自部署这些服务的时候通常会涉及一些资源的存储,比如 Affine 中上传的图片资源、Gitea 的 package 制品、memos 中上传的图片等都需要消耗自身的存储空间。而我部署的平台是 PVE 的 Docker LXD 容器,这个容器里面使用 Docker 部署了一堆服务,存储已经扩了一遍又一遍了,然而主机上的存储也见底了。 正好家里还有一台绿联的 NAS,里面有一个闲置的存储池,正好用来建一个 S3 存储给以上这些服务使用。这样一方面可以在同一个地方管理上传的对象,另一方面也可以利用存储池 Raid 做一些备份。 2. 部署 Rustfs 要说开源 S3 实现就不得不提大名鼎鼎的 Minio 了,然而其因为商业化已经停止了仓库的维护。况且我的 NAS 也仅是 4C8G 的配置,所以资源能省则省,基于 Rust 开发的 Rustfs 就是最好的选择——部署简单,资源占用低,性能还高,简直是居家旅行、自部署常备。 NAS 上的 Docker 不能命令行,只能图形界面操作,就略过部署过程了。 部署好了之后打开 console 端口 9001 即可进行存储桶操作。 2.1 使用 AWS CLI 测试访问 创建一个访问密钥,使用 AWS CLI 来测试访问。在 ~/.aws/credentials 中配置好访问密钥,~/.aws/config 中配置 endpoint 信息: [default] region=us-east-1 endpoint_url=http://192.168.5.103:9000 region 随便填一个值就可,测试访问:...

2026-05-02 · 1 min · 184 words · Linkzz

自签名证书部署内网 https 版 lobe-chat

1. 背景 一开始部署了 Nextchat 作为我日常的 AI 问答网页应用,原因很简单: 该项目启动早,社区很活跃 网页应用结合 PWA 使用起来也很方便 支持模型供应商全面 但是使用了一段时间之后接触到了更为全面和强大的 lobe-chat,lobe-chat 发展迅速,社区更为活跃,社区版支持子部署,且没有功能限制,公司级的开源项目,产品 UI 设计很现代,社区 Roadmap 还计划支持更多的功能,如文生视频,助手自主学习等功能(无恰饭,纯使用感受)。 起初仅通过 docker-compose 部署了纯前端版本的 lobe-chat,这个版本由于是纯前端,没有多端同步的功能,同一份配置需要在家里电脑、公司电脑和手机上重复配置,相当麻烦,所以还是部署数据库版本的完全体 lobe-chat 更为合适。 2. 官方脚本部署 2.1 脚本部署 说干就干,目前版本是 v1.49.12,使用官方 docker-compose 部署脚本部署: bash <(curl -fsSL https://lobe.li/setup.sh) -l zh_CN 支持 3 种模式部署: 本地模式(默认):仅能在本地访问,不支持局域网 / 公网访问,适用于初次体验; 端口模式:支持局域网 / 公网的 http 访问,适用于无域名或内部办公场景使用; 域名模式:支持局域网 / 公网在使用反向代理下的 http/https 访问,适用于个人或团队日常使用; 第一种模式纯自身访问,无法从其他设备访问,局限性很大;第二种模式在局域网中访问可行,但是 IP 端口访问的方式在局域网环境中我并不推崇,一是需要记忆特定的 IP 端口,而是 http 的方式无法安装 PWA 应用,仅适用于初次体验,而我自身用于家庭服务器,并且部署了一个自签名证书的 Nginx,完全可以试用该证书部署 https 的服务,而不用担心暴露公网,通过 VPN 即可在任何地方访问家庭服务也很方便,关于自签名证书和我的服务器拓扑 VPN 配置等信息我在 这篇文章 以及 这篇文章 中有详细介绍,这里不再赘述。...

2025-02-07 · 8 min · 1590 words · Linkzz

简单记录一下 Docker 容器中信任一个自签名证书的案例

1. 背景 起因是我的 ttrss 容器需要订阅一个自部署的微信公众号订阅服务 wewe-rss ,在 web 页面添加订阅一个订阅源 http://192.168.5.128:8109/feeds/MP_WXS_3925660753.atom,添加之后 ttrss 报错 无法从指定的网址下载:cURL error 7: Failed to connect to 192.168.5.128 port 80 after 0 ms: Couldn't connect to server (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for http://192.168.5.128/feeds/MP_WXS_3925660753.atom 但是仔细看报错日志,我的服务端口明明是 8109 但是 ttrss 却访问了 80,暂时不知是不是 ttrss 的 BUG,所以我便换了一个 nginx 代理的本地服务来反代 wewe-rss 的服务,由于我 nginx 配置了一个自签名的证书,客户端信任这个证书之后可以开启一些自部署服务只能 https 才能开启的功能,比如密码管理器 vaultwarden 。扯远了,回到正题,现在我已经配置好了反代的服务,新的订阅服务链接为:https://wewe.linkzz.hm/feeds/MP_WXS_3925660753.atom,但是直接在 ttrss 中配置还是会报错证书无法信任,所以这就来解决这个问题。 2. 信任证书 以下的操作是基于 Ubuntu 2204 版本,其他发行版没测试过。 2.1 确认证书类型 我是使用的 mkcert 生成的 CA 证书,证书包含 rootCA.crt 和 rootCA.pem 文件,crt 是二进制文件,只包含证书内容,在 windows 环境下可以直接安装,而 pem 是 base64 编码的文本文件,它包含了证书内容、证书链等信息,在 Ubuntu 中信任证书需要 pem 文件。...

2024-04-10 · 3 min · 592 words · Linkzz

Docker 环境下的 qBittorrent 容器迁移至 lxc 保留配置

1. 背景 我的 qBittorrent 下载器是部署在 Docker 容器中的,而这个 Docker 的宿主机是一个 pve 的容器,他有一个独立的 IP,这个 IP 的网关指向了一个透明网关以实现大陆网络优化(国内特色),关于我的网络拓扑可以查看我以前的这篇 文章 但是下载器的流量经过 clash 之后需要单独对 BT 流量命中规则,我用的是 clash-meta 的核心,支持逻辑规则,于是我是这样写的: # bt下载全直连 - AND,((SRC-IP-CIDR,192.168.5.128/32),(NOT,((DST-PORT,443)))),DIRECT 以上规则解释就是:来自 192.168.5.128IP 的目标端口非 443 的连接全直连,比较简单粗暴一刀切,但是这个规则还是会误杀一部分的流量,但至少可以避免大部分的 BT 流量了。 虽然问题是暂时解决了,但这个方案并不是最优,存在以下坑: 如果 Docker 的宿主机 IP 换了规则得更新 目标端口 80 的流量也应该继续下面的规则匹配 (当然这是因为懒没加到规则里面) 会误杀掉一部分的流量 2. 迁移 为了解决上面提到的问题,也为了把 qbittorrent 版本升级一下,我决定单独给他一个创建一个 lxd 容器,这样可以将网络直接指向上级网关,不必走透明网关。 2.1 创建容器 通过 pve 的内置 pct 命令创建容器: pct create 117 \ ugreen:vztmpl/archlinux-base_20230608-1_amd64.tar.zst \ --cores 6 \ --memory 512 \ --hostname qbit \ --net0 name=eth0,bridge=vmbr0 \ --features mount="nfs;cifs" \ --swap 512 \ --rootfs volume=local-lvm:8 2....

2024-04-09 · 1 min · 196 words · Linkzz

甲骨文免费Arm主机新玩法-云安卓手机

1. 前言 我的一篇 文章 中有提到过云安卓手机的项目-redroid,该 项目 基于容器技术,构建一个安卓的运行时,同时通过Linux的内核模块,支持调用宿主机的硬件资源,同时其可运行于 x86 架构之上,通过转译来运行仅支持 arm 架构的安卓应用,用来跑app测试可以一试,正好甲骨文的arm主机资源没有好好利用,今天就来折腾一下这个玩法。 2. 加载内核模块 ashmem_linux、binder_linux 2.1 基于 Ubuntu 20.04 以上发行版 这两个模块是容器运行必须的内核模块,按照官方文档,在 Ubuntu 20.04 以上版本中,这两个模块已经编译到内核里了,可以直接 modprobe 命令加载,所以如果你的 arm服务器 正好是Ubuntu 20.04 以上版本,按照一下命令即可运行: # 安装额外内核模块 apt install linux-modules-extra-`uname -r` # 加载内核模块 modprobe binder_linux devices="binder,hwbinder,vndbinder" modprobe ashmem_linux # 运行容器 docker run -itd --rm --privileged \ --pull always \ -v ~/data:/data \ -p 5555:5555 \ redroid/redroid:11.0.0-latest \ androidboot.redroid_gpu_mode=guest 2.2 Oracle Linux 8 否则如果你像我一样开主机的时候选了 Oracle Linux 8 的话,很遗憾,官方没有该系统的运行文档,以上两个内核模块也并没有编译,奈何我对该发行版不熟,升级了官方内核到 5....

2023-12-06 · 2 min · 368 words · Linkzz