Commit be6844ff authored by Kamil Trzciński's avatar Kamil Trzciński
Browse files

GitLab Pages support for Omnibus

parent 740c111c
Loading
Loading
Loading
Loading
+35 −0
Changes for files/gitlab-config-template/gitlab.rb.template: 35 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -73,6 +73,9 @@ external_url 'GENERATED_EXTERNAL_URL'
# gitlab_rails['lfs_enabled'] = true
# gitlab_rails['lfs_storage_path'] = "/mnt/storage/lfs-objects"

## GitLab Pages
# gitlab_rails['pages_path'] = "/mnt/storage/pages"

## For setting up LDAP
## see https://gitlab.com/gitlab-org/omnibus-gitlab/blob/629def0a7a26e7c2326566f0758d4a27857b52a3/README.md#setting-up-ldap-sign-in
## Be careful not to break the identation in the ldap_servers block. It is in
@@ -817,3 +820,35 @@ external_url 'GENERATED_EXTERNAL_URL'
# mattermost_nginx['gzip_types'] = [ "text/plain", "text/css", "application/x-javascript", "text/xml", "application/xml", "application/xml+rss", "text/javascript", "application/json" ]
# mattermost_nginx['keepalive_timeout'] = 65
# mattermost_nginx['cache_max_size'] = '5000m'

####################
# GitLab Pages
####################

## Define to enable GitLab Pages
# pages_external_url "http://pages.example.com/"

####################
# GitLab Pages NGINX #
####################

# pages_nginx['enable'] = false
# pages_nginx['redirect_http_to_https'] = false
# pages_nginx['redirect_http_to_https_port'] = 80
# pages_nginx['ssl_certificate'] = "/etc/gitlab/ssl/#{node['fqdn']}.crt"
# pages_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/#{node['fqdn']}.key"
# pages_nginx['ssl_ciphers'] = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256"
# pages_nginx['ssl_prefer_server_ciphers'] = "on"
# pages_nginx['ssl_protocols'] = "TLSv1 TLSv1.1 TLSv1.2" # recommended by https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html & https://cipherli.st/
# pages_nginx['ssl_session_cache'] = "builtin:1000  shared:SSL:10m" # recommended in http://nginx.org/en/docs/http/ngx_http_ssl_module.html
# pages_nginx['ssl_session_timeout'] = "5m" # default according to http://nginx.org/en/docs/http/ngx_http_ssl_module.html
# pages_nginx['ssl_dhparam'] = nil # Path to ci_dhparams.pem, eg. /etc/gitlab/ssl/ci_dhparams.pem
# pages_nginx['listen_addresses'] = ['*']
# pages_nginx['listen_port'] = nil # override only if you use a reverse proxy: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md#setting-the-nginx-listen-port
# pages_nginx['listen_https'] = nil # override only if your reverse proxy internally communicates over HTTP: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md#supporting-proxied-ssl
# pages_nginx['custom_gitlab_server_config'] = "location ^~ /foo-namespace/bar-project/raw/ {\n deny all;\n}\n"
# pages_nginx['custom_nginx_config'] = "include /etc/nginx/conf.d/example.conf;"

## Advanced settings
# pages_nginx['dir'] = "/var/opt/gitlab/nginx"
# pages_nginx['log_directory'] = "/var/log/gitlab/nginx"
+5 −0
Changes for files/gitlab-cookbooks/gitlab/attributes/default.rb: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -100,6 +100,11 @@ default['gitlab']['gitlab-rails']['artifacts_enabled'] = true
default['gitlab']['gitlab-rails']['artifacts_path'] = nil
default['gitlab']['gitlab-rails']['lfs_enabled'] = false
default['gitlab']['gitlab-rails']['lfs_storage_path'] = nil
default['gitlab']['gitlab-rails']['pages_enabled'] = false
default['gitlab']['gitlab-rails']['pages_domain'] = nil
default['gitlab']['gitlab-rails']['pages_port'] = nil
default['gitlab']['gitlab-rails']['pages_https'] = false
default['gitlab']['gitlab-rails']['pages_path'] = nil
default['gitlab']['gitlab-rails']['ldap_enabled'] = false
default['gitlab']['gitlab-rails']['ldap_servers'] = []

+52 −1
Changes for files/gitlab-cookbooks/gitlab/libraries/gitlab.rb: 52 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ module Gitlab
  ci_sidekiq Mash.new
  gitlab_workhorse Mash.new
  gitlab_git_http_server Mash.new # legacy from GitLab 7.14, 8.0, 8.1
  pages_nginx Mash.new
  mailroom Mash.new
  nginx Mash.new
  ci_nginx Mash.new
@@ -62,6 +63,7 @@ module Gitlab
  mattermost Mash.new
  node nil
  external_url nil
  pages_external_url nil
  ci_external_url nil
  mattermost_external_url nil
  git_data_dir nil
@@ -139,6 +141,14 @@ module Gitlab
      Gitlab['gitlab_rails']['gitlab_port'] = uri.port
    end

    def parse_gitlab_pages
      return unless Gitlab['gitlab_rails']['pages_enabled']

      unless Gitlab['gitlab_rails']['pages_domain']
        raise "GitLab Pages require a valid domain, e.g. example.com"
      end
    end

    def parse_git_data_dir
      return unless git_data_dir

@@ -163,6 +173,10 @@ module Gitlab
      Gitlab['gitlab_rails']['lfs_storage_path'] ||= File.join(Gitlab['gitlab_rails']['shared_path'], 'lfs-objects')
    end

    def parse_pages_dir
      Gitlab['gitlab_rails']['pages_path'] ||= File.join(Gitlab['gitlab_rails']['shared_path'], 'pages')
    end

    def parse_udp_log_shipping
      return unless logging['udp_log_shipping_host']

@@ -284,7 +298,8 @@ module Gitlab
      [
        [%w{nginx listen_port}, %w{gitlab_rails gitlab_port}],
        [%w{ci_nginx listen_port}, %w{gitlab_ci gitlab_ci_port}],
        [%w{mattermost_nginx listen_port}, %w{mattermost port}]
        [%w{mattermost_nginx listen_port}, %w{mattermost port}],
        [%w{pages_nginx listen_port}],

      ].each do |left, right|
        if !Gitlab[left.first][left.last].nil?
@@ -338,6 +353,39 @@ module Gitlab
      ci_nginx['enable'] = true if ci_nginx['enable'].nil?
    end

    def parse_pages_external_url
      return unless pages_external_url

      gitlab_rails['pages_enable'] = true if gitlab_rails['pages_enable'].nil?

      uri = URI(pages_external_url.to_s)

      unless uri.host
        raise "GitLab Pages external URL must must include a schema and FQDN, e.g. http://mattermost.example.com/"
      end

      Gitlab['gitlab_rails']['pages_domain'] = uri.host
      Gitlab['gitlab_rails']['pages_port'] = uri.port

      case uri.scheme
      when "http"
        Gitlab['gitlab_rails']['pages_https'] = false
      when "https"
        Gitlab['gitlab_rails']['pages_https'] = true
        Gitlab['pages_nginx']['ssl_certificate'] ||= "/etc/gitlab/ssl/#{uri.host}.crt"
        Gitlab['pages_nginx']['ssl_certificate_key'] ||= "/etc/gitlab/ssl/#{uri.host}.key"
      else
        raise "Unsupported GitLab Pages external URL scheme: #{uri.scheme}"
      end

      unless ["", "/"].include?(uri.path)
        raise "Unsupported GitLab Pages external URL path: #{uri.path}"
      end

      # FQDN are prepared to be used as regexp: the dot is escaped
      Gitlab['pages_nginx']['fqdn_regex'] = uri.host.sub('.', '\.')
    end

    def parse_mattermost_external_url
      return unless mattermost_external_url

@@ -433,10 +481,12 @@ module Gitlab
      generate_secrets(node_name)
      parse_gitlab_git_http_server
      parse_external_url
      parse_gitlab_pages
      parse_git_data_dir
      parse_shared_dir
      parse_artifacts_dir
      parse_lfs_objects_dir
      parse_pages_dir
      parse_udp_log_shipping
      parse_redis_settings
      parse_postgresql_settings
@@ -444,6 +494,7 @@ module Gitlab
      # Parse ci_external_url _before_ gitlab_ci settings so that the user
      # can turn on gitlab_ci by only specifying ci_external_url
      parse_ci_external_url
      parse_pages_external_url
      parse_mattermost_external_url
      parse_unicorn_listen_address
      parse_nginx_listen_address
+1 −0
Changes for files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ end
  node['gitlab']['gitlab-rails']['shared_path'],
  node['gitlab']['gitlab-rails']['artifacts_path'],
  node['gitlab']['gitlab-rails']['lfs_storage_path'],
  node['gitlab']['gitlab-rails']['pages_path'],
  gitlab_rails_log_dir
].compact.each do |dir_name|
  directory dir_name do
+28 −0
Changes for files/gitlab-cookbooks/gitlab/recipes/nginx.rb: 28 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ end
nginx_config = File.join(nginx_conf_dir, "nginx.conf")

gitlab_rails_http_conf = File.join(nginx_conf_dir, "gitlab-http.conf")
gitlab_pages_http_conf = File.join(nginx_conf_dir, "gitlab-pages.conf")
gitlab_mattermost_http_conf = File.join(nginx_conf_dir, "gitlab-mattermost-http.conf")

# If the service is enabled, check if we are using internal nginx
@@ -57,6 +58,12 @@ gitlab_mattermost_enabled = if node['gitlab']['mattermost']['enable']
                              false
                            end

gitlab_pages_enabled = if node['gitlab']['gitlab-rails']['pages_enable']
                         node['gitlab']['pages-nginx']['enable']
                       else
                         false
                       end

# Include the config file for gitlab-rails in nginx.conf later
nginx_vars = node['gitlab']['nginx'].to_hash.merge({
               :gitlab_http_config => gitlab_rails_enabled ? gitlab_rails_http_conf : nil
@@ -67,6 +74,11 @@ nginx_vars = nginx_vars.to_hash.merge!({
               :gitlab_mattermost_http_config => gitlab_mattermost_enabled ? gitlab_mattermost_http_conf : nil
             })

# Include the config file for gitlab mattermost in nginx.conf later
nginx_vars = nginx_vars.to_hash.merge!({
                                         :gitlab_pages_http_config => gitlab_pages_enabled ? gitlab_pages_http_conf : nil
                                       })

if nginx_vars['listen_https'].nil?
  nginx_vars['https'] = node['gitlab']['gitlab-rails']['gitlab_https']
else
@@ -92,6 +104,22 @@ template gitlab_rails_http_conf do
  action gitlab_rails_enabled ? :create : :delete
end

pages_nginx_vars = node['gitlab']['pages-nginx'].to_hash

template gitlab_pages_http_conf do
  source "nginx-gitlab-pages-http.conf.erb"
  owner "root"
  group "root"
  mode "0644"
  variables(pages_nginx_vars.merge(
    {
      pages_path: node['gitlab']['gitlab-rails']['pages_path'],
    }
  ))
  notifies :restart, 'service[nginx]' if OmnibusHelper.should_notify?("nginx")
  action gitlab_rails_enabled ? :create : :delete
end

mattermost_nginx_vars = node['gitlab']['mattermost-nginx'].to_hash

if mattermost_nginx_vars['listen_https'].nil?
Loading