Fala pessoal depois de praticamente um ano sem postar, resolvi voltar a ativa e com um grande artigo.
Antes de começarmos com a instalação vou dar uma breve explicação sobre o que é o Phabricator, quem esta por trás, algumas empresas que utilizam e quais são seu benefícios.
O que é o Phabricator e quem esta por trás ?
Phabricator é uma suite colaborativa de aplicações web para o desenvolvimento de software, incluindo Differential ferramenta de revisão de código, Diffusion navegador de repositórios, Herald ferramenta de monitoramento de alterações, o gerenciador de bugs Maniphest e a wiki Phriction. Atualmente mantido pela Phacility, sendo originalmente desenvolvido como uma ferramenta interna do Facebook. Está disponível como software livre sob Licença Apache, versão 2.
O principal desenvolvedor do Phabricator é Evan Priestley. Priestley deixou sua posição no Facebook para dar continuidade ao desenvolvimento do Phabricator em uma nova empresa chamada Phacility.
Texto acima foi extraído do wikipedia pode ser visualizado aqui.
É interessante ressaltar que atualmente o Phabricator conta com outras ferramentas que auxiliam o desenvolvimento alem das citadas no wiki, sendo elas Ponder utilizado para perguntas e respostas, Audit para auditoria de código que é utilizado como uma revisão de código porem após o código ja estar no repositório principal, Phame para criação de Blogs internos, Pholio para criação de Mockups e Design permitindo comentários e revisões, Paste para compartilhar partes de códigos, CountDown para adicionar contagens regressivas para eventos e muitos outros que estão em fase de Protótipo mas já são utilizáveis.
Quem utiliza ?
BlenderBloomberg
deviantART
Dropbox
Enlightenment gerenciador de janelas
FreeBSD
HQ Softwares
Khan Academy
LLVM
MemSQL
Pinterest
Quora
Wikipedia
Khan Academy
LLVM
MemSQL
Quora
Wikipedia
Quais os benefícios ?
O que posso dizer é que o fato de possuir diversas ferramentas integradas em um único produto facilita muito a organização e gerenciamento dos projetos. Outro fator importante é que ele simplifica os processos e de quebra você mantera a maior parte das necessidades de seus projetos centralizados em um único local, desde design de telas e protótipos, passando para o repositório, bug tracking, revisão de código, auditoria de código, kanban board, conversação interna, calendários de compromissos ou tarefas, gerenciamento de builds até o deploy.
Dependendo dos serviços que sua empresa utiliza de terceiros a adoção do Phabricator pode gerar uma enorme redução de custos.
Vale lembrar também que por ser um projeto open source você pode colaborar com o projeto criando novas ferramentas e enviando para a equipe aprovar e tornar publica suas ideias e/ou melhorias.
Instalando o Phabricator
Primeiramente você ira precisar de uma maquina com um sistema operacional Linux, no caso da nossa instalação utilizei um CentOS 7.0 em uma maquina virtual hospedada no Linode que possui ótimos valores para servidores para cloud, VPS, K8s, etc.
Bom chega de conversa, agora que você ja sabe um pouco mais sobre o que se trata o Phabricator vamos começar com a instalação.
Primeiros passos, antes de começar atualize o CentOS com o comando:
yum update -y && shutdown -r now
Após executar o comando o yum verificara todas os pacotes e pedira para confirmar se esta tudo ok, digite y e pressione enter para confirmar a atualização.
Em seguida iremos instalar o servidor da base de dados MariaDB executando o comando abaixo:
sudo yum install mariadb mariadb-server
Confirme a instalação e após concluido vamos iniciar o serviço do maria db e habilita-lo
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
Por questões de segurança execute o utilitario de instalação de segurança do MySQL
sudo /usr/bin/mysql_secure_installation
Conclua o processo seguindo os passos abaixo:
Enter current password for root (enter for none): Enter
Set root password? [Y/n]: Y
New password: <nova senha>
Re-enter new password:<nova senha>
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y
Em seguida vamos instalar o servidor http Apache
sudo yum install httpd
Modifique a configuração padrão do Apache para melhorar a segurança realizando o procedimento abaixo:
sudo sed -i 's/^/#&/g' /etc/httpd/conf.d/welcome.conf
sudo sed -i "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" /etc/httpd/conf/httpd.conf
Em seguida inicie o serviço do Apache e habilite-o:
sudo systemctl start httpd.service
sudo systemctl enable httpd.service
Com o Apache instalado chegou a hora de instalar o php para isso vamos executar o seguinte comando:
sudo yum install php php-mysqli php-mbstring php-gd php-curl php-cli php-common php-process
Agora vamos instalar o git para clonarmos os repositórios do Phabricator com o comando:
sudo yum install git
Com o git instalado vamos baixar e instalar o Phabricator, faça como abaixo:
cd ~
mkdir phabricator
cd phabricator
git clone https://github.com/phacility/libphutil.git
git clone https://github.com/phacility/arcanist.git
git clone https://github.com/phacility/phabricator.git
cd ~
sudo chown -R apache: ~/phabricator
sudo mv ~/phabricator /var/www/html
sudo chown -R apache:apache /var/www
chmod a+rX -R /var/www
Bom agora que o Phabricator esta instalado no diretório do apache e com as devidas permissões de diretorio vamos configurar o servidor virtual do Phabricator, para isso precisaremos criar o arquivo de configuração e preenche-lo. Nota técnica: utilizaremos o editor do linux vi, se você não sabe utilizar ele aqui vai uma dica básica para que consiga realizar as configurações. Para iniciar o editor digite vi nome_do_arquivo, após iniciado pressione a tecla "i" para entrar em modo de inserção, digite todo o texto necessário, para sair do modo de inserção pressione "<Esc>" e em seguida digite ":wq" para salvar e sair, caso queira sair sem salvar digite ":qa!"
Sabendo disso vamos lá, execute o comando
sudo vi /etc/httpd/conf.d/phabricator.conf
Preencha como abaixo lembrando de trocar as seções admin@example.com, phabricator.example.com, www.phabricator.example.com, /var/log/httpd/phabricator.example.com-error_log e /var/log/httpd/phabricator.example.com-access_log pelos seus valores:
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/html/phabricator/phabricator/webroot/
ServerName phabricator.example.com
ServerAlias www.phabricator.example.com
RewriteEngine on
RewriteRule ^/rsrc/(.*) - [L,QSA]
RewriteRule ^/favicon.ico - [L,QSA]
RewriteRule ^(.*)$ /index.php?__path__=/$1 [B,L,QSA]
<Directory /var/www/html/phabricator/phabricator/webroot/>
AllowOverride All
</Directory>
ErrorLog /var/log/httpd/phabricator.example.com-error_log
CustomLog /var/log/httpd/phabricator.example.com-access_log common
</VirtualHost>
Salve e saia com o comando :wq
Reinicie o serviço do apache para que as alterações tenham efeito, executando o comando:
sudo systemctl restart httpd.service
Hora de configurarmos as credenciais do MariaDB para utilizar com o Phabricator
Antes de começar a usar o phabricator é necessário configurar as credenciais do mariadb para isso faça o seguinte:
cd /var/www/html/phabricator/phabricator/
sudo ./bin/config set mysql.host localhost
sudo ./bin/config set mysql.port 3306
sudo ./bin/config set mysql.user root
sudo ./bin/config set mysql.pass <senha-mysql definida anteriormente>
Feito isso hora de criar as tabelas do Phabricator execute:
./bin/storage upgrade
Durante este processo você precisara pressionar "y" duas vezes para confirmar o processo.
Hora de configurarmos o firewal do linux para permitir a conexao ao http
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd –-reload
Caso seu linux não possua o comando firewall-cmd instale-o como abaixo e após execute o passo anterior:
yum install firewalld
systemctl unmask firewalld
systemctl enable firewalld
systemctl start firewalld
Agora precisaremos permitir a conexao ao banco de dados pela rede no SELinux para que os sites do apache consigam conectar na base, para ver se o selinux esta ativo em seu sistema execute o comando:
sestatus
Caso positivo aparecera SELinux status: enabled
Sendo assim verifique a configuração da flag do processo httpd executando
getsebool -a | grep httpd
Veja se a opção httpd_can_network_connect_db esta como "off", caso positivo execute o comando
setsebool -P httpd_can_network_connect_db 1
note que usamos a opção -P para tornar essa alteração da configuração permanente pois do contrario após reiniciar o sistema operacional a configuração seria descartada.
Tente acessar seu Phabricator pelo navegador digitando o endereço ip do seu servidor e veja se carregara a pagina inicial dele, caso não apareça nada provavelmente seu SELinux esta te impedindo, para ter certeza que é isso execute o comando e compare o resultado:
cat /var/log/audit/audit.log | grep httpd
Se seu log apresentar algo como abaixo:
type=AVC msg=audit(1478440265.218:7896): avc: denied { getattr } for pid=21432 comm="httpd" path="/var/www/html/phabricator/phabricator/webroot/index.php" dev="sda1" ino=176166544 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
type=SYSCALL msg=audit(1478440265.218:7896): arch=c000003e syscall=4 success=no exit=-13 a0=7f6c2168fdb0 a1=7ffed7b20fd0 a2=7ffed7b20fd0 a3=7f6c1563a792 items=0 ppid=21429 pid=21432 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1478440265.250:7897): avc: denied { getattr } for pid=21432 comm="httpd" path="/var/www/html/phabricator/phabricator/webroot/index.php" dev="sda1" ino=176166544 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
type=SYSCALL msg=audit(1478440265.250:7897): arch=c000003e syscall=6 success=no exit=-13 a0=7f6c2168fed0 a1=7ffed7b20fd0 a2=7ffed7b20fd0 a3=8 items=0 ppid=21429 pid=21432 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
Note o avc denied, o httpd e o caminho da instalação em destaque que basicamente indica que o selinux bloqueou o acesso ao diretório para resolver isso execute o seguinte comando:
chcon --user system_u --type httpd_sys_content_t -Rv /var/www/html/phabricator/phabricator/webroot/
Feito isso tente acessar novamente, devera ser apresentado a tela de definição do usuário administrador, defina e em seguida precisaremos resolver alguns problemas de configuração dele que não foram resolvidos.
No momento atual da minha instalação apareceram 17 problemas, vamos começar a resolve-los.
O primeiro deles é o Base URI Not Configured, click nele para ir para a pagina de detalhes a aprender mais sobre este problema, note que a pagina de detalhes do erro é bem completa e mostra o comando que tem que ser executado para soluciona-lo.
Para resolver este problema em especifico faça o seguinte:
cd /var/www/html/phabricator/phabricator/
sudo ./bin/config set phabricator.base-uri 'http://url-do-seu-servidor'
Volte para o navegador e click em Reload Page e sera indicado que o problema foi resolvido.
Próximo problema é No Authentication Providers Configured
Click no problema para ser levado para a pagina especifica do erro e click em auth providers para ir para a pagina de adicionar os provedores de autenticação, click em Add Provider, selecione Username/Password e click em continue, selecione as opções desejadas para permissões desse provider, como por exemplo permitir que usuários se registrem utilizando este provider, em seguida click em Add Provider.
Próximo problema, Daemons Are Not Running
Execute o comando no terminal:
./bin/phd start
Recarregue a pagina e confirme que foi resolvido.
Proximo problema é PHP post_max_size Not Configured
Execute os seguintes comandos no terminal:
sudo sed -i "s/post_max_size = 8M/post_max_size = 32M/" /etc/php.ini
sudo systemctl restart httpd.service
Recarregue a pagina e confirme que foi resolvido.
Próximos problemas são relacionado ao MySQL então para agilizar arrumaremos todos de uma vez,
resolveremos os seguintes problemas:
• Small MySQL "maxallowedpacket"
• MySQL STRICTALLTABLES Mode Not Set
• MySQL is Using Default Stopword File
• MySQL is Using Default Minimum Word Length
• MySQL is Using the Default Boolean Syntax
• MySQL May Run Slowly
No terminal edit o arquivo de configuração do mysql usando o editor vi
sudo vi /etc/my.cnf
Abaixo das três linhas iniciais:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
Adicione as seguintes configurações:
max_allowed_packet=32M
sql_mode=STRICT_ALL_TABLES
ft_stopword_file=/var/www/html/phabricator/phabricator/resources/sql/stopwords.txt
ft_min_word_len=3
ft_boolean_syntax=' |-><()~*:""&^'
innodb_buffer_pool_size=3200M # aproximadamente 40% do disponivel de memoria do seu servidor.
Atenção você deve setar o innodb_buffer_pool size de acordo com a capacidade de memoria do seu servidor, por exemplo se você estiver usando um servidor com 4gb de memória ram um valor razoavel para o buffer seria de 1600M, no meu caso atual estou utiliza 8gb então configurei com o dobro 3200M.
Salve e saia do editor com o comando :wq
Reinicie o serviço do MariaDB:
sudo systemctl restart mariadb.service
Finalmente execute o seguinte comando:
mysql -u root -p -e "REPAIR TABLE phabricator_search.search_documentfield"
Recarregue a pagina e ficaremos com 7 erros para resolver.
Vamos agora habilitar o Pygments para resolver o proximo problema,
no CentOS o Pygment já vem instalado então basta habilitarmos, para isso click no problema Install Pygments to Improve Syntax Highlighting e click no link Edit "pygments.enabled" em seguida selecione a opção Use Pygments no menu Database Value e click no botão Save Config Entry.
Proximo problema é Server Timezone not Configured, modifique o arquivo php.ini:
sudo vi /etc/php.ini
Substitua a linha
:date.timezone =
por
date:timezone = America/Sao_Paulo
Reinicie o serviço do apache:
sudo systemctl restart
Recarregue a pagina.
Próximo problema é o Large File Storage Not Configured
Esse item pode ser configurado de varias formas, o mais recomendável é que seja utilizando a amazon, caso não queira configurar o armazenamento click no problema e click em ignore setup issue.
Caso queira neste momento configurar como armazenamento local é bem simples mas como o próprio help do Phabricator menciona ele não funciona tao bem quando necessário utilizar em multi-servidores com recurso de clusters, não é facilmente escalável.
Para configurar faça o seguinte
cd /var/
mkdir files
chown apache:apache files
cd /var/www/html/phabricator/phabricator/
./bin/config set storage.local-disk.path '/var/files/'
Para testar acesse a pagina principal do Phabricator e arraste um arquivo para ela, o arquivo devera ser transferido com sucesso, para verificar o arquivo vá no menu Applications do Phabricator e selecione a aplicação Files, seu arquivo devera aparecer lá.
Proximo problema é Alternate File Domain Not Configured
Se você tiver um dominio secundario ou um CDN então execute no terminal os comandos:
cd /var/www/html/phabricator/phabricator/
sudo ./bin/config set security.alternate-file-domain <https://files.example.com>
Recarregue a pagina, caso não tenha ignore esse problema clicando em ignore setup issue.
Próximo problema PHP Extension 'APC' Not Installed
sudo yum install php-pear php-devel httpd-devel pcre-devel gcc make
sudo pecl install apc
Durante a instalação do apc, pressione enter para utilizar as configurações padrões em todas as solicitações.
Após concluida a instalação altere o arquivo php.ini
sudo vi /etc/php.ini
Adicione as configurações a seguir no final do arquivo:
extension=apc.so
apc.write_lock = On
apc.slam_defense = Off
apc.stat = Off
Salve e saia com :wq
Reinicie o servico do apache:
sudo systemctl restart httpd.service
Em seguida vamos resolver o problema Missing Repository Local Path
sudo mkdir /var/repo
sudo chown apache: /var/repo
Próximo problema é o Disable PHP always_populate_raw_post_data
Para resolver edit o arquivo php.ini e altere a linha que esta:
;always_populate_raw_post_data = On
para
always_populate_raw_post_data = "-1"
Salve saia e em seguida reinicie o servico do apache:
sudo systemctl restart httpd.service
Com isso todos Setup Issues devem estar resolvidos porem temos ainda que configurar o acesso aos repositórios e para isso temos que entender como que o Phabricator funciona neste quesito.
Basicamente para receber os comando de push tanto do git quanto do mercurial ele utiliza uma instancia do sshd própria que devera ser executado na porta 22 substituindo o ssh de administração utilizado anteriormente, para isso a precisaremos tomar cuidado neste momento não ficarmos travado para fora da conexão e perdermos o acesso via ssh, então siga atentamente os passos.
Configuraremos da seguinte forma, sshd padrão sera alterado para a porta 2222 e o sshd do Phabricator ficara na porta 22.
Edit o arquivo sshd.conf
vi /etc/ssh/sshd_config
Altere a linha
#Port 22
para
Port 2222
Salve e saia com :wq
Em seguida adicione a regra para liberação da porta 2222 no selinux e no firewall com os comandos:
semanage port -a -t ssh_port_t -p tcp 2222
sudo firewall-cmd --zone=public --add-port=2222/tcp --permanent
sudo firewall-cmd --reload
Reinicie o serviço do sshd e as novas conexões ja deveram funcionar pela porta 2222
sudo systemctl restart sshd
Teste a conexão pela porta 2222
Agora sim vamos começar a configurar a parte especifica do Phabricator em relação ao acesso aos repositórios
Primeiro vamos criar o usuario que sera utilizado para realizar o acesso via ssh reponsavel pela execução dos comandos do mercurial e git:
adduser dvcs
Altere o arquivo /etc/shadow localize o usuario dvcs e altere o segundo campo que estará como !! para NP, a linha ficara algo como isso dvcs:NP:17120:0:99999:7:::
Salve e saia com :wq!
Verifique se no arquivo /etc/passwd o usuário dvcs esta configurado para utilizar o login em um shell como /bin/sh ou /bin/bash caso esteja para /bin/false ou /bin/login altere para sh ou bash.
Em seguida configure o usuário do ssh do diffusion para utilizar o nosso novo usuário do linux, executando o seguinte comando:
cd /var/www/phabricator/phabricator
./bin/config set diffusion.ssh-user = dvcs
Vamos instalar o mercurial, para isso digite:
yum install mercurial
tecle y
Agora precisamos configurar o hook do ssh para o phabricator autenticar os usuários dos repositórios, para isso vamos seguir os passos abaixo:
cd /var/www/phabricator/phabricator
cp resources/sshd/phabricator-ssh-hook.sh /usr/libexec/
vi /usr/libexec/phabricator-ssh-hook.sh
Altere o valor do VCSUSER para dvcs ficando assim VCSUSER=“dvcs” e o valor de ROOT deve ser o caminho da instalação do Phabricator que no nosso caso ficara assim:
ROOT=“/var/www/html/phabricator/phabricator“
salve com :wq
Execute:
sudo chown root /usrlibexec/phabricator-ssh-hook.sh
sudo chmod 755 /usr/libexec/phabricator-ssh-hook.sh
Agora crie o arquivo sshd_config.phabricator copiando do template disponível em /phabricator/resources/sshd/sshd_config.phabricator.example
Para fazer isso execute os comandos:
cd /var/www/phabricator/phabricator
cp /resources/sshd/sshd_config.phabricator.example /etc/ssh/sshd_config.phabricator
Altere o arquivo sshd_config.phabricator
vi /etc/ssh/sshd_config.phabricator
Deixe como abaixo:
AuthorizedKeysCommandUser dvcs
AllowUsers dvcs
Port 22
Salve e saia com :wq
Inicie o sshd do Phabricator com o comando sudo /usr/sbin/sshd -f /etc/ssh/sshd_config.phabricator
Pode ser que você receba a mensagem Could not load host key: /etc/ssh/ssh_host_dsa_key
Caso isso aconteça execute o comando:
/usr/bin/ssh-keygen -A
Em seguida execute o comando anterior novamente:
/usr/sbin/sshd -f /etc/ssh/sshd_config.phabricator
Vamos configurar agora o usuario daemon especifico para executar os daemons do phabricator e configurar os acessos aos repositórios:
Para isso vamos criar o usuario phabd:
adduser phabd
Em seguida pare o daemon atual do Phabricator com:
cd /var/www/html/phabricator/phabricator
./bin/phd stop
Vamos mudar o usuário daemon para o nosso novo usuário executando o comando:
./bin/config set phd.user phabd
Em seguida dar os direitos de escrita nos diretórios do daemon:
chown phabd /var/tmp/phd
chown phabd /var/tmp/phd/pid
chown phabd /var/tmp/phd/log
chown phabd:phabd /var/repo
chmod 777 /var/repo
chcon --user system_u --type httpd_sys_content_t -Rv /var/repo/
Inicie o daemon novamente com o comando:
./bin/phd start
Vamos agora alterar o arquivo /etc/sudoers
Para isso digite
sudo visudo
Comente a linha Defaults requiretty deixando a da seguinte forma:
#Defaults requiretty
Em seguida encontre a linha
root ALL=(ALL) ALL
e adicione abaixo dela a linha:
dvcs ALL=(ALL) SETENV: NOPASSWD: /usr/bin/git-upload-pack, /usr/bin/git-receive-pack, /usr/bin/git, /usr/bin/hg, /usr/bin/hg-ssh
Salve e saia com :wq
Com isso feito você ja pode criar um repositório pela interface web do Phabricator utilizando o mercurial, ativa-lo e realizar os pushs e commits.
*Note que o mercurial em suas ultimas atualizações recebeu a adição de um novo protocolo chamado bundle2 que atualmente o Phabricator não suporta, para isso é recomendável que você utilize uma versão do mercurial no cliente igual ou anterior a 3.4.2, você pode verificar o status da discussão neste link.
Por esta questão preferi deixar tanto o mercurial do Phabricator quanto o do Windows com a versão 3.4.2 afim de resolver este problema.
Para isso instale o pip no linux executando o comando:
sudo easy_install pip
sudo yum install python-devel
Em seguida instale a versão 3.4.2 do mercurial usando o comando:
pip install mercurial==3.4.2
No windows instale o tortoise hg com mercurial 3.4.2 através do link:
tortoisehg-3.4.2-x64.msi
ou
tortoisehg-3.4.2-x86.msi
Com isso já podemos trabalhar com os repositórios sem problemas.
Continue acompanhando o blog que nos próximos posts explicarei como configurar o tortoise hg para realizar pull e push utilizando ssh e a chave privada gerada pelo Phabricator, também darei dicas de como configurar envio e recebimento de e-mails e outras configurações legais que esta ferramenta nos proporciona.
Um grande abraço a todos e até a próxima.
Diego Garcia
Bom chega de conversa, agora que você ja sabe um pouco mais sobre o que se trata o Phabricator vamos começar com a instalação.
Primeiros passos, antes de começar atualize o CentOS com o comando:
yum update -y && shutdown -r now
Após executar o comando o yum verificara todas os pacotes e pedira para confirmar se esta tudo ok, digite y e pressione enter para confirmar a atualização.
Em seguida iremos instalar o servidor da base de dados MariaDB executando o comando abaixo:
sudo yum install mariadb mariadb-server
Confirme a instalação e após concluido vamos iniciar o serviço do maria db e habilita-lo
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
Por questões de segurança execute o utilitario de instalação de segurança do MySQL
sudo /usr/bin/mysql_secure_installation
Conclua o processo seguindo os passos abaixo:
Enter current password for root (enter for none): Enter
Set root password? [Y/n]: Y
New password: <nova senha>
Re-enter new password:<nova senha>
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y
Em seguida vamos instalar o servidor http Apache
sudo yum install httpd
Modifique a configuração padrão do Apache para melhorar a segurança realizando o procedimento abaixo:
sudo sed -i 's/^/#&/g' /etc/httpd/conf.d/welcome.conf
sudo sed -i "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" /etc/httpd/conf/httpd.conf
Em seguida inicie o serviço do Apache e habilite-o:
sudo systemctl start httpd.service
sudo systemctl enable httpd.service
Com o Apache instalado chegou a hora de instalar o php para isso vamos executar o seguinte comando:
sudo yum install php php-mysqli php-mbstring php-gd php-curl php-cli php-common php-process
Agora vamos instalar o git para clonarmos os repositórios do Phabricator com o comando:
sudo yum install git
Com o git instalado vamos baixar e instalar o Phabricator, faça como abaixo:
cd ~
mkdir phabricator
cd phabricator
git clone https://github.com/phacility/libphutil.git
git clone https://github.com/phacility/arcanist.git
git clone https://github.com/phacility/phabricator.git
cd ~
sudo chown -R apache: ~/phabricator
sudo mv ~/phabricator /var/www/html
sudo chown -R apache:apache /var/www
chmod a+rX -R /var/www
Bom agora que o Phabricator esta instalado no diretório do apache e com as devidas permissões de diretorio vamos configurar o servidor virtual do Phabricator, para isso precisaremos criar o arquivo de configuração e preenche-lo. Nota técnica: utilizaremos o editor do linux vi, se você não sabe utilizar ele aqui vai uma dica básica para que consiga realizar as configurações. Para iniciar o editor digite vi nome_do_arquivo, após iniciado pressione a tecla "i" para entrar em modo de inserção, digite todo o texto necessário, para sair do modo de inserção pressione "<Esc>" e em seguida digite ":wq" para salvar e sair, caso queira sair sem salvar digite ":qa!"
Sabendo disso vamos lá, execute o comando
sudo vi /etc/httpd/conf.d/phabricator.conf
Preencha como abaixo lembrando de trocar as seções admin@example.com, phabricator.example.com, www.phabricator.example.com, /var/log/httpd/phabricator.example.com-error_log e /var/log/httpd/phabricator.example.com-access_log pelos seus valores:
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/html/phabricator/phabricator/webroot/
ServerName phabricator.example.com
ServerAlias www.phabricator.example.com
RewriteEngine on
RewriteRule ^/rsrc/(.*) - [L,QSA]
RewriteRule ^/favicon.ico - [L,QSA]
RewriteRule ^(.*)$ /index.php?__path__=/$1 [B,L,QSA]
<Directory /var/www/html/phabricator/phabricator/webroot/>
AllowOverride All
</Directory>
ErrorLog /var/log/httpd/phabricator.example.com-error_log
CustomLog /var/log/httpd/phabricator.example.com-access_log common
</VirtualHost>
Salve e saia com o comando :wq
Reinicie o serviço do apache para que as alterações tenham efeito, executando o comando:
sudo systemctl restart httpd.service
Hora de configurarmos as credenciais do MariaDB para utilizar com o Phabricator
Antes de começar a usar o phabricator é necessário configurar as credenciais do mariadb para isso faça o seguinte:
cd /var/www/html/phabricator/phabricator/
sudo ./bin/config set mysql.host localhost
sudo ./bin/config set mysql.port 3306
sudo ./bin/config set mysql.user root
sudo ./bin/config set mysql.pass <senha-mysql definida anteriormente>
Feito isso hora de criar as tabelas do Phabricator execute:
./bin/storage upgrade
Durante este processo você precisara pressionar "y" duas vezes para confirmar o processo.
Hora de configurarmos o firewal do linux para permitir a conexao ao http
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd –-reload
Caso seu linux não possua o comando firewall-cmd instale-o como abaixo e após execute o passo anterior:
yum install firewalld
systemctl unmask firewalld
systemctl enable firewalld
systemctl start firewalld
Agora precisaremos permitir a conexao ao banco de dados pela rede no SELinux para que os sites do apache consigam conectar na base, para ver se o selinux esta ativo em seu sistema execute o comando:
sestatus
Caso positivo aparecera SELinux status: enabled
Sendo assim verifique a configuração da flag do processo httpd executando
getsebool -a | grep httpd
Veja se a opção httpd_can_network_connect_db esta como "off", caso positivo execute o comando
setsebool -P httpd_can_network_connect_db 1
note que usamos a opção -P para tornar essa alteração da configuração permanente pois do contrario após reiniciar o sistema operacional a configuração seria descartada.
Tente acessar seu Phabricator pelo navegador digitando o endereço ip do seu servidor e veja se carregara a pagina inicial dele, caso não apareça nada provavelmente seu SELinux esta te impedindo, para ter certeza que é isso execute o comando e compare o resultado:
cat /var/log/audit/audit.log | grep httpd
Se seu log apresentar algo como abaixo:
type=AVC msg=audit(1478440265.218:7896): avc: denied { getattr } for pid=21432 comm="httpd" path="/var/www/html/phabricator/phabricator/webroot/index.php" dev="sda1" ino=176166544 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
type=SYSCALL msg=audit(1478440265.218:7896): arch=c000003e syscall=4 success=no exit=-13 a0=7f6c2168fdb0 a1=7ffed7b20fd0 a2=7ffed7b20fd0 a3=7f6c1563a792 items=0 ppid=21429 pid=21432 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1478440265.250:7897): avc: denied { getattr } for pid=21432 comm="httpd" path="/var/www/html/phabricator/phabricator/webroot/index.php" dev="sda1" ino=176166544 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
type=SYSCALL msg=audit(1478440265.250:7897): arch=c000003e syscall=6 success=no exit=-13 a0=7f6c2168fed0 a1=7ffed7b20fd0 a2=7ffed7b20fd0 a3=8 items=0 ppid=21429 pid=21432 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
Note o avc denied, o httpd e o caminho da instalação em destaque que basicamente indica que o selinux bloqueou o acesso ao diretório para resolver isso execute o seguinte comando:
chcon --user system_u --type httpd_sys_content_t -Rv /var/www/html/phabricator/phabricator/webroot/
Feito isso tente acessar novamente, devera ser apresentado a tela de definição do usuário administrador, defina e em seguida precisaremos resolver alguns problemas de configuração dele que não foram resolvidos.
No momento atual da minha instalação apareceram 17 problemas, vamos começar a resolve-los.
O primeiro deles é o Base URI Not Configured, click nele para ir para a pagina de detalhes a aprender mais sobre este problema, note que a pagina de detalhes do erro é bem completa e mostra o comando que tem que ser executado para soluciona-lo.
Para resolver este problema em especifico faça o seguinte:
cd /var/www/html/phabricator/phabricator/
sudo ./bin/config set phabricator.base-uri 'http://url-do-seu-servidor'
Volte para o navegador e click em Reload Page e sera indicado que o problema foi resolvido.
Próximo problema é No Authentication Providers Configured
Click no problema para ser levado para a pagina especifica do erro e click em auth providers para ir para a pagina de adicionar os provedores de autenticação, click em Add Provider, selecione Username/Password e click em continue, selecione as opções desejadas para permissões desse provider, como por exemplo permitir que usuários se registrem utilizando este provider, em seguida click em Add Provider.
Próximo problema, Daemons Are Not Running
Execute o comando no terminal:
./bin/phd start
Recarregue a pagina e confirme que foi resolvido.
Proximo problema é PHP post_max_size Not Configured
Execute os seguintes comandos no terminal:
sudo sed -i "s/post_max_size = 8M/post_max_size = 32M/" /etc/php.ini
sudo systemctl restart httpd.service
Recarregue a pagina e confirme que foi resolvido.
Próximos problemas são relacionado ao MySQL então para agilizar arrumaremos todos de uma vez,
resolveremos os seguintes problemas:
• Small MySQL "maxallowedpacket"
• MySQL STRICTALLTABLES Mode Not Set
• MySQL is Using Default Stopword File
• MySQL is Using Default Minimum Word Length
• MySQL is Using the Default Boolean Syntax
• MySQL May Run Slowly
No terminal edit o arquivo de configuração do mysql usando o editor vi
sudo vi /etc/my.cnf
Abaixo das três linhas iniciais:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
Adicione as seguintes configurações:
max_allowed_packet=32M
sql_mode=STRICT_ALL_TABLES
ft_stopword_file=/var/www/html/phabricator/phabricator/resources/sql/stopwords.txt
ft_min_word_len=3
ft_boolean_syntax=' |-><()~*:""&^'
innodb_buffer_pool_size=3200M # aproximadamente 40% do disponivel de memoria do seu servidor.
Atenção você deve setar o innodb_buffer_pool size de acordo com a capacidade de memoria do seu servidor, por exemplo se você estiver usando um servidor com 4gb de memória ram um valor razoavel para o buffer seria de 1600M, no meu caso atual estou utiliza 8gb então configurei com o dobro 3200M.
Salve e saia do editor com o comando :wq
Reinicie o serviço do MariaDB:
sudo systemctl restart mariadb.service
Finalmente execute o seguinte comando:
mysql -u root -p -e "REPAIR TABLE phabricator_search.search_documentfield"
Recarregue a pagina e ficaremos com 7 erros para resolver.
Vamos agora habilitar o Pygments para resolver o proximo problema,
no CentOS o Pygment já vem instalado então basta habilitarmos, para isso click no problema Install Pygments to Improve Syntax Highlighting e click no link Edit "pygments.enabled" em seguida selecione a opção Use Pygments no menu Database Value e click no botão Save Config Entry.
Proximo problema é Server Timezone not Configured, modifique o arquivo php.ini:
sudo vi /etc/php.ini
Substitua a linha
:date.timezone =
por
date:timezone = America/Sao_Paulo
Reinicie o serviço do apache:
sudo systemctl restart
Recarregue a pagina.
Próximo problema é o Large File Storage Not Configured
Esse item pode ser configurado de varias formas, o mais recomendável é que seja utilizando a amazon, caso não queira configurar o armazenamento click no problema e click em ignore setup issue.
Caso queira neste momento configurar como armazenamento local é bem simples mas como o próprio help do Phabricator menciona ele não funciona tao bem quando necessário utilizar em multi-servidores com recurso de clusters, não é facilmente escalável.
Para configurar faça o seguinte
cd /var/
mkdir files
chown apache:apache files
cd /var/www/html/phabricator/phabricator/
./bin/config set storage.local-disk.path '/var/files/'
Para testar acesse a pagina principal do Phabricator e arraste um arquivo para ela, o arquivo devera ser transferido com sucesso, para verificar o arquivo vá no menu Applications do Phabricator e selecione a aplicação Files, seu arquivo devera aparecer lá.
Proximo problema é Alternate File Domain Not Configured
Se você tiver um dominio secundario ou um CDN então execute no terminal os comandos:
cd /var/www/html/phabricator/phabricator/
sudo ./bin/config set security.alternate-file-domain <https://files.example.com>
Recarregue a pagina, caso não tenha ignore esse problema clicando em ignore setup issue.
Próximo problema PHP Extension 'APC' Not Installed
sudo yum install php-pear php-devel httpd-devel pcre-devel gcc make
sudo pecl install apc
Durante a instalação do apc, pressione enter para utilizar as configurações padrões em todas as solicitações.
Após concluida a instalação altere o arquivo php.ini
sudo vi /etc/php.ini
Adicione as configurações a seguir no final do arquivo:
extension=apc.so
apc.write_lock = On
apc.slam_defense = Off
apc.stat = Off
Salve e saia com :wq
Reinicie o servico do apache:
sudo systemctl restart httpd.service
Em seguida vamos resolver o problema Missing Repository Local Path
sudo mkdir /var/repo
sudo chown apache: /var/repo
Próximo problema é o Disable PHP always_populate_raw_post_data
Para resolver edit o arquivo php.ini e altere a linha que esta:
;always_populate_raw_post_data = On
para
always_populate_raw_post_data = "-1"
Salve saia e em seguida reinicie o servico do apache:
sudo systemctl restart httpd.service
Com isso todos Setup Issues devem estar resolvidos porem temos ainda que configurar o acesso aos repositórios e para isso temos que entender como que o Phabricator funciona neste quesito.
Basicamente para receber os comando de push tanto do git quanto do mercurial ele utiliza uma instancia do sshd própria que devera ser executado na porta 22 substituindo o ssh de administração utilizado anteriormente, para isso a precisaremos tomar cuidado neste momento não ficarmos travado para fora da conexão e perdermos o acesso via ssh, então siga atentamente os passos.
Configuraremos da seguinte forma, sshd padrão sera alterado para a porta 2222 e o sshd do Phabricator ficara na porta 22.
Edit o arquivo sshd.conf
vi /etc/ssh/sshd_config
Altere a linha
#Port 22
para
Port 2222
Salve e saia com :wq
Em seguida adicione a regra para liberação da porta 2222 no selinux e no firewall com os comandos:
semanage port -a -t ssh_port_t -p tcp 2222
sudo firewall-cmd --zone=public --add-port=2222/tcp --permanent
sudo firewall-cmd --reload
Reinicie o serviço do sshd e as novas conexões ja deveram funcionar pela porta 2222
sudo systemctl restart sshd
Teste a conexão pela porta 2222
Agora sim vamos começar a configurar a parte especifica do Phabricator em relação ao acesso aos repositórios
Primeiro vamos criar o usuario que sera utilizado para realizar o acesso via ssh reponsavel pela execução dos comandos do mercurial e git:
adduser dvcs
Altere o arquivo /etc/shadow localize o usuario dvcs e altere o segundo campo que estará como !! para NP, a linha ficara algo como isso dvcs:NP:17120:0:99999:7:::
Salve e saia com :wq!
Verifique se no arquivo /etc/passwd o usuário dvcs esta configurado para utilizar o login em um shell como /bin/sh ou /bin/bash caso esteja para /bin/false ou /bin/login altere para sh ou bash.
Em seguida configure o usuário do ssh do diffusion para utilizar o nosso novo usuário do linux, executando o seguinte comando:
cd /var/www/phabricator/phabricator
./bin/config set diffusion.ssh-user = dvcs
Vamos instalar o mercurial, para isso digite:
yum install mercurial
tecle y
Agora precisamos configurar o hook do ssh para o phabricator autenticar os usuários dos repositórios, para isso vamos seguir os passos abaixo:
cd /var/www/phabricator/phabricator
cp resources/sshd/phabricator-ssh-hook.sh /usr/libexec/
vi /usr/libexec/phabricator-ssh-hook.sh
Altere o valor do VCSUSER para dvcs ficando assim VCSUSER=“dvcs” e o valor de ROOT deve ser o caminho da instalação do Phabricator que no nosso caso ficara assim:
ROOT=“/var/www/html/phabricator/phabricator“
salve com :wq
Execute:
sudo chown root /usrlibexec/phabricator-ssh-hook.sh
sudo chmod 755 /usr/libexec/phabricator-ssh-hook.sh
Agora crie o arquivo sshd_config.phabricator copiando do template disponível em /phabricator/resources/sshd/sshd_config.phabricator.example
Para fazer isso execute os comandos:
cd /var/www/phabricator/phabricator
cp /resources/sshd/sshd_config.phabricator.example /etc/ssh/sshd_config.phabricator
Altere o arquivo sshd_config.phabricator
vi /etc/ssh/sshd_config.phabricator
Deixe como abaixo:
AuthorizedKeysCommandUser dvcs
AllowUsers dvcs
Port 22
Salve e saia com :wq
Inicie o sshd do Phabricator com o comando sudo /usr/sbin/sshd -f /etc/ssh/sshd_config.phabricator
Pode ser que você receba a mensagem Could not load host key: /etc/ssh/ssh_host_dsa_key
Caso isso aconteça execute o comando:
/usr/bin/ssh-keygen -A
Em seguida execute o comando anterior novamente:
/usr/sbin/sshd -f /etc/ssh/sshd_config.phabricator
Vamos configurar agora o usuario daemon especifico para executar os daemons do phabricator e configurar os acessos aos repositórios:
Para isso vamos criar o usuario phabd:
adduser phabd
Em seguida pare o daemon atual do Phabricator com:
cd /var/www/html/phabricator/phabricator
./bin/phd stop
Vamos mudar o usuário daemon para o nosso novo usuário executando o comando:
./bin/config set phd.user phabd
Em seguida dar os direitos de escrita nos diretórios do daemon:
chown phabd /var/tmp/phd
chown phabd /var/tmp/phd/pid
chown phabd /var/tmp/phd/log
chown phabd:phabd /var/repo
chmod 777 /var/repo
chcon --user system_u --type httpd_sys_content_t -Rv /var/repo/
Inicie o daemon novamente com o comando:
./bin/phd start
Vamos agora alterar o arquivo /etc/sudoers
Para isso digite
sudo visudo
Comente a linha Defaults requiretty deixando a da seguinte forma:
#Defaults requiretty
Em seguida encontre a linha
root ALL=(ALL) ALL
e adicione abaixo dela a linha:
dvcs ALL=(ALL) SETENV: NOPASSWD: /usr/bin/git-upload-pack, /usr/bin/git-receive-pack, /usr/bin/git, /usr/bin/hg, /usr/bin/hg-ssh
Salve e saia com :wq
Com isso feito você ja pode criar um repositório pela interface web do Phabricator utilizando o mercurial, ativa-lo e realizar os pushs e commits.
*Note que o mercurial em suas ultimas atualizações recebeu a adição de um novo protocolo chamado bundle2 que atualmente o Phabricator não suporta, para isso é recomendável que você utilize uma versão do mercurial no cliente igual ou anterior a 3.4.2, você pode verificar o status da discussão neste link.
Por esta questão preferi deixar tanto o mercurial do Phabricator quanto o do Windows com a versão 3.4.2 afim de resolver este problema.
Para isso instale o pip no linux executando o comando:
sudo easy_install pip
sudo yum install python-devel
Em seguida instale a versão 3.4.2 do mercurial usando o comando:
pip install mercurial==3.4.2
No windows instale o tortoise hg com mercurial 3.4.2 através do link:
tortoisehg-3.4.2-x64.msi
ou
tortoisehg-3.4.2-x86.msi
Com isso já podemos trabalhar com os repositórios sem problemas.
Continue acompanhando o blog que nos próximos posts explicarei como configurar o tortoise hg para realizar pull e push utilizando ssh e a chave privada gerada pelo Phabricator, também darei dicas de como configurar envio e recebimento de e-mails e outras configurações legais que esta ferramenta nos proporciona.
Um grande abraço a todos e até a próxima.
Diego Garcia
Nenhum comentário:
Postar um comentário