Gitlab là một ứng dụng quản lý kho lưu trữ git dựa trên web được viết bằng Ruby. Nó tương tự như GitHub và bao gồm các tính năng như wiki dự án và hệ thống theo dõi sự cố. Dự án Gitlab được khởi xướng bởi Dmitriy Zaporozhets và phần mềm được hơn 100.000 công ty công nghệ sử dụng bao gồm IBM, StackExchange, NASA, Alibaba, Red Hat, v.v. Gitlab là một trong những giải pháp tốt nhất để xây dựng máy chủ git của riêng bạn.
Gitlab được hỗ trợ bởi các bản phân phối Linux chính như Ubuntu, Debian và CentOS. Gitlab cung cấp gói .deb cho Debian/Ubuntu và các gói .rpm cho Rhel và CentOS. Gói này chứa tất cả các phụ thuộc bao gồm Ruby, Redis, Nginx, Unicorn và PostgreSQL. Gitlab có 2 phiên bản, Phiên bản cộng đồng (Gitlab CE) và Phiên bản doanh nghiệp (Gitlab EE). Nếu bạn muốn xây dựng máy chủ git của riêng mình thì nhiều khả năng phiên bản CE miễn phí sẽ cung cấp tất cả các tính năng bạn cần.
Trong hướng dẫn này, tôi sẽ hướng dẫn bạn từng bước cài đặt Gitlab CE với PostgreSQL làm hệ thống cơ sở dữ liệu và Nginx làm máy chủ web trên phiên bản Ubuntu 15.04. Chúng tôi sẽ sử dụng Ruby phiên bản 2.x.x, phiên bản ổn định của gitlab là 8.x.
Lưu ý: Trong quá trình cài đặt postfix, hãy chọn "internet site" rồi nhấn enter để xác nhận tên máy chủ.
Nếu tất cả các gói đã được cài đặt, hãy kiểm tra phiên bản git và đảm bảo phiên bản git là 1.7.x trở lên.
Tiếp theo, chúng ta sẽ cài đặt ruby thủ công. Tạo thư mục mới cho các tệp nguồn ruby:
Tải xuống mã nguồn ruby bằng lệnh curl:
Bây giờ hãy xác minh và giải nén ruby.tar.gz, sau đó vào thư mục ruby:
Biên dịch và cài đặt Ruby:
Bước tiếp theo, chúng ta phải cài đặt Go. Kể từ gitlab 8.0, yêu cầu HTTP git được xử lý bởi gitlab-workhorse được viết bằng Go. Để cài đặt gitlab-workhorse, chúng ta cần trình biên dịch go, hãy tải xuống và cài đặt nó.
Tạo thư mục mới cho Go:
Tải xuống Go - chúng tôi sử dụng phiên bản 64 bit:
Xác minh và giải nén vào thư mục "/usr/local/":
Bây giờ tạo một liên kết tượng trưng cho Go trong thư mục bin:
Bây giờ chúng ta đã cài đặt Ruby và Go.
Tạo người dùng git mới bằng lệnh adduser:
Bây giờ chúng ta cấu hình cơ sở dữ liệu cho gitlab. Gitlab hỗ trợ MySQL và PostgreSQL, trong hướng dẫn này chúng ta sẽ sử dụng loại cơ sở dữ liệu được đề xuất là PostGreSQL.
Cài đặt PostgreSQL bằng lệnh apt bên dưới:
Sau khi hoàn tất, hãy đăng nhập vào PostgreSQL và tạo vai trò/người dùng mới có tên là "git" cho gitlab:
Sau đó, tạo cơ sở dữ liệu mới cho gitlab có tên là "gitlabhq_production" và cấp cơ sở dữ liệu cho git user/role:
Bây giờ hãy thoát khỏi shell postgresql và kiểm tra vai trò/người dùng mới với cơ sở dữ liệu mà chúng ta đã tạo:
Người dùng hệ thống mới có tên "git" đã được tạo.
Vai trò/người dùng mới "git" cho psotgreSQL đã được cấp cho cơ sở dữ liệu gitlab "gitlabhq_production" cũng đã được tạo.
Sau đó chỉnh sửa tệp "redis.conf" bằng trình soạn thảo vim:
Đi đến dòng 45 và thay đổi giá trị thành 0, vì chúng ta muốn Redis chỉ lắng nghe trên một socket unix chứ không phải trên một cổng:
Sau đó, hãy đến cuối tệp và thêm một socket redis và quyền cho socket đó:
Lưu tệp và thoát.
Tiếp theo, tạo một thư mục mới cho socket redis trong thư mục "/var/run" và điều chỉnh chủ sở hữu và quyền của thư mục:
Đi đến thư mục socket redis và chạy lệnh bên dưới:
Nếu mọi thứ đã hoàn tất, hãy khởi động lại máy chủ redis và thêm người dùng "git" vào nhóm "redis":
Lưu ý:
sudo -u git -H clone command = chúng ta chạy lệnh "clone" với tư cách là người dùng "git".
Sao chép ví dụ về tệp cấu hình gitlab gitlab.yml.example vào gitlab.yml trong thư mục "config":
Trong thư mục gitlab, hãy thay đổi chủ sở hữu của các thư mục con "log và tmp" thành người dùng git:
Sau đó thay đổi quyền cho các thư mục khác để gitlab (người dùng git) có thể ghi vào chúng:
Sao chép các ví dụ về cấu hình tấn công unicorn và Rack:
Bây giờ chúng ta phải cấu hình các thiết lập toàn cục cho người dùng git bằng lệnh git bên dưới:
Và chúng ta phải cấu hình kết nối redis bằng cách sao chép tệp "resque.yml" vào thư mục config, sau đó chỉnh sửa bằng vim để thay đổi cấu hình redis, sử dụng socket unix như chúng ta đã cấu hình redisto để lắng nghe trên socket:
Chờ cho đến khi các lệnh hoàn tất.
REDIS_URL = đảm bảo bạn sử dụng socket unix để cấu hình redis trên môi trường sản xuất.
gõ "yes" để tạo các bảng.
Kết quả sẽ là một tài khoản gitlab có tên người dùng là "root" và mật khẩu "5iveL!fe".
Sau đó sao chép cấu hình gitlab logrotate để quản lý nhật ký:
Và kiểm tra trạng thái ứng dụng và biên dịch tài sản:
Nếu không có lỗi, hãy khởi động gitlab bằng:
Sao chép cấu hình máy chủ ảo Nginx từ thư mục gitlab và xóa máy chủ ảo mặc định Nginx:
Chỉnh sửa tệp cấu hình bằng vim:
Thay đổi giá trị của các dòng Listen và ServerName trong phần HTTP:
Lưu và thoát.
Kích hoạt gitlab virtualhost, khởi động nginx và khởi động lại gitlab:
Bây giờ bạn có thể truy cập gitlab bằng trình duyệt của mình tại my.gitlab.me(tên máy chủ bạn đã chọn cho máy chủ của mình) và đăng nhập bằng tên người dùng mặc định "root" và mật khẩu "5iveL!fe".
Trước tiên, bạn nên thay thế mật khẩu mặc định của gitlab bằng mật khẩu của mình.
Gitlab 8 với PostgreSQL và Nginx trên ubuntu 15.04 đã được cài đặt thành công bây giờ.
Lưu ý:
Nếu bạn gặp lỗi, ví dụ như "502 bad gateway", hãy sửa lỗi bằng cách tăng thời gian chờ unicorn hoặc nâng cấp phần cứng của bạn. Vào thư mục cài đặt gitlab và chỉnh sửa tệp unicorn.rb bằng vim:
Xem thêm về cách khắc phục sự cố Gitlab tại đây https://github.com/gitlabhq/gitlab-public-wiki/wiki/Trouble-Shooting-Guide.
Gitlab được hỗ trợ bởi các bản phân phối Linux chính như Ubuntu, Debian và CentOS. Gitlab cung cấp gói .deb cho Debian/Ubuntu và các gói .rpm cho Rhel và CentOS. Gói này chứa tất cả các phụ thuộc bao gồm Ruby, Redis, Nginx, Unicorn và PostgreSQL. Gitlab có 2 phiên bản, Phiên bản cộng đồng (Gitlab CE) và Phiên bản doanh nghiệp (Gitlab EE). Nếu bạn muốn xây dựng máy chủ git của riêng mình thì nhiều khả năng phiên bản CE miễn phí sẽ cung cấp tất cả các tính năng bạn cần.
Trong hướng dẫn này, tôi sẽ hướng dẫn bạn từng bước cài đặt Gitlab CE với PostgreSQL làm hệ thống cơ sở dữ liệu và Nginx làm máy chủ web trên phiên bản Ubuntu 15.04. Chúng tôi sẽ sử dụng Ruby phiên bản 2.x.x, phiên bản ổn định của gitlab là 8.x.
Điều kiện tiên quyết
- Ubuntu 15.04 - 64bit.
- CPU 2 lõi - khuyến nghị từ trang gitlab.
- RAM/Bộ nhớ 2 GB - khuyến nghị từ trang gitlab.
- Quyền root.
Bước 1 - Cập nhật Linux Hệ thống
Trước khi cài đặt các phụ thuộc Gitlab, chúng tôi sẽ lấy các bản cập nhật mới nhất từ kho lưu trữ ubuntu. Đăng nhập vào máy chủ ubuntu bằng quyền truy cập SSH, trở thành người dùng root rồi cập nhật các kho lưu trữ.
Mã:
sudo su
apt-get update
Bước 2 - Cài đặt các phụ thuộc Gitlab
Gitlab có nhiều phụ thuộc phần mềm như redis-server, git-core, nodejs và postfix để gửi thông báo qua email. Tôi sẽ cài đặt chúng bằng một lệnh apt duy nhất:
Mã:
sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate python-docutils pkg-config cmake nodejs git-core postfix
Nếu tất cả các gói đã được cài đặt, hãy kiểm tra phiên bản git và đảm bảo phiên bản git là 1.7.x trở lên.
Mã:
git --version
git version 2.1.4
Bước 3 - Cài đặt Ruby và Go
Gitlab yêu cầu phiên bản ruby 2.x trở lên. Trong hướng dẫn này, chúng ta sẽ sử dụng phiên bản ruby 2.7. Ở giai đoạn này, chúng ta phải cài đặt ruby thủ công (từ nguồn). Nếu bạn đã cài đặt ruby trên hệ thống trước đó, hãy xóa nó bằng lệnh bên dưới:
Mã:
apt-get remove ruby -y
Mã:
mkdir -p /tmp/ruby && cd /tmp/ruby
Mã:
curl -O --progress https://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.7.tar.gz
Mã:
echo 'e2e195a4a58133e3ad33b955c829bb536fa3c075 ruby-2.1.7.tar.gz' | shasum -c - && \
tar xzf ruby-2.1.7.tar.gz && \
cd ruby-2.1.7
Mã:
./configure --disable-install-rdoc --prefix=/usr/local
make
make install
Tạo thư mục mới cho Go:
Mã:
mkdir -p /tmp/go && cd /tmp/go
Mã:
curl -O --progress https://storage.googleapis.com/golang/go1.5.1.linux-amd64.tar.gz
Mã:
echo '46eecd290d8803887dec718c691cc243f2175fe0 go1.5.1.linux-amd64.tar.gz' | shasum -c - && \
sudo tar -C /usr/local -xzf go1.5.1.linux-amd64.tar.gz
Mã:
sudo ln -sf /usr/local/go/bin/{go,godoc,gofmt} /usr/local/bin/
Bước 4 - Tạo một người dùng Linux mới và cấu hình cơ sở dữ liệu PostgreSQL
Trong bước này, chúng ta sẽ tạo một người dùng hệ thống Linux mới có tên là "git" với thư mục home "/home/git".Gitlab sẽ chạy dưới dạng người dùng git sau đó.Tạo người dùng git mới bằng lệnh adduser:
Mã:
sudo adduser --disabled-login --gecos 'GitLab' git
Cài đặt PostgreSQL bằng lệnh apt bên dưới:
Mã:
sudo apt-get install -y postgresql postgresql-client libpq-dev
Mã:
sudo -u postgres psql -d template1
CREATE USER git CREATEDB;
Mã:
CREATE DATABASE gitlabhq_production OWNER git;
Mã:
\q
sudo -u git -H psql -d gitlabhq_production
Người dùng hệ thống mới có tên "git" đã được tạo.
Vai trò/người dùng mới "git" cho psotgreSQL đã được cấp cho cơ sở dữ liệu gitlab "gitlabhq_production" cũng đã được tạo.
Bước 5 - Cấu hình máy chủ Redis
Trước khi chỉnh sửa tệp cấu hình redis trong thư mục "/etc/redis", chúng ta sẽ tạo một bản sao lưu có tên redis.conf.original.
Mã:
cd /etc/redis/
cp redis.conf redis.conf.original
Mã:
vim redis.conf
Đi đến dòng 45 và thay đổi giá trị thành 0, vì chúng ta muốn Redis chỉ lắng nghe trên một socket unix chứ không phải trên một cổng:
Mã:
Lắng nghe 0
Mã:
unixsocket /var/run/redis/redis.sock
unixsocketperm 777
Tiếp theo, tạo một thư mục mới cho socket redis trong thư mục "/var/run" và điều chỉnh chủ sở hữu và quyền của thư mục:
Mã:
mkdir -p /var/run/redis
chown redis:redis /var/run/redis
chmod 755 /var/run/redis
Mã:
cd /var/run/redis
nếu [ -d /etc/tmpfiles.d ]; thì
echo 'd /var/run/redis 0755 redis redis 10d -' | sudo tee -a /etc/tmpfiles.d/redis.conf
fi
Mã:
sudo service redis-server restart
sudo usermod -aG redis git
Bước 6 - Cài đặt GitLab
Vào thư mục "/home/git" và tải gitlab từ kho lưu trữ GIT của nó:
Mã:
cd /home/git
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 8-2-stable gitlab
sudo -u git -H clone command = chúng ta chạy lệnh "clone" với tư cách là người dùng "git".
- Cấu hình GitLab
Vào thư mục gitlab để cấu hình gitlab:
Mã:
cd /home/git/gitlab
Mã:
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
Mã:
sudo chown -R git {log,tmp}
Mã:
mkdir -p public/uploads/
sudo chmod -R u+rwX,go-w log/
sudo chmod -R u+rwX {tmp,tmp/pids,tmp/sockets,builds,shared/artifacts}
sudo chmod -R 0750 public/uploads
Mã:
sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb
Mã:
sudo -u git -H git config --global core.autocrlf input
Mã:
sudo -u git -H cp config/resque.yml.example config/resque.yml
- Cấu hình cơ sở dữ liệu
Bước tiếp theo là cấu hình cài đặt GitLab DB, chúng tôi sử dụng postgreSQL cho cơ sở dữ liệu của mình. Sao chép tệp cấu hình và thay đổi quyền:
Mã:
sudo -u git -H cp config/database.yml.postgresql config/database.yml
sudo -u git -H chmod o-rwx config/database.yml
- Cài đặt Gem
Mã:
sudo gem install bundler
sudo -u git -H bundle install --deployment --without development test mysql aws kerberos
- Cài đặt Gitlab-shell
Gitlab-shell cho phép truy cập SSH và quản lý kho lưu trữ cho Gitlab. Chúng tôi sẽ sử dụng cấu hình mặc định, vì vậy chúng tôi không cần phải chỉnh sửa nó. Chạy lệnh bên dưới để cài đặt gitlab-shell:
Mã:
sudo -u git -H bundle exec rake gitlab:shell:install[v2.6.8] REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production
- Cài đặt gitlab-workhorse
Gitlab-workhorse là một deamon nhỏ để xử lý lưu lượng truy cập Git HTTP từ unicorn, được mã hóa bằng Go. Sao chép và cài đặt:
Mã:
cd /home/git
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-workhorse.git
cd gitlab-workhorse
sudo -u git -H git checkout 0.4.2
sudo -u git -H make
- Khởi tạo cơ sở dữ liệu và kích hoạt các tính năng của gitlab
Truy cập thư mục cài đặt gitlab và chạy lệnh bên dưới:
Mã:
cd /home/git/gitlab
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production
Kết quả sẽ là một tài khoản gitlab có tên người dùng là "root" và mật khẩu "5iveL!fe".
Bước 7 - Cấu hình Init Script
Sao chép gitlab init script từ thư mục cài đặt gitlab và thêm gitlab để bắt đầu khi khởi động bằng lệnh update-rc.d:
Mã:
sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
sudo update-rc.d gitlab defaults 21
Mã:
sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
Mã:
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production
Mã:
/etc/init.d/gitlab start
Bước 8 - Cài đặt và cấu hình Nginx
Chúng ta sẽ sử dụng Nginx làm máy chủ web phía trước để xử lý các yêu cầu của trình duyệt. Chỉ cần cài đặt bằng lệnh apt này:
Mã:
apt-get install nginx -y
Mã:
sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
sudo rm /etc/nginx/sites-enabled/default
Mã:
sudo vim /etc/nginx/sites-available/gitlab
Mã:
Listen *:80; #Port Default
#Listen 0.0.0.0:80; #comment một trong những dòng này
ServerName my.gitlab.me; #Gitlab FQDN/Domain
Kích hoạt gitlab virtualhost, khởi động nginx và khởi động lại gitlab:
Mã:
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
service nginx start
/etc/init.d/gitlab restart
Trước tiên, bạn nên thay thế mật khẩu mặc định của gitlab bằng mật khẩu của mình.
Gitlab 8 với PostgreSQL và Nginx trên ubuntu 15.04 đã được cài đặt thành công bây giờ.
Lưu ý:
Nếu bạn gặp lỗi, ví dụ như "502 bad gateway", hãy sửa lỗi bằng cách tăng thời gian chờ unicorn hoặc nâng cấp phần cứng của bạn. Vào thư mục cài đặt gitlab và chỉnh sửa tệp unicorn.rb bằng vim:
Mã:
sudo -u git -H vim config/unicorn.rb
Xem thêm về cách khắc phục sự cố Gitlab tại đây https://github.com/gitlabhq/gitlab-public-wiki/wiki/Trouble-Shooting-Guide.