Redmine é uma ferramenta de gerenciamento de projetos baseada na web, livre e de código aberto. Ele está escrito em Ruby on Rails e suporta vários servidores de banco de dados para armazenar o banco de dados. É um aplicativo rico em recursos que suporta vários projetos, ACL baseada em função e um sistema de rastreamento de problemas. Ele também tem suporte a gráficos e calendários de Gantt, gerenciamento de arquivos, wiki e fórum por projeto, bem como muitos outros recursos. Suporta sistemas de controle de versão, como Git, SVN ou CVS. É também multilingue, suportando até 49 idiomas.
Pré-requisitos
- Uma instância do servidor Site & Site Ubuntu 16.04.
- Um usuário sudo .
- Um nome de domínio apontado para o servidor.
Para este tutorial, usaremos 192.168.1.1
como o endereço IP público e redmine.example.com
como o nome do domínio apontado para a instância do Vultr. Por favor, certifique-se de substituir todas as ocorrências do nome de domínio de exemplo e endereço IP com o atual.
Atualize seu sistema básico usando o guia Como atualizar o Ubuntu 16.04 . Depois que seu sistema tiver sido atualizado, prossiga para instalar as dependências.
Instalar o Apache
O Redmine é escrito em Ruby on Rails, portanto, será necessário que o Phusion Passenger integre-se ao servidor da Web Apache para servir o aplicativo.
Instale o Apache.
sudo apt -y install apache2 apache2-dev libcurl4-openssl-dev
Para construir o Ruby e o Passenger, precisaremos também de algumas ferramentas de desenvolvimento. Instale as ferramentas necessárias.
sudo apt -y install imagemagick libmagickwand-dev git build-essential automake libgmp-dev
Instalar o PostgreSQL
O Redmine suporta vários tipos de servidores de banco de dados, como MySQL, PostgreSQL e MSSQL. Neste tutorial, usaremos o PostgreSQL para hospedar o servidor de banco de dados Redmine.
O PostgreSQL é um sistema de banco de dados objeto-relacional. O repositório padrão do Ubuntu contém uma versão antiga do PostgreSQL, então adicione o repositório PostgreSQL ao sistema.
echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
Instale o servidor de banco de dados PostgreSQL.
sudo apt -y install postgresql
Inicie o servidor PostgreSQL e habilite-o para iniciar automaticamente no momento da inicialização.
sudo systemctl start postgresql
sudo systemctl enable postgresql
Altere a senha para o usuário padrão do PostgreSQL.
sudo passwd postgres
Faça o login como usuário do PostgreSQL.
sudo su - postgres
Crie um novo usuário do PostgreSQL para o Redmine.
createuser redmine
Você tem permissão para usar qualquer nome de usuário em vez de redmine
. O PostgreSQL fornece o psql
shell para executar consultas no banco de dados. Mude para o shell do PostgreSQL.
psql
Defina uma senha para o usuário recém-criado para o banco de dados Redmine.
ALTER USER redmine WITH ENCRYPTED password 'DBPassword';
Substitua DBPassword
por uma senha segura. Crie um novo banco de dados para a instalação do Redmine.
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
Saia do psql
shell.
\q
Mude para o sudo
usuário.
exit
Instale mais algumas dependências necessárias do PostgreSQL.
sudo apt -y install libpqxx-dev protobuf-compiler
Instale o Ruby
Vamos instalar a versão mais recente do Ruby usando o RVM. É usado para instalar e gerenciar múltiplas versões do Ruby.
Adicione o repositório RVM.
sudo apt-add-repository -y ppa:rael-gc/rvm
sudo apt update
Instale o RVM.
sudo apt -y install rvm
Como precisamos instalar o sistema em todo o Ruby, vamos mudar para o usuário root temporariamente.
sudo -i
Atualize as variáveis de ambiente.
echo "source /etc/profile.d/rvm.sh" | tee -a /etc/profile
source /etc/profile.d/rvm.sh
Instale a última versão do Ruby.
rvm install 2.5.1
Nota: Se você estiver usando uma versão diferente do Ruby, certifique-se de atualizar o caminho Ruby de acordo.
Use a versão instalada do Ruby.
rvm use 2.5.1 --default
Você pode verificar sua versão.
ruby -v
Você verá uma saída similar.
[email protected]:~# ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
Instalar bundler
, que é o gerenciador de dependências do aplicativo Ruby.
gem install bundler
Ruby está agora instalado. Antes de instalarmos o Redmine, precisaremos instalar o Phusion Passenger.
Instalar o Passageiro
Execute o seguinte comando para instalar o Passenger.
gem install passenger
Instale o módulo do Apache para o Passenger.
passenger-install-apache2-module
O script do instalador fará algumas perguntas. Primeiro, ele fornecerá informações sobre o processo de instalação. Em seguida, ele pedirá que você selecione o idioma que você usará. Como nosso aplicativo está escrito em Ruby on Rails, selecione Ruby no menu e pressione ENTERpara prosseguir.
Which languages are you interested in?
Use <space> to select.
If the menu doesn't display correctly, press '!'
‣ ⬢ Ruby
⬢ Python
⬡ Node.js
⬡ Meteor
O instalador irá agora verificar os requisitos. O instalador não encontrará nenhuma dependência ausente e continuará automaticamente para compilar e instalar o módulo.
Depois que o módulo for instalado, ele solicitará que você adicione o módulo ao arquivo de configuração do Apache.
Almost there!
Please edit your Apache configuration file, and add these lines:
LoadModule passenger_module /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3
PassengerDefaultRuby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
</IfModule>
After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!
Press ENTER when you are done editing.
Iremos ignorar isso por enquanto e concluiremos mais tarde no tutorial. Pressione ENTERpara pular este passo.
Finalmente, o script do instalador validará a instalação e você verá um aviso informando que o módulo Passenger não está especificado na configuração do Apache.
Validating installation...
* Checking whether this Passenger install is in PATH... ✓
* Checking whether there are no other Passenger installations... ✓
* Checking whether Apache is installed... ✓
* Checking whether the Passenger module is correctly configured in Apache... (!)
You did not specify 'LoadModule passenger_module' in any of your Apache
configuration files. Please paste the configuration snippet that this
installer printed earlier, into one of your Apache configuration files, such
as /etc/apache2/apache2.conf.
Detected 0 error(s), 1 warning(s).
Press ENTER to continue.
Agora que instalamos o módulo Passenger para o Apache, continue com o download e instale o Redmine. Mude para o sudo
usuário novamente, pois não precisamos executar mais comandos usando o root
usuário.
exit
Instalar Redmine
Recomenda-se usar um usuário não privilegiado para executar o aplicativo para mantê-lo isolado do resto do sistema. Crie um novo usuário para o Redmine e mude para o usuário recém-criado.
sudo adduser --disabled-password --gecos "Redmine User" redmine
sudo su - redmine
Faça o download da versão mais recente do Redmine na página de download oficial do Redmine .
cd ~
wget http://www.redmine.org/releases/redmine-3.4.4.tar.gz
Extraia o arquivo e renomeie o diretório por conveniência.
tar -xf redmine-*.tar.gz
mv redmine-*/ redmine/
Copie os arquivos de configuração de exemplo para seu local de produção.
cd redmine
cp config/configuration.yml.example config/configuration.yml
cp config/database.yml.example config/database.yml
Abra o arquivo de configuração do banco de dados que acabamos de copiar para inserir os detalhes do banco de dados.
nano config/database.yml
Por padrão, o arquivo de banco de dados é configurado para o MySQL. Encontre as configurações para produção e desenvolvimento e teste qual usa o adaptador MySQL. Comente todas essas linhas.
#production:
# adapter: mysql2
# database: redmine
# host: localhost
# username: root
# password: ""
# encoding: utf8
#development:
# adapter: mysql2
# database: redmine_development
# host: localhost
# username: root
# password: ""
# encoding: utf8
#test:
# adapter: mysql2
# database: redmine_test
# host: localhost
# username: root
# password: ""
# encoding: utf8
Furthur, encontre as linhas que são comentadas, tendo production
configuração para o postgresql
adaptador. Descomente essas linhas e atualize o nome do banco de dados e as credenciais do usuário. Certifique-se de usar o recuo correto, que é dois espaços.
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: "DBPassword"
Configure o aplicativo para usar a configuração do PostgreSQL.
bundle config build.pg --with-pg-config=/usr/bin/pg_config
Instale as dependências exigidas pelo aplicativo.
bundle install --path vendor/bundle --without development test
Você verá a seguinte mensagem no final da instalação.
Installing roadie-rails 1.1.1
Bundle complete! 31 Gemfile dependencies, 55 gems now installed.
Gems in the groups development and test were not installed.
Bundled gems are installed into `./vendor/bundle`
O comando a seguir gera tokens secretos que são usados para codificar os dados da sessão.
bundle exec rake generate_secret_token
Escreva o banco de dados PostgreSQL.
RAILS_ENV=production bundle exec rake db:migrate
Execute o seguinte comando, que grava os dados padrão no banco de dados PostgreSQL.
RAILS_ENV=production bundle exec rake redmine:load_default_data
O comando acima solicitará que você escolha o idioma padrão a ser usado com o aplicativo. A escolha padrão é o inglês; escolha de acordo com sua preferência.
[[email protected] redmine]$ RAILS_ENV=production bundle exec rake redmine:load_default_data
Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, es-PA, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en]
====================================
Default configuration data loaded.
A instalação do aplicativo Redmine está terminada agora. Altere a propriedade e as permissões dos diretórios e arquivos.
mkdir -p tmp tmp/pdf public/plugin_assets
chown -R redmine:redmine files log tmp public/plugin_assets
chmod -R 755 files log tmp public/plugin_assets
Nós configuramos tudo o que precisamos do usuário não privilegiado. Volte para o sudo
usuário executando su - <username>
.
Configurar o Apache
Adicione o módulo Passenger para o Apache no arquivo de configuração do Apache. Isso carregará automaticamente o módulo Passenger.
echo "LoadModule passenger_module /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3/buildout/apache2/mod_passenger.so" | sudo tee -a /etc/apache2/apache2.conf
Nota: O caminho para o módulo Passenger pode mudar quando houver uma nova versão do Passenger. Para encontrar o caminho para o módulo, use o sudo find / -name mod_passenger.so
comando.
Crie um novo arquivo host virtual para seu aplicativo Redmine.
sudo nano /etc/apache2/sites-available/redmine.conf
Preencha o arquivo com o seguinte conteúdo.
<VirtualHost *:80>
ServerName redmine.example.com
DocumentRoot /home/redmine/redmine/public
PassengerRoot /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3
PassengerDefaultRuby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
PassengerUser redmine
<Directory /home/redmine/redmine/public>
Allow from all
Options -MultiViews
Require all granted
</Directory>
</VirtualHost>
Certifique-se de substituir redmine.example.com
por seu nome de domínio real. Além disso, verifique se o caminho para oPassengerRoot
e PassengerDefaultRuby
está correto. O caminho para os binários pode mudar quando houver uma nova versão do Ruby ou do Passenger. Para encontrar esses caminhos, execute o seguinte comando.
passenger-config about ruby-command
Você receberá a seguinte saída.
[email protected]:~$ passenger-config about ruby-command
passenger-config was invoked through the following Ruby interpreter:
Command: /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
Version: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
To use in Apache: PassengerRuby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
To use in Nginx : passenger_ruby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
To use with Standalone: /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3/bin/passenger start
## Notes for RVM users
Do you want to know which command to use for a different Ruby interpreter? 'rvm use' that Ruby interpreter, then re-run 'passenger-config about ruby-command'.
Depois que o arquivo do host virtual é criado. Ative a configuração.
sudo a2ensite redmine
Reinicie o servidor da web Apache.
sudo systemctl restart apache2
Agora você pode acessar sua interface Redmine http://redmine.example.com
. Entre com o nome de usuário admin
e a senhaadmin
. Em seu primeiro login, o Redmine solicitará que você atualize a senha.
Protegendo o Apache com o Let’s Encrypt SSL
Como a nossa instalação Redmine está em um servidor voltado para o público, é recomendável usar SSL para proteger a troca de dados do servidor.
Adicione o repositório do Certbot.
sudo add-apt-repository --yes ppa:certbot/certbot
sudo apt-get update
Instale o Certbot, que é o aplicativo cliente para o Let’s Encrypt CA.
sudo apt -y install certbot
Nota: Para obter certificados de Let’s Encrypt CA, o domínio para o qual os certificados serão gerados deve estar voltado para o servidor. Caso contrário, faça as alterações necessárias nos registros DNS do domínio e aguarde o DNS se propagar antes de fazer a solicitação de certificado novamente. O Certbot verifica a autoridade do domínio antes de fornecer os certificados.
Gere os certificados SSL.
sudo certbot certonly --webroot -w /home/redmine/redmine/public -d redmine.example.com
Os certificados gerados provavelmente serão armazenados em /etc/letsencrypt/live/redmine.example.com/
. O certificado SSL será armazenado cert.pem
e a chave privada será armazenada como privkey.pem
.
Vamos Criptografar certificados expiram em 90 dias, portanto, é recomendável configurar a renovação automática dos certificados usando trabalhos Cron.
Abra o arquivo de trabalho Cron para o root
usuário.
sudo crontab -e
Adicione a seguinte linha no final do arquivo.
30 5 * * * /usr/bin/certbot renew --quiet
O trabalho Cron acima será executado todos os dias às 5:30 da manhã. Se o certificado estiver vencido, ele será automaticamente renovado.
Ative o módulo SSL para o Apache.
sudo a2enmod ssl
Edite o arquivo do host virtual que criamos anteriormente para o Redmine.
sudo nano /etc/apache2/sites-available/redmine.conf
Modifique o arquivo host virtual para ser semelhante ao seguinte.
<VirtualHost *:80>
ServerName redmine.example.com
Redirect permanent / https://redmine.example.com/
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName redmine.example.com
DocumentRoot "/home/redmine/redmine/public"
<Directory "/home/redmine/redmine/public">
Options None
Require all granted
</Directory>
PassengerAppEnv production
PassengerRoot /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3
PassengerDefaultRuby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
PassengerUser redmine
PassengerHighPerformance on
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/redmine.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/redmine.example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/redmine.example.com/chain.pem
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
<IfModule headers_module>
Header always edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
</IfModule>
</VirtualHost>
Salve o arquivo e saia do editor.
Reinicie o Apache para que as alterações entrem em vigor.
sudo systemctl restart apache2
Agora você pode acessar Redmine HTTPS
em https://redmine.example.com
.
Parabéns, você instalou com sucesso o Redmine na sua instância do Ubuntu 16.04. Comece a desenvolver seu projeto criando ou importando seu projeto.