程序员与 DevOps:打造私人代码堡垒与 CI/CD 中心
对于开发者而言,群晖 NAS 是一台低功耗、高可用性的 Linux 服务器。本指南将教您如何利用 DSM 构建完整的开发、测试、部署流水线,甚至实现 Infrastructure as Code。
本指南涵盖 Gitea Actions CI/CD 实战、Dev Containers 远程开发以及 Verdaccio 私有源搭建。
1. 代码托管与 CI/CD:Gitea + Actions
Gitea 不仅是 Git 仓库,配合 Actions 可以实现类似 GitHub Actions 的自动化构建。
1.1 Gitea + Runner 部署 (Docker Compose)
我们需要同时部署 Gitea Server 和 Gitea Runner。
version: "3"
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1026
- USER_GID=100
volumes:
- ./gitea:/data
ports:
- "3000:3000"
- "2222:22"
restart: always
runner:
image: gitea/act_runner:latest
container_name: gitea_runner
environment:
- GITEA_INSTANCE_URL=http://gitea:3000
- GITEA_RUNNER_REGISTRATION_TOKEN=<填入你的Token>
- GITEA_RUNNER_NAME=nas-runner
volumes:
- /var/run/docker.sock:/var/run/docker.sock # 允许 Runner 调动宿主机 Docker
depends_on:
- gitea
restart: always
管理后台 > Runner > Create Runner 获取。 1.2 编写流水线 (Workflow)
在仓库根目录创建 .gitea/workflows/build.yaml。 实战目标:代码 Push 后,自动构建 Docker 镜像并部署到 NAS 的 Portainer。
name: Build and Deploy
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: user/myapp:latest
- name: Trigger Webhook (Deploy)
run: curl -X POST ${{ secrets.PORTAINER_WEBHOOK }}
2. 洁癖开发环境:VS Code Dev Containers
不要在你的 Mac/PC 上安装 Python, Node, Go, Rust... 把它们都装在 NAS 的容器里!
2.1 原理
VS Code (本地) -> SSH -> NAS (Docker 容器)。你的代码和运行环境都在 NAS 上,本地只负责 UI 显示。
2.2 配置步骤
- 在 NAS 上启动一个基础开发容器(例如
mcr.microsoft.com/devcontainers/python:3),并映射工作目录。 - 在 VS Code 安装 Remote - Development 插件包。
- 点击左下角
><图标,选择Remote-SSH: Connect to Host连接到 NAS。 - 连接成功后,在左侧 Docker 栏中找到那个开发容器,右键
Attach to Container。 - 效果:你现在的终端是 Linux 环境,安装 pip 包不会污染你的 Mac,且编译使用的是 NAS 的 CPU。
3. 私有 NPM/PyPI 代理:Verdaccio
加速 npm install 并托管私有包。
3.1 部署 Verdaccio
version: '3'
services:
verdaccio:
image: verdaccio/verdaccio
container_name: verdaccio
ports:
- "4873:4873"
volumes:
- ./storage:/verdaccio/storage
- ./config:/verdaccio/conf
3.2 使用
- 设置源:
npm set registry http://nas-ip:4873 - 发布私有包:
npm publish(包会存在 NAS 上)。 - 加速:当请求公共包(如 React)时,Verdaccio 会缓存一份在 NAS,下次安装秒开。
4. 基础设施即代码:Ansible 管理 NAS
你是想手动点点点,还是写代码管理 NAS?
4.1 准备
在 NAS 控制面板开启 SSH 功能。
4.2 Playbook 示例 (nas_setup.yml)
- hosts: my_nas
tasks:
- name: Ensure Docker group exists
group:
name: docker
state: present
- name: Create shared folder for projects
file:
path: /volume1/projects
state: directory
owner: admin
group: users
mode: '0755'
- name: Deploy Portainer
docker_container:
name: portainer
image: portainer/portainer-ce
state: started
restart_policy: always
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
ansible-playbook -i inventory nas_setup.yml,一键配置新 NAS。 总结:通过 Gitea Actions 实现自动化交付,Dev Containers 实现环境隔离,Verdaccio 加速依赖管理,Ansible 实现配置即代码,您已将 NAS 升级为企业级 DevOps 平台。