UPDATE: Unicorn Timeout
Создаем директории:
mkdir /opt/backups
chown git:git /opt/backups
cp /var/opt/gitlab/git-data /opt
Для краткости будут указаны только измененные строки.
Правим файл /etc/gitlab/gitlab.rb:
external_url "https://git.example.com"
############################
# gitlab.yml configuration #
############################
gitlab_rails['time_zone'] = "Asia/Yakutsk"
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = "robot@example.com"
gitlab_rails['gitlab_email_display_name'] = "Example GitLab"
gitlab_rails['gitlab_default_can_create_group'] = false
gitlab_rails['gitlab_username_changing_enabled'] = false
gitlab_rails['gitlab_default_theme'] = 2
## For setting up LDAP
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main:
label: 'LDAP'
host: 'ad.example.com'
port: 636
uid: 'sAMAccountName'
method: 'ssl'
bind_dn: 'login'
password: 'password'
admin_group: 'git_admins'
active_directory: true
allow_username_or_email_login: true
base: 'dc=ad,dc=example,dc=com'
user_filter: ''
EOS
gitlab_rails['omniauth_enabled'] = false
## For setting up backups
gitlab_rails['backup_path'] = "/opt/backups"
gitlab_rails['backup_keep_time'] = 604800
## For setting up different data storing directory
git_data_dir "/opt/git-data"
################################
# GitLab email server settings #
################################
gitlab_rails['gitlab_email_from'] = 'robot@example.com'
gitlab_rails['gitlab_email_reply_to'] = 'robot@example.com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.example.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "robot@example.com"
gitlab_rails['smtp_password'] = "password"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'none'
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = 'plain'
###############
# GitLab user #
###############
user['username'] = "git"
user['group'] = "git"
user['shell'] = "/bin/sh"
user['home'] = "/var/opt/gitlab"
user['git_user_name'] = "GitLab"
user['git_user_email'] = "gitlab@#{node['fqdn']}"
##################
# GitLab Sidekiq #
##################
sidekiq['log_directory'] = "/var/log/gitlab/sidekiq"
sidekiq['shutdown_timeout'] = 4
################
# GitLab Nginx #
################
nginx['enable'] = true
nginx['client_max_body_size'] = "4000m"
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/ssl/gitlab/bundle_git.crt"
nginx['ssl_certificate_key'] = "/etc/ssl/gitlab/git.example.com.key"
nginx['ssl_ciphers'] = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"
nginx['ssl_prefer_server_ciphers'] = "on"
nginx['ssl_protocols'] = "TLSv1 TLSv1.1 TLSv1.2" # recommended by https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html & https://cipherli.st/
nginx['ssl_session_cache'] = "builtin:1000 shared:SSL:10m" # recommended in http://nginx.org/en/docs/http/ngx_http_ssl_module.html
nginx['ssl_session_timeout'] = "5m" # default according to http://nginx.org/en/docs/http/ngx_http_ssl_module.html
nginx['listen_addresses'] = ['*']
Убдитесь, что /var/opt/gitlab/gitlab-rails/etc/smtp_settings.rb выглядит следующим образом:
if Rails.env.production?
Gitlab::Application.config.action_mailer.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
authentication: :plain,
address: "smtp.example.com",
port: 587,
user_name: "robot@example.com",
password: "password",
domain: "example.com",
enable_starttls_auto: true,
tls: false,
openssl_verify_mode: "none",
ca_file: "/opt/gitlab/embedded/ssl/certs/cacert.pem",
}
end
Проблема deploy по ssh возникает из-за того, что у пользователя git нет доступа к authorized_keys:
chown git:git /var/opt/gitlab/.ssh -R
gitlab-ctl reconfigure
Теперь можно делать deploy как по ssh так и по https.
В качестве windows клиента можно использовать TortoiseGit.
P.S. Иногда после gitlab-ctl reconfigure не поднимается gitlab из-за того, что sidekiq теряет socket (видимо отсутствует проверка на существование socket). В этом случае надо просто повторно выполнить команду. В nginx параметр client_max_body_size увеличен до 4гб специально поскольку при миграции с svn не влезала одна гигантская revision.
P.S. Сегодня произошел случай когда одному программисту выдалась ошибка:
error: RPC failed; result=18, HTTP code = 200 MiB | 10.95 MiB/s
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
Проблема в том, что unicorn выдает timeout после 30 секунд при дефолтной конфигурации:
##################
# GitLab Unicorn #
##################
unicorn['worker_timeout'] = 600
unicorn['worker_processes'] = 2 //Количество воркеров можете выставлять по "количеству ядер-1"