NAS 在基本是IT男生中的必玩领域,每一个互联网人必要搞个家里的存储网络与家庭影院
硬件
家里是电子城开店的,所以也就近水楼台先得月,让老爸帮我搞些二手拼一下,很快我拿到了一台小型机子,之后超能小紫有个四盘口硬盘柜闲置送给了我。自此我的硬件部分就搞定了。
选择系统
我的 Nas 知识的基础基本由 超能小紫 科普,当时他就推荐了我直接给电脑上win10 LTSC。
当时黑群晖还不稳定,所以更不想折腾了。以前帮家里看店或装系统,有点装出了 PTSD
给电脑直接上了win10 LTSC,稳定可靠的可视化管理,便捷的远程操作模式,Mac上也有很方便的远程APP 直接连接
镜像下载:https://www.v2ex.com/t/885177
远程开机
二手搞的主板,刚好没有远程唤醒的功能,之里家里不知是哪里导致家里总是跳闸,导致有时关键时候无法连回家里,在网上淘了一个小米开关的模组装在了主档的 PCI 上,灰常完美
家庭影院
直接下载了 Emby Server 端
在网上下载了 TOP250 的电影,虽然不怎么看,但丰富下家庭影院就是丰富了下精神世界‼️
虚拟机+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
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
安装AdGuard Home
从VMware 换成 HyperV 虚拟机前,一直用 IP+端口 经常导致密码工具显示其它服务的密码,而且部分端口起的难记了些,就决定装个DNS工具,AdGuard Home 不仅支持 DNS 功能,还支持广告的过滤,再装个可视化的nginx管理工具反向代理至服务。
通过 Portainer 的 Stacks 管理服务,其实可以直接当成 docker-compose。非常方便
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
配置 ADGUARD DNS 重写
配置 Nginx 服务代理
搭建自己的CICD
刚装上Nas后,就想折腾各种运维的东西
通过 Docker 安装GitLab + Drone,
至于为什么还要自己搭仓库,github在美国,就算github不想,阿美瑞克说ban掉天朝的用户也已有先例,做多一个备份也不是什么坏事。
安装 GitLab 服务
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的原因,在构建时遇到了各种问题
-
无法获取到代码,甚至无法连接到仓库
Q:需对 drone-runner-docker 容器增加变量
DRONE_RUNNER_NETWORKS=gateway
让启动的容器与gitlab在同一网络下,才可以正确连接到仓库,其次如配置了代理,需要记得增加环境文件yamlhttp_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"
-
拉取仓库代码时验证失败
Q:这个是有点迷的,暂时增加
DRONE_GIT_USERNAME
与DRONE_GIT_PASSWORD
解决的,按道理来说为Drone创建的应用应该是支持直接拉取到代码的。
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]