超能郭工
前端坤坤的小破站,IKUN永不过时 🐔

IT男的必玩领域:组建自己的家庭NAS

23 天前 兴趣折腾

NAS 在基本是IT男生中的必玩领域,每一个互联网人必要搞个家里的存储网络与家庭影院

硬件

家里是电子城开店的,所以也就近水楼台先得月,让老爸帮我搞些二手拼一下,很快我拿到了一台小型机子,之后超能小紫有个四盘口硬盘柜闲置送给了我。自此我的硬件部分就搞定了。

选择系统

我的 Nas 知识的基础基本由 超能小紫 科普,当时他就推荐了我直接给电脑上win10 LTSC。

当时黑群晖还不稳定,所以更不想折腾了。以前帮家里看店或装系统,有点装出了 PTSD

给电脑直接上了win10 LTSC,稳定可靠的可视化管理,便捷的远程操作模式,Mac上也有很方便的远程APP 直接连接

镜像下载:https://www.v2ex.com/t/885177

hardware.png

远程开机

二手搞的主板,刚好没有远程唤醒的功能,之里家里不知是哪里导致家里总是跳闸,导致有时关键时候无法连回家里,在网上淘了一个小米开关的模组装在了主档的 PCI 上,灰常完美

mi.jpg

家庭影院

直接下载了 Emby Server 端

在网上下载了 TOP250 的电影,虽然不怎么看,但丰富下家庭影院就是丰富了下精神世界‼️

emby.png

虚拟机+Docker

超能小紫:装个虚拟机搞 Docker 服务或开发环境,万一搞坏了,还可以快照回去,确实救了蛮多次我这个非运维人

刚开始装的时候用的是 老牌的 VMware,因为之前家里不知是哪里漏电导致下雨或打雷就会跳闸,开了机后还得自己手动开VMware,找了许多的方案开机自启它,麻烦且都需要我登陆一下,我直接就换成win10原生的HyperV,完美的在未登陆前也正常启动了虚拟机。

安装 Docker:https://yeasy.gitbook.io/docker_practice/install

通过 Docker 安装 Portainer,方便可视化管理docker容器,还可以给服务器安装 portioner-agent 后,通过内网 Portainer 管理服务器

Install Portainer CE with Docker on Linux | Portainer Documentation

bash
mkdir -p /app/docker/portainer

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /app/docker/portainer:/data portainer/portainer-ce:latest

portainer.png

安装AdGuard Home

从VMware 换成 HyperV 虚拟机前,一直用 IP+端口 经常导致密码工具显示其它服务的密码,而且部分端口起的难记了些,就决定装个DNS工具,AdGuard Home 不仅支持 DNS 功能,还支持广告的过滤,再装个可视化的nginx管理工具反向代理至服务。

通过 Portainer 的 Stacks 管理服务,其实可以直接当成 docker-compose。非常方便

yaml
services:
  adguardhome:
    image: adguard/adguardhome:latest
    container_name: adguardhome
    restart: unless-stopped
    ports:
      - 53:53/tcp
      - 53:53/udp
      - 357:3000
    volumes:
      - $ADGUARD_HOME/work:/opt/adguardhome/work
      - $ADGUARD_HOME/conf:/opt/adguardhome/conf
    networks: 
      gateway:
      
  nginx-proxy-manager:
    image: jc21/nginx-proxy-manager:latest
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - 80:80
      - 575:81
    volumes:
      - $NGINX_HOME/data:/data
      - $NGINX_HOME/letsencrypt:/etc/letsencrypt
    networks: 
      gateway:
    
networks:
  gateway:
    name: gateway
    driver: bridge

设定路由器DNS和固定NAS的IP

dhcp.png

ip.png

配置 ADGUARD DNS 重写

adguard.png

配置 Nginx 服务代理

nginx.png

搭建自己的CICD

刚装上Nas后,就想折腾各种运维的东西

通过 Docker 安装GitLab + Drone,

至于为什么还要自己搭仓库,github在美国,就算github不想,阿美瑞克说ban掉天朝的用户也已有先例,做多一个备份也不是什么坏事。

安装 GitLab 服务

yaml
services:
  web:
    image: gitlab/gitlab-ce:13.5.4-ce.0
    restart: always
    container_name: gitlab-ce
    hostname: 'git.home.me'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://git.home.me'
        grafana['enable'] = false
        gitlab_rails['gitlab_shell_ssh_port'] = 1010
    ports:
      - 1010:22
      - 428:80
    volumes:
      - $GITLAB_HOME/config:/etc/gitlab
      - $GITLAB_HOME/logs:/var/log/gitlab
      - $GITLAB_HOME/data:/var/opt/gitlab
    networks: 
      gateway:
      
## 设定网络与Adguard服务同一网络
networks:
  gateway:
    external: true

安装 Drone CI

部署Drone看似可正常打开的Drone站点,因为ADGuard home的原因,在构建时遇到了各种问题

  1. 无法获取到代码,甚至无法连接到仓库

    Q:需对 drone-runner-docker 容器增加变量 DRONE_RUNNER_NETWORKS=gateway 让启动的容器与gitlab在同一网络下,才可以正确连接到仓库,其次如配置了代理,需要记得增加环境文件

    yaml
    http_proxy=http://www.example.com
    https_proxy=http://www.example.com
    ## 将 DNS重写、及内网使用的IP地址 排除
    no_proxy=".home.me,172.18.0.0/16,127.0.0.0/16,localhost,192.168.52.0/24"
    
  2. 拉取仓库代码时验证失败

    Q:这个是有点迷的,暂时增加DRONE_GIT_USERNAMEDRONE_GIT_PASSWORD 解决的,按道理来说为Drone创建的应用应该是支持直接拉取到代码的。

yaml
services:
  drone:
    image: drone/drone:2.24
    container_name: drone
    restart: always
    hostname: drone.home.me
    ports:
      - 2423:80
    volumes:
      - $DRONE_HOME:/data/
    environment:
      - DRONE_GITLAB_SERVER=http://git.home.me
      - DRONE_GITLAB_CLIENT_ID=[Gitlab 的 client ID]
      - DRONE_GITLAB_CLIENT_SECRET=[Gitlab 的 client SECRET]
      - DRONE_GIT_ALWAYS_AUTH=true
      - DRONE_GIT_USERNAME=[git账户]
      - DRONE_GIT_PASSWORD=[git密码]
      - DRONE_RPC_SECRET=$DRONE_RPC_SECRET
      - DRONE_SERVER_HOST=$DRONE_SERVER_HOST
      - DRONE_SERVER_PROTO=$DRONE_SERVER_PROTO
      - DRONE_USER_CREATE=username:[git账户],admin:true,token:[可固定token,方便使用drone的webhook]
    networks: 
      gateway:

      
  drone-runner:
    image: drone/drone-runner-docker:1.8.3
    container_name: drone-runner
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      ## 配置了代理的记得排除 DNS重写
      - $DRONE_HOME/runner-env.conf:/etc/runner-env.conf
    environment:
      - DRONE_RPC_PROTO=$DRONE_SERVER_PROTO
      - DRONE_RPC_HOST=$DRONE_SERVER_HOST
      - DRONE_RPC_SECRET=$DRONE_RPC_SECRET
      - DRONE_RUNNER_CAPACITY=10
      - DRONE_RUNNER_NAME=drone-runner
      - DRONE_RUNNER_NETWORKS=gateway
      ## 环境变更应用volume的环境配置文件
      - DRONE_RUNNER_ENV_FILE=/etc/runner-env.conf
    networks: 
      gateway:
      
networks:
  gateway:
    external: true

最终我的NAS架构

graph TD
	A[路由器] --> B[Win10 LTSC]
	B --> C[Hyper V CentOS]
	B --> EmbyServer
	C --> E[Docker]
	E --> S1[Gitlab]
	E --> S2[Drone]
	E --> F[ADGuard Home]
	E --> G[Nginx Proxy manager]

IT男的必玩领域:组建自己的家庭NAS
本站除注明转载外均为原创文章,采用 CC BY-NC-ND 4.0 协议。转载请注明出处,不得用于商业用途
评论