访问项目页面时出现 GitLab 500 错误
GitLab 500 Error when visiting Project Page
我正在为我的组织设置 GitLab 企业版。我们使用 AWS EFS 存储回购数据,并使用两个实例通过 AWS ELB 为 SSH 和 HTTP/HTTPS 流量提供服务。 EFS 卷在两个实例之间共享。但是当我在服务重启后访问项目主页时,我们看到 500 错误页面。我们尝试了 运行 gitlab-ctl reconfigure && gitlab-ctl restart
但没有帮助。
- GitLab EE 版本 - 8.12.1-ee
- 2 * Centos 7(AWS EC2 实例 - m4.xlarge)
- AWS ELB 用于负载平衡 ssh 和 http/https 流量
日志错误
==> /var/log/gitlab/gitlab-rails/production.log <==
Started GET "/itops/docker" for 10.0.4.246 at 2016-09-26 07:58:58 +0000
Processing by ProjectsController#show as HTML
Parameters: {"namespace_id"=>"itops", "id"=>"docker"}
Completed 500 Internal Server Error in 145ms (ActiveRecord: 14.2ms)
OpenSSL::Cipher::CipherError (bad decrypt):
app/models/project.rb:531:in `import_url'
app/models/project.rb:567:in `external_import?'
app/models/project.rb:559:in `import?'
app/models/project.rb:575:in `import_in_progress?'
app/controllers/projects_controller.rb:95:in `show'
lib/gitlab/request_profiler/middleware.rb:15:in `call'
lib/gitlab/middleware/go.rb:16:in `call'
lib/gitlab/middleware/readonly_geo.rb:29:in `call'
==> /var/log/gitlab/gitlab-rails/production.log <==
Started GET "/itops/docker/refs/master/logs_tree/?offset=50&_=1474877373459" for 10.0.9.106 at 2016-09-26 08:09:40 +0000
Processing by Projects::RefsController#logs_tree as JS
Parameters: {"offset"=>"50", "_"=>"1474877373459", "namespace_id"=>"itops", "project_id"=>"docker", "id"=>"master"}
Started GET "/itops/docker/commits/master" for 10.0.4.246 at 2016-09-26 08:09:40 +0000
Processing by Projects::CommitsController#show as HTML
Parameters: {"namespace_id"=>"itops", "project_id"=>"docker", "id"=>"master"}
Completed 500 Internal Server Error in 176ms (ActiveRecord: 16.8ms)
ActionView::Template::Error (bad decrypt):
1: - if @project.mirror?
2: .prepend-top-default.gray-content-block.second-block.clearfix
3: - import_url = @project.safe_import_url
4: .oneline.project-mirror-text
5: This project is mirrored from #{link_to import_url, import_url}.
6:
app/models/project.rb:531:in `import_url'
app/models/project.rb:587:in `safe_import_url'
app/views/projects/commits/_mirror_status.html.haml:3:in `_app_views_projects_commits__mirror_status_html_haml___2300853211630423479_63495260'
app/views/projects/commits/show.html.haml:35:in `_app_views_projects_commits_show_html_haml___2695203885719227520_58528080'
app/controllers/projects/commits_controller.rb:27:in `show'
lib/gitlab/request_profiler/middleware.rb:15:in `call'
lib/gitlab/middleware/go.rb:16:in `call'
lib/gitlab/middleware/readonly_geo.rb:29:in `call'
我从 GitHub 导入了 Docker 项目。所有其他页面都工作正常(tree/master、activity、图形、管道、问题)只有项目主页和 docker/commits/master 显示错误。
您是从其他服务器迁移过来的吗?
如果是这样,您之前的 /etc/gitlab/gitlab-secrets.json
文件可能包含新安装没有的加密密钥。
将旧的 gitlab-secrets.json
复制到新服务器上的 /etc/gitlab
(当然,在备份新版本之后,以防万一您需要回滚)应该可以解决这个问题。
我的情况是,当我通过从另一个导入创建存储库时出现了同样的异常。关闭捐助项目服务器后,我遇到了 500 错误。异常必须是 import_url
unavailable ,而不是 ssl 错误。
我的解决方案是从数据库中清除损坏的 link:
update projects set import_url=NULL where id = MY-PROJECT_ID;
我们就此问题联系了 AWS 和 gitlab 支持团队,发现 AWS EFS(弹性文件系统 - fancy NFS 服务)与 Gitlab 不兼容。欲了解更多信息,请访问下面 link.
https://docs.gitlab.com/ee/administration/high_availability/nfs.html#aws-elastic-file-system
EFS 的分布式架构导致每个文件操作的延迟更高
Gitlab以序列化方式处理非常小的文件(序列化命令示例:ls、cp、tar、rsync、git)
EFS 基于卷大小允许 IOPS。卷越大,分配的 IOPS 越多。对于较小的卷,由于 'Burst Credits',用户可能会在一段时间内体验到不错的性能。在数周到数月的时间内,学分可能 运行 耗尽,性能将触底。
对于较大的卷,分配的 IOPS 可能不是问题。许多小文件以序列化方式写入的工作负载不太适合 EFS。顶部带有 NFS 服务器的 EBS 性能会好得多。
我正在为我的组织设置 GitLab 企业版。我们使用 AWS EFS 存储回购数据,并使用两个实例通过 AWS ELB 为 SSH 和 HTTP/HTTPS 流量提供服务。 EFS 卷在两个实例之间共享。但是当我在服务重启后访问项目主页时,我们看到 500 错误页面。我们尝试了 运行 gitlab-ctl reconfigure && gitlab-ctl restart
但没有帮助。
- GitLab EE 版本 - 8.12.1-ee
- 2 * Centos 7(AWS EC2 实例 - m4.xlarge)
- AWS ELB 用于负载平衡 ssh 和 http/https 流量
日志错误
==> /var/log/gitlab/gitlab-rails/production.log <==
Started GET "/itops/docker" for 10.0.4.246 at 2016-09-26 07:58:58 +0000
Processing by ProjectsController#show as HTML
Parameters: {"namespace_id"=>"itops", "id"=>"docker"}
Completed 500 Internal Server Error in 145ms (ActiveRecord: 14.2ms)
OpenSSL::Cipher::CipherError (bad decrypt):
app/models/project.rb:531:in `import_url'
app/models/project.rb:567:in `external_import?'
app/models/project.rb:559:in `import?'
app/models/project.rb:575:in `import_in_progress?'
app/controllers/projects_controller.rb:95:in `show'
lib/gitlab/request_profiler/middleware.rb:15:in `call'
lib/gitlab/middleware/go.rb:16:in `call'
lib/gitlab/middleware/readonly_geo.rb:29:in `call'
==> /var/log/gitlab/gitlab-rails/production.log <==
Started GET "/itops/docker/refs/master/logs_tree/?offset=50&_=1474877373459" for 10.0.9.106 at 2016-09-26 08:09:40 +0000
Processing by Projects::RefsController#logs_tree as JS
Parameters: {"offset"=>"50", "_"=>"1474877373459", "namespace_id"=>"itops", "project_id"=>"docker", "id"=>"master"}
Started GET "/itops/docker/commits/master" for 10.0.4.246 at 2016-09-26 08:09:40 +0000
Processing by Projects::CommitsController#show as HTML
Parameters: {"namespace_id"=>"itops", "project_id"=>"docker", "id"=>"master"}
Completed 500 Internal Server Error in 176ms (ActiveRecord: 16.8ms)
ActionView::Template::Error (bad decrypt):
1: - if @project.mirror?
2: .prepend-top-default.gray-content-block.second-block.clearfix
3: - import_url = @project.safe_import_url
4: .oneline.project-mirror-text
5: This project is mirrored from #{link_to import_url, import_url}.
6:
app/models/project.rb:531:in `import_url'
app/models/project.rb:587:in `safe_import_url'
app/views/projects/commits/_mirror_status.html.haml:3:in `_app_views_projects_commits__mirror_status_html_haml___2300853211630423479_63495260'
app/views/projects/commits/show.html.haml:35:in `_app_views_projects_commits_show_html_haml___2695203885719227520_58528080'
app/controllers/projects/commits_controller.rb:27:in `show'
lib/gitlab/request_profiler/middleware.rb:15:in `call'
lib/gitlab/middleware/go.rb:16:in `call'
lib/gitlab/middleware/readonly_geo.rb:29:in `call'
我从 GitHub 导入了 Docker 项目。所有其他页面都工作正常(tree/master、activity、图形、管道、问题)只有项目主页和 docker/commits/master 显示错误。
您是从其他服务器迁移过来的吗?
如果是这样,您之前的 /etc/gitlab/gitlab-secrets.json
文件可能包含新安装没有的加密密钥。
将旧的 gitlab-secrets.json
复制到新服务器上的 /etc/gitlab
(当然,在备份新版本之后,以防万一您需要回滚)应该可以解决这个问题。
我的情况是,当我通过从另一个导入创建存储库时出现了同样的异常。关闭捐助项目服务器后,我遇到了 500 错误。异常必须是 import_url
unavailable ,而不是 ssl 错误。
我的解决方案是从数据库中清除损坏的 link:
update projects set import_url=NULL where id = MY-PROJECT_ID;
我们就此问题联系了 AWS 和 gitlab 支持团队,发现 AWS EFS(弹性文件系统 - fancy NFS 服务)与 Gitlab 不兼容。欲了解更多信息,请访问下面 link.
https://docs.gitlab.com/ee/administration/high_availability/nfs.html#aws-elastic-file-system
EFS 的分布式架构导致每个文件操作的延迟更高
Gitlab以序列化方式处理非常小的文件(序列化命令示例:ls、cp、tar、rsync、git)
EFS 基于卷大小允许 IOPS。卷越大,分配的 IOPS 越多。对于较小的卷,由于 'Burst Credits',用户可能会在一段时间内体验到不错的性能。在数周到数月的时间内,学分可能 运行 耗尽,性能将触底。
对于较大的卷,分配的 IOPS 可能不是问题。许多小文件以序列化方式写入的工作负载不太适合 EFS。顶部带有 NFS 服务器的 EBS 性能会好得多。