├── README.md ├── docker-compose.aria2.yml ├── docker-compose.jellyfin.yml ├── docker-compose.kodi.yml ├── docker-compose.openwrt.yml ├── docker-compose.samba.yml ├── docker-compose.tiny_media_manager.yml ├── docker-compose.watchtower.yml ├── openwrt └── etc │ ├── config │ ├── dhcp │ └── network │ └── rc.local ├── run.sh └── screenshots ├── AriaNg.png ├── Kodi.png ├── OpenWrt.png ├── Samba.png ├── TidyMediaManager.png └── jellyfin.png /README.md: -------------------------------------------------------------------------------- 1 | [toc] 2 | ## 智能家庭中心 3 | 4 | 使用`docker-compose`, 在废旧电脑上一键搭建智能家庭服务。 5 | 6 | ### 使用方法 7 | 8 | #### 下载本仓库 9 | ```bash 10 | $ git clone https://github.com/crazygit/family-media-center.git 11 | $ cd family-media-center 12 | ``` 13 | 14 | #### 编辑配置文件 15 | 16 | ##### 编辑`run.sh` 17 | 18 | 根据自身情况修改`run.sh`脚本中的配置项 19 | 20 | 设置你的Aria2的RPC密码 21 | 22 | ``` bash 23 | export ARIA2_PRC_SECRET="your_secret" 24 | ``` 25 | 26 | 选择要启动的服务,默认启动全部服务 27 | 28 | ``` 29 | docker-compose -f docker-compose.aria2.yml \ 30 | -f docker-compose.jellyfin.yml \ 31 | -f docker-compose.kodi.yml \ 32 | -f docker-compose.openwrt.yml \ 33 | -f docker-compose.samba.yml \ 34 | -f docker-compose.tiny_media_manager.yml \ 35 | -f docker-compose.watchtower.yml \ 36 | $@ 37 | ``` 38 | 39 | ##### 修改`openwrt`相关配置 40 | 41 | 如果要使用`openwrt`旁路由,请根据自身网络情况做如下调整: 42 | 43 | 1. 修改openwrt的配置文件`openwrt/etc/config/network` 44 | 45 | ```bash 46 | config interface 'lan' 47 | #option type 'bridge' 48 | option ifname 'eth0' 49 | option proto 'static' 50 | # 分配给openwrt系统的IP地址 51 | option ipaddr '192.168.2.126' 52 | # 子网掩码 53 | option netmask '255.255.255.0' 54 | # 主路由的网关 55 | option gateway '192.168.2.1' 56 | # DNS 57 | option dns '223.6.6.6' 58 | # 广播地址 59 | option broadcast '192.168.2.255' 60 | #option ip6assign '60' 61 | ``` 62 | 63 | 64 | 2. 修改`docker-compose.openwrt.yml` 65 | 66 | 注意: 宿主机如果通过WIFI连接网络,则选择ipvlan模式,如果是有线连接网络则选择macvlan模式 67 | ```bash 68 | networks: 69 | ipvlan: 70 | driver: ipvlan 71 | driver_opts: 72 | ipvlan_mode: l2 73 | # 宿主机网卡 74 | parent: enp3s0 75 | ipam: 76 | config: 77 | # 本地IP网段 78 | - subnet: 192.168.2.0/24 79 | #gateway: 192.168.2.1 80 | ``` 81 | 82 | ### 运行 83 | 84 | ```bash 85 | # 启动所有服务 86 | $ bash run.sh up -d 87 | 88 | # 停止所有服务 89 | $ bash run.sh down 90 | ``` 91 | 92 | ### 服务访问方式 93 | 94 | * jellyfin 95 | 96 | 97 | * tiny_media_manager 98 | 99 | 100 | * aria_ng 101 | 102 | 103 | * kodi 104 | 105 | 106 | 107 | 默认用户名和密码都是`kodi` 108 | 109 | * OpenWrt 110 | 111 | 112 | 113 | 默认用户名和密码分布为`root`和`password` 114 | 115 | * samba服务 116 | * aria2下载目: 117 | * jellyfin媒体目录: 118 | 119 | * watchtower 120 | 121 | 每隔一个小时检查所有的docker镜像是否有新版本并且自动更新 122 | 123 | 124 | ### 资源推荐 125 | 126 | `OpenWrt`建议安装 127 | 128 | 129 | 130 | 它包含一个`富强`软件和一个比较漂亮的主题 131 | 132 | 133 | ### 效果图 134 | 135 | Jellyfin 136 | 137 | ![jellyfin](screenshots/jellyfin.png) 138 | 139 | TidyMediaManager 140 | 141 | ![TidyMediaManager](screenshots/TidyMediaManager.png) 142 | 143 | AriaNg 144 | 145 | ![AriaNg](screenshots/AriaNg.png) 146 | 147 | Kodi 148 | 149 | ![Kodi](screenshots/Kodi.png) 150 | 151 | Samba 152 | 153 | ![Samba](screenshots/Samba.png) 154 | 155 | 156 | -------------------------------------------------------------------------------- /docker-compose.aria2.yml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | 3 | services: 4 | aria2_pro: 5 | image: p3terx/aria2-pro 6 | restart: unless-stopped 7 | environment: 8 | - PUID=${PUID} 9 | - PGID=${PGID} 10 | - RPC_SECRET=${ARIA2_PRC_SECRET} 11 | ports: 12 | - 6800:6800 13 | - 9888:6888 14 | - 6888:6888/udp 15 | volumes: 16 | - aria2_pro_config_volume:/config 17 | - aria2_pro_downloads_volume:/downloads 18 | 19 | aria_ng: 20 | image: crazygit/aria_ng 21 | ports: 22 | - 8800:80 23 | 24 | 25 | volumes: 26 | aria2_pro_config_volume: 27 | driver: local 28 | driver_opts: 29 | type: none 30 | device: /data/service/aria2/config 31 | o: bind 32 | 33 | aria2_pro_downloads_volume: 34 | driver: local 35 | driver_opts: 36 | type: none 37 | device: /data/service/aria2/downloads 38 | o: bind 39 | 40 | -------------------------------------------------------------------------------- /docker-compose.jellyfin.yml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | 3 | services: 4 | jellyfin: 5 | image: jellyfin/jellyfin 6 | restart: unless-stopped 7 | ports: 8 | - 5800:5800 9 | - 5900:5900 10 | network_mode: host 11 | user: ${PUID}:${PGID} 12 | volumes: 13 | - jellyfin_config_volume:/config 14 | - jellyfin_cache_volume:/cache 15 | - jellyfin_media_volume:/media 16 | 17 | volumes: 18 | jellyfin_config_volume: 19 | driver: local 20 | driver_opts: 21 | type: none 22 | device: /data/service/jellyfin/config 23 | o: bind 24 | 25 | jellyfin_cache_volume: 26 | driver: local 27 | driver_opts: 28 | type: none 29 | device: /data/service/jellyfin/cache 30 | o: bind 31 | 32 | jellyfin_media_volume: 33 | driver: local 34 | driver_opts: 35 | type: none 36 | device: /data/service/jellyfin/media 37 | o: bind 38 | 39 | -------------------------------------------------------------------------------- /docker-compose.kodi.yml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | 3 | services: 4 | kodi_headless: 5 | image: linuxserver/kodi-headless 6 | restart: unless-stopped 7 | environment: 8 | - PGID=${PGID} 9 | - PUID=${PUID} 10 | ports: 11 | - 8080:8080 12 | - 9090:9090 13 | - 9777:9777/udp 14 | volumes: 15 | - kodi_config_volume:/config/.kodi 16 | 17 | volumes: 18 | kodi_config_volume: 19 | driver: local 20 | driver_opts: 21 | type: none 22 | device: /data/service/kodi/config 23 | o: bind 24 | 25 | -------------------------------------------------------------------------------- /docker-compose.openwrt.yml: -------------------------------------------------------------------------------- 1 | # 参考: 2 | # 3 | # https://docs.docker.com/network/macvlan/ 4 | # 5 | # 虚拟网卡技术: 可以选择macvlan模式,也可以ipvlan模式 6 | # 7 | # 注意: 如果宿主机采用的是WIFI连接网络,则使用ipvlan模式,macvlan模式适合宿主机为有线连接网络的情况 8 | # 9 | # 10 | # 手动创建网络命令 11 | # 12 | # ipvlan, parent为宿主机网卡 13 | # $ docker network create -d ipvlan --subnet=192.168.2.1/24 --gateway=192.168.2.1 -o parent=enp3s0 -o ipvlan_mode=l2 ipvlan 14 | # 15 | # macvlan, parent为宿主机网卡 16 | # $ docker network create -d macvlan --subnet=192.168.2.1/24 --gateway=192.168.2.1 -o parent=enp3s0 macvlan 17 | # 18 | # 使用docker-compose创建网络时,docker-compose V3版本配置时不支持设置网关,如有需要,可以使用version2.4的版本 19 | # https://docs.docker.com/compose/compose-file/ 20 | # 21 | # Additional IPAM configurations, such as gateway, are only honored for version 2 at the moment. 22 | version: '3.7' 23 | #version: '2.4' 24 | 25 | 26 | services: 27 | openwrt: 28 | image: crazygit/lean-openwrt-x86-64 29 | restart: always 30 | privileged: true 31 | volumes: 32 | - ./openwrt/etc/config/network:/etc/config/network 33 | - ./openwrt/etc/config/dhcp:/etc/config/dhcp 34 | - ./openwrt/etc/rc.local:/etc/rc.local 35 | networks: 36 | - macvlan 37 | #- ipvlan 38 | 39 | networks: 40 | macvlan: 41 | driver: macvlan 42 | driver_opts: 43 | # 宿主机网卡 44 | parent: enp3s0 45 | ipam: 46 | config: 47 | - subnet: 192.168.2.0/24 48 | #gateway: 192.168.2.1 49 | #ipvlan: 50 | # driver: ipvlan 51 | # driver_opts: 52 | # ipvlan_mode: l2 53 | # # 宿主机网卡 54 | # parent: enp3s0 55 | # ipam: 56 | # config: 57 | # - subnet: 192.168.2.0/24 58 | # #gateway: 192.168.2.1 59 | -------------------------------------------------------------------------------- /docker-compose.samba.yml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | 3 | services: 4 | samba: 5 | image: dperson/samba 6 | restart: unless-stopped 7 | environment: 8 | - USERID=${PUID} 9 | - GROUPID=${PGID} 10 | ports: 11 | - 139:139 12 | - 445:445 13 | volumes: 14 | - jellyfin_media_volume:/media 15 | - aria2_pro_downloads_volume:/downloads 16 | command: ["-p", "-s", "media;/media;yes;no;yes", "-s", "downloads;/downloads;yes;no;yes"] 17 | # -u 设置samba的用户名和密码,用";"分隔 18 | # -s 设置samba的分享路径 19 | # https://hub.docker.com/r/dperson/samba/ 20 | # -s选项的使用格式 21 | # -s "[;browse;readonly;guest;users;admins;writelist;comment]" 22 | # Configure a share 23 | # required arg: ";" 24 | # is how it's called for clients 25 | # path to share 26 | # NOTE: for the default values, just leave blank 27 | # [browsable] default:'yes' or 'no' 28 | # [readonly] default:'yes' or 'no' 29 | # [guest] allowed default:'yes' or 'no' 30 | # NOTE: for user lists below, usernames are separated by ',' 31 | # [users] allowed default:'all' or list of allowed users 32 | # [admins] allowed default:'none' or list of admin users 33 | # [writelist] list of users that can write to a RO share 34 | # [comment] description of share 35 | 36 | 37 | volumes: 38 | 39 | jellyfin_media_volume: 40 | driver: local 41 | driver_opts: 42 | type: none 43 | device: /data/service/jellyfin/media 44 | o: bind 45 | 46 | aria2_pro_downloads_volume: 47 | driver: local 48 | driver_opts: 49 | type: none 50 | device: /data/service/aria2/downloads 51 | o: bind 52 | -------------------------------------------------------------------------------- /docker-compose.tiny_media_manager.yml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | 3 | services: 4 | tiny_media_manager: 5 | image: romancin/tinymediamanager 6 | environment: 7 | - USER_ID=${PUID} 8 | - GROUP_ID=${PGID} 9 | ports: 10 | - 5800:5800 11 | - 5900:5900 12 | volumes: 13 | - tiny_media_manager_config_volume:/config 14 | - jellyfin_media_volume:/media 15 | 16 | 17 | volumes: 18 | jellyfin_media_volume: 19 | driver: local 20 | driver_opts: 21 | type: none 22 | device: /data/service/jellyfin/media 23 | o: bind 24 | 25 | tiny_media_manager_config_volume: 26 | driver: local 27 | driver_opts: 28 | type: none 29 | device: /data/service/tiny_media_manager/config 30 | o: bind 31 | 32 | -------------------------------------------------------------------------------- /docker-compose.watchtower.yml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | 3 | services: 4 | watchtower: 5 | image: containrrr/watchtower 6 | restart: unless-stopped 7 | volumes: 8 | - /var/run/docker.sock:/var/run/docker.sock 9 | command: ["--cleanup", "--interval", "3600"] 10 | 11 | -------------------------------------------------------------------------------- /openwrt/etc/config/dhcp: -------------------------------------------------------------------------------- 1 | 2 | config dnsmasq 3 | option domainneeded '1' 4 | option boguspriv '1' 5 | option filterwin2k '0' 6 | option localise_queries '1' 7 | option rebind_protection '1' 8 | option rebind_localhost '1' 9 | option local '/lan/' 10 | option domain 'lan' 11 | option expandhosts '1' 12 | option nonegcache '0' 13 | option authoritative '1' 14 | option readethers '1' 15 | option leasefile '/tmp/dhcp.leases' 16 | option resolvfile '/tmp/resolv.conf.auto' 17 | option nonwildcard '1' 18 | option localservice '1' 19 | option filter_aaaa '1' 20 | 21 | # 禁用lan口dhcp服务,避免和主路由的dhcp服务冲突 22 | # 参考https://openwrt.org/docs/guide-user/network/wifi/dumbap 23 | # $ uci set dhcp.lan.ignore=1 24 | # $ uci commit dhcp 25 | config dhcp 'lan' 26 | option interface 'lan' 27 | option start '100' 28 | option limit '150' 29 | option leasetime '12h' 30 | option ignore '1' 31 | 32 | config dhcp 'wan' 33 | option interface 'wan' 34 | option ignore '1' 35 | 36 | config srvhost 37 | option srv '_vlmcs._tcp' 38 | option target 'OpenWrt' 39 | option port '1688' 40 | option class '0' 41 | option weight '100' 42 | 43 | -------------------------------------------------------------------------------- /openwrt/etc/config/network: -------------------------------------------------------------------------------- 1 | config interface 'lan' 2 | #option type 'bridge' 3 | option ifname 'eth0' 4 | option proto 'static' 5 | # 分配给openwrt系统的IP地址 6 | option ipaddr '192.168.2.126' 7 | # 子网掩码 8 | option netmask '255.255.255.0' 9 | # 主路由的网关 10 | option gateway '192.168.2.1' 11 | # DNS 12 | option dns '223.6.6.6' 13 | # 广播地址 14 | option broadcast '192.168.2.255' 15 | #option ip6assign '60' 16 | -------------------------------------------------------------------------------- /openwrt/etc/rc.local: -------------------------------------------------------------------------------- 1 | # Put your custom commands here that should be executed once 2 | # the system init finished. By default this file does nothing. 3 | 4 | # 修复DNS总是被设置为127.0.0.11的问题,使用本机的dnsmasq 5 | # https://github.com/coolsnowwolf/lede/issues/4110 6 | 7 | cat > /etc/resolv.conf <