Arquitectura de Solución |
En está guía, solo detallaré el aprovisionamiento de la Suit de Atlassian en Ubuntu Server 18.04. Los pasos para levantar una infraestructura en AWS serán detallados en otra publicación.
Las configuraciones WAF y DNS también se expondrán en esta publicación.
Requerimientos
- Debido a que instalaremos 4 aplicaciones como Jira, Jira ServiceDesk, Bitbucket y Confluence, necesitaremos por cada una cerca de 2GB de memoria RAM, es por ello que usaremos una instancia de AWS EC2 de 16 GB RAM y 4 vCPUs (t2.xlarge) o una instancia AWS Lightsail con las mismas características.
- Usaremos la distribución de Ubuntu Server 18.04 limpio, sin ninguna instalación debido a que existe más documentación al respecto, pero se podría usar un AMI Linux de AWS también.
- Necesitaremos una IP elástica (IP fija pública).
- Necesitaremos poder acceder a nuestro gestor de dominios para configurar los siguientes subdominios:
- jira.midominio.com
- bitbucket.midominio.com
- confluence.midominio.com
- En la instalación estamos considerando el uso de certificados SSL para poder navegar por HTTPS, esto es opcional y se puede omitir el uso de certificados gratuitos letsencrypt.
- Jira y Jira ServiceDesk trabajan con el dominio jira.midominio.com.
Instancia t2.xlarge |
Guía Detallada
1. Update y upgrade del sistema operativo
sudo apt update && \
sudo apt upgrade -y && \
sudo reboot
2. Instalamos nginx y configuramos los subdominios con virtual host2.1. Instalación de nginx
sudo apt-get install -y nginx > /dev/null
2.2. Instalamos cerbot para gestionar el certificado SSLsudo apt-get install software-properties-common && \
sudo add-apt-repository universe && \
sudo add-apt-repository ppa:certbot/certbot && \
sudo apt-get update && \
sudo apt-get install certbot python-certbot-nginx
2.3. creamos directorios de prueba para la configuración de los virtual host pero solo para el puerto 80mkdir /var/www/jira.midominio.com && \
mkdir /var/www/bitbucket.midominio.com && \
mkdir /var/www/confluence.midominio.com && \
touch /var/www/jira.midominio.com/index.html && \
touch /var/www/bibucket.midominio.com/index.html && \
touch /var/www/confluence.midominio.com/index.html
2.4. creamos los archivos de configuración para los virtual hostsudo touch /etc/nginx/sites-available/jira.midominio.com.conf && \
sudo touch /etc/nginx/sites-available/bitbucket.midominio.com.conf && \
sudo touch /etc/nginx/sites-available/confluence.midominio.com.conf
2.5. Agregamos la siguiente configuración a cada archivo:sudo vim /etc/nginx/sites-available/jira.midominio.com.conf
2.5.1. Contenido para virtual host de jira.midominio.com
server {
root /var/www/jira.midominio.com/;
index index.html;
server_name jira.midominio.com;
}
sudo vim /etc/nginx/sites-available/bitbucket.midominio.com.conf
2.5.2. Contenido para virtual host de bitbucket.midominio.com
server {
root /var/www/bitbucket.midominio.com/;
index index.html;
server_name bitbucket.midominio.com;
}
sudo vim /etc/nginx/sites-available/confluence.midominio.com.conf
2.5.3. Contenido para virtual host de confluence.midominio.com
server {
root /var/www/confluence.midominio.com/;
index index.html;
server_name confluence.midominio.com;
}
2.6 Creamos enlaces simbólicossudo ln -s /etc/nginx/sites-available/jira.midominio.com.conf /etc/nginx/sites-enabled/jira.midominio.com && \
sudo ln -s /etc/nginx/sites-available/bitbucket.midominio.com.conf /etc/nginx/sites-enabled/bitbucket.midominio.com && \
sudo ln -s /etc/nginx/sites-available/confluence.midominio.com.conf /etc/nginx/sites-enabled/confluence.midominio.com
2.7 Reiniciamos nginxsudo service nginx restart
2.8 Configuramos DNS en nuestro gestor de dominios
DOMAIN/IP DOMAIN DNS TYPE
xxx.xxx.xxx.xxx jira.midominio.com A
jira.midominio.com bitbucket.midominio.com CNAME
jira.midominio.com confluence.midominio.com CNAME
2.9 Creamos el certificado SSL con una redirección del puerto 80 al puerto 443, para este paso debemos de tener en cuenta que debemos de tener habilitado el puerto 443 a nivel de firewall en nuestro VPS y al momento de crear el certificado, en la opción de cerbot elegimos la creación de la redirección de http a httpssudo certbot --nginx
2.10 Creamos una tarea programada de renovación de certificado SSLsudo crontab -e
Agregamos el siguiente contenido
# m h dom mon dow command
0 2 * * * certbot renew --dry-run
3. Instalación y configuración de PostgreSQL (Se debe de validar primero que la versión sea compatible con las versiones de cada software). Usaremos PostgreSQL 9.6 el cual es compatible con las versiones de Jira Software 8.8, Bitbucket Server 7.1.x y Confluence 7.3.3.1. Instalación
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list' && \
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add - && \
sudo apt-get update && \
sudo apt-get upgrade && \
sudo dpkg --get-selections | grep postgres && \
sudo apt-get install postgresql postgresql-contrib libpq-dev && \
sudo apt-get install postgresql-9.6
3.2. Cambiamos de usuario e ingresamos a PSQL
sudo -i -u postgres && \
psql
3.3. Creamos roles, bases de datos y asignamos privilegiosCREATE ROLE jirarole WITH LOGIN ENCRYPTED PASSWORD 'password';
CREATE DATABASE jira WITH ENCODING 'UNICODE' LC_COLLATE 'C' LC_CTYPE 'C' TEMPLATE template0;
GRANT ALL PRIVILEGES ON DATABASE jira TO jirarole;
CREATE ROLE bitbucketrole WITH LOGIN ENCRYPTED PASSWORD 'password';
CREATE DATABASE bitbucket WITH ENCODING='UTF8' OWNER=bitbucketrole CONNECTION LIMIT=-1;
GRANT ALL PRIVILEGES ON DATABASE bitbucket TO bitbucketrole;
CREATE ROLE confluencerole WITH LOGIN ENCRYPTED PASSWORD 'password';
CREATE DATABASE confluence WITH ENCODING='UTF8' OWNER=confluencerole CONNECTION LIMIT=-1;
GRANT ALL PRIVILEGES ON DATABASE confluence TO confluencerole;
3.3. Verificamos y salimos de psql\l
\du
\q
exit
4. Preparación de la instalación de Jira Software, Bitbucket Server y Confluence.4.1. Subir archivos .bin al servidor mediante SCP
scp -i /path_to_pem/credential.pem /path_to_bin/atlassian-bitbucket-version-x64.bin ubuntu@xxx.xxx.xxx.xxx:~/.
scp -i /path_to_pem/credential.pem /path_to_bin/atlassian-jira-software-version-x64.bin ubuntu@xxx.xxx.xxx.xxx:~/.
scp -i /path_to_pem/credential.pem /path_to_bin/atlassian-confluence-version-x64.bin ubuntu@xxx.xxx.xxx.xxx:~/.
4.2 Creamos un folder de instalación, movemos los archivos y damos permisos de ejecucióncd / && \
sudo mkdir software && \
sudo mv /home/ubuntu/atlassian-* /software && \
sudo chown -R root:root /software && \
sudo chmod -R a+x /software && \
cd /software
5. Instalación de Jira Software, Bitbucket Server y Confluence.5.1. Instalación de Jira Software
5.1.1. Al momento de ejecutar, elegimos la instalación estándar y al finalizar negamos la ejecución del programa
sudo ./atlassian-jira-software-version-x64.bin
5.1.2. Después de instalar tenemos que modificar el archivo de configuración server.xml, en cual agregaremos una configuración especial para proxy reverse con httpssudo vim /opt/atlassian/jira/conf/server.xml
Modificamos el tag connector
<connector acceptcount="10" connectiontimeout="20000" enablelookups="false"
maxthreads="200" minsparethreads="10" port="8080" proxyname="jira.midominio.com"
proxyport="443" scheme="https" secure="true" uriencoding="UTF-8"></connector>
5.1.3. Configuramos el proxy inverso en nginx para jira.midominio.com y reiniciamos nginxsudo vim /etc/nginx/sites-available/jira.midominio.com.conf
Agregamos el siguiente contenido
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
client_max_body_size 100M;
}
5.1.4. Reiniciamos nginx
sudo service nginx restart
5.1.5. Iniciamos el programa y visitamos https://jira.midominio.com, posteriormente hacemos una instalación en modo producción, conectamos nuestra base de datos PostgreSQL jira, si tenemos unas credenciales SMTP lo ingresamos, si no, lo dejamos como está.cd /opt/atlassian/jira/bin && \
sudo ./startup.sh
5.2. Instalación de Confluence5.2.1. Al momento de ejecutar, elegimos la instalación estándar y al finalizar negamos la ejecución del programa
sudo ./atlassian-confluence-version-x64.bin
5.2.2. Después de instalar tenemos que modificar el archivo de configuración server.xml, en cual agregaremos una configuración especial para proxy reverse con httpssudo vim /opt/atlassian/confluence/conf/server.xml
Modificamos el tag connector
<connector acceptcount="10" connectiontimeout="20000" enablelookups="false"
maxthreads="200" minsparethreads="10" port="8080" proxyname="confluence.midominio.com"
proxyport="443" scheme="https" secure="true" uriencoding="UTF-8"></connector>
5.2.3. Configuramos el proxy inverso en nginx para confluence.midominio.com y reiniciamos nginxsudo vim /etc/nginx/sites-available/confluence.midominio.com.conf
Agregamos el siguiente contenido
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8090;
client_max_body_size 100M;
}
5.2.4. Reiniciamos nginxsudo service nginx restart
5.2.5. Iniciamos el programa y visitamos https://confluence.midominio.com, posteriormente hacemos una instalación en modo producción, conectamos nuestra base de datos PostgreSQL jira, si tenemos unas credenciales SMTP lo ingresamos, si no, lo dejamos como está.cd /opt/atlassian/confluence/bin && \
sudo ./startup.sh
5.3. Instalación de Bitbucket Server5.3.1. Al momento de ejecutar, elegimos la instalación estándar y al finalizar si aceptamos la ejecución del programa
sudo ./atlassian-bitbucket-version-x64.bin
5.3.2. Es importante configurar el grupo de seguridad de la instancia, especialmente en las reglas de entrada tal y como se muestra en la siguiente imagen:Segurity Group - Inbound Rules |
cd /opt/atlassian/bitbucket/6.4.1/bin && \
sudo ./stop-bitbucket.sh
5.3.4. Configuramos el archivo properties en cual agregaremos una configuración especial para proxy reverse con httpssudo vim /var/atlassian/application-data/bitbucket/shared/bitbucket.properties
Agregamos el siguiente contenido
server.secure=true
server.scheme=https
server.proxy-port=443
server.proxy-name=bitbucket.midominio.com
5.3.5. Configuramos el proxy inverso en nginx para el subdominio bitbucket.midominio.com y reiniciamos nginxsudo vim /etc/nginx/sites-available/bitbucket.midominio.com.conf
Agregamos el siguiente contenido
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:7990;
client_max_body_size 100M;
}
5.3.7. Reiniciamos nginxsudo service nginx restart
5.3.8. Iniciamos el programa y visitamos https://bitbucket.midominio.comcd /opt/atlassian/bitbucket/6.4.1/bin && \
sudo ./start-bitbucket.sh
Bien, espero que puedan ponerlo en práctica...
Social Plugin