基于Docker的HomeServer搭建指南
- ProteinPig
之前在D版发了几个利用Docker搭建下载机的帖子,感兴趣的人挺多的,这里就把我在建立整个HomeServer的折腾过程给大家分享一下,大家也可以少走弯路。
索引准备工作
安装Linux
安装Docker
安装Docker Compose
环境配置
批量部署应用
应用推荐
0.准备工作在进行之前我们需要准备另一台电脑,并让两台设备处于同一个局域网。如果是Windows,请备好Xshell、WinSCP之类的软件。以下命令请使用Xshell连接到服务器运行,直接鼠标键盘显示器输入也OK。因为本文并不是手把手教你每一步操作,如果遇到问题,请善用搜索。
1.安装LinuxDocker虽然也可以安装在Win、Mac下,但是为了不给自己以后的维护添麻烦,还是建议安装Linux。大家按自己的喜好挑一个发行版就可以了,小白建议使用Ubuntu Server LTS。这里不再赘述,相关的安装教程,一搜一大堆。群晖上的Docker也是可以的,不过注意版本。
2.安装Docker其实Docker的文档已经非常齐全了,大家只要参照Docker的文档依葫芦画瓢就可以装好了。
https://docs.docker.com/install/linux/docker-ce/ubuntu/
实在不行,Docker也提供了脚本简化安装。
复制代码- curl -fsSL https://get.docker.com -o get-docker.sh
- sudo sh get-docker.sh
3.安装Docker ComposeDocker Compose是Docker官方的编排服务,简单来说就是可以快速部署应用。(对我们来说就是批量安装应用)
复制代码- sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
- sudo chmod +x /usr/local/bin/docker-compose
里面的1.23.1是当前Docker Compose的版本号,可以在下面的页面查看最新的版本号。
https://github.com/docker/compose/releases
4.环境配置在批量部署应用之前,我们需要把服务器的环境稍微搭建一下,以满足我们的需求。
4.1把用户添加到docker组为了安全考虑,我们要把正在使用的用户添加到docker组,以免root权限滥用。
复制代码- sudo usermod -aG docker 用户名
4.2获取PUID、PGID因为Docker容器里面的内容实际是root权限的,如果不给容器指定PUID、PGID会出现非常多的文件权限问题。(比如文件非root用户无法删除等问题)
复制代码- id 用户名
从显示的输出找到uid=1000(用户名)、110(docker)这样字样,记下。
4.3编辑环境变量这是为了方便在编写Docker Compose编排文件时的可读性,如果你明白怎么编排,可以不做这一步,只需要把每一个变量都用实际值代替就好。小白按下面操作:
复制代码- sudo nano /etc/environment
添加如下内容:
复制代码- PUID=1000(上面的ID)
- PGID=110(上面的ID)
- TZ="Asia/Shanghai"
- USERDIR="/home/用户名"
4.4建立docker文件夹我们在“/home/用户名”里建立一个docker文件夹,方便所有文件归档到此处:
复制代码- mkdir ~/docker
为了方便权限管理,可以把这个文件夹和它下面的子文件夹(包括新建的)的权限赋予docker组。
复制代码- sudo setfacl -Rdm g:docker:rwx ~/docker
- sudo chmod -R 775 ~/docker
OK,环境搭建的差不多了,以下内容我们都假定在“/home/用户名/docker”这个文件夹操作。
先不着急,我们把机器重启一下。
复制代码- sudo reboot
5.批量部署应用Docker Compose使用YAML的文件来编写部署的具体内容,详细的细节我们不需要关心,我们可以把每一个应用都看作是套用一个模板,一个典型的模板如下:
复制代码- # Transmission – Bittorrent Downloader /注释
- transmission: /应用名称
- image: linuxserver/transmission /使用哪个镜像建立容器
- container_name: transmission /容器名
- hostname: transmission /主机名,Samba等需要广播主机名的容器会用到
- restart: always /是否重启
- cpus: 1.2 /CPU资源限制,除以核心数得到百分比,4核心为1.2/4=30%,注意version 2.x才支持。
- ports: /开放的端口,左边是机器的端口,右边是容器的端口
- - 9091:9091
- - 51413:51413
- - 51413:51413/udp
- volumes: /容器需要存储数据的话,把数据存到容器外(保存在容器里面,容器一删除就没了)
- - ${USERDIR}/docker/transmission:/config
- - ${USERDIR}/Storage/Downloads:/downloads
- - ${USERDIR}/Storage/Downloads/Watch:/watch
- environment: /环境变量
- - PUID=${PUID}
- - PGID=${PGID}
- - TZ=${TZ}
如果你遇到一个新的应用,不知道怎么写的话,到这个镜像的Docker Hub页面查看一下。这里推荐一个社区组织LinuxServer.io,他们维护了很多相关的镜像,一会我们要用到的Radarr、Transmission等他们都有在维护。
https://www.linuxserver.io/our-images
你需要什么应用把它按模板写好,命名为docker-compose.yml,放在“/home/用户名”下面,然后一条命令就可运行了。
复制代码- docker-compose up -d
如果放在其它位置,指定一下路径就可以
复制代码- docker-compose -f ~/docker/docker-compose.yml up -d
剩下的就是保证网络,看它自动部署就OK了。
这里我也将我自己使用的docker-compose.yml附上,供大家参考。
https://gist.github.com/ProteinPig/31806d8ffb4a3029bfdc0e81d10d7c0a
6.应用推荐其实写到这里就差不多了,这里把我正在使用的一些应用给大家列一列,可以很方便的搭建自己的服务器。
Portainer - 必装,使用Web界面来管理容器
Watchtower - 必装,自动更新你的Docker镜像和容器,所谓一次部署,永远最新就靠它了
Radarr - 电影搜刮软件,把电影放进“Wanted”,它就会自动替你搜索,配合BT下载客户端自动下载,也可以手动搜索
Sonarr - 同上,不过是电视剧
Lidarr - 同上,音乐
Jackett - 把BT站的搜索结果转成上面软件识别的格式
RRshare - 人人影视
Calibre-Web - 电子书管理,还能推送到Kindle
Transmission - BT下载软件
Aria2 - 补充上面缺失的HTTP下载
Plex - 电影Stream
Emby - 同上
LMS - Logitech Media Server
Airsonic - 音乐管理
HomeAssistant - 智能家居
这里稍微解释一下Jackett、Radarr、Transmission的配合:
在Radarr添加一部电影名,它会调用IMDB的数据匹配,文件质量我们指定1080P,然后Radarr会自动在Jackett搜索这部电影,Radarr判断是否符合1080P配置包含的文件质量,如果符合就把种子发给Transmission下载,Transmission下载完毕后告知Radarr标记为已下载完毕,Radarr判断是否达到1080P配置里的最高质量,如果没有继续等待更高质量的文件以替换现在下载的文件。
其它就不列举了,大家可以到LinuxServer.io的页面翻一翻,会有不少惊喜。
因为我不是真电工,同时为了方便大家理解,难免描述不严谨,有什么错误的话请大家指出。
这篇指南参考了很多国外网站smarthomebeginner的文章,这里一并附上。
docker-compose.yml(8.59 KB)
https://www.smarthomebeginner.com/docker-home-media-server-2018-basic/
==============
我自己使用的是RancherOS代替了安装Linux和安装Docker的步骤,有经验的电工也可以选用这类的容器OS。
自己遇到的一个小问题是Radarr、Sonarr同时开启会遇到严重的性能问题,Radarr的CPU占用率达到100%。
update:
1.更新docker文件夹权限设置,由755改为775
2.更新设置环境变量之后重启步骤
3.更新CPU资源限制,并修改YAML文件为version 2.4
- ProteinPig占楼备用。
- linlance2000Docter的好处说说呗??一直没动力使用。。
- njimportainer 可以用rancher替代吗?
- fushia马克 ……
- ProteinPig
- fushia黑群里的dock可以么
- lovemu先马克
- ProteinPig
- deyu260我记得d版lz发过了
- kenchn马克 iOS fly ~
- 数不清马克备用
- ProteinPig
- Roryskydocker的必要性 在于 维护方便? iOS fly ~
- drw_08有试过用docker部署zabbix并且高可用的吗?
- ProteinPig
- imsky马克备用
- benjinxing马克一下
- 猫了个咪的不太了解,是一个自动化框架还是什么米8,起飞!
- zyboy厉害,找到几个需要得。
- sunaddmoon回复16#ProteinPig
这个好,省事儿 iOS fly ~ - aerjinshan不错,准备试试一下
- njim回复16#ProteinPig
用的os是rancher os还是哪个? - lidongbestmarka二恩金融
- johnalex看看 iOS fly ~
- ProteinPig
- mozhenliangmark~!~~
- 妖刀村正马克杯用一下 iOS fly ~
- hlhdocker如何升级?小尾巴~
- sunaddmoon看完文章再提问啊.. 文章有两处提到更新
- njim最近也是学习rancheros,也是在PC机上跑docker。但是N多不同地域的PC,类分布式的。
怎么管理好这些PC及其资源是个头疼的事 - sunaddmoon感觉docker开多了需要cpu性能好,要不容易卡。。。楼主方便说一下硬件么?
- ProteinPig
- 谁家丢的西瓜皮马克备用
- 龙韬雪收藏学习。为啥不用kube?docker自己的容器编排更好?
- sunaddmoon太差了…HiPDA·NG
- cityhunter_zwy战略性马克
- qwjhb正好这几天也在弄selfhosted 也来推荐下
alltubehttps://github.com/Rudloff/alltube
基于youtube-dl 的web 界面,能解析100多家各类有视频的网站 从YouTube到某p开头的hub都没问题
提供docker方式 rudloff/alltube 就是镜像有点大 1.1g而且alltube很诡异,只负责解析不负责下载,web界面解析完后会调用本地的下载器,所以最近在写个程序,准备把alltube的解析结果直接发给aria2 并记录下 这样就能自动下载了
还有就是github上的这个repo
https://github.com/Kickball/awesome-selfhosted
各类有的没得都有介绍 - qwjhb用docker还有个优点
端口映射到公网上我也放心,反正在容器里不会出什么幺蛾子。
毕竟用的是自建服务器,不是群晖之类现成的产品,总会有没想到的地方,装的东西越多漏洞越多。
docker就没这个问题 - ProteinPig
- qwjhb回复40#ProteinPig
嗯 因为cookies会有有效期 所以最好是需要下载的时候去alltube解析视频地址想要自动化的化 用网页插件太麻烦了 不如直接写个web应用 还可以加点功能上去 还能支持idm什么的 - yuwenm16马克电脑看,谢谢楼主 iOS fly ~
- saudi感谢楼主,另外咨询一下,有没有什么好用的音频媒体服务器,类似网易云音乐的效果,播放在线音频能够拖动进度的
- 龙韬雪使用kube部署这些docker 也能达到一样效果吗?更像学习kube
- ableman可以限制cpu的,楼主可以看一下 iOS fly ~
- ProteinPig
- ProteinPig