导航

我的所有服务器及应用

整理了一下我目前所有折腾的,盒子(树莓派、各种派)、云服务器、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 是一个开源的基于 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 (后面我会单独分享,并且开源这个项目):