Installing Phabricator
Phabricator is a complete set of tools for developing software. Included apps help you manage tasks and sprints, review code, host git, svn, or mercurial repositories, build with continuous integration, review designs, discuss in internal chat channels, and much more. It's fast, scalable, and fully open source. Install it locally with no limitations, or have us host it for you.
In this guide i will take you step by step on how to install it on Debian Jesssie
Update and Upgrade your Debian installation
This is something you must always do to make sure you have the latest packages available.apt-get update apt-get dist-upgradeCreate the directory where you will install phabricator
mkdir -p /var/www/ph
Prerequisite
apt-get install sudo nginx php5 php5-cgi php5-fpm
Next, get php-fpm to listen on the correct host/port. In /etc/php5/fpm/pool.d/www.conf change the listen value to match the fastcgi_pass location in your Nginx configuration. For example, I changed mine from:
listen = /var/run/php5-fpm.sock To: listen = 127.0.0.1:9000
There is a script for ubuntu and centos for auto installation but may give errors on ubuntu so i modified the script
#!/bin/bash confirm() { echo "Press RETURN to continue, or ^C to cancel."; read -e ignored } GIT='git' LTS="Ubuntu 10.04" ISSUE=`cat /etc/issue` if [[ $ISSUE != Debian* ]] then echo "This script is intended for use on Ubuntu, but this system appears"; echo "to be something else. Your results may vary."; echo confirm elif [[ `expr match "$ISSUE" "$LTS"` -eq ${#LTS} ]] then GIT='git-core' fi echo "PHABRICATOR UBUNTU INSTALL SCRIPT"; echo "This script will install Phabricator and all of its core dependencies."; echo "Run it from the directory you want to install into."; echo ROOT=`pwd` echo "Phabricator will be installed to: ${ROOT}."; confirm echo "Testing sudo..." sudo true if [ $? -ne 0 ] then echo "ERROR: You must be able to sudo to run this script."; exit 1; fi; echo "Installing dependencies: git, apache, mysql, php..."; echo set +x sudo apt-get -qq update sudo apt-get install \ $GIT mysql-server apache2 dpkg-dev \ php5 php5-mysql php5-gd php5-dev php5-curl php-apc php5-cli php5-json # Enable mod_rewrite sudo a2enmod rewrite HAVEPCNTL=`php -r "echo extension_loaded('pcntl');"` if [ $HAVEPCNTL != "1" ] then echo "Installing pcntl..."; echo apt-get source php5 PHP5=`ls -1F | grep '^php5-.*/$'` (cd $PHP5/ext/pcntl && phpize && ./configure && make && sudo make install) else echo "pcntl already installed"; fi if [ ! -e libphutil ] then git clone https://github.com/phacility/libphutil.git else (cd libphutil && git pull --rebase) fi if [ ! -e arcanist ] then git clone https://github.com/phacility/arcanist.git else (cd arcanist && git pull --rebase) fi if [ ! -e phabricator ] then git clone https://github.com/phacility/phabricator.git else (cd phabricator && git pull --rebase) fi echo echo echo "Install probably worked mostly correctly. Continue with the 'Configuration Guide':"; echo echo " https://secure.phabricator.com/book/phabricator/article/configuration_guide/"; echo echo "You can delete any php5-* stuff that's left over in this directory if you want.";
copy this file in /var/www/ph and unzip it
unzip /var/www/ph/phabricator-debian.zip
Now just run the script
/var/www/ph/phabricator-debian
This script install everything for you including mysql php and clones the phabriator repository for you
After the installation is done you will now have /var/www/ph/phabricator folder which contains the phabricator code and site.
install nginx
apt-get install nginx
We now need to modify nginx to serve phabricator via ssl. keep in mid that i am using letsencryot certificates that is why i have the /.well_known path.
server { listen 80; server_name example.com; return 301 https://example.com; } server { # Change to your real subdomain, e.g. phabricator.mysite.com server_name example.com; listen 443 ssl default_server; # Update to the directory where you've installed Phabricator. root /var/www/ph/phabricator/webroot; try_files $uri $uri/ /index.php; ssl on; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_session_timeout 30s; location / { index index.php; if ( !-f $request_filename ) { rewrite ^/(.*)$ /index.php?__path__=/$1 last; break; } } location /index.php { fastcgi_pass localhost:9000; fastcgi_index index.php; #required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; #variables to make the $_SERVER populate in PHP 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; } location /.well-known { default_type text/plain; root /var/www/letsencrypt/webroot; } }
One the site is up and running it will complain about setup issues
In oder to solve some of these issues you must modify /etc/mysql/my.cf with the following
# # The MySQL database server configuration file. # # You can copy this to one of: # - "/etc/mysql/my.cnf" to set global options, # - "~/.my.cnf" to set user-specific options. # # One can use all long options that the program supports. # Run program with --help to get a list of available options and with # --print-defaults to see which it would actually understand and use. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html # This will be passed to all mysql clients # It has been reported that passwords should be enclosed with ticks/quotes # escpecially if they contain "#" chars... # Remember to edit /etc/mysql/debian.cnf when changing the socket location. [client] port = 3306 socket = /var/run/mysqld/mysqld.sock # Here is entries for some specific programs # The following values assume you have at least 32M ram # This was formally known as [safe_mysqld]. Both versions are currently parsed. [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] # # * Basic Settings # user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql skip-external-locking sql_mode = STRICT_ALL_TABLES ft_stopword_file=/var/www/ph/phabricator/resources/sql/stopwords.txt ft_min_word_len = 3 ft_boolean_syntax =' |-><()~*:""&^' # # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 127.0.0.1 # # * Fine Tuning # key_buffer = 16M max_allowed_packet = 34M thread_stack = 192K thread_cache_size = 8 # This replaces the startup script and checks MyISAM tables if needed # the first time they are touched myisam-recover = BACKUP #max_connections = 100 #table_cache = 64 #thread_concurrency = 10 # # * Query Cache Configuration # query_cache_limit = 1M query_cache_size = 16M # # * Logging and Replication # # Both location gets rotated by the cronjob. # Be aware that this log type is a performance killer. # As of 5.1 you can enable the log at runtime! #general_log_file = /var/log/mysql/mysql.log #general_log = 1 # # Error log - should be very few entries. # log_error = /var/log/mysql/error.log # # Here you can see queries with especially long duration #slow_query_log_file = /var/log/mysql/mysql-slow.log #slow_query_log = 1 #long_query_time = 2 #log_queries_not_using_indexes # # The following can be used as easy to replay backup logs or for replication. # note: if you are setting up a replication slave, see README.Debian about # other settings you may need to change. #server-id = 1 #log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 max_binlog_size = 100M #binlog_do_db = include_database_name #binlog_ignore_db = include_database_name # # * InnoDB # # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. # Read the manual for more InnoDB related options. There are many! # # * Security Features # # Read the manual, too, if you want chroot! # chroot = /var/lib/mysql/ # # For generating SSL certificates I recommend the OpenSSL GUI "tinyca". # # ssl-ca=/etc/mysql/cacert.pem # ssl-cert=/etc/mysql/server-cert.pem # ssl-key=/etc/mysql/server-key.pem [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] #no-auto-rehash # faster start of mysql but no tab completition [isamchk] key_buffer = 16M # # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d
To get ldap working you must first install
apt-get install php5-ldap
There is also a problem with /var/www/ph/libphutil/src/auth/PhutilLDAPAuthAdapter.php where i had to comment out a line in the code otherwise authentication wouldnt work
$message, $errno, $error); } else { $full_message = pht( 'LDAP Exception: %s', $message); } #throw new Exception($full_message); } private function bindLDAP($conn, $user, PhutilOpaqueEnvelope $pass) { │··············· $profiler = PhutilServiceProfiler::getInstance(); │··············· $call_id = $profiler->beginServiceCall( │··············· array(
Set pahabricator base url to
bin/config set phabricator.base-uri 'http://example.com/'
And thats it you should be good to go.
If you wish to test that the ldap configurations you added are correct , use the following to test binding against ldap
bin/auth ldap --trace