Cómo instalar Zulip Chat Server en Debian 11
Zulip es un servidor de chat de código abierto, similar a Microsoft Teams, Rocket Chat o Slack. Está escrito en Python y utiliza Django, PostgreSQL y JavaScript. Se integra con más de 90 plugins de terceros, como Github, Jira, Stripe, Zendesk, Sentry, etc. Puedes ampliar las integraciones conectándolas con Zapier e IFTTT. Viene con funciones como la mensajería privada, los chats de grupo, las conversaciones con hilos, los canales personalizados, las videollamadas, la subida de archivos con arrastrar y soltar, los emojis personalizados, la integración con Giphy, la vista previa de imágenes y tuits y muchas más. Zulip viene con aplicaciones de escritorio y móviles para cada plataforma, lo que lo hace agnóstico.
En este tutorial, aprenderás a instalar y configurar Zulip Chat en un servidor basado en Debian 11.
Requisitos previos
-
Un servidor con Debian 11.
-
Al menos 2GB de RAM si esperas menos de 100 usuarios. Para más de 100 usuarios, consigue un servidor de 4GB de RAM y 2 CPU.
-
Un usuario no root con privilegios sudo.
-
Un nombre de dominio configurado para que apunte al servidor,
zulip.example.com. -
Todo actualizado.
$ sudo apt update && sudo apt upgrade
-
Pocos paquetes que necesite tu sistema.
$ sudo apt install wget curl nano ufw software-properties-common apt-transport-https gnupg2 ca-certificates debian-archive-keyring -y
Algunos de estos paquetes pueden estar ya instalados en tu sistema.
Paso 1 – Configurar el cortafuegos
El primer paso es configurar el cortafuegos. Debian viene con ufw (Uncomplicated Firewall).
Comprueba si el cortafuegos se está ejecutando.
$ sudo ufw status
Deberías obtener el siguiente resultado.
Status: inactive
Permite el puerto SSH para que el cortafuegos no rompa la conexión actual al activarlo.
$ sudo ufw allow OpenSSH
Permite también los puertos HTTP y HTTPS.
$ sudo ufw allow 80/tcp $ sudo ufw allow 443/tcp
Habilita el cortafuegos
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Comprueba de nuevo el estado del cortafuegos.
$ sudo ufw status
Deberías ver una salida similar.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443/tcp ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443/tcp (v6) ALLOW Anywhere (v6)
Paso 2 – Instalar Zulip
Zulip viene con un script de instalación que hace lo siguiente
- Crea un usuario
zulippara ejecutar el servidor de Zulip. - Crea un directorio principal con el usuario
zulipque alberga todo el código público bajo el directorio/home/zulip/deployments. - Instala todas las dependencias que necesita Zulip.
- Instala la base de datos PostgreSQL, el servidor web Nginx, RabbitMQ, Redis Cache y Memcached.
- Inicializa la base de datos de Zulip.
Crea un directorio temporal utilizando el comando mktemp para descargar el instalador de Zulip y pasar a él.
$ cd $(mktemp -d)
Descarga la última versión de Zulip.
$ wget https://download.zulip.com/server/zulip-server-latest.tar.gz
Extrae todos los archivos.
$ tar -xf zulip-server-latest.tar.gz
Ejecuta el script de instalación.
$ sudo ./zulip-server-*/scripts/setup/install --certbot \
--email=YOUR_EMAIL --hostname=YOUR_HOSTNAME
La bandera --certbot hace que el instalador descargue Certbot e instale los certificados SSL automáticamente. Sustituye YOUR_EMAIL por tu ID de correo electrónico y YOUR_HOSTNAME por el nombre de dominio de Zulip (zulip.example.com).
Paso 3 – Acceso a la interfaz de Zulip
Una vez que el script instalador haya terminado, se te dará una URL única. Copia esta URL.
.......
zulip-workers:zulip_deliver_scheduled_messages: started
+ set +x
+ su zulip -c '/home/zulip/deployments/current/manage.py generate_realm_creation_link'
Please visit the following secure single-use link to register your
new Zulip organization:
https://zulip.example.com/new/il5dsewnhugjarbnlxf5nc46
Visita https://zulip.example.com/new/il5dsewnhugjarbnlxf5nc46 en tu navegador, y aparecerá la siguiente pantalla.

Introduce tu correo electrónico para empezar a crear tu organización. En la siguiente pantalla se te pedirá que configures una cuenta.

Introduce el nombre de tu organización y tu nombre y elige una contraseña para iniciar la sesión y haz clic en el botón Registrarse para continuar.
Una vez terminado, se abrirá el panel de control de Zulip y podrás empezar a utilizarlo.

Paso 4 – Configurar el correo electrónico saliente
El servidor de Zulip necesita enviar correos electrónicos de forma regular. Para ello, debes configurar el correo saliente para él. En nuestro ejemplo, utilizaremos el servicio SES de Amazon. Todos los correos se envían desde el ID de correo electrónico que utilizaste para crear la organización en el paso 3.
Zulip almacena todos sus ajustes en el archivo /etc/zulip/settings.py. Ábrelo para editarlo.
$ sudo nano /etc/zulip/settings.py
Descomenta las siguientes variables eliminando # delante de ellas e introduciendo los valores correspondientes.
## EMAIL_HOST and EMAIL_HOST_USER are generally required. EMAIL_HOST = 'email-smtp.us-west-2.amazonaws.com' EMAIL_HOST_USER = 'yoursmpt_username' ## Passwords and secrets are not stored in this file. The password ## for user EMAIL_HOST_USER goes in `/etc/zulip/zulip-secrets.conf`. ## In that file, set `email_password`. For example: # email_password = abcd1234 ## EMAIL_USE_TLS and EMAIL_PORT are required for most SMTP providers. EMAIL_USE_TLS = True EMAIL_PORT = 587
Rellena las siguientes variables adicionales. La primera elimina cualquier token aleatorio a la dirección de correo electrónico sin respuesta, y la segunda configura el remitente de correo sin respuesta para tus correos.
ADD_TOKENS_TO_NOREPLY_ADDRESS = False
# TOKENIZED_NOREPLY_EMAIL_ADDRESS = "noreply-{token}@example.com"
## NOREPLY_EMAIL_ADDRESS is the sender for noreply emails that don't
## contain confirmation links (where the security problem fixed by
## ADD_TOKENS_TO_NOREPLY_ADDRESS does not exist), as well as for
## confirmation emails when ADD_TOKENS_TO_NOREPLY_ADDRESS=False.
NOREPLY_EMAIL_ADDRESS = '[email protected]'
Una vez terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Zulip guarda la contraseña del correo electrónico en un archivo diferente. Abre el archivo /etc/zulip/zulip-secrets.conf para editarlo.
$ sudo nano /etc/zulip/zulip-secrets.conf
Pega la siguiente línea al final del archivo.
email_password = yoursmtp_password
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Para probar la configuración del correo electrónico saliente, puedes enviar un correo de prueba con el siguiente comando.
$ sudo -u zulip /home/zulip/deployments/current/manage.py send_test_email [email protected] If you run into any trouble, read: https://zulip.readthedocs.io/en/latest/production/email.html#troubleshooting The most common error is not setting `ADD_TOKENS_TO_NOREPLY_ADDRESS=False` when using an email provider that doesn't support that feature. Sending 2 test emails from: * [email protected] * [email protected] Successfully sent 2 emails to [email protected]
Reinicia el servidor.
$ sudo -u zulip /home/zulip/deployments/current/scripts/restart-server
Ten en cuenta que sólo puedes iniciar o detener el servidor Zulip como usuario zulip.
Paso 5 – Comandos del servidor Zulip
Para detener el servidor Zulip, utiliza el siguiente comando.
$ sudo -u zulip /home/zulip/deployments/current/scripts/stop-server
Para volver a iniciar el servidor, utiliza el siguiente comando.
$ sudo -u zulip /home/zulip/deployments/current/scripts/start-server
Reinicia el servidor de forma similar.
$ sudo -u zulip /home/zulip/deployments/current/scripts/restart-server
Hay muchas tareas de gestión que puedes realizar utilizando el script manage.py que se incluye con Zulip.
Puedes ejecutar el script utilizando el siguiente comando. Utilizaremos el subcomando help para enumerar todas las operaciones posibles que se pueden realizar.
$ sudo -u zulip /home/zulip/deployments/current/manage.py help
Type 'manage.py help <subcommand>' for help on a specific subcommand.
Available subcommands:
[analytics]
check_analytics_state
clear_analytics_tables
clear_single_stat
populate_analytics_db
stream_stats
update_analytics_counts
[auth]
changepassword
createsuperuser
[contenttypes]
remove_stale_contenttypes
[django]
check
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemigrations
migrate
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
sqlsequencereset
squashmigrations
startapp
startproject
test
testserver
[otp_static]
addstatictoken
[sessions]
clearsessions
[social_django]
clearsocial
[staticfiles]
collectstatic
findstatic
runserver
[two_factor]
two_factor_disable
two_factor_status
[zerver]
add_users_to_streams
archive_messages
audit_fts_indexes
backup
bulk_change_user_name
change_password
change_realm_subdomain
change_user_email
change_user_role
check_redis
checkconfig
compilemessages
convert_gitter_data
convert_mattermost_data
convert_slack_data
create_default_stream_groups
create_large_indexes
create_realm_internal_bots
create_stream
create_user
deactivate_realm
deactivate_user
delete_old_unclaimed_attachments
delete_realm
delete_user
deliver_scheduled_emails
deliver_scheduled_messages
dump_messages
edit_linkifiers
email_mirror
enqueue_digest_emails
enqueue_file
export
export_single_user
export_usermessage_batch
fill_memcached_caches
fix_unreads
generate_invite_links
generate_multiuse_invite_link
generate_realm_creation_link
get_migration_status
import
list_realms
logout_all_users
makemessages
merge_streams
print_email_delivery_backlog
process_queue
purge_queue
query_ldap
rate_limit
reactivate_realm
realm_domain
register_server
remove_users_from_stream
rename_stream
reset_authentication_attempt_count
restore_messages
runtornado
scrub_realm
send_custom_email
send_password_reset_email
send_realm_reactivation_email
send_stats
send_test_email
send_to_email_mirror
send_webhook_fixture_message
set_message_flags
show_admins
soft_deactivate_users
sync_ldap_user_data
transfer_uploads_to_s3
turn_off_digests
Paso 6 – Actualización de Zulip
Para actualizar Zulip, descarga la última versión del servidor.
$ curl -fLO https://download.zulip.com/server/zulip-server-latest.tar.gz
Ejecuta el siguiente comando para realizar la actualización.
$ sudo /home/zulip/deployments/current/scripts/upgrade-zulip ~/zulip-server-latest.tar.gz
El script realizará las siguientes funciones.
- Ejecuta
apt upgradepara actualizar el sistema. - Instala la nueva versión de las dependencias de Zulip.
- Apaga el servidor de Zulip.
- Ejecuta el comando
puppet apply. - Realiza las migraciones de la base de datos si es necesario.
- Reinicia el servidor de Zulip.
Paso 7 – Copia de seguridad y restauración de Zulip
Hacer una copia de seguridad y restaurar Zulip es fácil, gracias a los scripts incorporados que se encargan de todo.
Para hacer una copia de seguridad completa de Zulip, ejecuta el siguiente comando.
$ sudo -u zulip /home/zulip/deployments/current/manage.py backup --output=~/backups/zulip-backup.tar.gz
El comando anterior creará un archivo zulip-backup.tar.gz en el directorio ~/backups. Éste contiene todo lo que necesitarás para transferir o restaurar Zulip.
Para restaurar una copia de seguridad existente, instala Zulip siguiendo el paso 2.
Una vez que hayas terminado, ejecuta el siguiente comando para finalizar la restauración.
$ sudo -u zulip /home/zulip/deployments/current/scripts/setup/restore-backup ~/backups/zulip-backup.tar.gz
Si quieres cambiar el dominio, puedes cambiar la variable EXTERNAL_HOST en el archivo /etc/zulip/settings.py y luego reiniciar el servidor con el siguiente comando.
$ sudo -u zulip /home/zulip/deployments/current/scripts/restart-server
Conclusión
Con esto concluye nuestro tutorial sobre la instalación y configuración del servidor de Zulip Chat en un sistema basado en Debian 11. Puedes seguir la documentación oficial de Zulip para explorar en detalle. Si tienes alguna duda, publícala en los comentarios de abajo.