玩转百元开发板之基于纯Linux搭建家用Nas
基于纯Linux搭建自己的Nas环境大致构思如下:
一、首先贴下家里的网络拓扑
二、 服务框架
目前的构思是所有的服务尽可能的采用Docker部署,以减少不同Linux系统环境带了的部署差异。
-
统一账号管理
初步构思由LDAP服务来提供统一的账户权限管理系统。介于phpLDAPadmin界面不太友好,初步考虑由go-ldap-admin服务来提供LDAP管理服务。
具体介绍参见官网:https://ldapdoc.eryajf.net/pages/706e78/
Github仓库地址:https://github.com/eryajf/go-ldap-admin创建Docker容器的docker-compose.yaml文件参见:
-
访问门户管理
门户管理构想中应该承担两个主要能力:
- 一个是由Nginx提供的二级域名反代和端口转发
采用nginx-proxy-manager-zh提供可视的Nginx反代配置工具,能够提供https证书自动申请。Github仓库地址:https://github.com/xiaoxinpro/nginx-proxy-manager-zh?utm_source=nginx-proxy-manager-zh
官网地址:https://nginxproxymanager.com/ - 另一个是提供一个主页导航网站
这个目前还没有想好,可能用开源的,也可能自己写。
-
各服务开发端口规划整理
服务 端口 协议 用途 映射端口 其他 Portainer 8000 agent接入端口 8000 9000 http WebUI管理端口 9000 Gitea 22 ssh ssh接入 222 3000 http http页面 3000 Go-ldap-admin 8888 http http页面 8888 go-ldap-admin-phpldapadmin 80 http http页面 8091 go-ldap-admin-openldap 389 tcp 账户授权端口 389 go-ldap-admin-mysql 3306 tcp 数据库读写 3306
三、具体内容提供
-
文档管理
文件管理可选的较多,目前先用NextCloud来提供。后续使用中看是否符合需求。
Github地址:https://github.com/nextcloud
-
docker cli
sudo docker run \ --init \ --sig-proxy=false \ --name nextcloud-aio-mastercontainer \ --restart always \ --publish 80:80 \ --publish 8080:8080 \ --publish 8443:8443 \ --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \ --volume /var/run/docker.sock:/var/run/docker.sock:ro \ nextcloud/all-in-one:latest
-
NextCloud All-In-One其他相关文档:
- GitHub官方仓库:https://github.com/nextcloud/all-in-one
- 官方Docker镜像:https://hub.docker.com/r/nextcloud/all-in-one
- 官方反代相关文档地址:https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md (支持各种反代)
-
照片管理
照片主要是需要有完善的Android和ios客户端,可以自动备份照片,支持人脸识别。自动归类。目前考虑使用immich或者是NextCloud自带的照片管理。
- immich主页:https://immich.app/
- 官方文档:https://immich.app/docs/install/docker-compose
-
下载工具
目前考虑的是使用大家使用频率最高的qBittorrent,文档全面,部署简单。
-
Docker-compose
version: '3' services: qbittorrent: image: helloz/qbittorrent container_name: qbittorrent ports: - "7881:7881" - "7881:7881/udp" - "18080:18080" volumes: - /qbittorrent/config:/etc/qBittorrent - /qbittorrent/downloads:/downloads restart: unless-stopped
-
-
媒体能力
媒体能力方面的话,我个人更倾向于使用smb或者webda类似的文件共享能力直接提给各端播放器直接读取播放。暂时不考虑网页在线播放和转码。
-
代码托管
这块儿目前想的是使用gitea搭建,既轻便又提供了一定的扩展能力。关键是支持LDAP。
-
docker-compose.yaml参见:
【附件】docker-compose.yaml -
docker-compose
version: "3" networks: gitea: external: false services: server: image: gitea/gitea container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 restart: always networks: - gitea volumes: - ./gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "222:22"
-
Docker管理
使用portainer中文版做Docker管理平台;
-
Github仓库:https://github.com/outlovecn/portainer-cn
-
docker-compose文件
version: "2.1" services: portainer: image: outlovecn/portainer-cn:latest container_name: portainer restart: always ports: - "9000:9000" - "8000:8000" volumes: - ./dockerconfig/portainer:/data - /var/run/docker.sock:/var/run/docker.sock
-
docker cli
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data outlovecn/portainer-cn:latest