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 配置要点

  1. 资源刮削

    • 在 NAS Tools 中配置 TMDB API 密钥
    • 设置媒体库路径与 Jellyfin 同步
    • 链接 qBittorrent WebUI(http://qbittorrent:8083
  2. 自动化流程

    • 配置 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:

  1. 在 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
    
  2. 配置 Jenkins Pipeline 与 GitLab 的 Webhook 联动

5. 安全与优化

5.1 安全加固

  1. 网络隔离
    # 在 docker-compose.yml 中创建独立网络
    networks:
      internal:
        driver: bridge
        internal: true  # 禁止外部访问
    
  2. 反向代理(推荐 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 存储优化

  1. 使用 ZFS/BTRFS 文件系统实现存储池
  2. 配置 SnapRAID 实现数据冗余
  3. 定期备份关键数据到 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 资源自动化管理

常见问题解决

  1. Docker 权限问题

    # 修复文件权限
    sudo chown -R 1000:1000 /path/to/media
    
  2. Jellyfin 硬解码配置

    # 在 docker-compose.yml 中添加设备映射
    devices:
      - /dev/dri:/dev/dri
    
  3. GitLab 初始化慢

    # 查看容器日志
    docker logs gitlab -f
    # 调整资源配置(至少 4GB 内存)
    

通过以上配置,您将获得一个高度集成的私有云环境,具备代码管理、自动化构建、NAS 存储、媒体服务等完整能力。所有服务均可通过 Portainer 统一管理,实现轻量级运维。

posted @ 2025-02-11 14:53  BaldButStrong  阅读(114)  评论(0)    收藏  举报