Phabricator(コードreview)サーバインストールの導入


PhabricatorはFacebookのオープンソース可視化のコード審査ツールであり、審査コード、コード(git/svn)管理、文法検査、ユニットテスト、wikiなどの機能を含む一連のオープンソースのWebアプリケーションを統合し、bug追跡も可能であり、jiraを直接コードreviewに関連付け、2つのコード審査ワークフロー:「review」(提出前審査)と「audit」をサポートする.(提出後審査).
一、据付
1、スクリプトによるインストール
CentOSインストールスクリプトを開く:https://secure.phabricator.co...入/opt,新規ファイルinstall_rhel-derivs.sh、コピースクリプトの内容保存、ファイル権限の変更、実行:
$ chmod 777 install_rhel-derivs.sh 
$ ./install_rhel-derivs.sh

インストール内容はapache,mysql,php;その後gitはphabricator,arcanist,libphutilをダウンロードし、linuxがhttpsモードをサポートしていない場合は、インストールスクリプトのhttp://git://モードを変更できます.
macにインストールすると
スクリプトのインストールはできません.手動:nginx+php+php+php-fpm+mysql、macはphpとphp-fpmを持っていますが、phpプラグインphp-pcntlをインストールする必要があります.
nginx構成:
server {
  listen 8000;
  server_name 127.0.0.1;
  root      /Users/xxx/phabricator/phabricator/webroot;
  try_files $uri $uri/ /index.php;

  location / {
     index   index.php;
     if ( !-f $request_filename ){
       rewrite ^/(.*)$ /index.php?__path__=/$1 last;
       break;
     }
  }

  location /index.php {
    fastcgi_pass   localhost:9000;    #       Fast CGI,     :$ php-fpm
    fastcgi_index   index.php;
    fastcgi_param  REDIRECT_STATUS    200;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;
    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
    fastcgi_param  REMOTE_ADDR        $remote_addr;
  }
}

2、phabricator関連ファイルをapacheのパブリケーションディレクトリの下に移動する:
プロジェクトディレクトリを新規作成します.たとえば、code-review:
$ mv /opt/arcanist /var/www/html/code-review
$ mv /opt/libphutil /var/www/html/code-review
$ mv /opt/phabricator /var/www/html/code-review

3、ファイアウォールとSELinuxを閉じる
a.)ファイアウォールを閉じる
$ service iptables status     #        
$ service iptables stop       #         
$ chkconfig iptables off      #      ,     

b.)ファイアウォールを修正する(ファイアウォールが必要で、閉じることができない)
$ service iptables status     #        
$ vi /etc/sysconfig/iptables

 web          ,      :
-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 -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

$ service iptables restart    #      

c.)SELinuxを閉じる
$ getenforce                  #   SELinux    sestatus    
$ setenforce 0                #     SElinux
$ vi /etc/selinux/config      #   SELINUX=disabled,       

4、apacheの構成を変更する:
システム変数(非ユーザ変数)のPath変数に、以下の2つのパスを追加します(win 7および以下は中間用;分離).
$ vi /etc/httpd/conf/httpd.conf
   : /etc/httpd/conf.d/vhost.conf   #  httpd.conf  Include  

     :
ServerName localhost
Listen     8800


  ServerName localhost
  DocumentRoot "/var/www/html/code-review/phabricator/webroot"
  DirectoryIndex index.php index.html index.html.var
  
  RewriteEngine on
  RewriteRule ^/rsrc/(.*)     -                       [L,QSA]
  RewriteRule ^/favicon.ico   -                       [L,QSA]
  RewriteRule ^(.*)$          /index.php?__path__=$1  [B,L,QSA]


$ service httpd restart        #   apache
$ chkconfig httpd on           #       

apcheアクセスを開始しても情報にアクセスできない場合は、リスニングポートが間違っていることを示し、Listenフィールドを検索し、対応するポートを変更します.apcheを起動して内部エラーが発生した場合、RewriteEngineに問題があることを示します.コマンドを起動すると、サーバNameに関するエラーが表示され、仮想マシン上の行のサーバName localhostコメントが削除されます.apacheログパス:/var/log/http
5、データベースの構成:
$ service mysqld restart       #   mysql
$ chkconfig mysqld on          #       

a.)データベースrootパスワードを設定する:
$ mysql -u root                #     ,        ,      、    
  Mysql> use mysql;
  Mysql> update user set password=password("   ") where user="root";  #     password="   "
  Mysql> flush privileges;
  Mysql> quit;

b.)データベースのアップグレード:
デフォルトでインストールされているデータベース5.1のissuesプロンプトは5.6+:
$ more /etc/redhat-release         #     linux  
$ rpm -Uvh http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm    #    http://repo.mysql.com/    
$ yum -y upgrade mysql

c.)データベースの更新:
$ ./bin/storage upgrade

#       :
$ ./bin/storage destory

d.)データベースのデフォルト符号化を変更する:
$ service mysqld stop
$ vi /etc/my.cnf               #   mysql    
                          
#         :
[client]
default_character_set=utf8

[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

$ service mysqld restart       #   

ps:データベースがデータを同期または転送する場合は、navicatの高度な文字セットを削除することを覚えておいてください.
6、phabricatorの構成を変更する:
phabricatorの主な構成はプロジェクトディレクトリの下にあります./conf/local/local.jsonでは、データベースアクセス、自動メールなどを構成できます.
またはphabricatorディレクトリの下に./bin/config set mysql.pass 00000で1つずつ設定します.
$ vi ./conf/local/local.json

#     (            ):
{
  "phabricator.base-uri": "http:\/\/192.168.4.168:8800\/",
  "mysql.pass": "123456",
  "mysql.user": "root",
  "mysql.host": "localhost",
  "mysql.port": "3306",
  "differential.require-test-plan-field": false,
  "cluster.mailers": [
    {
      "key": "my-mailer",
      "type": "smtp",
      "options": {
        "host": "smtp.exmail.qq.com",
        "port": 465,
        "user": "[email protected]",
        "password": "123456",
        "protocol": "ssl"
      }
    }
  ],
  "metamta.default-address": "[email protected]"
}

7、ウェブサイトにアクセスし、メールを配置する
上記のプロファイルでメールボックス構成を設定した後、Webページで左側のメニューconfig->mailに入り、デフォルトのメールボックスmetamta.default-address値を設定し、metamta.mail-adapter値を:P h a b r i c a t o r MailImplementationPHPMailerAdapterに設定してメールサービスを再起動します.
$ ./bin/phd restart

メールを送信してみて、メールが正常に送信されているかどうかを確認します.
$ ./bin/mail list-outbound

8、ログイン許可方式の設定
左側のメニュー-auth、ユーザー名/パスワードの登録方式を設定して、もし設定していないならば、退出した後に登録することができなくて、実行します:
$ ./bin/auth recover 

ヒントに従ってウェブサイトを開き、ログイン後authメニューに入り、ログイン許可方式を追加します.
9、中国語のサポートを追加
phabricator/src/extensions/ディレクトリの下、rm-fr READMEに入り、次のgitコマンドを実行し、クライアント設定で言語中国語を選択すればよい.
$ git clone https://github.com/wanthings/phabricator-zh_CN.git ./

9、issueを解決する
主な関連書類:
/etc/php.d/apc.ini #apc  
/etc/php.ini #  php  
/etc/my.cnf #mysql  

修正が終わったら、対応するhttpdとmysqldサービスを再起動してください.
二、倉庫管理
1、既存のリモート倉庫を観察する
Phabricatorにgitウェアハウスを管理させたくない場合は、既存のgitプロジェクトをオブザーバーモードでインポートし、ユーザーがコミットしている場合に監査ポリシーがトリガーされ、コードreviewが実装されます.具体的な作成手順は次のとおりです.
1)観察倉庫の作成
a.新しい倉庫(Create a new repository)を作成する.b.左側のメニューURURをクリックし、右側にAdd NewIsURIを追加し、URI(既存のリモート倉庫)を記入し、I/OモードをObserveに設定する.c.必要に応じて、認証(秘密鍵など)を構成する.d.Basics項目で倉庫を有効にし、直ちに更新し、インポートを開始する.
2.)Heraldルールの作成
より多くのアプリケーションでは、左側の一般的なメニューにHeraldを追加し、Heraldに入り、commit Hook以外の「コミット」タイプのルールを革新します.たとえば、mergeコミットを傍受するルールを作成します.
is any of:
Is merge commit: is true
Commit message: does not match regexp: @\sof\s@
email to: ....

2、ssh方式管理Git倉庫
1)アカウント構成
$ useradd git         #     git  ,       
$ vi /etc/shadow      #      git          !!,   ,   ,        ,    !!
$ vi /etc/passwd      #   git       ,           /bin/false,     /bin/sh,       

2.)Phabricator構成の変更
phabricatorディレクトリに入ります.
$ ./bin/config set phd.user root
$ ./bin/config set diffusion.ssh-user git    #          clone url 
$ ./bin/phd restart

3)gitアカウントの実行権限の構成
visudoコマンドを実行するか、vi/etc/sudoersを実行するか、soduがないか、yum install sudoインストールを実行する必要があります.Defaults requirettyフィールドを検索します.コメントがない場合は、コメントを削除し、ファイルの末尾に次のコードを追加します.
git ALL=(root) SETENV: NOPASSWD: /bin/sh, /usr/bin/git-upload-pack, /usr/bin/git-receive-pack

4)sshポートの構成
$ vi /etc/ssh/sshd_config
     :
#Port 22                    #    22  ,      git  ssh    
Port 2222                   #          2222
  ListenAddress      ,      

$ vi service sshd restart   #   ssh  

      22  ,   phabricator       ,    ~/.ssh/config   Port  
$ ./bin/config set diffusion.ssh-port 2222

すべて設定されている場合は、ポートがリモートで占有されているか、phabricator sshサービスが開始されているかどうかを考慮します.
5)スクリプトおよびsshサービスの追加
phabricatorの下resources/sshd/ディレクトリa)に入り、phabricator sshスクリプトを追加します.
$ cp phabricator-ssh-hook.sh /usr/libexec/phabricator-ssh-hook.sh
$ chown root /usr/libexec/phabricator-ssh-hook.sh
$ chmod 755 /usr/libexec/phabricator-ssh-hook.sh        #        chown 755   
$ vi /usr/libexec/phabricator-ssh-hook.sh
      :
VCSUSER="git"                                           # ssh  
ROOT="/var/www/html/code-review/phabricator"            # phabricator      

b.)phabricator sshプロファイルを追加する:
$ cp sshd_config.phabricator.example  /etc/ssh/sshd_config.phabricator
$ vi /etc/ssh/sshd_config.phabricator
  :
AuthorizedKeysCommand /usr/libexec/phabricator-ssh-hook.sh           #        a.)         
AuthorizedKeysCommandRunAs git              # openSSH6.2  ,    AuthorizedKeysCommandUser
AllowUsers git

Port 22           #   ssh    22,     ,    ssh      /etc/ssh/sshd_config 22  

c.)phabricator sshサービスを起動する:まずデバッグモードで起動し、エラーとポートバインドが成功したかどうかを確認する.
$ /usr/sbin/sshd -d -d -d -f /etc/ssh/sshd_config.phabricator
    :
$ /usr/sbin/sshd -f /etc/ssh/sshd_config.phabricator           #  ssh       ssh      
               ,      :
$ ps -ef | grep sshd
$ kill 

6.)ssh公開鍵の追加
a.)ssh鍵を生成する:
$ ssh-keygen -t rsa -f ~/.ssh/phabricator -C          # -f       

b.)~/.ssh/config 1本追加:
# phabricator
Host 192.168.1.5
HostName 192.168.1.5
Port 22                                  
PreferredAuthentications publickey
IdentityFile ~/.ssh/phabricator

c.)phabricator監査サイトにログインし、個人管理ページ、SSH Public Keysメニューにphabricator.pub公開鍵を追加する
$ cat ~/.ssh/phabricator.pub
       :
$ ssh -T -p 22 [email protected]       # -p      ,  22,     

3、http方式管理Git倉庫
1)apache権限の変更
visudoを実行し、sudoersでapache(www-userユーザー)に次の権限を追加します.
apache ALL=(root) SETENV: NOPASSWD: /usr/bin/git, /usr/bin/git-upload-pack, /usr/bin/git-receive-pack, /usr/bin/ssh, /usr/libexec/git-core/git-http-backend

2.)phabricator構成
$ ./bin/config set diffusion.allow-http-auth true                            #   http clone  
$ ./bin/config set environment.append-paths '["/usr/libexec/git-core"]'      #       ,         

更にウェブサイトのconfigメニューに入ります->all settingsの中で、diffusion.allow-http-authを探し当てて、つけて、値を設定します:Allow HTTP Basic Auth
3.)git httpアクセスパスワードの設定
SettingsでVCS Passwordメニューに設定
4)ローカルにログイン情報を保存する
修正~/Netrcファイル、追加:
machine 192.168.1.5
login wangwb
password aym000000  

5)デバッグ
$ GIT_CURL_VERBOSE=1 git clone http://....   

HTTP/1.0 500 Internal Server Errorがある場合、git-http-backendパスが間違っていることを示します(倉庫->statusで見ることができます)、environment.append-paths構成を追加する必要があります.上記の手順2を参照してください.
3、倉庫管理
1.倉庫のデフォルトストレージパスを変更するには:
$ ./bin/config set repository.default-local-path '/  /repo'

2.)倉庫を削除します.
$ ./bin/remove destroy R(n)

公式サイトドキュメント:https://secure.phabricator.co...
三、関連問題
1、mysql rootパスワードを消去する
$ mysql –skip-grant-table &
  Mysql> use mysql;
  Mysql> update user set password=password("   ") where user="root";
  Mysql> flush privileges;
  Mysql> quit;

ここで注意しなければならないのは、各コマンドがセミコロン";"で終わる必要があり、以上の操作を実行するとrootのパスワードが空になります.
ERROR 1044(42000):Access denied for user''@'localhost'to database'mysql'エラー:原因:mysqlデータベースのuserテーブルに、ユーザー名が空のアカウントである匿名アカウントが存在し、ログイン時にrootを使用していたが、実際には匿名ログインしていた.処理案:
# 1.  mysql
   $ service mysqld stop
# 2.    
   $ mysqld_safe --skip-grant-table
       : Starting demo from .....
# 3.         
   $ mysql -u root mysql
   Mysql> update user set password=password("   ") where user="root";
   Mysql> flush privileges;
   Mysql> quit;

2、mysqlリモートrootアカウントにログインできない
まず、以下を確認します.
権限:
$ mysql -u root -p
  Mysql> use mysql;
  Mysql> select host from user where user='root';  #      host   %   ,       flush privileges;
  Mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mysql root  ';
  Mysql> flush privileges;
  Mysql> quit;

3、mysqlデフォルトデータ保存の修正
$ mysqladmin -u root -p variables | grep datadir  #   mysql       
$ service mysqld stop
$ mv /var/lib/mysql /    #        

$ vi /etc/my.cnf
#   datadir socket    ,     :
[mysql] 
socket=/  /mysql.sock

$ service mysqld start

4、mysqlデータベースのバックアップ/リカバリ
$ mysqldump --all-databases -h127.0.0.1 -u root -p > ./backup/mysql-bak.sql
$ mysqldump --all-databases -h127.0.0.1 -u root -p < ./backup/mysql-bak.sql

5、sshリモートでrootアカウントにログインできない
ssh構成の変更:
$ vi /etc/ssh/sshd_config        #   :PermitRootLogin yes

6、git倉庫PHPを点けて間違いを報告する
説明SELinux構成が開始されましたので、上記の電源投入禁止を参照してください.
7、killプロセス
$ kill -s 9 PID #   ID

公式参考:https://secure.phabricator.co...