<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>zenz (zenz)</title>
    <link>https://ruby-china.org/zenz</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>让 Octopress 跟 GitLab 合作发布博文</title>
      <description>&lt;hr&gt;
&lt;h2 id="继续分享"&gt;继续分享&lt;/h2&gt;
&lt;p&gt;基本上网上的文章在介绍 Octopress 时，都是引用官方的配置法，发布到 github，heroku 或者是用 rsync。但这些都不是我想要的。因为我有一台 GitLab 服务器，因此 Octopress 跟 GitLab 服务器配合才是我最理想的解决方案。&lt;/p&gt;

&lt;p&gt;所以，就行动吧（我的 GitLab 服务器是架设在 CentOS6.4 上面的 GitLab5.4，用 Nginx 作为 Proxy，见另一篇博文）。&lt;/p&gt;

&lt;p&gt;第一步，在 GitLab 上建立一个项目，例如 simon_blog，然后登录上 GitLab 所在的服务器，进行以下操作 (git 用户)：&lt;/p&gt;

&lt;p&gt;cd /home/git/repositories/simon_blog.git
    touch hooks/post-receive
    cat &amp;lt;&amp;lt; EOF hooks/post-receive
    &amp;gt;#!/bin/sh
    &amp;gt;GIT_WORK_TREE=/home/git/gitlab-blog git checkout -f master
    &amp;gt;EOF
    chmod +x hooks/post-receive
    mkdir /home/git/gitlab-blog
    git init .
    git remote add simon_blog /home/git/repositories/simon_blog&lt;/p&gt;

&lt;p&gt;第二部，在用于写作的个人电脑上（已经装好 RVM 的 Ruby 环境等），进行下述操作：&lt;/p&gt;

&lt;p&gt;git clone git://github.com/imathis/octopress.git octopress
    cd octopress
    bundle install --path vendor/bundle&lt;/p&gt;

&lt;p&gt;修改基础的配置_config.yml 文件。然后就是最关键的部分了。&lt;/p&gt;

&lt;p&gt;git remote rename origin octopress
    git remote add origin git@gitlab.org:simon_blog
    git config branch.master.remote origin
    git branch -m master source
    rm -rf _deploy
    mkdir _deploy
    cd _deploy
    git init .
    echo "nothing here yet" &amp;gt; index.html
    git add index.html
    git commit -m "Init…"
    git remote add origin git@gitlab.org:simon_blog
    git push origin master&lt;/p&gt;

&lt;p&gt;剩下的事情就是修改 Rakefile，让它能正确通过 git 发布。&lt;/p&gt;

&lt;p&gt;deploy_default = "push"
    deploy_branch = "master"&lt;/p&gt;

&lt;p&gt;建立一篇新的博文：&lt;/p&gt;

&lt;p&gt;bundle exec rake new_post["博文标题"]&lt;/p&gt;

&lt;p&gt;在 source/_posts/目录里面用 Mou 慢慢写呗。写完了发布：&lt;/p&gt;

&lt;p&gt;bundle exec rake generate
    bundle exec rake deploy&lt;/p&gt;

&lt;p&gt;因为 post-receive 的 hooks 起作用，Octopress 生成的网站会被自动同步到/home/git/gitlab-blog 目录。那么 Nginx 的配置就不要说了吧。&lt;/p&gt;

&lt;p&gt;当然，这个配置有个缺点，就是要求博客跟 GitLab 服务在同一台服务器上。但这不是我需要关心的。&lt;/p&gt;</description>
      <author>zenz</author>
      <pubDate>Wed, 07 Aug 2013 13:21:09 +0800</pubDate>
      <link>https://ruby-china.org/topics/13131</link>
      <guid>https://ruby-china.org/topics/13131</guid>
    </item>
    <item>
      <title>在 CentOS6.4 上配置 GitLab5.4 服务</title>
      <description>&lt;hr&gt;
&lt;h2 id="分享一下吧"&gt;分享一下吧&lt;/h2&gt;
&lt;p&gt;安装 CentOS6.4 系统，选择 minimal 安装即可。设置好网卡之后重启再进系统，运行系统更新命令：&lt;/p&gt;

&lt;p&gt;#yum update    &lt;/p&gt;

&lt;p&gt;添加 rpmforge 及 epel 源，以便获得更多的应用支持并更新系统。&lt;/p&gt;

&lt;p&gt;#rpm --import &lt;a href="http://apt.sw.be/RPM-GPG-KEY.dag.txt" rel="nofollow" target="_blank"&gt;http://apt.sw.be/RPM-GPG-KEY.dag.txt&lt;/a&gt;
    #rpm -Uvh &lt;a href="http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm" rel="nofollow" target="_blank"&gt;http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm&lt;/a&gt;
    #rpm -Uvh &lt;a href="http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm" rel="nofollow" target="_blank"&gt;http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;编辑/etc/yum.repos.d/rpmforge.repo 文件，把里面关于 extra 段的 enabled 设为 1 后保存，为后续操作做准备。    &lt;/p&gt;

&lt;p&gt;安装 RVM&lt;/p&gt;

&lt;p&gt;#curl -L &lt;a href="https://get.rvm.io" rel="nofollow" target="_blank"&gt;https://get.rvm.io&lt;/a&gt; | bash -s stable&lt;/p&gt;

&lt;p&gt;载入 RVM 环境并获取需要的支持安装包&lt;/p&gt;

&lt;p&gt;#source /etc/profile.d/rvm.sh
    #rvm requirements&lt;/p&gt;

&lt;p&gt;在执行下面的编译安装 Ruby 工作之前，先把源替换到别的源上上，这样速度会快很多，而且不用担心被墙。&lt;/p&gt;

&lt;p&gt;切换到 ruby.taobao.org 的源
    #sed -i 's!ftp.ruby-lang.org/pub/ruby!ruby.taobao.org/mirrors/ruby!' $rvm_path/config/db
    也可以切换为 ibiblio.org 的源
    #sed -i 's!ftp.ruby-lang.org/pub/ruby!mirrors.ibiblio.org/ruby!' $rvm_path/config/db    &lt;/p&gt;

&lt;p&gt;安装 ruby 1.9.3，并设为默认&lt;/p&gt;

&lt;p&gt;#rvm install 1.9.3
    #rvm use 1.9.3 --default&lt;/p&gt;

&lt;p&gt;注意，在安装过程中的 install 之后可能会没有了反应，那是因为 GFW 把 rubygem 给封了，这个时候要自己手动 ctrl+c 中断，自己手动修改 gem 源：&lt;/p&gt;

&lt;p&gt;#gem source -r &lt;a href="http://rubygems.org/" rel="nofollow" target="_blank"&gt;http://rubygems.org/&lt;/a&gt;
    #gem source -a &lt;a href="http://ruby.taobao.org" rel="nofollow" target="_blank"&gt;http://ruby.taobao.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;修改/root/.gemrc，添加两行，以避免安装帮助文档（服务器上要来没有用）&lt;/p&gt;

&lt;p&gt;install: --no-ri --no-rdoc
    update: --no-ri --no-rdoc&lt;/p&gt;

&lt;p&gt;装 bundle 工具&lt;/p&gt;

&lt;p&gt;#gem install bundler&lt;/p&gt;

&lt;p&gt;安装配置 gitlab 需要用到的 mysql 数据库支持&lt;/p&gt;

&lt;p&gt;#yum install mysql-server mysql-devel
    #/etc/rc.d/init.d/mysqld start
    #chkconfig mysqld on&lt;/p&gt;

&lt;p&gt;配置 root 用户，设置密码访问限制。&lt;/p&gt;

&lt;p&gt;#mysql -u root mysql
    set password for root@localhost=password('password');
    set password for root@'127.0.0.1'=password('password');
    set password for root@'your.domain.com'=password('password');
    delete from mysql.user where user='';
    exit;&lt;/p&gt;

&lt;p&gt;添加 GitLab 需要用到的数据库及用户。&lt;/p&gt;

&lt;p&gt;#mysql -u root -p
    create user gitlab@localhost identified by 'password';
    create database if not exists &lt;code&gt;gitlab_production&lt;/code&gt; default character set &lt;code&gt;utf8&lt;/code&gt; collate &lt;code&gt;utf8_unicode_ci&lt;/code&gt;;
    grant select, lock tables, insert, update, delete, create, drop, index, alter on gitlab_production.* to gitlab@localhost;
    exit;&lt;/p&gt;

&lt;p&gt;安装 git 工具&lt;/p&gt;

&lt;p&gt;#yum install git&lt;/p&gt;

&lt;p&gt;添加 gitlab 需要的用户&lt;/p&gt;

&lt;p&gt;#adduser --system --create-home --comment 'GitLab' git&lt;/p&gt;

&lt;p&gt;切换到 git 用户并进入用户目录，用 git 获取 gitlab-shell 最新源代码并安装&lt;/p&gt;

&lt;p&gt;#su - git
    $cd
    $git clone &lt;a href="https://github.com/gitlabhq/gitlab-shell.git" rel="nofollow" target="_blank"&gt;https://github.com/gitlabhq/gitlab-shell.git&lt;/a&gt;
    $cd gitlab-shell
    $git checkout v1.5.0
    $cp config.yml.example config.yml&lt;/p&gt;

&lt;p&gt;编辑 config.yml，把里面的 gitlab_url: "&lt;a href="http://localhost/" rel="nofollow" target="_blank"&gt;http://localhost/&lt;/a&gt;"换成实际的地址，并执行&lt;/p&gt;

&lt;p&gt;$./bin/install&lt;/p&gt;

&lt;p&gt;返回 git 用户目录并获取 gitlab 源代码&lt;/p&gt;

&lt;p&gt;$cd /home/git
    $git clone &lt;a href="https://github.com/gitlabhq/gitlabhq.git" rel="nofollow" target="_blank"&gt;https://github.com/gitlabhq/gitlabhq.git&lt;/a&gt; gitlab
    $cd /home/git/gitlab
    $git checkout 5-4-stable&lt;/p&gt;

&lt;p&gt;配置 gitlab&lt;/p&gt;

&lt;p&gt;$cp config/gitlab.yml.example config/gitlab.yml&lt;/p&gt;

&lt;p&gt;编辑 config/gitlab.yml 文件，把 localhost 都改成有效的实际域名&lt;/p&gt;

&lt;p&gt;确保目录对 git 用户有效可读写&lt;/p&gt;

&lt;p&gt;$chown -R git log/
    $chown -R git tmp/
    $chmod -R u+rwX log/
    $chmod -R u+rwX tmp/
    $mkdir tmp/pids/
    $mkdir tmp/sockets/
    $chmod -R u+rwX tmp/pids
    $chmod -R u+rwX tmp/sockets
    $mkdir public/uploads
    $chmod -R u+rwX public/uploads&lt;/p&gt;

&lt;p&gt;建立 satellites 目录&lt;/p&gt;

&lt;p&gt;$mkdir /home/git/gitlab-satellites&lt;/p&gt;

&lt;p&gt;复制 puma.rb 文件&lt;/p&gt;

&lt;p&gt;$cp config/puma.rb.example config/puma.rb&lt;/p&gt;

&lt;p&gt;修改 puma.rb 把 threads 更改为 threads 8,16 把 workers 设为 4，把 daemonized true 注释掉。&lt;/p&gt;

&lt;p&gt;设置 git 用户的信息，与上面 gitlab.yml 中修改的要一致。&lt;/p&gt;

&lt;p&gt;$git config --global user.name "GitLab"
    $git config --global user.email "git@mydomain.com"&lt;/p&gt;

&lt;p&gt;复制并配置数据库配置文件，设置安全权限。&lt;/p&gt;

&lt;p&gt;$cp config/database.yml.mysql config/database.yml
    $chmod o-rwx config/database.yml
    $vi config/database.yml&lt;/p&gt;

&lt;p&gt;确认里面的 production 栏里的各个项目的配置跟 mysql 设置时一致&lt;/p&gt;

&lt;p&gt;安装需要用到的应用包&lt;/p&gt;

&lt;p&gt;$exit
    #yum install libxml2-devel libxslt-devel libicu-devel&lt;/p&gt;

&lt;p&gt;安装 gems，我们这里需要修改 Gemfile，把 gem 源指向&lt;a href="http://ruby.taobao.org" rel="nofollow" target="_blank"&gt;http://ruby.taobao.org&lt;/a&gt; ，然后执行&lt;/p&gt;

&lt;p&gt;#su - git
    $cd gitlab
    $bundle install --path vendor/bundle --deployment --without development test postgres unicorn asw&lt;/p&gt;

&lt;p&gt;安装并启动 redis 服务&lt;/p&gt;

&lt;p&gt;$exit
    #yum install redis
    #service redis start
    #chkconfig redis on&lt;/p&gt;

&lt;p&gt;数据库初始化并生成管理员账号，到提示的时候输入 yes&lt;/p&gt;

&lt;p&gt;#su - git
    $cd gitlab
    $bundle exec rake gitlab:setup RAILS_ENV=production
    $exit    &lt;/p&gt;

&lt;p&gt;建立/etc/yum.repos.d/nginx.repo，内容如下：&lt;/p&gt;

&lt;p&gt;[nginx]
    name=nginx repo
    baseurl=&lt;a href="http://nginx.org/packages/centos/6/$basearch/" rel="nofollow" target="_blank"&gt;http://nginx.org/packages/centos/6/$basearch/&lt;/a&gt;
    gpgcheck=0
    enabled=1&lt;/p&gt;

&lt;p&gt;安装 nginx，并把 nginx 用户添加到 git 组，修改/home/git 的读写权限&lt;/p&gt;

&lt;p&gt;#yum install nginx
    #usermod -a -G git nginx
    #chmod 750 /home/git&lt;/p&gt;

&lt;p&gt;建立/etc/init/gitlab-puma.conf 启动脚本&lt;/p&gt;

&lt;p&gt;# /etc/init/gitlab-puma.conf - gitlab puma config&lt;/p&gt;

&lt;p&gt;description "GitLab puma service"&lt;/p&gt;

&lt;p&gt;# no "start on", we don't want to automatically start
    start on runlevel [2345]
    stop on runlevel [06]&lt;/p&gt;

&lt;p&gt;# change apps to match your deployment user if you want to use this as a less privileged user (recommended!)
    #setuid www
    #setgid www
    # not compatible with CentOS&lt;/p&gt;

&lt;p&gt;respawn
    respawn limit 3 30&lt;/p&gt;

&lt;p&gt;script
    exec /bin/bash &amp;lt;&amp;lt;EOT
      export HOME=/home/git
      source /etc/profile.d/rvm.sh
      cd /home/git/gitlab
      su git -c "bundle exec puma -C config/puma.rb"
    EOT
    end script&lt;/p&gt;

&lt;p&gt;建立/etc/init/gitlab-sidekiq.conf 启动脚本&lt;/p&gt;

&lt;p&gt;# /etc/init/gitlab-sidekiq.conf - gitlab sidekiq config&lt;/p&gt;

&lt;p&gt;description "GitLab sidekiq service"&lt;/p&gt;

&lt;p&gt;start on runlevel [2345]
    stop on runlevel [06]&lt;/p&gt;

&lt;p&gt;post-start script
    exec /bin/bash &amp;lt;&amp;lt;EOT
      export HOME=/home/git
      source /etc/profile.d/rvm.sh
      cd /home/git/gitlab
      su git -c "RAILS_ENV=production bundle exec rake sidekiq:start"
    EOT
    end script&lt;/p&gt;

&lt;p&gt;post-stop script
    exec /bin/bash &amp;lt;&amp;lt;EOT
      export HOME=/home/git
      source /etc/profile.d/rvm.sh
      cd /home/git/gitlab
      su git -c "RAILS_ENV=production bundle exec rake sidekiq:stop"
    EOT
    end script&lt;/p&gt;

&lt;p&gt;启动 gitlab-puma 和 gitlab-sidekiq&lt;/p&gt;

&lt;p&gt;start gitlab-puma
     start gitlab-sidekiq&lt;/p&gt;

&lt;p&gt;复制 nginx 启动脚本到/etc/nginx/conf.d&lt;/p&gt;

&lt;p&gt;#cp /home/git/gitlab/lib/support/nginx/gitlab /etc/nginx/conf.d/gitlab.conf&lt;/p&gt;

&lt;p&gt;修改 gitlab.conf 文件以满足 gitlab 的需要，主要是域名。另外，要修改/etc/nginx/nginx.conf 文件，把 workers 设成对应 cpu 的数量，以提升效率。&lt;/p&gt;

&lt;p&gt;修改/etc/sysconfig/iptables，加入一行&lt;/p&gt;

&lt;p&gt;-A INPUT -m tcp -p tcp --dport 22 -j ACCEPT&lt;/p&gt;

&lt;p&gt;然后重启 iptables 服务&lt;/p&gt;

&lt;p&gt;#service iptables restart&lt;/p&gt;

&lt;p&gt;用 git 用户执行&lt;/p&gt;

&lt;p&gt;#su - git
    $env | grep -E "^(GEM_HOME|PATH|RUBY_VERSION|MY_RUBY_HOME|GEM_PATH)=" &amp;gt; ~/.ssh/environment
    $exit&lt;/p&gt;

&lt;p&gt;修改/etc/ssh/sshd_config 文件，&lt;/p&gt;

&lt;p&gt;RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile      .ssh/authorized_keys
    PermitUserEnvironment yes&lt;/p&gt;

&lt;p&gt;并重启服务&lt;/p&gt;

&lt;p&gt;#service sshd restart&lt;/p&gt;

&lt;p&gt;用下面的账号密码登陆&lt;/p&gt;

&lt;p&gt;login.........admin@local.host
    password......5iveL!fe&lt;/p&gt;</description>
      <author>zenz</author>
      <pubDate>Wed, 07 Aug 2013 13:18:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/13130</link>
      <guid>https://ruby-china.org/topics/13130</guid>
    </item>
  </channel>
</rss>
