diff --git a/doc/settings/configuration.md b/doc/settings/configuration.md index 0ee1457ebb58f0cd8afcd2106c11eb06a59ad650_ZG9jL3NldHRpbmdzL2NvbmZpZ3VyYXRpb24ubWQ=..94b33ad2d368b3e66c78dd4fa970e1504388abe4_ZG9jL3NldHRpbmdzL2NvbmZpZ3VyYXRpb24ubWQ= 100644 --- a/doc/settings/configuration.md +++ b/doc/settings/configuration.md @@ -590,6 +590,28 @@ sudo gitlab-ctl reconfigure ``` +## Set a Content Delivery Network URL + +Service static assets with a Content Delivery Network (CDN) or asset host +using `gitlab_rails['cdn_host']`. This configures a [Rails asset host](https://guides.rubyonrails.org/configuring.html#config-asset-host). + +To set a CDN/asset host: + +1. Edit `/etc/gitlab/gitlab.rb`: + + ```ruby + gitlab_rails['cdn_host'] = 'https://mycdnsubdomain.fictional-cdn.com' + ``` + +1. Reconfigure GitLab: + + ```shell + sudo gitlab-ctl reconfigure + ``` + +Additional documentation for configuring common services to act as an asset host +is tracked in [this issue](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5708). + ## Set a Content Security Policy Setting a Content Security Policy (CSP) can help thwart JavaScript diff --git a/files/gitlab-config-template/gitlab.rb.template b/files/gitlab-config-template/gitlab.rb.template index 0ee1457ebb58f0cd8afcd2106c11eb06a59ad650_ZmlsZXMvZ2l0bGFiLWNvbmZpZy10ZW1wbGF0ZS9naXRsYWIucmIudGVtcGxhdGU=..94b33ad2d368b3e66c78dd4fa970e1504388abe4_ZmlsZXMvZ2l0bGFiLWNvbmZpZy10ZW1wbGF0ZS9naXRsYWIucmIudGVtcGxhdGU= 100644 --- a/files/gitlab-config-template/gitlab.rb.template +++ b/files/gitlab-config-template/gitlab.rb.template @@ -67,6 +67,11 @@ # gitlab_rails['gitlab_ssh_user'] = '' # gitlab_rails['time_zone'] = 'UTC' +### Rails asset / CDN host +###! Defines a url for a host/cdn to use for the Rails assets +###! Docs: https://docs.gitlab.com/omnibus/settings/configuration.html#set-a-content-delivery-network-url +# gitlab_rails['cdn_host'] = 'https://mycdnsubdomain.fictional-cdn.com' + ### Request duration ###! Tells the rails application how long it has to complete a request ###! This value needs to be lower than the worker timeout set in puma. diff --git a/files/gitlab-cookbooks/gitlab/attributes/default.rb b/files/gitlab-cookbooks/gitlab/attributes/default.rb index 0ee1457ebb58f0cd8afcd2106c11eb06a59ad650_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIvYXR0cmlidXRlcy9kZWZhdWx0LnJi..94b33ad2d368b3e66c78dd4fa970e1504388abe4_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIvYXR0cmlidXRlcy9kZWZhdWx0LnJi 100644 --- a/files/gitlab-cookbooks/gitlab/attributes/default.rb +++ b/files/gitlab-cookbooks/gitlab/attributes/default.rb @@ -92,6 +92,7 @@ default['gitlab']['gitlab-rails']['gitlab_ssh_user'] = nil default['gitlab']['gitlab-rails']['gitlab_ssh_host'] = nil default['gitlab']['gitlab-rails']['time_zone'] = nil +default['gitlab']['gitlab-rails']['cdn_host'] = nil default['gitlab']['gitlab-rails']['gitlab_email_from'] = nil default['gitlab']['gitlab-rails']['gitlab_email_display_name'] = nil default['gitlab']['gitlab-rails']['gitlab_email_subject_suffix'] = nil diff --git a/files/gitlab-cookbooks/gitlab/templates/default/gitlab.yml.erb b/files/gitlab-cookbooks/gitlab/templates/default/gitlab.yml.erb index 0ee1457ebb58f0cd8afcd2106c11eb06a59ad650_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIvdGVtcGxhdGVzL2RlZmF1bHQvZ2l0bGFiLnltbC5lcmI=..94b33ad2d368b3e66c78dd4fa970e1504388abe4_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9naXRsYWIvdGVtcGxhdGVzL2RlZmF1bHQvZ2l0bGFiLnltbC5lcmI= 100644 --- a/files/gitlab-cookbooks/gitlab/templates/default/gitlab.yml.erb +++ b/files/gitlab-cookbooks/gitlab/templates/default/gitlab.yml.erb @@ -14,6 +14,11 @@ port: <%= @gitlab_port %> https: <%= @gitlab_https %> + <%- unless @cdn_host.nil? %> + ## Rails asset/CDN host + cdn_host: <%= @cdn_host %> + <% end %> + # The maximum time puma can spend on the request. This needs to be smaller than the worker timeout. # Default is 95% of the worker timeout max_request_duration_seconds: <%= @max_request_duration_seconds %> diff --git a/spec/chef/cookbooks/gitlab/recipes/gitlab-rails/gitlab_yml/gitlab_spec.rb b/spec/chef/cookbooks/gitlab/recipes/gitlab-rails/gitlab_yml/gitlab_spec.rb index 0ee1457ebb58f0cd8afcd2106c11eb06a59ad650_c3BlYy9jaGVmL2Nvb2tib29rcy9naXRsYWIvcmVjaXBlcy9naXRsYWItcmFpbHMvZ2l0bGFiX3ltbC9naXRsYWJfc3BlYy5yYg==..94b33ad2d368b3e66c78dd4fa970e1504388abe4_c3BlYy9jaGVmL2Nvb2tib29rcy9naXRsYWIvcmVjaXBlcy9naXRsYWItcmFpbHMvZ2l0bGFiX3ltbC9naXRsYWJfc3BlYy5yYg== 100644 --- a/spec/chef/cookbooks/gitlab/recipes/gitlab-rails/gitlab_yml/gitlab_spec.rb +++ b/spec/chef/cookbooks/gitlab/recipes/gitlab-rails/gitlab_yml/gitlab_spec.rb @@ -4,6 +4,28 @@ include_context 'gitlab-rails' describe 'GitLab Application Settings' do + describe 'CDN Host' do + context 'with default configuration' do + it 'does not render cdn_host in gitlab.yml' do + expect(gitlab_yml[:production][:gitlab][:cdn_host]).to be nil + end + end + + context 'with user specified configuration' do + before do + stub_gitlab_rb( + gitlab_rails: { + cdn_host: 'https://cdn.example.com' + } + ) + end + + it 'renders specified cdn_host in gitlab.yml' do + expect(gitlab_yml[:production][:gitlab][:cdn_host]).to eq('https://cdn.example.com') + end + end + end + describe 'Content Security Policy settings' do context 'with default configuration' do it 'renders gitlab.yml without content security policy settings' do