整理了一下我目前所有折腾的,盒子(树莓派、各种派)、云服务器、NAS等服务的构成情况:
我分三个部分,分别介绍:家里、公司、云端.
家里
家里目前有两个部分构成,一个是群晖的成品NAS,另外一个我用R5C(ARM开发版、小主机)和一个两盘位的硬盘盒,以及两块旧硬盘搭的一个小NAS, 这个NAS主要用来做PT下载和上传的任务.
为什么不用群晖的NAS直接做,因为想把这些PT下载和用来刷流量的数据,与我存放在群晖NAS的重要数据分开,降低损坏丢失数据的风险.
下面我分享下我在他们上面搭建的服务,全部都是在 Docker 中进行部署,所以我附上,简单的Docker部署脚本.
Gitea
首先是 Gitea,是一个轻量级的 Git 管理平台,用来管理我平时写的一些私有的代码. 开源的我都会同步提交到GitHub. 搭私有Git的主要原因有两个,一个是代码安全私有,另外一个就是速度块,相比GitHub,平时推拉的速度非常顺滑.
Gitea 依赖于 MySQL, 所以首先得部署Mysql (可以使用docker-compose一起进行部署,我这里分享下分开部署的办法,在已经有MySQL的情况下也可以用):
docker run -d --name mysql -p 3306:3306 -v /docker/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
/docker/mysql
: 数据存放的目录
MYSQL_ROOT_PASSWORD=123456
: 设置mysql root用户的密码.
在 MySQL 创建好后,为 Gitea 创建一个账户:
create database gitea character set utf8mb4;
CREATE USER 'gitea'@'%' IDENTIFIED BY '123456';
GRANT all privileges ON gitea.* TO 'gitea'@'%';
部署 Gitea:
docker run -d --name gitea -p 9001:3000 -p 9002:22 -v /docker/gitea:/data gitea
3000
: web端口
22
: ssh端口
/docker/gitea
: 数据目录
部署完成后,打开 http://yourip:9001 进入 gitea web 页面根据提示配置即可. (主要配置mysql数据库连接信息)
Navidrome
私有音乐库的音乐服务.
Navidrome 是一个开源的基于 subsonic 协议的音乐播放器,同时有一个简约漂亮的Web播放页面,用起来体验还是不错的, 配置好NAS的音乐文件目录,它就会自动扫描整理,我现在听歌基本都是用它. 而且虽然家里的网络上传只有50M带宽,但是听无损音乐是足够了.
docker run -d \
--name navidrome \
--restart=unless-stopped \
-v /home/xmusic/music:/music:ro \
-v /docker/navidrome:/data \
-p 80:4533 \
--env-file=/root/docker/navidrome/navidrome.env \
navidrome
/home/xmusic/music
: 音乐文件存放的文件夹
/docker/navidrome
: navidrome应用的配置文件,存放应用的配置数据,比如用户管理、播放列表、最近播放等
--env-file=/root/docker/navidrome/navidrome.env
: 指定配置文件, 具体配置选项说明在这里:Navidrome
Docker Registry
部署docker私有仓库的主要原因是为了提升平时部署常见的 docker 应用的速度,可以将常用的 docker 镜像更改 tag,推送到私有仓库,这样部署时速度会非常快. 我平时开发的一些基于docker部署的小项目也会推送到私有仓库,以便提升开发效率.
这部分可以参考我之前分享的这篇文章:群晖NAS搭建Docker私有镜像库
下面分享的两个应用我在自建NAS上(我称为BT下载中心).
Transmission
这是我的PT站下载及刷流工具. transmission
docker run -d \
--name=transmission \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-e TRANSMISSION_WEB_HOME= `#optional` \
-e USER= `#optional` \
-e PASS= `#optional` \
-e WHITELIST= `#optional` \
-e PEERPORT= `#optional` \
-e HOST_WHITELIST= `#optional` \
-p 9091:9091 \
-p 51413:51413 \
-p 51413:51413/udp \
-v /path/to/data:/config \
-v /path/to/downloads:/downloads \
-v /path/to/watch/folder:/watch \
--restart unless-stopped \
lscr.io/linuxserver/transmission:latest
qBittorrent
这个也是个PT工具,和 Transmission 比,它的下载速度更快,但是耗费的内存和CPU也更多,听说是多线程下载(我还没深入研究过), 我用它比较少,急的时候用. 在家里千兆网的环境下,Transmission 的下载速度可以达到 25M/s,对于远程下载电影的需求来说其实也够了.
关于私人影音库搭建,可以参考我写的这一篇:私人影音库的搭建
docker run -d \
--name=qb \
-e TZ=Asia/Shanghai \
-e WEBUI_PORT=8003 \
-v /root/docker/qb/config:/config \
-v /root/pt_downloads/movie:/downloads \
-p 8003:8003 \
--restart always \
linuxserver/qbittorrent:latest
公司
公司里有两台小服务器,
- 树莓派+硬盘盒构成的一台NAS, 主要是和同事之间平时通过SMB分享文件和各种资源,我在它的上面也部署了 Navidrome,这样我们在公司内网环境下,就可以一起听本地无损音乐.
- R2S(arm开发版,小主机),部署的我开发的一个提升工作效率的 NextJS 应用.
办公室NAS
工作效率工具(xwork)
R2S原来是在家里用做软路由的, 所以安装的是openwrt系统 - iStoreOS:
我在里面安装了 Docker, 用来部署NextJS开发的一个全栈应用:
这里就用到了我家里部署的 Docker 私有仓库,我每次开发完会 Push 到私有仓库,接着通知 xwork 去自动拉去最新的镜像,删除老的镜像,并部署到 Docker 容器,这个过程的脚本是这样的:
#!/bin/bash
# 删除容器
docker_ps_kenya=$(docker ps -a | grep 'kenya' | awk '{print $1}')
if [ -n "$docker_ps_kenya" ];then
echo "正在删除容器..."
docker rm -f "$docker_ps_kenya"
else
echo "没有需要删除的容器."
fi
# 拉取镜像
echo "重新拉取镜像..."
docker pull [我的私有仓库的地址]/kenya:0.0.3
# 删除旧的镜像
old_images=$(docker images | grep 'none' | awk '{print $3}')
if [ -n "$old_images" ]; then
echo "正在删除旧的镜像..."
echo "$old_images" | xargs -r docker rmi -f
fi
# 运行
echo "正在启动镜像..."
docker run -d -p 9999:3000 --name kenya \
--restart=always \
--env-file=/docker/kenya/kenya.env \
--hostname=xwork \
[我的私有仓库的地址]/kenya:0.0.3
echo "Reload 完成!"
云端
云端目前我主要用一个付费的(国内):腾讯云,及两个免费的(国外):CloudFlare & Vercel.
腾讯云
系统是 CentOS 7
主要部署一些:
java应用
:微信小程序服务端应用
个人网站评论后台
:NextJS 项目
MySQL
:所有应用共用的数据库
Docker
: 部署了 influx + grafana 做服务监控(目前已停用,太占用内存)
此外,国内的域名及备案信息都托管在腾讯云.
CloudFlare
国外域名托管及使用 Pages 部署个人网站(纯静态) https://kongkong.me
Vercel
因为 Vercel 部署 NextJS 非常方便(因为是一家),所有我的一些NextJS应用都部署在这里,比如GPT-API的壳ChatGPT-Next, 还有我自己开发的设备管理平台:beer (后面我会单独分享,并且开源这个项目):