基于Docker的HomeServer搭建指南

  • P
    ProteinPig

    之前在D版发了几个利用Docker搭建下载机的帖子,感兴趣的人挺多的,这里就把我在建立整个HomeServer的折腾过程给大家分享一下,大家也可以少走弯路。


    索引
    • 准备工作

    • 安装Linux

    • 安装Docker

    • 安装Docker Compose

    • 环境配置

    • 批量部署应用

    • 应用推荐


    0.准备工作

    在进行之前我们需要准备另一台电脑,并让两台设备处于同一个局域网。如果是Windows,请备好Xshell、WinSCP之类的软件。以下命令请使用Xshell连接到服务器运行,直接鼠标键盘显示器输入也OK。因为本文并不是手把手教你每一步操作,如果遇到问题,请善用搜索。


    1.安装Linux

    Docker虽然也可以安装在Win、Mac下,但是为了不给自己以后的维护添麻烦,还是建议安装Linux。大家按自己的喜好挑一个发行版就可以了,小白建议使用Ubuntu Server LTS。这里不再赘述,相关的安装教程,一搜一大堆。群晖上的Docker也是可以的,不过注意版本。


    2.安装Docker

    其实Docker的文档已经非常齐全了,大家只要参照Docker的文档依葫芦画瓢就可以装好了。

    https://docs.docker.com/install/linux/docker-ce/ubuntu/

    实在不行,Docker也提供了脚本简化安装。

    1. curl -fsSL https://get.docker.com -o get-docker.sh
    2. sudo sh get-docker.sh
    复制代码

    3.安装Docker Compose

    Docker Compose是Docker官方的编排服务,简单来说就是可以快速部署应用。(对我们来说就是批量安装应用)

    1. 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

    2. 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权限滥用。

    1. sudo usermod -aG docker 用户名
    复制代码

    4.2获取PUID、PGID

    因为Docker容器里面的内容实际是root权限的,如果不给容器指定PUID、PGID会出现非常多的文件权限问题。(比如文件非root用户无法删除等问题)

    1. id 用户名
    复制代码

    从显示的输出找到uid=1000(用户名)、110(docker)这样字样,记下。


    4.3编辑环境变量

    这是为了方便在编写Docker Compose编排文件时的可读性,如果你明白怎么编排,可以不做这一步,只需要把每一个变量都用实际值代替就好。小白按下面操作:

    1. sudo nano /etc/environment
    复制代码

    添加如下内容:

    1. PUID=1000(上面的ID)
    2. PGID=110(上面的ID)
    3. TZ="Asia/Shanghai"
    4. USERDIR="/home/用户名"
    复制代码

    4.4建立docker文件夹

    我们在“/home/用户名”里建立一个docker文件夹,方便所有文件归档到此处:

    1. mkdir ~/docker
    复制代码

    为了方便权限管理,可以把这个文件夹和它下面的子文件夹(包括新建的)的权限赋予docker组。

    1. sudo setfacl -Rdm g:docker:rwx ~/docker
    2. sudo chmod -R 775 ~/docker
    复制代码

    OK,环境搭建的差不多了,以下内容我们都假定在“/home/用户名/docker”这个文件夹操作。

    先不着急,我们把机器重启一下。

    1. sudo reboot
    复制代码


    5.批量部署应用

    Docker Compose使用YAML的文件来编写部署的具体内容,详细的细节我们不需要关心,我们可以把每一个应用都看作是套用一个模板,一个典型的模板如下:


    1. # Transmission – Bittorrent Downloader /注释
    2. transmission: /应用名称
    3. image: linuxserver/transmission /使用哪个镜像建立容器
    4. container_name: transmission /容器名
    5. hostname: transmission /主机名,Samba等需要广播主机名的容器会用到
    6. restart: always /是否重启
    7. cpus: 1.2 /CPU资源限制,除以核心数得到百分比,4核心为1.2/4=30%,注意version 2.x才支持。
    8. ports: /开放的端口,左边是机器的端口,右边是容器的端口
    9. - 9091:9091
    10. - 51413:51413
    11. - 51413:51413/udp
    12. volumes: /容器需要存储数据的话,把数据存到容器外(保存在容器里面,容器一删除就没了)
    13. - ${USERDIR}/docker/transmission:/config
    14. - ${USERDIR}/Storage/Downloads:/downloads
    15. - ${USERDIR}/Storage/Downloads/Watch:/watch
    16. environment: /环境变量
    17. - PUID=${PUID}
    18. - PGID=${PGID}
    19. - TZ=${TZ}
    复制代码

    如果你遇到一个新的应用,不知道怎么写的话,到这个镜像的Docker Hub页面查看一下。这里推荐一个社区组织LinuxServer.io,他们维护了很多相关的镜像,一会我们要用到的Radarr、Transmission等他们都有在维护。

    https://www.linuxserver.io/our-images


    你需要什么应用把它按模板写好,命名为docker-compose.yml,放在“/home/用户名”下面,然后一条命令就可运行了。

    1. docker-compose up -d
    复制代码

    如果放在其它位置,指定一下路径就可以

    1. 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

  • P
    ProteinPig
    占楼备用。
  • l
    linlance2000
    Docter的好处说说呗??一直没动力使用。。
  • n
    njim
    portainer 可以用rancher替代吗?
  • f
    fushia
    马克 ……
  • P
    ProteinPig
    回复4#njim


    没有使用过Rancher,不过都是一样的,能管理就OK。家用服务器来说Rancher消耗的资源多了一点。
  • f
    fushia
    黑群里的dock可以么
  • l
    lovemu
    先马克
  • P
    ProteinPig
    回复7#fushia


    可以的,不过注意版本。
  • d
    deyu260
    我记得d版lz发过了
  • k
    kenchn
    马克 iOS fly ~
  • 数不清
    马克备用
  • P
    ProteinPig
    回复10#deyu260


    之前发的是最终的成果,这次把步骤都写出来了,方便有同样需求的版友。
  • R
    Rorysky
    docker的必要性 在于 维护方便? iOS fly ~
  • d
    drw_08
    有试过用docker部署zabbix并且高可用的吗?
  • P
    ProteinPig
    回复14#Rorysky


    对的,同时避免了安装各种依赖。配合Watchtower,维护工作非常少。甚至我为了不维护Docker的更新,选用了容器OS,一条命令更新所有。
  • i
    imsky
    马克备用
  • b
    benjinxing
    马克一下
  • 猫了个咪的
    不太了解,是一个自动化框架还是什么米8,起飞!
  • z
    zyboy
    厉害,找到几个需要得。
  • s
    sunaddmoon
    回复16#ProteinPig
    这个好,省事儿 iOS fly ~
  • a
    aerjinshan
    不错,准备试试一下
  • n
    njim
    回复16#ProteinPig
    用的os是rancher os还是哪个?
  • l
    lidongbest
  • j
    johnalex
    看看 iOS fly ~
  • P
    ProteinPig
    回复23#njim

    rancheros
  • m
    mozhenliang
    mark~!~~
  • 妖刀村正
    马克杯用一下 iOS fly ~
  • h
    hlh
    docker如何升级?小尾巴~
  • s
    sunaddmoon
    看完文章再提问啊.. 文章有两处提到更新
  • n
    njim
    最近也是学习rancheros,也是在PC机上跑docker。但是N多不同地域的PC,类分布式的。

    怎么管理好这些PC及其资源是个头疼的事
  • s
    sunaddmoon
    感觉docker开多了需要cpu性能好,要不容易卡。。。楼主方便说一下硬件么?
  • P
    ProteinPig
    回复32#sunaddmoon

    就是DQ77KB+G2020T,非常辣鸡的配置了。
    不出现Radarr占用率100%的Bug的话,平常的占用率在30%。挂30、40个种子的样子。
  • 谁家丢的西瓜皮
    马克备用
  • 龙韬雪
    收藏学习。为啥不用kube?docker自己的容器编排更好?
  • s
    sunaddmoon
    太差了…HiPDA·NG
  • c
    cityhunter_zwy
    战略性马克
  • q
    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

    各类有的没得都有介绍
  • q
    qwjhb
    用docker还有个优点
    端口映射到公网上我也放心,反正在容器里不会出什么幺蛾子。
    毕竟用的是自建服务器,不是群晖之类现成的产品,总会有没想到的地方,装的东西越多漏洞越多。
    docker就没这个问题
  • P
    ProteinPig
    回复39#qwjhb

    aria2有Chrome插件支持捕捉下载行为,当然你写程序原生支持会更方便。
  • q
    qwjhb
    回复40#ProteinPig


    嗯 因为cookies会有有效期 所以最好是需要下载的时候去alltube解析视频地址想要自动化的化 用网页插件太麻烦了 不如直接写个web应用 还可以加点功能上去 还能支持idm什么的
  • y
    yuwenm16
    马克电脑看,谢谢楼主 iOS fly ~
  • 虾酱

    我也是看的同一篇文档在折腾,淘宝特地买了工控小主机,上面装esxi,挂载我群晖的nfs共享,所有东西丢里面了,esxi跑了软路由,docker,plex media server...
  • s
    saudi
    感谢楼主,另外咨询一下,有没有什么好用的音频媒体服务器,类似网易云音乐的效果,播放在线音频能够拖动进度的
  • h
    hlh
    回复30#sunaddmoon
    就是迷糊,不太清楚原理,docker升级,数据是不是会被覆盖?小尾巴~
  • q
    qwjhb
    回复45#hlh
    镜像设计的正常 容器就是个黑盒 数据在你自己设置好的地方放着 不会没小尾巴~
  • 龙韬雪
    使用kube部署这些docker 也能达到一样效果吗?更像学习kube
  • a
    ableman
    可以限制cpu的,楼主可以看一下 iOS fly ~
  • P
    ProteinPig
    回复48#ableman

    已经试过用version 2.x,Swarm限制资源,都不太理想。
  • P
    ProteinPig
    回复44#saudi

    我自己用的是LMS,类似还有miniDLNA之类