CICD、 NAS可以闭眼抄作业
以下是搭建私有 CI/CD 与 NAS 一体化系统的完整方案,结合 Docker、Portainer、Nextcloud、GitLab/Gitee 和 Jellyfin 等工具:
1. 基础环境准备
1.1 服务器要求
- 硬件:x86 架构主机(推荐 4 核 8G 以上,存储根据需求扩展)
- 系统:Ubuntu 22.04 LTS / CentOS Stream 9
- 网络:建议配置固定 IP 或域名
1.2 安装 Docker 与 Docker Compose
# Ubuntu 示例
sudo apt update && sudo apt install -y docker.io docker-compose
sudo systemctl enable docker && systemctl start docker
# 配置 Docker 用户组(避免频繁使用 sudo)
sudo usermod -aG docker $USER && newgrp docker
2. 核心服务部署
2.1 使用 Docker Compose 编排服务
创建 docker-compose.yml 文件,包含以下核心服务:
version: '3.8'
services:
# Portainer 容器管理
portainer:
image: portainer/portainer-ce:latest
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
restart: unless-stopped
# PostgreSQL 数据库
postgres:
image: postgres:15
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: your_strong_password
POSTGRES_DB: main_db
volumes:
- pg_data:/var/lib/postgresql/data
restart: always
# GitLab CE(代码管理+内置CI/CD)
gitlab:
image: gitlab/gitlab-ce:latest
ports:
- "8081:80"
- "2222:22"
volumes:
- gitlab_config:/etc/gitlab
- gitlab_logs:/var/log/gitlab
- gitlab_data:/var/opt/gitlab
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://your-domain.com:8081'
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_username'] = 'admin'
gitlab_rails['db_password'] = 'your_strong_password'
gitlab_rails['db_host'] = 'postgres'
gitlab_rails['db_database'] = 'main_db'
depends_on:
- postgres
restart: unless-stopped
# Nextcloud 私有云盘
nextcloud:
image: nextcloud:latest
ports:
- "8082:80"
volumes:
- nextcloud_data:/var/www/html
environment:
- POSTGRES_HOST=postgres
- POSTGRES_DB=main_db
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=your_strong_password
depends_on:
- postgres
restart: unless-stopped
# Jellyfin 媒体服务器
jellyfin:
image: jellyfin/jellyfin:latest
ports:
- "8096:8096"
volumes:
- /path/to/media:/media
- jellyfin_config:/config
- jellyfin_cache:/cache
restart: unless-stopped
# qBittorrent 下载器(供NAS Tools调用)
qbittorrent:
image: linuxserver/qbittorrent:latest
ports:
- "8083:8080"
- "6881:6881"
- "6881:6881/udp"
volumes:
- /path/to/downloads:/downloads
- qbittorrent_config:/config
environment:
- PUID=1000
- PGID=1000
restart: unless-stopped
volumes:
portainer_data:
pg_data:
gitlab_config:
gitlab_logs:
gitlab_data:
nextcloud_data:
jellyfin_config:
jellyfin_cache:
qbittorrent_config:
2.2 启动服务
docker-compose up -d
3. NAS 系统配置
3.1 NAS Tools 部署(影视资源管理)
# 单独部署 nastools(需映射下载目录)
docker run -d \
--name nastools \
-v /path/to/downloads:/media \
-v /path/to/config:/config \
-p 3000:3000 \
--restart unless-stopped \
nastool/nastool:latest
3.2 配置要点
-
资源刮削:
- 在 NAS Tools 中配置 TMDB API 密钥
- 设置媒体库路径与 Jellyfin 同步
- 链接 qBittorrent WebUI(
http://qbittorrent:8083)
-
自动化流程:
- 配置 RSS 订阅自动下载
- 设置文件重命名规则(匹配 Jellyfin 识别格式)
- 示例文件名:
/media/Movies/复仇者联盟 (2012)/复仇者联盟 (2012).mkv
4. CI/CD 流程整合
4.1 GitLab CI 示例(.gitlab-ci.yml)
stages:
- build
- test
- deploy
variables:
DOCKER_HOST: tcp://docker:2375
build:
stage: build
image: docker:latest
services:
- docker:dind
script:
- docker build -t your-registry/app:${CI_COMMIT_SHORT_SHA} .
- docker push your-registry/app:${CI_COMMIT_SHORT_SHA}
deploy:
stage: deploy
image: alpine:3.15
script:
- apk add --no-cache openssh-client
- ssh user@prod-server "docker pull your-registry/app:${CI_COMMIT_SHORT_SHA}"
- ssh user@prod-server "docker-compose -f /app/docker-compose.prod.yml up -d"
only:
- main
4.2 Jenkins 集成(可选)
若需使用 Jenkins:
- 在 Docker 中部署 Jenkins:
# 在 docker-compose.yml 中添加 jenkins: image: jenkins/jenkins:lts ports: - "8080:8080" volumes: - jenkins_data:/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock - 配置 Jenkins Pipeline 与 GitLab 的 Webhook 联动
5. 安全与优化
5.1 安全加固
- 网络隔离:
# 在 docker-compose.yml 中创建独立网络 networks: internal: driver: bridge internal: true # 禁止外部访问 - 反向代理(推荐 Traefik):
# 示例 Traefik 配置 traefik: image: traefik:latest command: - "--providers.docker=true" - "--entrypoints.web.address=:80" ports: - "80:80" volumes: - /var/run/docker.sock:/var/run/docker.sock
5.2 存储优化
- 使用 ZFS/BTRFS 文件系统实现存储池
- 配置 SnapRAID 实现数据冗余
- 定期备份关键数据到 Nextcloud
6. 访问入口汇总
| 服务名称 | 访问地址 | 说明 |
|---|---|---|
| Portainer | http://host-ip:9000 | Docker 容器管理 |
| GitLab | http://host-ip:8081 | 代码仓库 & CI/CD |
| Nextcloud | http://host-ip:8082 | 私有云盘 |
| Jellyfin | http://host-ip:8096 | 媒体播放与影视墙 |
| qBittorrent | http://host-ip:8083 | 下载管理 |
| NAS Tools | http://host-ip:3000 | 资源自动化管理 |
常见问题解决
-
Docker 权限问题:
# 修复文件权限 sudo chown -R 1000:1000 /path/to/media -
Jellyfin 硬解码配置:
# 在 docker-compose.yml 中添加设备映射 devices: - /dev/dri:/dev/dri -
GitLab 初始化慢:
# 查看容器日志 docker logs gitlab -f # 调整资源配置(至少 4GB 内存)
通过以上配置,您将获得一个高度集成的私有云环境,具备代码管理、自动化构建、NAS 存储、媒体服务等完整能力。所有服务均可通过 Portainer 统一管理,实现轻量级运维。

浙公网安备 33010602011771号