Jitsi es un conjunto de proyectos de Codigo Abierto que te permite facilmente contruir e instalar soluciones de videoconferencia seguras.
Jitsi Meet es una solucion de video conferencia totalmente encriptada y 100% de codigo abierto que puedes usar todo el dia, todos los dias, gratis sin necesidad de una cuenta.
Este repositorio contiene los archivos necesarios para correr un stack de Jitsi Meet en Docker usando Docker Compose asi como tambien las instrucciones para correr el stack en Amazon Elastic Container Services
El siguiente diagrama de arquitectura de alto nivel muestra los servicios, contenedores y los puertos expuestos de Jitsi en ECS.
Debes instalar las siguientes herramientas:
Ya sea que uses una cuenta de servicio de IAM o un usuario de IAM, debes tener los siguientes permisos/roles:
- AmazonECS_FullAccess
- ElasticLoadBalancingFullAccess
Generar una llave de acceso en la consola de AWS y configurar ecs-cli para usarla.
Las siguientes variables de entorno seran configuradas en la shell:
Nombre | Descripcion | Ejemplo |
---|---|---|
PROFILE_NAME | Especifica el nombre del perfil a usar | aws |
AWS_ACCESS_KEY_ID | Especifica el clave de acceso de AWS a usar | AKIAXKO5CYVQ3XXXXXXX |
AWS_SECRET_ACCESS_KEY | Especifica la llave secreta de AWS a usar | KHvshFRp8SstYaou936ZtQD0IaaZXXXXXXXXXXXX |
ECS_CLUSTER | Especifica el nombre del cluster ECS a usar | jitsi-cluster |
AWS_REGION | Especifica la region de AWS a usar | eu-west-3 |
AWS_KEYPAIR | Especifica el nombre de un par de llaves existentes para habilitar acceso SSH a las instancias EC2 | jitsi-keypair |
AWS_INSTANCE_TYPE | Especifica el tipo de maquina EC2 para las instancias de contenedores | m5.xlarge |
ECS_CLUSTER_SIZE | Especifica el numero de instancias a crear y registrar en el cluster | 2 |
Configurar las credenciales en ECS
export PROFILE_NAME=<replace>
export AWS_ACCESS_KEY_ID=<replace>
export AWS_SECRET_ACCESS_KEY=<replace>
ecs-cli configure profile --profile-name $PROFILE_NAME --access-key $AWS_ACCESS_KEY_ID --secret-key $AWS_SECRET_ACCESS_KEY
Configurar el cluster ECS
export ECS_CLUSTER=jitsi-ecs
export AWS_REGION=eu-west-3
ecs-cli configure --cluster $ECS_CLUSTER --default-launch-type EC2 --region $AWS_REGION --config-name $ECS_CLUSTER
Crear el cluster ECS
export AWS_KEYPAIR=jitsi-ecs
export AWS_INSTANCE_TYPE=m5.xlarge
export ECS_CLUSTER_SIZE=1
ecs-cli up --keypair $AWS_KEYPAIR --capability-iam --size $ECS_CLUSTER_SIZE --instance-type $AWS_INSTANCE_TYPE --launch-type EC2
Despues de tener el cluster ECS arriba y corriendo, la definicion de tarea para jitsi meet debe ser creada usando el archivo docker-compose.yml localizado en el directorio jitsi-meet.
PRECAUCION: Si la definicion ya ha sido creada y/o modificada manualmente a traves de la consola de AWS, ejecutar el siguiente comando sobreescribira la defincion de tarea y se perderan las configuraciones previas.
cd jitsi-meet
cp env.example .env
./gen-passwords.sh
ecs-cli compose --file docker-compose.yml create
A traves de la consola de AWS, ir a Elastic Container Service, seleccionar la definicion de tarea jitsi-meet, seleccionar la ultima revision y crear una nueva. Editar la definicion de los contenedores de jicofo, jvb y web en la seccion Network Settings y colocar en el parametro links la siguiente configuracion:
prosody:xmpp.meet.jitsi
Click en Crear para guardar la nueva definicion de tarea.
Repetir el ultimo procedimiento, ahora para la definicion de container prosody pero ahora en el parametro Hostname la siguiente configuracion:
xmpp.meet.jitsi
Click en Crear para guardar la nueva definicion de tarea.
A traves de la consola de AWS, ir a Elastic Container Service, seleciona el cluster ECS, en la pestaña de Services, click en crear un nuevo servicio y configurarlo de la siguiente forma:
- En Lauch Type seleccionar EC2
- Llenar Service name con el contenido jitsi-meet
- Llenar Number of tasks con el contenido 2 (Deberia ser el mismo numero definido en ECS_CLUSTER_SIZE)
- En Task Placement seleccionar One Task per host
Click en Next Step tres veces y finalmente click en Create Service
Los siguientes puertos deben estar abiertos en el security group por defecto de ECS:
Type | Protocol | Port Range |
---|---|---|
HTTP | TCP | 80 |
Custom TCP | TCP | 8080 |
Custom TCP | TCP | 8000 |
Custom TCP | TCP | 8443 |
Custom UDP | UDP | 10000 |
Seleccion el ECS cluster, en la pestaña ECS Instance, click en cualquier instancia ECS, seleciona la instancia ECS nuevamente, en la pestaña de seguridad, click en Security Group para editar las reglas de ingreso.
- Listeners: Agregar HTTP (Secure HTTP) listener
- VPC: Seleccionar la VPC creada para el ECS Cluster y selecionar ambas Availability Zones
- Subir el certificado o selecionar desde ACM.
- Security group: agregar puerto 443 y 80
- Target:
- Protocolo: HTTPS
- Port: 8443
- Health check:
- Protocol: HTTPS
- Path: /
- Health check:
- Registrar Target: Seleccionar una instancia del ECS Cluster