💡知行合一.🐬|

BaldButStrong

园龄:2年11个月粉丝:2关注:0

2025-02-11 14:53阅读: 14评论: 0推荐: 0

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 统一管理,实现轻量级运维。

本文作者:BaldButStrong

本文链接:https://www.cnblogs.com/supersimple/p/18709723

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   BaldButStrong  阅读(14)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起