Docker一站式部署:RustFS、GoFastDFS、Gitea与PostgreSQL实战指南

1. 前言

在现代软件开发和部署中,Docker已成为不可或缺的工具。它提供了轻量级、可移植的容器化解决方案,使应用部署变得简单高效。本文将详细介绍如何使用Docker一键部署四个常用服务:RustFS(高性能文件存储)、GoFastDFS(分布式文件系统)、Gitea(自托管Git服务)和PostgreSQL(关系型数据库)。无论你是个人开发者还是团队负责人,这些服务都能为你的项目提供强大支持。

2. 前提条件

  • 已安装Docker(版本20.10+)
  • 已安装Docker Compose(版本1.29+)
  • 64位操作系统(Windows/Linux/Mac)
  • 至少4GB可用内存

3. RustFS部署

RustFS是一款使用Rust语言编写的高性能文件存储系统,支持S3协议,适用于私有云存储场景。

3.1 Docker命令部署

Linux: docker run -d \ --name rustfs_container \ --user root \ -p 9000:9000 \ -p 9001:9001 \ -v D:/ProgramData/docker/rustfs/data:/data:z \ -e RUSTFS_ACCESS_KEY=rustfsadmin \ -e RUSTFS_SECRET_KEY=rustfsadmin \ -e RUSTFS_CONSOLE_ENABLE=true \ rustfs/rustfs:latest \ --address 0.0.0.0:9000 \ --console-enable \ --console-address 0.0.0.0:9001 \ --access-key rustfsadmin \ --secret-key rustfsadmin Windows: docker run -d ` --name rustfs_container ` --user root ` -p 9000:9000 ` -p 9001:9001 ` -v D:/ProgramData/docker/rustfs/data:/data:z ` -e RUSTFS_ACCESS_KEY=rustfsadmin ` -e RUSTFS_SECRET_KEY=rustfsadmin ` -e RUSTFS_CONSOLE_ENABLE=true ` rustfs/rustfs:latest ` --address 0.0.0.0:9000 ` --console-enable ` --console-address 0.0.0.0:9001 ` --access-key rustfsadmin ` --secret-key rustfsadmin 界面:http://localhost:9001/rustfs/console/browser

参数说明:

  • --user root: 以root用户运行容器
  • -p 9000:9000: 映射API端口
  • -p 9001:9001: 映射控制台端口
  • -v: 挂载数据卷
  • RUSTFS_ACCESS_KEYRUSTFS_SECRET_KEY: 访问凭证
  • --console-enable: 启用Web控制台

3.2 Docker Compose部署(推荐)

创建docker-compose.yml文件:

version: '3.8' services: rustfs: image: rustfs/rustfs:latest container_name: rustfs_container user: root ports: - "9000:9000" - "9001:9001" volumes: - D:/ProgramData/docker/rustfs/data:/data:z environment: - RUSTFS_ACCESS_KEY=rustfsadmin - RUSTFS_SECRET_KEY=rustfsadmin - RUSTFS_CONSOLE_ENABLE=true command: > --address 0.0.0.0:9000 --console-enable --console-address 0.0.0.0:9001 --access-key rustfsadmin --secret-key rustfsadmin restart: unless-stopped 

启动服务:

docker-compose up -d 

访问控制台:http://localhost:9001/rustfs/console/browser
默认登录凭证:用户名/密码均为rustfsadmin

4. GoFastDFS部署

GoFastDFS是一个基于Golang实现的高性能分布式文件系统,适合大文件存储。

4.1 下载配置文件

GoFastDFS东西有点多,无法把内容全部写上,请从网盘下载Docker的安装

部分docker-compose.yml

#version: '3.4' services: fastdfs1: # build: # context: . # dockerfile: Dockerfile image: sjqzhang/go-fastdfs:latest #docker pull sjqzhang/go-fastdfs container_name: fastdfs1 privileged: true restart: always #networks: # - extnetwork volumes: - type: bind source: ./fastdfs/data1 target: /usr/local/go-fastdfs/data ports: - "9527:8080" fastdfs2: # build: # context: . # dockerfile: Dockerfile image: sjqzhang/go-fastdfs:latest #docker pull sjqzhang/go-fastdfs container_name: fastdfs2 privileged: true restart: always #networks: # - extnetwork volumes: - type: bind source: ./fastdfs/data2 target: /usr/local/go-fastdfs/data ports: - "9526:8080" nginx: image: nginx:latest container_name: fileserver-nginx privileged: true restart: always #networks: # - extnetwork ports: - "9528:80" volumes: - type: bind source: ./nginx/nginx.conf target: /etc/nginx/nginx.conf - type: bind source: ./nginx/static target: /usr/share/nginx/html - type: bind source: ./nginx/log target: /var/log/nginx fastdfs-web: build: context: ./fastdfs-web dockerfile: Dockerfile image: fastdfs-web:latest #docker pull sjqzhang/go-fastdfs container_name: fastdfs-web volumes: - type: bind source: ./fastdfs-web/db/go-fastdfs.db target: /db/go-fastdfs.db - type: bind source: ./fastdfs-web/logs target: /logs privileged: true restart: always #networks: # extnetwork: # ipv4_address: 172.19.0.20 ports: - "8099:8088" links: - fastdfs1 - fastdfs2 depends_on: - fastdfs1 - fastdfs2 networks: extnetwork: driver: bridge ipam: config: - subnet: 172.19.0.0/16 

4.2 启动服务

docker-compose up -d 

访问Web界面:http://localhost:8099
初次访问会要求设置管理员密码,请妥善保存。

5. Gitea部署

Gitea是一个轻量级的自托管Git服务,适合团队代码管理和协作。

5.1 创建Docker Compose文件

创建gitea-compose.yml文件:

version: "3" services: gitea: image: gitea/gitea:latest container_name: gitea restart: always environment: - USER_UID=1000 - USER_GID=1000 - TZ=Asia/Shanghai ports: - "3000:3000" # HTTP - "222:22" # SSH(避免与主机22端口冲突) volumes: - D:/ProgramData/docker/gitea/gitea:/data - D:/ProgramData/docker/gitea/etc/timezone:/etc/timezone:ro - D:/ProgramData/docker/gitea/etc/localtime:/etc/localtime:ro

6. PostgreSQL部署

PostgreSQL是一个强大的开源对象关系数据库系统。

6.1 创建Docker Compose文件

创建postgres-compose.yml文件:

version: '3.8' services: postgres: image: postgres:latest container_name: postgres_container environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres_password - POSTGRES_DB=postgres volumes: - D:/ProgramData/docker/postgres/data:/var/lib/postgresql/data ports: - "5432:5432" restart: unless-stopped 

Dockerfie:

# 使用明确的 PostgreSQL 版本(推荐) FROM postgres:17 # 设置环境变量 ENV POSTGRES_USER=postgres ENV POSTGRES_PASSWORD=postgres ENV POSTGRES_DB=postgres # 安装编译依赖 + PostgreSQL 开发包 RUN apt-get update && \ apt-get install -y \ build-essential \ git \ cmake \ libssl-dev \ libpq-dev \ zlib1g-dev \ postgresql-server-dev-17 && \ rm -rf /var/lib/apt/lists/* # 克隆并编译 pgvector RUN git clone --branch v0.8.1 https://github.com/pgvector/pgvector.git /pgvector && \ cd /pgvector && \ make && \ make install # 可选:清理源码(减小镜像体积) RUN rm -rf /pgvector # 复制初始化脚本(如果需要自动启用 extension) COPY init.sql /docker-entrypoint-initdb.d/

init.sql

-- 启用 vector 扩展 CREATE EXTENSION IF NOT EXISTS vector; -- 创建一个示例表 CREATE TABLE example ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, embedding VECTOR(3) -- 假设嵌入维度为3 ); -- 插入一些示例数据 INSERT INTO example (name, embedding) VALUES ('Alice', '[1.0, 2.0, 3.0]'), ('Bob', '[4.0, 5.0, 6.0]');

7. 一体化部署方案

将所有服务整合到一个docker-compose.yml文件中:

version: '3.8' services: rustfs: image: rustfs/rustfs:latest container_name: rustfs_container user: root ports: - "9000:9000" - "9001:9001" volumes: - D:/ProgramData/docker/rustfs/data:/data:z environment: - RUSTFS_ACCESS_KEY=rustfsadmin - RUSTFS_SECRET_KEY=rustfsadmin - RUSTFS_CONSOLE_ENABLE=true command: > --address 0.0.0.0:9000 --console-enable --console-address 0.0.0.0:9001 --access-key rustfsadmin --secret-key rustfsadmin restart: unless-stopped gofastdfs: image: sjq0/rush:latest container_name: gofastdfs_container ports: - "8080:8080" volumes: - D:/ProgramData/docker/gofastdfs/data:/data:z environment: - GO_FASTDFS_DIR=/data restart: unless-stopped postgres: image: postgres:latest container_name: postgres_container environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres_password - POSTGRES_DB=postgres - PGDATA=/var/lib/postgresql/data/pgdata volumes: - D:/ProgramData/docker/postgres/data:/var/lib/postgresql/data ports: - "5432:5432" restart: unless-stopped gitea: image: gitea/gitea:latest container_name: gitea_container environment: - USER_UID=1000 - USER_GID=1000 - ROOT_URL=http://localhost:3000/ - DB_TYPE=postgres - DB_HOST=postgres:5432 - DB_NAME=gitea - DB_USER=postgres - DB_PASSWD=postgres_password restart: always volumes: - D:/ProgramData/docker/gitea/data:/data - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "222:22" depends_on: - postgres 

7.1 启动所有服务

docker-compose up -d 

7.2 服务访问地址

8. 常见问题与解决方案

8.1 Windows路径问题

在Windows系统中,Docker可能无法访问非共享目录。确保:

  1. Docker Desktop中已设置目录共享
  2. 使用绝对路径,如:D:\\ProgramData\\docker\\rustfs\\data
  3. 避免使用空格和特殊字符

8.2 端口冲突

如果遇到端口冲突,修改docker-compose.yml中的主机端口映射,例如将"3000:3000"改为"3001:3000"

8.3 权限问题

在Linux系统上,可能需要设置正确的文件权限:

chmod -R 777 D:/ProgramData/docker/ 

9. 后续优化建议

  1. 配置HTTPS:为所有服务配置SSL证书
  2. 设置备份策略:定期备份数据卷
  3. 资源限制:在docker-compose.yml中设置内存和CPU限制
  4. 监控系统:添加Prometheus+Grafana监控
  5. 日志管理:配置集中式日志收集系统

10. 总结

通过Docker,我们可以轻松部署和管理多个服务,无需担心环境依赖和配置冲突。本文详细介绍了RustFS、GoFastDFS、Gitea和PostgreSQL的Docker部署方案,提供了完整的docker-compose配置,使开发和运维工作更加高效。这些服务的组合为开发团队提供了完整的基础设施:代码托管(Gitea)、文件存储(RustFS/GoFastDFS)和数据存储(PostgreSQL)。

记住定期更新容器镜像,保持系统安全。在生产环境中,还需要考虑高可用性和灾备方案。

提示:本文中的所有配置均可根据实际需求进行调整,特别是数据存储路径和访问凭证,建议在生产环境中使用强密码并妥善保管。

本文首发于ZEEKLOG,转载请注明出处。
作者:DevOps实践者
时间:2026年01月18日

Read more

RAG系列:2025年最强开源RAG横评

RAG(Retrieval-Augmented Generation,检索增强生成)技术的出现,彻底改变了我们与AI交互的方式。简单来说,就是让AI不仅能"思考",还能"查资料"。想象一下,一个既有ChatGPT的推理能力,又能随时查阅你的专业资料库的AI助手,这不就是我们梦寐以求的"AI大脑外挂"吗? 本文真正从实战角度去深度评测这些平台。用30天时间,5个平台,真刀真枪地测一遍。 📊 评测维度:怎么"折腾"这些平台的 在正式开始之前,先说说我的评测方法。很多技术评测只看功能列表,我觉得这样不够实际。真正的好产品,应该经得起实战考验。 核心评测维度 1. 部署难度(20分) * 环境要求复杂度 * 安装步骤繁琐程度 * 首次运行成功率 * 文档完整度 2. 功能完整度(25分)

By Ne0inhk
【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)

【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)

本篇文章分享关于如何使用STM32单片机对彩色摄像头(OV7725/OV2604)采集的图像数据进行分析处理,最后实现颜色的识别和检测。 目录 一、什么是颜色识别 1、图像采集识别的一些基本概念 1. 像素(Pixel) 2. 分辨率(Resolution) 3. 帧率(Frame Rate) 4. 颜色深度(Color Depth) 5. 图像处理(Image Processing) 6. 图像采集设备 7. 亮度(Luminance)与色度(Chrominance) 8. 图像编码与压缩(Image Encoding and Compression) 9. 图像识别(Image Recognition) 10. 图像采集与处理中的延迟(Latency) 二、OV7725简介

By Ne0inhk
【Code Review】基于GLM4.7的 Claude code 官方github代码自动审查

【Code Review】基于GLM4.7的 Claude code 官方github代码自动审查

前言 代码审查是软件开发过程中至关重要的一环,它不仅是发现潜在缺陷的利器,更是知识共享、代码质量提升和团队协作的催化剂。然而,我们在日常工作中,小团队作坊往往没有时间相互进入code review工作,为了能够不影响工作进展的同时,做好代码的review,我们今天基于claude code来进行github仓库代码的自动review。 代码审查:为何不可或缺? 1. 提升代码质量:审查者可以发现逻辑错误、边界条件处理不当、潜在的性能瓶颈以及不符合编码规范的写法。 2. 知识传播与学习:资深开发者可以通过审查指导新人,新人也能在审查中学习到新的技术和设计模式。 3. 统一代码风格:确保团队遵循一致的编码规范,提高代码的可读性和可维护性。 4. 预防缺陷前移:在代码合并到主分支前发现问题,远比上线后修复代价小得多。 5. 增强代码所有权:团队成员共同对代码负责,而非仅由原作者负责。 废话不多说,我们直接开始教程(本教程基于Linux amd64进行)。 一、安装 GitHub CLI (gh) 我们在进行之前,需要先安装 GitHub CLI (gh)

By Ne0inhk
2026最新|GitHub 启用双因素身份验证 2FA 教程:TOTP.app 一键生成动态验证码(新手小白图文实操)

2026最新|GitHub 启用双因素身份验证 2FA 教程:TOTP.app 一键生成动态验证码(新手小白图文实操)

2026最新|GitHub 启用双因素身份验证 2FA 教程:TOTP.app 一键生成动态验证码(新手小白图文实操) 如果你最近登录 GitHub 时被提示“启用双因素身份验证(2FA)”,别慌——这就是在你输入密码后,再增加一道“动态验证码”的安全锁。本文用TOTP.app(可下载/可在线) 带你从 0 到 1 完成 GitHub 的 2FA 配置,全程保留原图与链接,按步骤照做就能成功。 关键词:GitHub 2FA、GitHub 双因素身份验证、GitHub 启用 2FA、GitHub TOTP、GitHub 动态验证码、GitHub 账号安全、GitHub 登录保护、

By Ne0inhk