上传文件管理

上传文件是可能作为单个文件发送到极狐GitLab 的所有用户数据。例如,头像和笔记的附件是上传文件。上传文件是极狐GitLab 功能不可或缺的一部分,因此无法禁用。

使用本地存储

这是默认配置。要更改本地存储上传的位置,请根据您的安装方法使用本节中的步骤:

note由于历史原因,实例级别的上传文件(例如 favicon)存储在基本目录中,默认情况下为 uploads/-/system。强烈建议不要更改现有极狐GitLab 安装的基本目录。

在 Omnibus GitLab 安装实例:

上传的文件默认存储在 /var/opt/gitlab/gitlab-rails/uploads 中。

  1. 例如,要将存储路径更改为 /mnt/storage/uploads,请编辑 /etc/gitlab/gitlab.rb 并添加以下行:

    gitlab_rails['uploads_directory'] = "/mnt/storage/uploads"
    

    此设置仅适用于您尚未更改 gitlab_rails['uploads_storage_path'] 目录的情况。

  2. 保存文件并重新配置极狐GitLab 以使更改生效。

在源安装:

上传的内容默认存储在 /home/git/gitlab/public/uploads

  1. 要将存储路径更改为例如 /mnt/storage/uploads,请编辑 /home/git/gitlab/config/gitlab.yml 并添加或修改以下行:

    uploads:
      storage_path: /mnt/storage
      base_dir: uploads
    
  2. 保存文件并重新启动极狐GitLab 以使更改生效。

使用对象存储

如果您不想使用安装了极狐GitLab 的本地磁盘来存储上传,您可以改用像 AWS S3 这样的对象存储提供商。此配置依赖于已配置的有效 AWS 凭证。

对象存储设置

对于源安装,以下设置嵌套在 uploads:object_store: 下。在 Omnibus GitLab 安装中,它们以 uploads_object_store_ 为前缀。

设置 描述 默认值
enabled 启用/禁用对象存储 false
remote_directory 将存储上传的存储桶名称  
direct_upload 设置为 true 以从上传路径中删除 Puma。Workhorse 处理实际的 Artifact 上传到 Object Storage,而 Puma 进行最少的处理来跟踪上传。不需要本地共享存储。如果引入了对所有文件的单一存储类型的支持,则可能会删除该选项。 false
background_upload 设置为 false 以禁用自动上传。 一旦上传直接到 S3,选项可能会被删除(如果 direct_upload 设置为 true,它将覆盖 background_uploadtrue
proxy_download 设置为 true 以启用代理服务的所有文件。选项允许减少出口流量,因为这允许客户端直接从远程存储下载而不是代理所有数据 false
connection 下面描述的各种连接选项  

连接设置

在 Omnibus 安装实例:

上传文件默认存储在 /var/opt/gitlab/gitlab-rails/uploads 中。

  1. 编辑 /etc/gitlab/gitlab.rb 并通过添加以下行替换为您想要的值:

    gitlab_rails['uploads_object_store_enabled'] = true
    gitlab_rails['uploads_object_store_remote_directory'] = "uploads"
    gitlab_rails['uploads_object_store_connection'] = {
      'provider' => 'AWS',
      'region' => 'eu-central-1',
      'aws_access_key_id' => 'AWS_ACCESS_KEY_ID',
      'aws_secret_access_key' => 'AWS_SECRET_ACCESS_KEY'
    }
    

    如果您使用 AWS IAM 配置文件,请确保省略 AWS 访问密钥和 secret 访问密钥/值对。

    gitlab_rails['uploads_object_store_connection'] = {
      'provider' => 'AWS',
      'region' => 'eu-central-1',
      'use_iam_profile' => true
    }
    
  2. 保存文件并重新配置极狐GitLab 以使更改生效。
  3. 使用 gitlab:uploads:migrate Rake 任务 将任何现有的本地上传迁移到对象存储。
  4. 可选:验证所有文件都已正确迁移。从 PostgreSQL 控制台 (sudo gitlab-psql -d gitlabhq_production) 验证 objectstg 下面(其中 store=2)包含所有产物的计数:

    gitlabhq_production=# SELECT count(*) AS total, sum(case when store = '1' then 1 else 0 end) AS filesystem, sum(case when store = '2' then 1 else 0 end) AS objectstg FROM uploads;
    
    total | filesystem | objectstg
    ------+------------+-----------
     2409 |          0 |      2409
    

    Verify no files on disk in artifacts folder:

    sudo find /var/opt/gitlab/gitlab-rails/uploads -type f | grep -v tmp | wc -l
    

在源安装实例:

上传的内容默认存储在 /home/git/gitlab/public/uploads

  1. 编辑 /home/git/gitlab/config/gitlab.yml 并添加或修改以下几行:

    uploads:
      object_store:
        enabled: true
        remote_directory: "uploads" # The bucket name
        connection:
          provider: AWS # Only AWS supported at the moment
          aws_access_key_id: AWS_ACCESS_KEY_ID
          aws_secret_access_key: AWS_SECRET_ACCESS_KEY
          region: eu-central-1
    
  2. 保存文件并重新配置极狐GitLab 以使更改生效。
  3. 使用 gitlab:uploads:migrate:all Rake 任务 将任何现有的本地上传迁移到对象存储。
  4. 可选:验证所有文件都已正确迁移。从 PostgreSQL 控制台 (sudo -u git -H psql -d gitlabhq_production) 验证下面的 objectstg(其中 file_store=2)具有所有产物的计数:

    gitlabhq_production=# SELECT count(*) AS total, sum(case when store = '1' then 1 else 0 end) AS filesystem, sum(case when store = '2' then 1 else 0 end) AS objectstg FROM uploads;
    
    total | filesystem | objectstg
    ------+------------+-----------
     2409 |          0 |      2409
    

    验证 artifacts 文件夹中,磁盘上没有文件:

    sudo find /var/opt/gitlab/gitlab-rails/uploads -type f | grep -v tmp | wc -l
    

OpenStack 示例

在 Omnibus 安装实例:

上传文件默认存储在 /var/opt/gitlab/gitlab-rails/uploads 中。

  1. 编辑 /etc/gitlab/gitlab.rb 并通过添加以下行替换为您想要的值:

    gitlab_rails['uploads_object_store_remote_directory'] = "OPENSTACK_OBJECT_CONTAINER_NAME"
    gitlab_rails['uploads_object_store_connection'] = {
     'provider' => 'OpenStack',
     'openstack_username' => 'OPENSTACK_USERNAME',
     'openstack_api_key' => 'OPENSTACK_PASSWORD',
     'openstack_temp_url_key' => 'OPENSTACK_TEMP_URL_KEY',
     'openstack_auth_url' => 'https://auth.cloud.ovh.net/v2.0/',
     'openstack_region' => 'DE1',
     'openstack_tenant' => 'TENANT_ID',
    }
    
  2. 保存文件并重新配置极狐GitLab 以使更改生效。
  3. 使用 gitlab:uploads:migrate:all Rake 任务 将任何现有的本地上传迁移到对象存储。
  4. 可选:验证所有文件都已正确迁移。从 PostgreSQL 控制台 (sudo gitlab-psql -d gitlabhq_production) 验证 objectstg 下面(其中 store=2)包含所有产物的计数:

    gitlabhq_production=# SELECT count(*) AS total, sum(case when store = '1' then 1 else 0 end) AS filesystem, sum(case when store = '2' then 1 else 0 end) AS objectstg FROM uploads;
    
    total | filesystem | objectstg
    ------+------------+-----------
     2409 |          0 |      2409
    

    验证artifacts文件夹中,磁盘上没有文件:

    sudo find /var/opt/gitlab/gitlab-rails/uploads -type f | grep -v tmp | wc -l
    

在源安装实例:

上传的内容默认存储在 /home/git/gitlab/public/uploads 中。

  1. 编辑 /home/git/gitlab/config/gitlab.yml 并添加或修改以下几行:

    uploads:
      object_store:
        enabled: true
        direct_upload: false
        background_upload: true
        proxy_download: false
        remote_directory: OPENSTACK_OBJECT_CONTAINER_NAME
        connection:
          provider: OpenStack
          openstack_username: OPENSTACK_USERNAME
          openstack_api_key: OPENSTACK_PASSWORD
          openstack_temp_url_key: OPENSTACK_TEMP_URL_KEY
          openstack_auth_url: 'https://auth.cloud.ovh.net/v2.0/'
          openstack_region: DE1
          openstack_tenant: 'TENANT_ID'
    
  2. 保存文件并重新配置极狐GitLab 以使更改生效。
  3. 使用 gitlab:uploads:migrate:all Rake 任务 将任何现有的本地上传迁移到对象存储。
  4. 可选:验证所有文件都已正确迁移。从 PostgreSQL 控制台 (sudo -u git -H psql -d gitlabhq_production) 验证下面的 objectstg(其中 file_store=2)具有所有产物的计数:

    gitlabhq_production=# SELECT count(*) AS total, sum(case when store = '1' then 1 else 0 end) AS filesystem, sum(case when store = '2' then 1 else 0 end) AS objectstg FROM uploads;
    
    total | filesystem | objectstg
    ------+------------+-----------
     2409 |          0 |      2409
    

    验证artifacts文件夹中,磁盘上没有文件:

    sudo find /var/opt/gitlab/gitlab-rails/uploads -type f | grep -v tmp | wc -l