Redmine es una aplicación de Ruby. Para la instalación tendremos que usar rubygems
y bundler
, y compila muchas dependencias, por lo que llevará un tiempo. Usaremos los repositorios de Red Hat disponibles después de habilitar la administración de suscripciones para resolver las dependencias del sistema operativo. Puede consultar la guía de instalación de PostgreSQL en RHEL8 para la configuración detallada de la base de datos en general, en este artículo cubriremos solo los pasos necesarios para Redmine. Si la configuración de la base de datos es nueva, no olvide completar el initdb
paso en la guía mencionada, o el inicio de la base de datos fallará.
- Crearemos un usuario que será el propietario de la aplicación y le daremos
sudo
temporal acceso. Podemos revocar este acceso una vez que se complete la instalación.# useradd redmine
Tenemos que establecer una contraseña para el nuevo usuario, que usaremos cuando usemos sudo
:
# passwd redmine
En distribuciones basadas en RHEL, hay una wheel
grupo de usuarios, que puede usar sudo
para ejecutar comandos privilegiados. Para comprobar que este grupo está configurado como sudoer
, podemos grep
el /etc/sudoers
archivo:
# grep "%wheel" /etc/sudoers
%wheel ALL=(ALL) ALL
# %wheel ALL=(ALL) NOPASSWD: ALL
Se comenta la segunda línea con la opción NOPASSWD, que se adaptará a nuestras necesidades. Con la configuración anterior en su lugar, todo lo que tenemos que hacer es agregar el redmine
usuario a la wheel
grupo:
# usermod -a -G wheel redmine
- Para instalar los paquetes que proporcionará el sistema operativo, usaremos
dnf
:# dnf install kernel-devel kernel-headers gcc postgresql-devel ruby ruby-devel rubygems
- Para obtener la aplicación, visite el sitio de descarga oficial (que se ejecuta en Redmine). Desde aquí podemos descargar el
tarball
comprimido con wget
al sistema de destino:# wget https://www.redmine.org/releases/redmine-4.0.3.tar.gz -O /opt/redmine-4.0.3.tar.gz
Como sugiere el comando anterior, instalaremos la aplicación en /opt
directorio. Cambiaremos a este directorio y extraeremos el archivo:
# cd /opt
# tar -xzf redmine-4.0.3.tar.gz
Opcionalmente también podemos crear un symlink
para un acceso más fácil, de esta manera no necesitamos recordar la versión exacta:
# ln -s /opt/redmine-4.0.3 /opt/redmine
Ahora podemos configurar el redmine
usuario como propietario de la jerarquía de directorios extraídos, recursivamente:
# chown -R redmine:redmine /opt/redmine*
- Para configurar la base de datos para la conexión de la aplicación, debemos iniciarla si aún no se está ejecutando:
# systemctl start postgresql
- Tendremos que crear una base de datos vacía donde la aplicación almacenará sus datos. Para hacerlo, cambiaremos a
postgres
usuario del sistema operativo creado por defecto en la instalación de la base de datos:# su - postgres
Iniciaremos sesión en psql
como superusuario de la base de datos:
$ psql
psql (10.5)
Type "help" for help.
postgres=#
Crearemos un rol que será utilizado por la aplicación (apunta el nombre de usuario y la contraseña):
postgres=# CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'R3DM1N3' NOINHERIT VALID UNTIL 'infinity';
También creamos una nueva base de datos con el propietario creado anteriormente:
postgres=# CREATE DATABASE rmdb WITH ENCODING='UTF8' OWNER=redmine;
Necesitaremos el nombre de usuario, la contraseña, la codificación y el nombre de la base de datos en un paso posterior.
- Ahora que el usuario está configurado, debemos permitirle iniciar sesión en el servidor de la base de datos. El usuario de redmine se conectará localmente, por lo que agregamos la siguiente línea al
pg_hba.conf
archivo, ubicado por defecto en /var/lib/pgsql/data
por defecto en distribuciones basadas en RHEL:host rmdb redmine 127.0.0.1/32 md5
Verifique su archivo de configuración para lo siguiente:
# IPv4 local connections:
host all all 127.0.0.1/32 ident
Si tiene esa línea, coméntela, entrará en conflicto con el inicio de sesión que planeamos configurar.
- Con eso en su lugar, necesitamos reiniciar la base de datos para que la configuración surta efecto:
# systemctl restart postgresql
- Ahora tenemos toda la información necesaria para decirle a la aplicación dónde y cómo encontrará la base de datos. Hay un ejemplo del archivo de configuración de la conexión de la base de datos con todas las bases de datos compatibles en
config
subdirectorio del archivo extraído. Podemos hacer una copia de este archivo (usando el redmine
usuario):$ cp config/database.yml.example config/database.yml
Podemos eliminar o comentar todas las configuraciones de ejemplo además de las relacionadas con PostgreSQL, o simplemente crear un archivo vacío con la configuración necesaria (de esa manera, quedará menos basura en el archivo). Al final, el /opt/redmine/config/database.yml
debe contener lo siguiente:
# PostgreSQL configuration
production:
adapter: postgresql
database: rmdb
host: 127.0.0.1
username: redmine
password: "R3DM1N3"
Tenga en cuenta que usamos la información de conexión de la base de datos que configuramos en los últimos dos pasos.
- Para reducir la cantidad de posibles problemas, probaremos que podemos iniciar sesión en
rmdb
base de datos con las credenciales proporcionadas en el archivo de configuración. Es más fácil depurar problemas de conexión con el conjunto de herramientas de PostgreSQL que con cualquier otro:$ psql -d rmdb -U redmine -W
Password for user redmine:
psql (10.5)
Type "help" for help.
rmdb=>
- Aquí es donde termina la parte fácil. Ahora instalaremos varios paquetes de Ruby de los que depende Redmine. Algunos de ellos necesitan
root
acceso, algunos se instalarán en el nombre de redmine
usuario, y más tarde algunos probablemente necesitarán una reparación. En serio. En primer lugar, necesitaremos bundler
:# gem install bundler
Fetching: bundler-2.0.1.gem (100%)
Successfully installed bundler-2.0.1
1 gem installed
Usaremos bundler
con el redmine
usuario, pero también necesitaremos root
para instalar o reparar Ruby gems
, por lo que sugiero abrir otra terminal, cambiar a redmine
usuario y vaya a /opt/redmine
directorio, al tiempo que mantiene abierta la consola raíz.
- Como
redmine
usuario, iniciamos la instalación en el /opt/redmine
directorio:$ bundle install --without development test rmagick
Se instalarán muchas dependencias y, para algunas, el instalador solicita el sudo
contraseña – que es la contraseña de redmine
usuario. Parece que esta funcionalidad de sudo de alguna manera está un poco rota y puede manejar algunas de las instalaciones de paquetes con privilegios de root, y no puede llevarse bien con otros. Los que fallan se pueden instalar en la consola raíz y el bundle
anterior el comando se puede ejecutar en la consola del usuario de redmine nuevamente. Lo que se necesitaba para instalar en mi caso con root
son los siguientes:
# gem install nokogiri -v '1.10.2' --source 'https://rubygems.org/'
# gem install pg -v '1.1.4' --source 'https://rubygems.org/'
También hay algunos paquetes que pueden romperse durante la instalación. Estos también se pueden reparar en la consola raíz. Al igual que con los pasos de instalación del paquete fallidos anteriores, la salida del bundler
El comando le dirá qué paquete tiene problemas y cómo resolverlo. En mi caso, los siguientes paquetes necesitaban reparación:
# gem pristine nio4r --version 2.3.1
# gem pristine redcarpet --version 3.4.0
# gem pristine websocket-driver --version 0.7.0
Tenga en cuenta que si está instalando otra versión de Redmine, es probable que los números de versión de los paquetes difieran. Después de reparar todos los paquetes rotos y faltantes, el bundle
el comando debe completarse sin errores, con el siguiente final de la salida:
[...]
Installing roadie-rails 1.3.0
Fetching rouge 3.3.0
Installing rouge 3.3.0
Bundle complete! 26 Gemfile dependencies, 57 gems now installed.
Gems in the groups development, test and rmagick were not installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
- Con la parte difícil terminada, necesitamos generar un token que se usará para codificar las cookies de sesión:
$ bundle exec rake generate_secret_token
- A continuación, generamos los objetos de la base de datos que necesita la aplicación:
$ RAILS_ENV=production bundle exec rake db:migrate
Además de crear los objetos de base de datos necesarios, este paso generará una gran cantidad de resultados al registrar todos los pasos en la consola. Veremos que aparecen muchas entradas similares a las siguientes:
[...]
== 20180913072918 AddVerifyPeerToAuthSources: migrating =======================
-- change_table(:auth_sources)
-> 0.0082s
== 20180913072918 AddVerifyPeerToAuthSources: migrated (0.0083s) ==============
== 20180923082945 ChangeSqliteBooleansTo0And1: migrating ======================
== 20180923082945 ChangeSqliteBooleansTo0And1: migrated (0.0000s) =============
Este proceso debería completarse en unos segundos.
- Podemos verificar la base de datos poblada con
psql
:rmdb=> \dt
List of relations
Schema | Name | Type | Owner
--------+-------------------------------------+-------+---------
public | ar_internal_metadata | table | redmine
public | attachments | table | redmine
public | auth_sources | table | redmine
public | boards | table | redmine
public | changes | table | redmine
[...]
- El último paso de la instalación es cargar los datos predeterminados en la base de datos. Al proporcionar el
REDMINE_LANG
parámetro podemos salvarnos de cualquier pregunta durante la carga inicial.$ RAILS_ENV=production REDMINE_LANG=en bundle exec rake redmine:load_default_data
Default configuration data loaded.
- La instalación está completa. Podemos iniciar la aplicación:
$ bundle exec rails server webrick -e production
=> Booting WEBrick
=> Rails 5.2.2.1 application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
[2019-04-14 18:39:12] INFO WEBrick 1.4.2
[2019-04-14 18:39:12] INFO ruby 2.5.1 (2018-03-29) [x86_64-linux]
[2019-04-14 18:39:12] INFO WEBrick::HTTPServer#start: pid=30062 port=3000
- La aplicación ahora se está ejecutando y se puede acceder a ella con un navegador. De la salida anterior podemos adivinar que es accesible en el puerto
3000
, por lo que si tenemos un firewall ejecutándose en la máquina de destino, debemos abrir este puerto para acceder al servicio de forma remota:# firewall-cmd --zone=public --add-port=3000/tcp --permanent
# firewall-cmd --reload
- Al abrir un navegador y apuntarlo a la dirección de la máquina y al puerto 3000 (http://192.168.1.14:3000 en la siguiente captura de pantalla), podemos acceder a la interfaz basada en web de nuestra nueva instalación de Redmine. Página de inicio de sesión de Redmine.
Las credenciales predeterminadas son admin
para el nombre de usuario, y también para la contraseña. Al iniciar sesión por primera vez, la aplicación de buen comportamiento solicitará un cambio de contraseña para esta cuenta privilegiada. A partir de ahí, el servicio es nuestro para completar, configurar y disfrutar.
- Con la instalación completa, podemos eliminar el
redmine
usuario de la wheel
grupo, eliminando el agujero de seguridad necesario durante el proceso:# gpasswd -d redmine wheel
Removing user redmine from group wheel
# id redmine
uid=1008(redmine) gid=1008(redmine) groups=1008(redmine)