Last active
January 29, 2026 05:47
-
-
Save aislam23/ee4797008cdbffa2c459f26345d64600 to your computer and use it in GitHub Desktop.
Jitsi Install
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| #=============================================================================== | |
| # | |
| # Jitsi Meet — Автоматическая установка | |
| # | |
| # Автор: Лысый из браузера | |
| # Telegram: https://t.me/+2qI3y89Hi2FiODN | |
| # | |
| # Этот скрипт автоматически установит Jitsi Meet на ваш сервер. | |
| # Просто следуйте инструкциям на экране. | |
| # | |
| #=============================================================================== | |
| # Цвета для красивого вывода | |
| RED='\033[0;31m' | |
| GREEN='\033[0;32m' | |
| YELLOW='\033[1;33m' | |
| BLUE='\033[0;34m' | |
| PURPLE='\033[0;35m' | |
| CYAN='\033[0;36m' | |
| WHITE='\033[1;37m' | |
| NC='\033[0m' # No Color | |
| # Функция для вывода заголовка | |
| print_header() { | |
| clear | |
| echo -e "${CYAN}" | |
| echo "╔═══════════════════════════════════════════════════════════════╗" | |
| echo "║ ║" | |
| echo "║ 🎥 JITSI MEET — УСТАНОВКА ЗА 5 МИНУТ 🎥 ║" | |
| echo "║ ║" | |
| echo "║ Свой Zoom, который никто не заблокирует ║" | |
| echo "║ ║" | |
| echo "╚═══════════════════════════════════════════════════════════════╝" | |
| echo -e "${NC}" | |
| echo "" | |
| } | |
| # Функция для вывода шага | |
| print_step() { | |
| echo "" | |
| echo -e "${PURPLE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" | |
| echo -e "${WHITE} $1${NC}" | |
| echo -e "${PURPLE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" | |
| echo "" | |
| } | |
| # Функция для вывода информации | |
| print_info() { | |
| echo -e "${BLUE}ℹ️ $1${NC}" | |
| } | |
| # Функция для вывода успеха | |
| print_success() { | |
| echo -e "${GREEN}✅ $1${NC}" | |
| } | |
| # Функция для вывода предупреждения | |
| print_warning() { | |
| echo -e "${YELLOW}⚠️ $1${NC}" | |
| } | |
| # Функция для вывода ошибки | |
| print_error() { | |
| echo -e "${RED}❌ $1${NC}" | |
| } | |
| # Функция для ожидания нажатия Enter | |
| wait_for_enter() { | |
| echo "" | |
| echo -e "${CYAN}Нажмите Enter, чтобы продолжить...${NC}" | |
| read | |
| } | |
| # Функция для проверки успешности команды | |
| check_success() { | |
| if [ $? -eq 0 ]; then | |
| print_success "$1" | |
| else | |
| print_error "$2" | |
| echo "" | |
| echo -e "${RED}Установка прервана. Проверьте ошибки выше.${NC}" | |
| exit 1 | |
| fi | |
| } | |
| #=============================================================================== | |
| # НАЧАЛО СКРИПТА | |
| #=============================================================================== | |
| print_header | |
| # Проверка root | |
| if [ "$EUID" -ne 0 ]; then | |
| print_error "Этот скрипт нужно запускать с правами root (sudo)" | |
| echo "" | |
| echo "Запустите так:" | |
| echo -e "${WHITE} sudo bash <(curl -sSL URL_СКРИПТА)${NC}" | |
| echo "" | |
| exit 1 | |
| fi | |
| # Проверка ОС | |
| if [ -f /etc/os-release ]; then | |
| . /etc/os-release | |
| OS=$ID | |
| VERSION=$VERSION_ID | |
| else | |
| print_error "Не удалось определить операционную систему" | |
| exit 1 | |
| fi | |
| if [[ "$OS" != "ubuntu" && "$OS" != "debian" ]]; then | |
| print_error "Этот скрипт работает только на Ubuntu или Debian" | |
| print_info "Ваша система: $OS $VERSION" | |
| exit 1 | |
| fi | |
| print_success "Система: $OS $VERSION — поддерживается!" | |
| echo "" | |
| # Устанавливаем необходимые утилиты для проверок | |
| apt update -qq > /dev/null 2>&1 | |
| apt install -y -qq dnsutils curl > /dev/null 2>&1 | |
| #=============================================================================== | |
| # ШАГ 1: Сбор информации | |
| #=============================================================================== | |
| print_step "ШАГ 1 из 5: Ваши данные" | |
| echo "Сейчас я задам несколько вопросов для настройки Jitsi." | |
| echo "" | |
| # Определяем IP сервера (IPv4 и IPv6) | |
| print_info "Определяем IP-адреса сервера..." | |
| SERVER_IP4=$(curl -s -4 --connect-timeout 5 ifconfig.me 2>/dev/null || curl -s -4 --connect-timeout 5 icanhazip.com 2>/dev/null) | |
| SERVER_IP6=$(curl -s -6 --connect-timeout 5 ifconfig.me 2>/dev/null || curl -s -6 --connect-timeout 5 icanhazip.com 2>/dev/null) | |
| if [ -n "$SERVER_IP4" ]; then | |
| print_success "IPv4: $SERVER_IP4" | |
| fi | |
| if [ -n "$SERVER_IP6" ]; then | |
| print_success "IPv6: $SERVER_IP6" | |
| fi | |
| if [ -z "$SERVER_IP4" ] && [ -z "$SERVER_IP6" ]; then | |
| print_error "Не удалось определить внешний IP" | |
| echo "" | |
| read -p " Введите IP сервера вручную: " MANUAL_IP | |
| if [[ "$MANUAL_IP" == *":"* ]]; then | |
| SERVER_IP6="$MANUAL_IP" | |
| else | |
| SERVER_IP4="$MANUAL_IP" | |
| fi | |
| fi | |
| # Предупреждение если только IPv6 | |
| if [ -z "$SERVER_IP4" ] && [ -n "$SERVER_IP6" ]; then | |
| echo "" | |
| print_warning "У сервера только IPv6-адрес!" | |
| echo "" | |
| echo -e "${YELLOW} Это может вызвать проблемы:${NC}" | |
| echo -e " • Пользователи без IPv6 не смогут зайти на сервер" | |
| echo -e " • Многие провайдеры в России ещё не поддерживают IPv6" | |
| echo "" | |
| echo -e "${BLUE} Рекомендация: докупите IPv4-адрес в панели хостинга${NC}" | |
| echo "" | |
| read -p " Продолжить только с IPv6? (y/n): " CONTINUE_IPV6 | |
| if [[ ! "$CONTINUE_IPV6" =~ ^[Yy]$ ]]; then | |
| print_info "Добавьте IPv4 и запустите скрипт снова." | |
| exit 0 | |
| fi | |
| fi | |
| echo "" | |
| # Домен | |
| while true; do | |
| echo -e "${WHITE}1. Введите ваш домен для Jitsi${NC}" | |
| echo -e "${BLUE} Например: meet.example.ru или calls.mysite.com${NC}" | |
| echo "" | |
| read -p " Домен: " JITSI_DOMAIN | |
| if [ -z "$JITSI_DOMAIN" ]; then | |
| print_error "Домен не может быть пустым" | |
| echo "" | |
| elif [[ ! "$JITSI_DOMAIN" =~ ^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*\.[a-zA-Z]{2,}$ ]]; then | |
| print_error "Некорректный формат домена" | |
| echo "" | |
| else | |
| # Проверяем DNS | |
| echo "" | |
| print_info "Проверяем DNS-записи для $JITSI_DOMAIN..." | |
| DOMAIN_IP4=$(dig +short "$JITSI_DOMAIN" A 2>/dev/null | head -1) | |
| DOMAIN_IP6=$(dig +short "$JITSI_DOMAIN" AAAA 2>/dev/null | head -1) | |
| DNS_OK=false | |
| DNS_ISSUES="" | |
| # Проверяем IPv4 (если есть на сервере) | |
| if [ -n "$SERVER_IP4" ]; then | |
| if [ -z "$DOMAIN_IP4" ]; then | |
| DNS_ISSUES="${DNS_ISSUES}\n • Нет A-записи (IPv4) — нужна для $SERVER_IP4" | |
| elif [ "$DOMAIN_IP4" != "$SERVER_IP4" ]; then | |
| DNS_ISSUES="${DNS_ISSUES}\n • A-запись указывает на $DOMAIN_IP4, а нужно $SERVER_IP4" | |
| else | |
| print_success "A-запись (IPv4): $JITSI_DOMAIN → $DOMAIN_IP4" | |
| DNS_OK=true | |
| fi | |
| fi | |
| # Проверяем IPv6 (если есть на сервере) | |
| if [ -n "$SERVER_IP6" ]; then | |
| if [ -z "$DOMAIN_IP6" ]; then | |
| # Если только IPv6 — это критично, если есть IPv4 — опционально | |
| if [ -z "$SERVER_IP4" ]; then | |
| DNS_ISSUES="${DNS_ISSUES}\n • Нет AAAA-записи (IPv6) — обязательна, т.к. нет IPv4!" | |
| fi | |
| elif [ "$DOMAIN_IP6" != "$SERVER_IP6" ]; then | |
| DNS_ISSUES="${DNS_ISSUES}\n • AAAA-запись указывает на $DOMAIN_IP6, а нужно $SERVER_IP6" | |
| else | |
| print_success "AAAA-запись (IPv6): $JITSI_DOMAIN → $DOMAIN_IP6" | |
| DNS_OK=true | |
| fi | |
| fi | |
| if [ "$DNS_OK" = false ]; then | |
| echo "" | |
| print_error "DNS не настроен или настроен неправильно!" | |
| echo -e "$DNS_ISSUES" | |
| echo "" | |
| echo -e "${YELLOW}┌─────────────────────────────────────────────────────────────┐${NC}" | |
| echo -e "${YELLOW}│ Как настроить DNS: │${NC}" | |
| echo -e "${YELLOW}├─────────────────────────────────────────────────────────────┤${NC}" | |
| echo -e "${YELLOW}│ Зайдите в панель управления доменом и создайте записи: │${NC}" | |
| echo -e "${YELLOW}│ │${NC}" | |
| if [ -n "$SERVER_IP4" ]; then | |
| echo -e "${YELLOW}│ ${WHITE}A-запись (IPv4):${YELLOW} │${NC}" | |
| echo -e "${YELLOW}│ Тип: ${WHITE}A${YELLOW} │${NC}" | |
| echo -e "${YELLOW}│ Имя: ${WHITE}@ или поддомен${YELLOW} │${NC}" | |
| echo -e "${YELLOW}│ Значение: ${WHITE}$SERVER_IP4${YELLOW}$(printf '%*s' $((27 - ${#SERVER_IP4})) '')│${NC}" | |
| echo -e "${YELLOW}│ │${NC}" | |
| fi | |
| if [ -n "$SERVER_IP6" ]; then | |
| echo -e "${YELLOW}│ ${WHITE}AAAA-запись (IPv6):${YELLOW} │${NC}" | |
| echo -e "${YELLOW}│ Тип: ${WHITE}AAAA${YELLOW} │${NC}" | |
| echo -e "${YELLOW}│ Имя: ${WHITE}@ или поддомен${YELLOW} │${NC}" | |
| echo -e "${YELLOW}│ Значение: ${WHITE}$SERVER_IP6${YELLOW}$(printf '%*s' $((27 - ${#SERVER_IP6})) '')│${NC}" | |
| echo -e "${YELLOW}│ │${NC}" | |
| fi | |
| echo -e "${YELLOW}│ Подождите 5-15 минут после настройки │${NC}" | |
| echo -e "${YELLOW}└─────────────────────────────────────────────────────────────┘${NC}" | |
| echo "" | |
| read -p " Попробовать другой домен? (y/n): " TRY_ANOTHER | |
| if [[ ! "$TRY_ANOTHER" =~ ^[Yy]$ ]]; then | |
| read -p " Продолжить без проверки DNS? (y/n): " SKIP_DNS | |
| if [[ "$SKIP_DNS" =~ ^[Yy]$ ]]; then | |
| print_warning "Продолжаем без проверки DNS" | |
| break | |
| else | |
| print_info "Настройте DNS и запустите скрипт снова." | |
| exit 0 | |
| fi | |
| fi | |
| echo "" | |
| else | |
| break | |
| fi | |
| fi | |
| done | |
| echo "" | |
| while true; do | |
| echo -e "${WHITE}2. Введите ваш email${NC}" | |
| echo -e "${BLUE} Нужен для получения SSL-сертификата (Let's Encrypt)${NC}" | |
| echo "" | |
| read -p " Email: " LETSENCRYPT_EMAIL | |
| if [ -z "$LETSENCRYPT_EMAIL" ]; then | |
| print_error "Email не может быть пустым" | |
| echo "" | |
| elif [[ ! "$LETSENCRYPT_EMAIL" =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ ]]; then | |
| print_error "Некорректный формат email" | |
| echo "" | |
| else | |
| break | |
| fi | |
| done | |
| echo "" | |
| # Настройка аутентификации | |
| echo -e "${WHITE}3. Хотите ограничить создание комнат?${NC}" | |
| echo -e "${BLUE} Если да — только вы сможете создавать комнаты.${NC}" | |
| echo -e "${BLUE} Гости будут заходить по ссылке без пароля.${NC}" | |
| echo "" | |
| read -p " Включить ограничение? (y/n, по умолчанию y): " ENABLE_AUTH | |
| ENABLE_AUTH=${ENABLE_AUTH:-y} | |
| if [[ "$ENABLE_AUTH" =~ ^[Yy]$ ]]; then | |
| SETUP_AUTH=true | |
| echo "" | |
| # Логин администратора | |
| while true; do | |
| echo -e "${WHITE}4. Придумайте логин администратора${NC}" | |
| echo -e "${BLUE} Латинские буквы и цифры, без пробелов${NC}" | |
| echo "" | |
| read -p " Логин: " ADMIN_USER | |
| if [ -z "$ADMIN_USER" ]; then | |
| print_error "Логин не может быть пустым" | |
| echo "" | |
| elif [[ ! "$ADMIN_USER" =~ ^[a-zA-Z0-9_]+$ ]]; then | |
| print_error "Логин может содержать только буквы, цифры и _" | |
| echo "" | |
| else | |
| break | |
| fi | |
| done | |
| echo "" | |
| # Пароль администратора | |
| while true; do | |
| echo -e "${WHITE}5. Придумайте пароль администратора${NC}" | |
| echo -e "${BLUE} Минимум 8 символов${NC}" | |
| echo "" | |
| read -s -p " Пароль: " ADMIN_PASS | |
| echo "" | |
| if [ ${#ADMIN_PASS} -lt 8 ]; then | |
| print_error "Пароль должен быть минимум 8 символов" | |
| echo "" | |
| else | |
| read -s -p " Повторите пароль: " ADMIN_PASS2 | |
| echo "" | |
| if [ "$ADMIN_PASS" != "$ADMIN_PASS2" ]; then | |
| print_error "Пароли не совпадают" | |
| echo "" | |
| else | |
| break | |
| fi | |
| fi | |
| done | |
| else | |
| SETUP_AUTH=false | |
| print_info "Аутентификация отключена — любой сможет создавать комнаты" | |
| fi | |
| echo "" | |
| #=============================================================================== | |
| # Подтверждение | |
| #=============================================================================== | |
| print_step "Проверьте данные" | |
| echo -e " Домен: ${WHITE}$JITSI_DOMAIN${NC}" | |
| echo -e " Email: ${WHITE}$LETSENCRYPT_EMAIL${NC}" | |
| if [ "$SETUP_AUTH" = true ]; then | |
| echo -e " Аутентификация: ${WHITE}Включена${NC}" | |
| echo -e " Логин админа: ${WHITE}$ADMIN_USER${NC}" | |
| echo -e " Пароль админа: ${WHITE}********${NC}" | |
| else | |
| echo -e " Аутентификация: ${WHITE}Отключена${NC}" | |
| fi | |
| echo "" | |
| echo -e "${YELLOW}Важно! Убедитесь, что:${NC}" | |
| if [ -n "$SERVER_IP4" ]; then | |
| echo -e " • A-запись для ${WHITE}$JITSI_DOMAIN${NC} указывает на ${WHITE}$SERVER_IP4${NC}" | |
| fi | |
| if [ -n "$SERVER_IP6" ]; then | |
| echo -e " • AAAA-запись для ${WHITE}$JITSI_DOMAIN${NC} указывает на ${WHITE}$SERVER_IP6${NC} (опционально)" | |
| fi | |
| echo -e " • Порты 80, 443 (TCP) и 10000 (UDP) открыты" | |
| echo "" | |
| read -p "Всё верно? Начинаем установку? (y/n): " CONFIRM | |
| if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then | |
| print_info "Установка отменена" | |
| exit 0 | |
| fi | |
| #=============================================================================== | |
| # ШАГ 2: Обновление системы | |
| #=============================================================================== | |
| print_step "ШАГ 2 из 5: Обновление системы" | |
| print_info "Обновляем список пакетов..." | |
| apt update -qq | |
| check_success "Список пакетов обновлён" "Не удалось обновить список пакетов" | |
| print_info "Устанавливаем обновления..." | |
| DEBIAN_FRONTEND=noninteractive apt upgrade -y -qq | |
| check_success "Система обновлена" "Не удалось обновить систему" | |
| #=============================================================================== | |
| # ШАГ 3: Установка зависимостей | |
| #=============================================================================== | |
| print_step "ШАГ 3 из 5: Установка веб-сервера" | |
| print_info "Устанавливаем nginx..." | |
| apt install -y -qq nginx | |
| check_success "Nginx установлен" "Не удалось установить nginx" | |
| systemctl enable nginx > /dev/null 2>&1 | |
| systemctl start nginx | |
| check_success "Nginx запущен" "Не удалось запустить nginx" | |
| # Устанавливаем дополнительные пакеты | |
| print_info "Устанавливаем необходимые пакеты..." | |
| apt install -y -qq gnupg2 apt-transport-https curl | |
| check_success "Пакеты установлены" "Не удалось установить пакеты" | |
| #=============================================================================== | |
| # ШАГ 4: Установка Jitsi Meet | |
| #=============================================================================== | |
| print_step "ШАГ 4 из 5: Установка Jitsi Meet" | |
| # Добавляем репозиторий Jitsi | |
| print_info "Добавляем репозиторий Jitsi..." | |
| curl -fsSL https://download.jitsi.org/jitsi-key.gpg.key | gpg --dearmor -o /usr/share/keyrings/jitsi-keyring.gpg | |
| check_success "Ключ добавлен" "Не удалось добавить ключ репозитория" | |
| echo "deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/" > /etc/apt/sources.list.d/jitsi-stable.list | |
| check_success "Репозиторий добавлен" "Не удалось добавить репозиторий" | |
| apt update -qq | |
| check_success "Список пакетов обновлён" "Не удалось обновить список пакетов" | |
| # Настраиваем ответы для автоматической установки | |
| print_info "Настраиваем параметры установки..." | |
| echo "jitsi-videobridge2 jitsi-videobridge/jvb-hostname string $JITSI_DOMAIN" | debconf-set-selections | |
| echo "jitsi-meet-web-config jitsi-meet/cert-choice select Generate a new self-signed certificate" | debconf-set-selections | |
| # Устанавливаем Jitsi Meet | |
| print_info "Устанавливаем Jitsi Meet (это может занять несколько минут)..." | |
| DEBIAN_FRONTEND=noninteractive apt install -y jitsi-meet | |
| check_success "Jitsi Meet установлен" "Не удалось установить Jitsi Meet" | |
| # Получаем SSL-сертификат | |
| print_info "Получаем SSL-сертификат от Let's Encrypt..." | |
| # Сначала проверяем, доступен ли порт 80 извне | |
| print_info "Проверяем доступность сервера извне..." | |
| sleep 2 | |
| # Пробуем стандартный скрипт Jitsi | |
| echo "$LETSENCRYPT_EMAIL" | /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh > /tmp/letsencrypt.log 2>&1 | |
| CERT_RESULT=$? | |
| if [ $CERT_RESULT -eq 0 ] && [ -f "/etc/letsencrypt/live/$JITSI_DOMAIN/fullchain.pem" ]; then | |
| print_success "SSL-сертификат получен" | |
| else | |
| print_warning "Стандартный способ не сработал, пробуем certbot..." | |
| # Устанавливаем certbot | |
| apt install -y -qq certbot python3-certbot-nginx > /dev/null 2>&1 | |
| # Пробуем certbot | |
| certbot --nginx -d "$JITSI_DOMAIN" --email "$LETSENCRYPT_EMAIL" --agree-tos --non-interactive > /tmp/certbot.log 2>&1 | |
| CERTBOT_RESULT=$? | |
| if [ $CERTBOT_RESULT -eq 0 ]; then | |
| print_success "SSL-сертификат получен через certbot" | |
| else | |
| echo "" | |
| print_error "Не удалось получить SSL-сертификат" | |
| echo "" | |
| echo -e "${YELLOW}┌─────────────────────────────────────────────────────────────┐${NC}" | |
| echo -e "${YELLOW}│ Возможные причины: │${NC}" | |
| echo -e "${YELLOW}├─────────────────────────────────────────────────────────────┤${NC}" | |
| echo -e "${YELLOW}│ • Порт 80 заблокирован хостингом │${NC}" | |
| echo -e "${YELLOW}│ • DNS ещё не обновился (подождите 15-30 минут) │${NC}" | |
| echo -e "${YELLOW}│ • Firewall хостинга блокирует входящие соединения │${NC}" | |
| echo -e "${YELLOW}├─────────────────────────────────────────────────────────────┤${NC}" | |
| echo -e "${YELLOW}│ Что сделать: │${NC}" | |
| echo -e "${YELLOW}│ 1. Проверьте настройки Firewall в панели хостинга │${NC}" | |
| echo -e "${YELLOW}│ 2. Откройте порты 80, 443, 10000 в панели хостинга │${NC}" | |
| echo -e "${YELLOW}│ 3. Запустите команду: │${NC}" | |
| echo -e "${YELLOW}│ ${WHITE}certbot --nginx -d $JITSI_DOMAIN${YELLOW} │${NC}" | |
| echo -e "${YELLOW}└─────────────────────────────────────────────────────────────┘${NC}" | |
| echo "" | |
| print_warning "Jitsi установлен, но работает без HTTPS" | |
| print_info "Получите сертификат позже командой выше" | |
| fi | |
| fi | |
| #=============================================================================== | |
| # ШАГ 5: Настройка аутентификации (если включена) | |
| #=============================================================================== | |
| if [ "$SETUP_AUTH" = true ]; then | |
| print_step "ШАГ 5 из 5: Настройка аутентификации" | |
| PROSODY_CONFIG="/etc/prosody/conf.avail/$JITSI_DOMAIN.cfg.lua" | |
| JITSI_CONFIG="/etc/jitsi/meet/$JITSI_DOMAIN-config.js" | |
| print_info "Настраиваем аутентификацию..." | |
| if [ -f "$PROSODY_CONFIG" ]; then | |
| # Меняем jitsi-anonymous на internal_hashed для основного домена | |
| # Это первое вхождение authentication в файле (основной VirtualHost) | |
| sed -i '0,/authentication = "jitsi-anonymous"/s//authentication = "internal_hashed"/' "$PROSODY_CONFIG" | |
| # Проверяем, что замена произошла | |
| if grep -q 'VirtualHost "'$JITSI_DOMAIN'"' "$PROSODY_CONFIG" && \ | |
| grep -A3 'VirtualHost "'$JITSI_DOMAIN'"' "$PROSODY_CONFIG" | grep -q 'authentication = "internal_hashed"'; then | |
| print_success "Аутентификация для основного домена настроена" | |
| else | |
| print_warning "Не удалось автоматически настроить аутентификацию" | |
| print_info "Возможно, конфигурация Jitsi изменилась. Проверьте вручную." | |
| fi | |
| # Проверяем, есть ли уже гостевой домен | |
| if grep -q "VirtualHost \"guest.$JITSI_DOMAIN\"" "$PROSODY_CONFIG"; then | |
| print_success "Гостевой домен уже настроен" | |
| else | |
| # Добавляем гостевой домен если его нет | |
| cat >> "$PROSODY_CONFIG" << EOF | |
| -- Гостевой домен для подключения без авторизации | |
| VirtualHost "guest.$JITSI_DOMAIN" | |
| authentication = "anonymous" | |
| c2s_require_encryption = false | |
| modules_enabled = { | |
| "bosh"; | |
| "ping"; | |
| "pubsub"; | |
| "speakerstats"; | |
| "conference_duration"; | |
| } | |
| EOF | |
| print_success "Гостевой домен добавлен" | |
| fi | |
| else | |
| print_error "Файл конфигурации Prosody не найден: $PROSODY_CONFIG" | |
| exit 1 | |
| fi | |
| # Настраиваем anonymousdomain в конфиге Jitsi Meet | |
| if [ -f "$JITSI_CONFIG" ]; then | |
| # Проверяем, есть ли уже anonymousdomain (закомментированный или нет) | |
| if grep -q "anonymousdomain:" "$JITSI_CONFIG"; then | |
| # Раскомментируем и обновляем если закомментирован | |
| sed -i "s|// *anonymousdomain:.*| anonymousdomain: 'guest.$JITSI_DOMAIN',|" "$JITSI_CONFIG" | |
| # Обновляем если уже раскомментирован | |
| sed -i "s|anonymousdomain: '.*'|anonymousdomain: 'guest.$JITSI_DOMAIN'|" "$JITSI_CONFIG" | |
| print_success "Конфигурация Jitsi Meet обновлена" | |
| else | |
| # Добавляем после строки с domain | |
| sed -i "/domain: '$JITSI_DOMAIN'/a\\ anonymousdomain: 'guest.$JITSI_DOMAIN'," "$JITSI_CONFIG" | |
| print_success "anonymousdomain добавлен в конфиг" | |
| fi | |
| else | |
| print_warning "Файл конфигурации Jitsi Meet не найден: $JITSI_CONFIG" | |
| fi | |
| # Создаём пользователя-администратора | |
| print_info "Создаём пользователя $ADMIN_USER..." | |
| prosodyctl register "$ADMIN_USER" "$JITSI_DOMAIN" "$ADMIN_PASS" 2>/dev/null | |
| if [ $? -eq 0 ]; then | |
| print_success "Пользователь $ADMIN_USER создан" | |
| else | |
| # Возможно пользователь уже существует, пробуем изменить пароль | |
| prosodyctl deluser "$ADMIN_USER@$JITSI_DOMAIN" 2>/dev/null | |
| prosodyctl register "$ADMIN_USER" "$JITSI_DOMAIN" "$ADMIN_PASS" 2>/dev/null | |
| if [ $? -eq 0 ]; then | |
| print_success "Пользователь $ADMIN_USER создан" | |
| else | |
| print_warning "Не удалось создать пользователя автоматически" | |
| print_info "Создайте вручную: prosodyctl register $ADMIN_USER $JITSI_DOMAIN ПАРОЛЬ" | |
| fi | |
| fi | |
| # Перезапускаем сервисы | |
| print_info "Перезапускаем сервисы..." | |
| systemctl restart prosody | |
| sleep 2 | |
| systemctl restart jicofo | |
| systemctl restart jitsi-videobridge2 | |
| # Проверяем, что сервисы запустились | |
| sleep 3 | |
| if systemctl is-active --quiet prosody && \ | |
| systemctl is-active --quiet jicofo && \ | |
| systemctl is-active --quiet jitsi-videobridge2; then | |
| print_success "Все сервисы запущены" | |
| else | |
| print_warning "Некоторые сервисы могли не запуститься" | |
| print_info "Проверьте: systemctl status prosody jicofo jitsi-videobridge2" | |
| fi | |
| else | |
| print_step "ШАГ 5 из 5: Финальная настройка" | |
| print_info "Аутентификация не настраивается по вашему выбору" | |
| fi | |
| #=============================================================================== | |
| # Настройка файрвола | |
| #=============================================================================== | |
| print_info "Настраиваем файрвол..." | |
| # Проверяем, установлен ли ufw | |
| if command -v ufw &> /dev/null; then | |
| ufw allow 80/tcp > /dev/null 2>&1 | |
| ufw allow 443/tcp > /dev/null 2>&1 | |
| ufw allow 10000/udp > /dev/null 2>&1 | |
| ufw --force enable > /dev/null 2>&1 | |
| print_success "Порты открыты (80, 443, 10000)" | |
| else | |
| print_warning "UFW не установлен — убедитесь, что порты 80, 443 (TCP) и 10000 (UDP) открыты" | |
| fi | |
| #=============================================================================== | |
| # ГОТОВО! | |
| #=============================================================================== | |
| echo "" | |
| echo "" | |
| echo -e "${GREEN}╔═══════════════════════════════════════════════════════════════╗${NC}" | |
| echo -e "${GREEN}║ ║${NC}" | |
| echo -e "${GREEN}║ 🎉 УСТАНОВКА ЗАВЕРШЕНА УСПЕШНО! 🎉 ║${NC}" | |
| echo -e "${GREEN}║ ║${NC}" | |
| echo -e "${GREEN}╚═══════════════════════════════════════════════════════════════╝${NC}" | |
| echo "" | |
| echo -e "${WHITE}Ваш Jitsi Meet доступен по адресу:${NC}" | |
| echo "" | |
| echo -e " ${CYAN}https://$JITSI_DOMAIN${NC}" | |
| echo "" | |
| if [ "$SETUP_AUTH" = true ]; then | |
| echo -e "${WHITE}Данные для входа:${NC}" | |
| echo -e " Логин: ${CYAN}$ADMIN_USER${NC}" | |
| echo -e " Пароль: ${CYAN}(тот, что вы указали)${NC}" | |
| echo "" | |
| echo -e "${BLUE}ℹ️ Для создания комнаты нужно ввести логин и пароль.${NC}" | |
| echo -e "${BLUE} Гости заходят по ссылке без авторизации.${NC}" | |
| fi | |
| echo "" | |
| echo -e "${YELLOW}Что делать дальше:${NC}" | |
| echo -e " 1. Откройте ${WHITE}https://$JITSI_DOMAIN${NC} в браузере" | |
| echo -e " 2. Создайте тестовую комнату" | |
| echo -e " 3. Проверьте камеру и микрофон" | |
| echo -e " 4. Отправьте ссылку другу для проверки" | |
| echo "" | |
| echo -e "${PURPLE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" | |
| echo -e " Видео-инструкция: ${WHITE}Лысый из браузера${NC} на YouTube" | |
| echo -e " Telegram: ${WHITE}https://t.me/+2qI3y89Hi2FiODN${NC}" | |
| echo -e "${PURPLE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" | |
| echo "" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment