雖然 GitLab 推出了 one-key deb 包,但是爲了更大的靈活性,我還是選擇 step-by-step 的部署方式。
同時,我在部署過程中直接配置好了 SMTP 和 HTTPS,相關操作會註明。
官方指引:https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md.
準備系統
我預先添加了 50G 的存儲,手動掛載到 /home,具體操作請自行搜索。
先重新設定系統 locales
$ sudo dpkg-reconfigure locales # Locales to be generated 中僅保留 en_US.UTF-8 # Default locale for the system environment 中選 en_US.UTF-8 $ locale # 驗證 locale
這一步可以完全按文檔來。
$ sudo apt update -y $ sudo apt upgrade -y $ sudo apt install -y vim $ sudo update-alternatives --set editor /usr/bin/vim.basic $ sudo apt install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate python-docutils pkg-config cmake $ sudo adduser --disabled-login --gecos 'GitLab' git
安裝 Git
Ubuntu 16.04 上的 apt 安裝的 git 版本是 2.7,比 GitLab 要求的 2.8.4 低,我們要手動建置。
官方指引中使用 2.8.4,我們可以安裝最新版。
$ sudo apt remove git-core $ sudo apt install -y libcurl4-openssl-dev libexpat1-dev gettext libz-dev libssl-dev build-essential $ cd /tmp $ wget https://www.kernel.org/pub/software/scm/git/git-2.11.1.tar.gz $ tar vzxf git-2.11.1.tar.gz $ cd git-2.11.1/ $ ./configure $ make prefix=/usr/local all $ sudo make prefix=/usr/local install $ hash -r # rehash $ git --version # 檢查 git 版本
安裝 Ruby
Ruby 必須是 2.3 版本,否則後面 gem 安裝 json 時會報錯。
$ sudo apt-get remove ruby1.8 $ cd /tmp $ wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.3.tar.gz $ tar vzxf ruby-2.3.3.tar.gz $ cd ruby-2.3.3 $ ./configure --disable-install-rdoc $ make $ sudo make install $ hash -r $ sudo gem install bundler --no-ri --no-rdoc
安裝 Go
$ sudo rm -rf /usr/local/go $ cd /tmp $ wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz $ tar vzxf go1.8.linux-amd64.tar.gz $ sudo mv go /usr/local/ $ sudo ln -sf /usr/local/go/bin/{go,godoc,gofmt} /usr/local/bin/ $ hash -r $ go version
安裝 Node
其中 yarn 需要安裝到 git 用戶,否則後續操作中會報錯。
$ curl --location https://deb.nodesource.com/setup_7.x | bash - $ sudo apt-get install -y nodejs $ wget https://yarnpkg.com/install.sh $ sudo -u git -H bash install.sh
安裝並設定 PostgreSQL
$ sudo apt install -y postgresql postgresql-client libpq-dev postgresql-contrib $ sudo -u postgres psql -d template1 -c "CREATE USER git CREATEDB;" $ sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;" $ sudo -u postgres psql -d template1 -c "CREATE DATABASE gitlabhq_production OWNER git;" $ sudo -u git -H psql -d gitlabhq_production gitlabhq_production> SELECT true AS enabled FROM pg_available_extensions WHERE name = 'pg_trgm' AND installed_version IS NOT NULL; # 理論上有如下信息顯示 enabled --------- t (1 row) gitlabhq_production>\q $ sudo systemctl enable postgresql
安裝並設定 Redis
$ sudo apt install redis-server $ sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.orig $ sed 's/^port .*/port 0/' /etc/redis/redis.conf.orig | sudo tee /etc/redis/redis.conf $ echo 'unixsocket /var/run/redis/redis.sock' | sudo tee -a /etc/redis/redis.conf $ echo 'unixsocketperm 770' | sudo tee -a /etc/redis/redis.conf $ mkdir /var/run/redis $ chown redis:redis /var/run/redis $ chmod 755 /var/run/redis $ if [ -d /etc/tmpfiles.d ]; then > echo 'd /var/run/redis 0755 redis redis 10d -' | sudo tee -a /etc/tmpfiles.d/redis.conf > fi $ sudo systemctl restart redis-server $ sudo usermod -aG redis git
安裝 GitLab
$ cd /home/git $ sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 8-17-stable gitlab $ cd /home/git/gitlab $ sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml $ sudo -u git -H editor config/gitlab.yml # 編輯 gitlab 配置 # 主要修改 gitlab -> host, gitlab -> email_from, git -> bin_path # HTTPS 相關 port 修改爲 443, https 修改爲 true $ sudo -u git -H cp config/initializers/smtp_settings.rb.sample config/initializers/smtp_settings.rb $ sudo -u git -H vim config/initializers/smtp_settings.rb # SMTP 相關 修改 smtp 信息 $ sudo -u git -H cp config/secrets.yml.example config/secrets.yml $ sudo -u git -H chmod 0600 config/secrets.yml $ sudo chown -R git log/ $ sudo chown -R git tmp/ $ sudo chmod -R u+rwX,go-w log/ $ sudo chmod -R u+rwX tmp/ $ sudo chmod -R u+rwX tmp/pids/ $ sudo chmod -R u+rwX tmp/sockets/ $ sudo -u git -H mkdir public/uploads/ $ sudo chmod 0700 public/uploads $ sudo chmod -R u+rwX builds/ $ sudo chmod -R u+rwX shared/artifacts/ $ sudo chmod -R ug+rwX shared/pages/ $ sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb $ sudo -u git -H editor config/unicorn.rb # 設定 unicorn,主要是 RAM $ sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb $ sudo -u git -H git config --global core.autocrlf input $ sudo -u git -H git config --global gc.auto 0 $ sudo -u git -H git config --global repack.writeBitmaps true $ sudo -u git -H cp config/resque.yml.example config/resque.yml $ sudo -u git -H editor config/resque.yml # 若需要修改 Redis socket
設定 GitLab 資料庫
$ sudo -u git cp config/database.yml.postgresql config/database.yml $ sudo -u git -H chmod o-rwx config/database.yml
安裝 Gems
$ sudo -u git -H bundle install --deployment --without development test mysql aws kerberos
安裝 GitLab Shell
$ sudo -u git -H bundle exec rake gitlab:shell:install REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production SKIP_STORAGE_VALIDATION=true $ sudo -u git -H editor ../gitlab-shell/config.yml # HTTPS 相關 檢查 gitlab_url 是否爲 HTTPS, 設置 ca_file 爲證書文件
安裝 gitlab-workhorse
$ sudo -u git -H bundle exec rake "gitlab:workhorse:install[/home/git/gitlab-workhorse]" RAILS_ENV=production
建置資料庫
$ sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production # Do you want to continue (yes/no)?
準備腳本
$ sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab $ sudo cp lib/support/init.d/gitlab.default.example /etc/default/gitlab $ sudo update-rc.d gitlab defaults 21
設定 Logrotate
$ sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
建置素材
第一步的指令與官方不同,使用安裝到 git 用戶的 yarn.
$ sudo -u git -H /home/git/.yarn/bin/yarn install --production --pure-lockfile $ sudo -u git -H bundle exec rake gitlab:assets:compile RAILS_ENV=production NODE_ENV=production
安裝並設定 Nginx
因爲是在全新的伺服器上安裝 GitLab,伺服器專用作 GitLab,所以我移除了 nginx 默認的 default 站點並且不對 GitLab 提供的設定檔作修改。
$ sudo apt install -y nginx $ mkdir -p /etc/nginx/ssl/ # HTTPS 相關 這裏需要上傳證書到 /etc/nginx/ssl/ $ sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab $ sudo ln -s /etc/nginx/sites-available/gitlab-ssl /etc/nginx/sites-enabled/gitlab-ssl $ sudo -u git -H editor /etc/nginx/sites-enabled/gitlab-ssl # HTTPS 相關 修改 YOUR_SERVER_FQDN, ssl_certificate, ssl_certificate_key $ sudo rm /etc/nginx/sites-enabled/default # 移除默認站點 $ sudo nginx -t $ sudo systemctl restart nginx $ sudo systemctl enable nginx
檢查應用狀態
$ sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
啓動 GitLab
$ sudo systemctl start gitlab
收尾工作
檢查 GitLab 狀態
$ sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
設定 GitLab
參訪伺服器 IP 或網域進行設定。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于