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 统一管理,实现轻量级运维。
本文作者:BaldButStrong
本文链接:https://www.cnblogs.com/supersimple/p/18709723
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步