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

Flutter 三方库 l10n_countries 的鸿蒙化适配指南 - 实现全球 250+ 国家与地区的本地化信息映射、支持端侧多语言地理名称展示与旗帜图标索引实战

Flutter 三方库 l10n_countries 的鸿蒙化适配指南 - 实现全球 250+ 国家与地区的本地化信息映射、支持端侧多语言地理名称展示与旗帜图标索引实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 l10n_countries 的鸿蒙化适配指南 - 实现全球 250+ 国家与地区的本地化信息映射、支持端侧多语言地理名称展示与旗帜图标索引实战 前言 在进行 Flutter for OpenHarmony 的全球化(i18n)电商、旅游或社交应用开发时,如何根据用户的语言设置,准确展示全球各国的名称、二位/三位代码(ISO 3166-1)及货币信息?手动维护上百个国家的翻译表显然是不现实的。l10n_countries 是一款功能完备的本地化地理信息库。本文将介绍如何在鸿蒙端构建极致、精准的全球地理背景感知能力。 一、原直观解析 / 概念介绍 1.1 基础原理 该库内置了一套基于 CLDR(通用当地文字库)的大型映射表。通过将 ISO 国家代码作为唯一索引,

By Ne0inhk
Flutter 组件 dartframe 的适配 鸿蒙Harmony 实战 - 极简主义后端框架集成、多端逻辑复用与业务解耦重构方案

Flutter 组件 dartframe 的适配 鸿蒙Harmony 实战 - 极简主义后端框架集成、多端逻辑复用与业务解耦重构方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 dartframe 的适配 鸿蒙Harmony 实战 - 极简主义后端框架集成、多端逻辑复用与业务解耦重构方案 前言 在 Flutter 生态不断向桌面和服务器端扩展的今天,寻找一个轻量、灵活且对 Dart 原生特性挖掘深化的框架,已成为全栈开发者的追求。dartframe 正是这样一款倡导“极简、快速、模块化”的通用型 Dart 开发框架,它不依赖于繁重的第三方库,力求给开发者最直观、最清爽的编码体验。 当我们站在鸿蒙系统(OpenHarmony)适配的门槛上,审视这类框架时,其最大的魅力在于:它能让我们在鸿蒙端复用那一套被验证过的、纯粹的 Dart 业务逻辑块,同时轻松剥离那些高度依赖平台、环境的副作用代码。 本文将带你深度剖析如何通过 dartframe 在鸿蒙应用中实现高效的“多端同构”开发模式,

By Ne0inhk
Linux匿名管道通信:原理深挖+代码实现,一篇吃透进程间数据流转

Linux匿名管道通信:原理深挖+代码实现,一篇吃透进程间数据流转

🔥个人主页:Cx330🌸 ❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》 《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔 《Git深度解析》:版本管理实战全解 🌟心向往之行必能至 🎥Cx330🌸的简介: 目录 前言: 一. 进程间通信介绍 1.1 进程间通信目的 1.2 进程间通信的发展与分类 二、先搞懂:什么是管道?匿名管道有何特殊性? 2.1 管道的本质 2.2 管道的核心特性 三、匿名管道的创建 3.1 匿名管道的创建流程 3.2 匿名管道的使用示例 四. 核心深挖:匿名管道的底层原理 4.1 fork

By Ne0inhk
Flutter 组件 cleany 适配鸿蒙 HarmonyOS 实战:自动化清理矩阵,构建复杂应用的状态闭环与资源防腐架构

Flutter 组件 cleany 适配鸿蒙 HarmonyOS 实战:自动化清理矩阵,构建复杂应用的状态闭环与资源防腐架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 cleany 适配鸿蒙 HarmonyOS 实战:自动化清理矩阵,构建复杂应用的状态闭环与资源防腐架构 前言 在鸿蒙(OpenHarmony)生态迈向多任务并行、长周期驻留及高频账户流转的全场景办公与生活背景下,如何确保应用在退出登录、环境切换或异常恢复时能够“不留痕迹”地销毁脏数据,已成为衡量应用健壮性的核心指标。在鸿蒙设备这类强调分布式沙箱隔离与严苛内存占用(Resident Set Size)管控的环境下,如果应用缺乏统一的资源清理机制,由于由于散落在各处的 Stream 监听、本地缓存及内存单例,极易由于由于状态残留导致不同用户间的数据越权或 UI 状态的逻辑死锁。 我们需要一种能够集中注册清理任务、支持并发异步销毁且具备原子性执行保障的状态复位框架。 cleany 为 Flutter 开发者引入了极其暴力且高效的“全域清算”范式。它通过中心化的管理器(Manager),允许各个业务模块在初始化时注册其对应的资源回收钩子。在适

By Ne0inhk