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命令部署

java 复制代码
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文件:

python 复制代码
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

java 复制代码
#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文件:

java 复制代码
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:

java 复制代码
# 使用明确的 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

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)。

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

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


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

相关推荐
数据知道1 小时前
万字详解 PostgreSQL 的详细安装方式(Linux、Windows、macOS、Docker 全平台覆盖)
linux·windows·postgresql
用什么都重名1 小时前
【Dify 实战踩坑】工作流可运行但 MCP 服务部署失败(503)的问题定位与彻底解决
人工智能·docker·dify·mcp服务
好学且牛逼的马10 小时前
【工具配置|docker】
运维·docker·容器
yeflx13 小时前
解决Ubuntu22.04宿主机docker容器中nvidia-smi偶发失效问题
运维·docker·容器
吉吉6116 小时前
Docker拉取镜像解决办法
运维·docker·容器
lpfasd12318 小时前
springcloud docker 部署问题排查与解决方案
spring·spring cloud·docker
宋情写18 小时前
docker-compose安装Redis
redis·docker·容器
装不满的克莱因瓶20 小时前
【2026最新 架构环境安装篇三】Docker安装RabbitMQ4.x详细教程
linux·运维·docker·容器·架构·rabbitmq
ask_baidu21 小时前
监控Source端Pg对Flink CDC的影响
java·大数据·postgresql·flink