First attempt at adding a gitlab-dev instance
This commit is contained in:
parent
f4190c2b68
commit
1f0f6d1537
9 changed files with 365 additions and 0 deletions
10
files/gitlab/database.yml
Normal file
10
files/gitlab/database.yml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
production:
|
||||||
|
adapter: mysql2
|
||||||
|
encoding: utf8
|
||||||
|
reconnect: false
|
||||||
|
database: gitlabhq_production
|
||||||
|
pool: 5
|
||||||
|
username: gitlab
|
||||||
|
password: "$database_password"
|
||||||
|
# host: localhost
|
||||||
|
# # socket: /tmp/mysql.sock
|
13
files/gitlab/gitlab-worker.service
Normal file
13
files/gitlab/gitlab-worker.service
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Gitlab Resque Worker
|
||||||
|
Requires=redis.service
|
||||||
|
After=redis.service
|
||||||
|
Wants=postfix.service mysqld.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
User=gitlab
|
||||||
|
WorkingDirectory=/home/gitlab/gitlab
|
||||||
|
ExecStart=/bin/sh -c "RAILS_ENV=production bundle exec rake sidekiq:start"
|
||||||
|
ExecStopPost=/bin/sh -c "RAILS_ENV=production bundle exec rake sidekiq:stop"
|
||||||
|
PIDFile=/home/gitlab/gitlab/tmp/pids/sidekiq.pid
|
15
files/gitlab/gitlab.service
Normal file
15
files/gitlab/gitlab.service
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Gitlab Unicorn
|
||||||
|
Requires=redis.service mysqld.service
|
||||||
|
After=redis.service mysqld.service
|
||||||
|
Wants=postfix.service mysqld.service gitlab-worker.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=gitlab
|
||||||
|
WorkingDirectory=/home/gitlab/gitlab
|
||||||
|
ExecStart=/bin/sh -c "bundle exec unicorn_rails -c /home/gitlab/gitlab/config/unicorn.rb -E production"
|
||||||
|
PIDFile=/home/gitlab/gitlab/tmp/pids/unicorn.pid
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
14
files/gitlab/iptables
Normal file
14
files/gitlab/iptables
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
*filter
|
||||||
|
:INPUT ACCEPT [0:0]
|
||||||
|
:FORWARD ACCEPT [0:0]
|
||||||
|
:OUTPUT ACCEPT [0:0]
|
||||||
|
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||||||
|
-A INPUT -p icmp -j ACCEPT
|
||||||
|
-A INPUT -i lo -j ACCEPT
|
||||||
|
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
|
||||||
|
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
|
||||||
|
|
||||||
|
-A INPUT -j REJECT --reject-with icmp-host-prohibited
|
||||||
|
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
|
||||||
|
COMMIT
|
||||||
|
|
68
files/gitlab/unicorn.rb
Normal file
68
files/gitlab/unicorn.rb
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
# uncomment and customize to run in non-root path
|
||||||
|
# note that config/gitlab.yml web path should also be changed
|
||||||
|
# ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab"
|
||||||
|
|
||||||
|
app_dir = "/home/gitlab/gitlab/"
|
||||||
|
worker_processes 2
|
||||||
|
working_directory app_dir
|
||||||
|
|
||||||
|
# Load app into the master before forking workers for super-fast
|
||||||
|
# worker spawn times
|
||||||
|
preload_app true
|
||||||
|
|
||||||
|
# nuke workers after 30 seconds (60 is the default)
|
||||||
|
timeout 30
|
||||||
|
|
||||||
|
# listen on a Unix domain socket and/or a TCP port,
|
||||||
|
|
||||||
|
listen 3000 # listen to port 8080 on all TCP interfaces
|
||||||
|
#listen "127.0.0.1:8080" # listen to port 8080 on the loopback interface
|
||||||
|
listen "#{app_dir}/tmp/sockets/gitlab.socket"
|
||||||
|
|
||||||
|
pid "#{app_dir}/tmp/pids/unicorn.pid"
|
||||||
|
stderr_path "#{app_dir}/log/unicorn.stderr.log"
|
||||||
|
stdout_path "#{app_dir}/log/unicorn.stdout.log"
|
||||||
|
|
||||||
|
# http://www.rubyenterpriseedition.com/faq.html#adapt_apps_for_cow
|
||||||
|
if GC.respond_to?(:copy_on_write_friendly=)
|
||||||
|
GC.copy_on_write_friendly = true
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
before_fork do |server, worker|
|
||||||
|
# the following is highly recomended for Rails + "preload_app true"
|
||||||
|
# as there's no need for the master process to hold a connection
|
||||||
|
defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!
|
||||||
|
|
||||||
|
##
|
||||||
|
# When sent a USR2, Unicorn will suffix its pidfile with .oldbin and
|
||||||
|
# immediately start loading up a new version of itself (loaded with a new
|
||||||
|
# version of our app). When this new Unicorn is completely loaded
|
||||||
|
# it will begin spawning workers. The first worker spawned will check to
|
||||||
|
# see if an .oldbin pidfile exists. If so, this means we've just booted up
|
||||||
|
# a new Unicorn and need to tell the old one that it can now die. To do so
|
||||||
|
# we send it a QUIT.
|
||||||
|
#
|
||||||
|
# Using this method we get 0 downtime deploys.
|
||||||
|
|
||||||
|
old_pid = "#{server.config[:pid]}.oldbin"
|
||||||
|
|
||||||
|
if File.exists?(old_pid) && server.pid != old_pid
|
||||||
|
begin
|
||||||
|
sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
|
||||||
|
Process.kill(sig, File.read(old_pid).to_i)
|
||||||
|
rescue Errno::ENOENT, Errno::ESRCH
|
||||||
|
# someone else did our job for us
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
after_fork do |server, worker|
|
||||||
|
# Unicorn master loads the app then forks off workers - because of the way
|
||||||
|
# Unix forking works, we need to make sure we aren't using any of the parent's
|
||||||
|
# sockets, e.g. db connection
|
||||||
|
|
||||||
|
defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
|
||||||
|
# Redis and Memcached would go here but their connections are established
|
||||||
|
# on demand, so the master never opens a socket
|
||||||
|
end
|
15
files/gitlab/vhost.conf
Normal file
15
files/gitlab/vhost.conf
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName gitlab-dev.cloud.fedoraproject.org
|
||||||
|
|
||||||
|
# Uncomment if you want redirect from HTTP to HTTPS
|
||||||
|
#RewriteEngine on
|
||||||
|
#RewriteCond %{SERVER_PORT} ^80$
|
||||||
|
#RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
|
||||||
|
|
||||||
|
ProxyPass / http://127.0.0.1:3000/
|
||||||
|
ProxyPassReverse / http://127.0.0.1:3000/
|
||||||
|
ProxyPreserveHost On
|
||||||
|
|
||||||
|
#CustomLog logs/httpd/gitlab-access.log combined
|
||||||
|
#ErrorLog logs/httpd/gitlab-error.log
|
||||||
|
</VirtualHost>
|
10
inventory/host_vars/gitlab-dev.cloud.fedoraproject.org
Normal file
10
inventory/host_vars/gitlab-dev.cloud.fedoraproject.org
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
instance_type: m1.small
|
||||||
|
image: ami-00000016
|
||||||
|
keypair: admin
|
||||||
|
security_group: webserver
|
||||||
|
zone: fedoracloud
|
||||||
|
hostbase: gitlab-dev-
|
||||||
|
public_ip: 209.132.184.158
|
||||||
|
root_auth_users: skvidal codeblock
|
||||||
|
description: GitLab development/testing instance
|
|
@ -329,6 +329,7 @@ virthost-comm01.qa.fedoraproject.org
|
||||||
209.132.184.142
|
209.132.184.142
|
||||||
# lists-dev.cloud.fedoraproject.org on openstack
|
# lists-dev.cloud.fedoraproject.org on openstack
|
||||||
209.132.184.145
|
209.132.184.145
|
||||||
|
gitlab-dev.cloud.fedoraproject.org
|
||||||
|
|
||||||
[jenkins-slaves]
|
[jenkins-slaves]
|
||||||
209.132.184.165
|
209.132.184.165
|
||||||
|
|
219
playbooks/hosts/gitlab-dev.cloud.fedoraproject.org.yml
Normal file
219
playbooks/hosts/gitlab-dev.cloud.fedoraproject.org.yml
Normal file
|
@ -0,0 +1,219 @@
|
||||||
|
- name: check/create instance
|
||||||
|
hosts: gitlab-dev.cloud.fedoraproject.org
|
||||||
|
user: root
|
||||||
|
gather_facts: False
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- ${private}/vars.yml
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- include: $tasks/persistent_cloud.yml
|
||||||
|
|
||||||
|
- name: provision instance
|
||||||
|
hosts: gitlab-dev.cloud.fedoraproject.org
|
||||||
|
user: root
|
||||||
|
gather_facts: True
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- ${private}/vars.yml
|
||||||
|
- ${vars}/${ansible_distribution}.yml
|
||||||
|
- ${private}/gitlab/vars.yml
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- include: $tasks/cloud_setup_basic.yml
|
||||||
|
|
||||||
|
handlers:
|
||||||
|
- include: $handlers/restart_services.yml
|
||||||
|
|
||||||
|
- hosts: gitlab-dev.cloud.fedoraproject.org
|
||||||
|
user: root
|
||||||
|
tasks:
|
||||||
|
- name: Install necessary packages
|
||||||
|
yum: state=present name=$item
|
||||||
|
with_items:
|
||||||
|
- httpd
|
||||||
|
- ruby
|
||||||
|
- rubygems
|
||||||
|
- ruby-devel
|
||||||
|
- git
|
||||||
|
- python-pygments
|
||||||
|
- perl-Data-Dumper
|
||||||
|
- postfix
|
||||||
|
- redis
|
||||||
|
- libicu-devel
|
||||||
|
- libxslt-devel
|
||||||
|
- libxml2-devel
|
||||||
|
- mysql-server
|
||||||
|
- mysql-devel
|
||||||
|
- MySQL-python
|
||||||
|
- gcc
|
||||||
|
- gcc-c++
|
||||||
|
- glibc-devel
|
||||||
|
|
||||||
|
- name: Start services and make them start on boot
|
||||||
|
shell: systemctl enable $item.service && systemctl start $item.service
|
||||||
|
with_items:
|
||||||
|
- mysqld
|
||||||
|
- redis
|
||||||
|
- httpd
|
||||||
|
|
||||||
|
- name: Create user 'git'
|
||||||
|
user: state=present name=git system=yes shell=/bin/sh comment="Git Version Control"
|
||||||
|
|
||||||
|
- name: Create user 'gitlab'
|
||||||
|
user: state=present name=gitlab groups=git comment="GitLab" generate_ssh_key=yes
|
||||||
|
notify:
|
||||||
|
- Add local ssh key to known_hosts
|
||||||
|
|
||||||
|
handlers:
|
||||||
|
- name: Add local ssh key to known_hosts
|
||||||
|
shell: ssh-keyscan localhost >> /home/gitlab/.ssh/known_hosts
|
||||||
|
|
||||||
|
- hosts: gitlab-dev.cloud.fedoraproject.org
|
||||||
|
user: root
|
||||||
|
sudo: yes
|
||||||
|
sudo_user: git
|
||||||
|
tasks:
|
||||||
|
- name: Clone the gitlab fork of gitolite
|
||||||
|
git: repo=https://github.com/gitlabhq/gitolite.git dest=/home/git/gitolite version=gl-v320
|
||||||
|
|
||||||
|
- name: ensure /home/git/bin exists
|
||||||
|
file: state=directory path=/home/git/bin
|
||||||
|
# It’s not ideal to solve this using handlers, but we don’t want that append script to trigger twice – and it’s not possible to check if it has run without doing anything crazy.
|
||||||
|
notify:
|
||||||
|
- Setup gitolite PATH
|
||||||
|
- Setup gitolite symlink
|
||||||
|
|
||||||
|
handlers:
|
||||||
|
- name: Setup gitolite PATH
|
||||||
|
command: sh -c 'printf "%b\n%b\n" "PATH=\$PATH:/home/git/bin" "export PATH" >> /home/git/.profile'
|
||||||
|
|
||||||
|
- name: Setup gitolite symlink
|
||||||
|
command: sh -c 'gitolite/install -ln /home/git/bin' chdir=/home/git
|
||||||
|
|
||||||
|
- hosts: gitlab-dev.cloud.fedoraproject.org
|
||||||
|
user: root
|
||||||
|
tasks:
|
||||||
|
- name: Copy the 'gitlab' user SSH key to the 'git' user home directory
|
||||||
|
command: cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub creates=/home/git/gitlab.pub
|
||||||
|
|
||||||
|
- name: Set permissions on the copied SSH key
|
||||||
|
file: path=/home/git/gitlab.pub mode=0444
|
||||||
|
|
||||||
|
- hosts: gitlab-dev.cloud.fedoraproject.org
|
||||||
|
user: root
|
||||||
|
sudo: yes
|
||||||
|
sudo_user: git
|
||||||
|
tasks:
|
||||||
|
- name: Run gitolite setup (creates gitolite-admin repo)
|
||||||
|
command: sh -c "PATH=/home/git/bin:$PATH; gitolite setup -pk /home/git/gitlab.pub" creates=/home/git/repositories/gitolite-admin.git
|
||||||
|
|
||||||
|
- hosts: gitlab-dev.cloud.fedoraproject.org
|
||||||
|
user: root
|
||||||
|
tasks:
|
||||||
|
- name: Ensure Gitolite config dir is owned by git:git and has mode 750
|
||||||
|
file: state=directory path=/home/git/.gitolite mode=750 owner=git group=git recurse=yes
|
||||||
|
|
||||||
|
- name: Fix directory permissions for repositories (1)
|
||||||
|
command: chmod -R ug+rwX,o-rwx /home/git/repositories/
|
||||||
|
|
||||||
|
- name: Fix directory permissions for repositories (2)
|
||||||
|
file: state=directory path=/home/git/repositories owner=git group=git recurse=yes
|
||||||
|
|
||||||
|
- name: Fix directory permissions for repositories (3)
|
||||||
|
shell: find /home/git/repositories -type d -print0 | sudo xargs -0 chmod g+s
|
||||||
|
|
||||||
|
- name: Fix directory permissions for /home/git
|
||||||
|
shell: chmod 750 /home/git
|
||||||
|
|
||||||
|
- name: Create a MySQL db
|
||||||
|
mysql_db: state=present name=gitlabhq_production collation=utf8_unicode_ci encoding=utf8
|
||||||
|
|
||||||
|
- name: Add a MySQL 'gitlab' user
|
||||||
|
mysql_user: state=present name=gitlab host=localhost password=$database_password
|
||||||
|
|
||||||
|
- name: Grant permissions to the new MySQL 'gitlab' user
|
||||||
|
mysql_user: state=present name=gitlab priv=gitlabhq_production.*:SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER
|
||||||
|
|
||||||
|
- name: Install some extra necessary gems
|
||||||
|
command: gem install $item
|
||||||
|
with_items:
|
||||||
|
- charlock_holmes
|
||||||
|
- bundler
|
||||||
|
|
||||||
|
- hosts: gitlab-dev.cloud.fedoraproject.org
|
||||||
|
user: root
|
||||||
|
sudo: yes
|
||||||
|
sudo_user: gitlab
|
||||||
|
tasks:
|
||||||
|
- name: Clone GitLab 4.2 stable
|
||||||
|
git: repo=https://github.com/gitlabhq/gitlabhq.git dest=/home/gitlab/gitlab version=4-2-stable
|
||||||
|
|
||||||
|
# TODO: Make this a template in case we want to tweak.
|
||||||
|
- name: Copy example config file into place
|
||||||
|
command: cp /home/gitlab/gitlab/config/gitlab.yml.example /home/gitlab/gitlab/config/gitlab.yml creates=/home/gitlab/gitlab/config/gitlab.yml
|
||||||
|
|
||||||
|
- name: Create Unicorn config
|
||||||
|
template: src=$files/gitlab/unicorn.rb dest=/home/gitlab/gitlab/config/unicorn.rb
|
||||||
|
|
||||||
|
- name: Create database config
|
||||||
|
template: src=$files/gitlab/database.yml dest=/home/gitlab/gitlab/config/database.yml
|
||||||
|
|
||||||
|
- name: Run bundler
|
||||||
|
command: /usr/local/bin/bundle install --deployment --without development test postgres chdir=/home/gitlab/gitlab
|
||||||
|
|
||||||
|
- name: Set git username
|
||||||
|
command: chdir=/home/gitlab git config --global user.name "GitLab"
|
||||||
|
|
||||||
|
- name: Set git email
|
||||||
|
command: chdir=/home/gitlab git config --global user.email "gitlab@localhost" # Should use same user.email as in config/gitlab.yml – is it really needed?
|
||||||
|
|
||||||
|
- name: run rake gitlab:setup
|
||||||
|
shell: chdir=/home/gitlab/gitlab yes yes | /usr/local/bin/bundle exec rake gitlab:setup RAILS_ENV=production
|
||||||
|
|
||||||
|
- hosts: gitlab-dev.cloud.fedoraproject.org
|
||||||
|
user: root
|
||||||
|
tasks:
|
||||||
|
- name: Copy post-receive hook
|
||||||
|
command: cp /home/gitlab/gitlab/lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive creates=/home/git/.gitolite/hooks/common/post-receive
|
||||||
|
|
||||||
|
- name: Set permissions on post-receive hook
|
||||||
|
file: state=file path=/home/git/.gitolite/hooks/common/post-receive owner=git group=git
|
||||||
|
|
||||||
|
- name: Put gitlab and gitlab-worker systemd files in place
|
||||||
|
template: src=$files/gitlab/$item.service dest=/lib/systemd/system/$item.service
|
||||||
|
with_items:
|
||||||
|
- gitlab
|
||||||
|
- gitlab-worker
|
||||||
|
|
||||||
|
- name: Symlink systemd files into /etc
|
||||||
|
command: creates=/etc/systemd/system/$item.service ln -s /usr/lib/systemd/system/$item.service /etc/systemd/system/
|
||||||
|
with_items:
|
||||||
|
- gitlab
|
||||||
|
- gitlab-worker
|
||||||
|
|
||||||
|
- name: Tell systemd to find the new files
|
||||||
|
command: systemctl --system daemon-reload
|
||||||
|
|
||||||
|
- name: Start gitlab at boot
|
||||||
|
command: systemctl enable gitlab
|
||||||
|
|
||||||
|
- name: Start gitlab now
|
||||||
|
command: systemctl start gitlab.service
|
||||||
|
|
||||||
|
- name: Configure Apache
|
||||||
|
template: src=$files/gitlab/vhost.conf dest=/etc/httpd/conf.d/gitlab.conf
|
||||||
|
|
||||||
|
- name: Allow Apache to proxy to Unicorn (SELinux)
|
||||||
|
command: setsebool -P httpd_can_network_connect 1
|
||||||
|
|
||||||
|
- name: Restart Apache
|
||||||
|
command: service httpd restart
|
||||||
|
|
||||||
|
- name: Fix iptables
|
||||||
|
template: src=$files/gitlab/iptables dest=/etc/sysconfig/iptables
|
||||||
|
|
||||||
|
- name: Restart iptables
|
||||||
|
command: service iptables restart
|
Loading…
Add table
Add a link
Reference in a new issue