По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Jitsi Meet - это бесплатное программное обеспечение для видеоконференций с открытым исходным кодом на базе WebRTC, которое работает на Linux, macOS, Windows, iOS и Android. Если вы не доверяете Zoom, вы можете запустить собственную платформу для видеоконференций на собственном сервере. Преимущество Jitsi Meet заключается в том, что все ваши данные передаются только через ваш сервер, а шифрование TLS обеспечивает защиту от перехвата и прослушивания. Это руководство покажет вам, как установить Jitsi Meet на сервер Ubuntu 18.04 и 20.04, а также Debian 10. > Особенности Jitsi Meet Совершенно бесплатно Поделитесь экраном своего компьютера с другими (Screensharing) Режим докладчика, который позволяет одновременно использовать экран и камеру Вы можете поделиться системным звуком во время демонстрации экрана Вы можете назначить авторизованных пользователей модераторами. Модератор может отключить звук у каждого участника одним щелчком мыши Связь по сети зашифрована с использованием DTLS-SRTP Сквозное шифрование Вы можете установить пароль для своей конференции, чтобы предотвратить вход случайных незнакомцев Запишите конференцию и сохраните ее в Dropbox Транслируйте на YouTube Live и сохраняйте запись на YouTube Приложения для Android и iOS Текстовый чат Вы можете поделиться текстовым документом Телефонный доступ к конференции Исходящий вызов телефонному абоненту Вы можете встроить вызов Jits Meet на любую веб-страницу с помощью всего нескольких строк кода Системные требования Вам понадобится: Linux сервер и non-root user с привилегиями sudo Доменное имя, указывающее на ваш сервер Шаг 1. Установите Jitsi Meet из официального репозитория пакетов Jitsi Meet не включен в репозиторий Ubuntu по умолчанию. Мы можем установить его из официального репозитория пакетов Jitsi, который также содержит несколько других полезных программных пакетов. Войдите на свой сервер через SSH, затем выполните следующую команду, чтобы добавить официальный репозиторий Jitsi. echo 'deb https://download.jitsi.org stable/' | sudo tee /etc/apt/sources.list.d/jitsi-stable.list Импортируйте открытый ключ Jitsi, чтобы менеджер пакетов APT мог проверять целостность пакетов, загруженных из этого репозитория. wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add - Поскольку для репозитория Jitsi требуется HTTPS-соединение, нам нужно установить пакет apt-transport-https, чтобы APT установил HTTPS-соединение с репозиторием Jitsi. sudo apt install apt-transport-https Затем обновите локальный индекс пакета и установите Jitsi Meet в Ubuntu. sudo apt update sudo apt install jitsi-meet Во время установки вам необходимо ввести имя хоста для вашего экземпляра Jitsi. Это имя хоста, которое будет отображаться в адресной строке веб-браузера, когда посетители присоединятся к вашей видеоконференции. Вы можете использовать описательное имя хоста, например meet.example.com. На следующем экране вы можете выбрать создание нового самозаверяющего сертификата TLS (Generate a new self-signed certificate), чтобы позже вы могли получить и установить доверенный сертификат Let’s Encryption. В процессе установки будут настроены некоторые параметры ядра Linux, которые сохраняются в файле /etc/sysctl.d/20-jvb-udp-buffers.conf. После завершения установки Jitsi Meet автоматически запустится. Вы можете проверить его статус с помощью: systemctl status jitsi-videobridge2 Пример вывода: ? jitsi-videobridge2.service - Jitsi Videobridge Loaded: loaded (/lib/systemd/system/jitsi-videobridge2.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-04-24 12:11:13 UTC; 3min 27s ago Main PID: 3665 (java) Tasks: 37 (limit: 65000) CGroup: /system.slice/jitsi-videobridge2.service L-3665 java -Xmx3072m -XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/etc/jitsi -Dnet.java.sip.communicator.SC_HO Пакет jitsi-meet также извлекал другие пакеты в качестве зависимостей, например openjdk-8-jre-headless: среда выполнения Java. Это необходимо, потому что Jitsi Meet написан на языке Java. jicofo: Jitsi Conference Focus (systemctl status jicofo) prosody: Легкий сервер Jabber / XMPP (systemctl status prosody) coturn: сервер TURN и STUN для VoIP (systemctl status coturn) Шаг 2. Откройте порты в брандмауэре Jitsi Meet прослушивает несколько портов UDP, что можно увидеть с помощью следующей команды. (Если на вашем сервере Ubuntu нет команды netstat, вы можете запустить команду sudo apt install net-tools, чтобы установить ее.) sudo netstat -lnptu | grep java Чтобы участники могли присоединиться к видеоконференции из веб-браузера, вам необходимо открыть TCP-порт 80 и 443. А для передачи видео по сети откройте UDP-порт 10000 и 5000. Если вы используете брандмауэр UFW, запустите следующую команду, чтобы открыть эти порты. sudo ufw allow 80,443/tcp sudo ufw allow 10000,5000/udp Шаг 3. Получите доверенный сертификат Let's Encrypt TLS Перейдите в службу хостинга DNS (обычно это ваш регистратор домена), чтобы создать запись DNS A для вашего имени хоста Jitsi (meet.example.com). Затем запустите следующий скрипт, чтобы получить доверенный сертификат Let’s Encrypt TLS: sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh Введите свой адрес электронной почты, чтобы получать важные уведомления об учетной записи. Затем он загрузит certbot и получит сертификат TLS. This script will: - Need a working DNS record pointing to this machine(for domain jitsi.example.com) - Download certbot-auto from https://dl.eff.org to /usr/local/sbin - Install additional dependencies in order to request Let’s Encrypt certificate - If running with jetty serving web content, will stop Jitsi Videobridge - Configure and reload nginx or apache2, whichever is used - Configure the coturn server to use Let's Encrypt certificate and add required deploy hooks - Add command in weekly cron job to renew certificates regularly You need to agree to the ACME server's Subscriber Agreement (https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf) by providing an email address for important account notifications Enter your email and press [ENTER]: Если все в порядке, вы увидите следующее сообщение, указывающее, что сертификаты TLS были успешно получены и установлены. Обратите внимание, что этот сценарий использует запрос http-01, что означает, что ваш веб-сервер Apache или Nginx должен прослушивать порт 80 общедоступного IP-адреса. Если ваша серверная среда не поддерживает вызов http-01, вам не следует запускать приведенный выше сценарий. Вам нужно использовать другие типы задач. В этом случае используем вызов DNS. sudo certbot --agree-tos -a dns-cloudflare -i nginx --redirect --hsts --staple-ocsp --email me@example.com -d meet.example.com Где: --agree-tos: примите условия использования. -a dns-cloudflare: используем плагин DNS cloudflare для аутентификации, потому что используем службу Cloudflare DNS. -i nginx: использовать плагин nginx для установки сертификата TLS. Если вы используете Apache, вам необходимо заменить nginx на apache. --redirect: принудительно использовать HTTPS с помощью 301 редиректа. --hsts: добавлять заголовок Strict-Transport-Security к каждому ответу HTTP. Заставить браузер всегда использовать TLS для домена. Защищает от удаления SSL/TLS. --staple-ocsp: включает сшивание OCSP. Допустимый ответ OCSP прикреплен к сертификату, который сервер предлагает во время TLS. Шаг 4. Включите HTTP2 HTTP2 может улучшить скорость загрузки веб-страницы. Чтобы включить HTTP2 в Nginx, отредактируйте файл конфигурации виртуального хоста. sudo nano /etc/nginx/sites-enabled/meet.example.com.conf Найдите следующие две строки. listen 443 ssl; listen [::]:443 ssl; Добавьте http2 в конце каждой строки. listen 443 ssl http2; listen [::]:443 ssl http2; Сохраните и закройте файл. Затем перезагрузите Nginx, чтобы изменения вступили в силу. sudo systemctl reload nginx Шаг 5. Начните новую онлайн-встречу Теперь посетите https://meet.example.com, и вы сможете начать конференцию. Для передачи звука вам необходимо разрешить веб-браузеру использовать ваш микрофон. А для передачи видео вам необходимо разрешить веб-браузеру доступ к вашей камере. Дайте вашей встрече название и нажмите кнопку Go. После начала собрания вы можете при желании установить пароль для собрания. Шаг 6. Настройте аутентификацию пользователя По умолчанию любой может перейти к вашему серверу Jitsi Meet, создать комнату и начать собрание. Чтобы настроить аутентификацию пользователя, отредактируйте файл конфигурации Prosody. sudo nano /etc/prosody/conf.d/meet.example.com.cfg.lua Найдите следующую строку. authentication = "anonymous" Измените его на следующее, что потребует от пользователя ввода имени пользователя и пароля для начала конференции. authentication = "internal_plain" Однако мы не хотим, чтобы участники вводили имя пользователя и пароль при присоединении к конференции, поэтому нам нужно создать анонимный вход для гостей, добавив следующие строки в конец этого файла. Обратите внимание, что вам не нужно создавать запись A DNS для guest.meet.example.com. VirtualHost "guest.meet.example.com" authentication = "anonymous" c2s_require_encryption = false Сохраните и закройте файл. Затем отредактируйте файл конфигурации Jitsi Meet. sudo nano /etc/jitsi/meet/meet.example.com-config.js Найдите следующую строку: // anonymousdomain: 'guest.example.com', Удалите двойные косые черты и измените гостевой домен. Замените meet.example.com своим настоящим именем хоста Jitsi Meet. anonymousdomain: 'guest.meet.example.com', Сохраните и закройте файл. Затем отредактируйте файл конфигурации Jicofo. sudo nano /etc/jitsi/jicofo/sip-communicator.properties Добавьте следующую строку в конец этого файла. org.jitsi.jicofo.auth.URL=XMPP:meet.example.com Сохраните и закройте файл. Перезапустите службы systemd, чтобы изменения вступили в силу. sudo systemctl restart jitsi-videobridge2 prosody jicofo Чтобы создать учетные записи пользователей в Jisi Meet, выполните следующую команду. Вам будет предложено ввести пароль для нового пользователя. sudo prosodyctl register username meet.example.com Теперь, если вы создаете комнату в Jitsi Meet, вам нужно будет ввести имя пользователя и пароль. Советы по устранению неполадок Если вы столкнулись с ошибками, вы можете проверить журнал ошибок Nginx (/var/log/nginx/error.log), чтобы узнать, что не так. Также проверьте журналы служб systemd. sudo journalctl -eu jitsi-videobridge2 sudo journalctl -eu prosody sudo journalctl -eu jicofo Если вы видите ошибку You have been disconnected (Вы были отключены) при запуске собрания в Jitsi, возможно, вы забыли изменить meet.example.com на свое настоящее имя хоста Jitsi Meet в файлах конфигурации. Опционально: настроить Jigasi для телефонного набора или исходящего вызова Jitsi предлагает телефонный интерфейс, который позволяет пользователям подключаться к конференции или делать звонки с напоминанием. Установите пакет jigasi (шлюз Jitsi для SIP). sudo apt install jigasi Во время установки вам нужно будет ввести свое имя пользователя и пароль SIP. Если у вас его нет, вы можете создать бесплатную учетную запись SIP на сайте OnSIP.com. Если вы настроили аутентификацию пользователя на шаге 6, вам необходимо отредактировать файл конфигурации Jigasi. sudo nano /etc/jitsi/jigasi/sip-communicator.properties Найдите следующие строки. # org.jitsi.jigasi.xmpp.acc.USER_ID=SOME_USER@SOME_DOMAIN # org.jitsi.jigasi.xmpp.acc.PASS=SOME_PASS # org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=false Раскомментируйте их и введите учетную запись и пароль, которые вы создали на шаге 6. org.jitsi.jigasi.xmpp.acc.USER_ID=user1@meet.example.com org.jitsi.jigasi.xmpp.acc.PASS=user1_password org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=false Сохраните и закройте файл. Перезапустите службу jigasi systemd. sudo systemctl restart jigasi Опционально: настроить Coturn Если во время установки Jitsi Meet вы видите следующее сообщение, вам необходимо настроить Coturn, чтобы он работал правильно. Warning! Could not resolve your external ip address! Error:^ Your turn server will not work till you edit your /etc/turnserver.conf config file. You need to set your external ip address in external-ip and restart coturn service. Отредактируйте файл конфигурации Coturn. sudo nano /etc/turnserver.conf Найдите следующую строку. external-ip=127.0.0.1 Замените 127.0.0.1 общедоступным IP-адресом вашего сервера. Сохраните и закройте файл. Затем перезапустите Coturn. sudo systemctl restart coturn Итоги Готово! Мы успешно установили Jitsi Meet на наш Linux сервер.
img
Когда мы только начинаем изучать Python, мы закладываем некоторые вредные привычки при написании кода, о которых мы можем даже не подозревать. Вы можете написать код, который сработает сейчас, но может не сработать в будущем, или вы можете использовать какие-то хитрые ходы вместо встроенной функции, которая могла бы облегчить вашу жизнь. У большинства из нас сохранились не одна из тех вредных привычек при программировании на Python, что формируются в период первых месяцев обучения. Отличная новость в том, что вы можете с легкостью искоренить их, прочитав приведенный ниже текст. 1. Использование import * Каждый раз, когда нам становится лень, то возникает соблазн импортировать все необходимое из модуля с помощью from xyz import *. Это не самый лучший подход по многим причинам. Кот несколько из них: Это может оказаться неэффективно: если в модуле очень много объектов, то вам придется долго ждать, пока все импортируется. Это может вызвать конфликт имен переменных: когда вы используете *, то вы понятия не имеете, какие объекты вы импортируете и как они называются. Как же с этим бороться? Импортируйте либо какой-то конкретный объект, либо весь модуль целиком. # Using import * # Bad from math import * print(floor(2.4)) print(ceil(2.4)) print(pi) # Good import math from math import pi print(math.floor(2.4)) print(math.ceil(2.4)) print(pi) 2. Try/except: отсутствие указания исключения в блоке «except» Я очень долго пренебрегал этим. Сложно посчитать, сколько раз Pycharm давал мне понять (этими противными подчеркиваниями), что не нужно использовать «голое» исключение. Это идет в разрез с рекомендациями PEP8. # Try - except # Bad try: driver.find_element(...) except: print("Which exception?") # Good try: driver.find_element(...) except NoSuchElementException: print("It's giving NoSuchElementException") except ElementClickInterceptedException: print("It's giving ElementClickInterceptedException") Проблема «голых» исключений заключается в том, что оно будет перехватывать исключения SystemExit и KeyboardInterrupt, что затрудняет прерывание программы с помощью Control-C. В следующий раз, когда вы будете использовать try/except, укажите исключение в блоке except. 3. Не использовать Numpy для математических вычислений Очень часто мы забываем, что в Python есть множество пакетов, которые могут значительно облегчить нашу жизнь и сделать ее более продуктивной. Одним из таких пакетов является Numpy – пакет для математических вычислений. Numpy может помочь вам вычислять математические операции быстрее, чем циклы for. Допустим, что у нас есть массив random_scores, и мы хотим получить средний балл тех, кто не сдал экзамен (score>>dict_countries.keys() dict_keys(['USA', 'UK', 'Canada'])>>>dict_countries.values() dict_values([329.5, 67.2, 38]) Проблема тут заключается в том, что мы не всегда используем их должным образом. Например, мы хотим просмотреть словарь и получить ключи. Вы можете использовать метод .keys, но знаете ли вы, что ключи можно получить, просто перебирая словарь? В этом случае использование метода .keys будет излишним. # Not using .keys() properly # Bad for key in dict_countries.keys(): print(key) # Good for key in dict_countries: print(key) Кроме того, можно придумать некоторые хитрости для получения значений словаря, например, с помощью метода .items(). # Not using .items() # Bad for key in dict_countries: print(dict_countries[key]) # Good for key, value in dict_countries.items(): print(key) print(value) 7. Никогда не использовать генераторы (или использовать их всегда) Генератор предлагает более простой синтаксис при создании новой последовательности (списка, словаря и т.д.) на основе уже определенной последовательности. Допустим, мы хотим перевести все элементы в нашем списке countries в нижний регистр. И хотя вы могли бы это сделать просто с помощью цикла for, но также вы можете упростить работу при помощи генератора списка. # Bad countries = ['USA', 'UK', 'Canada'] lower_case = [] for country in countries: lower_case.append(country.lower()) # Good (but don't overuse it!) lower_case = [country.lower() for country in countries] Генераторы – это очень полезно, но не злоупотребляйте ими! Помните правило Дзен Python: «Простое лучше, чем сложное». 8. Использование range(len()) Одни из первых функций, которые мы изучили будучи новичками – это range и len, поэтому не удивительно, почему многие люди имеют дурную привычку писать range(len()) при переборе списков. Допустим у нас есть два списка: countries и populations. Если мы хотим пройтись по обоим спискам одновременно, то, вероятнее всего, вы воспользуетесь range(len()). # Using range(len()) countries = ['USA', 'UK', 'Canada'] populations = [329.5, 67.2, 38] # Bad for i in range(len(countries)): country = countries[i] population = populations[i] print(f'{country} has a population of {population} million people') И хотя это в принципе выполняет свою работу, вы все равно можете упростить задачу, воспользовавшись enumerate (или, что еще лучше, воспользовавшись функцией zip для сопряжения элементов из обоих списков). # OK for i, country in enumerate(countries): population = populations[i] print(f'{country} has a population of {population} million people') # Much Better for country, population in zip(countries, populations): print(f'{country} has a population of {population} million people') 9. Форматирование с помощью оператора + Вероятно, одна из первых вещей, которую мы изучаем в Python, - это то, как соединять строки с помощью оператора +. Это полезный, но не самый эффективный способ соединения строк в Python. Помимо этого, это не очень красиво – чем больше строк вам нужно соединить, тем больше операторов + вы будете использовать. Вместо этого вы можете воспользоваться f-строкой. # Formatting with + operator # Bad name = input("Introduce Name: ") print("Good Morning, " + name + "!") # Good name = input("Introduce Name: ") print(f'Good Morning, {name}') Преимуществом f-строк в том, что они полезны не только для конкатенации, но и для других целей. 10. Использование изменяемых значений в качестве значений по умолчанию Если вы включите изменяемое значение (например, список) в качестве параметра функции по умолчанию, то увидите нечто неожиданное. # Bad def my_function(i, my_list=[]): my_list.append(i) return my_list>>> my_function(1) [1] >>> my_function(2) [1, 2] >>> my_function(3) [1, 2, 3] В приведенном выше коде каждый раз, когда мы вызываем функцию my_function, список my_list сохраняет значения из предыдущих вызовов (а мы, скорее всего, хотим инициировать пустой список при каждом вызове функции). Чтобы избежать такой проблемы, мы должны установить этот параметр my_list равным None и добавить условие if как показано ниже. # Good def my_function(i, my_list=None): if my_list is None: my_list = [] my_list.append(i) return my_list>>> my_function(1) [1] >>> my_function(2) [2] >>> my_function(3) [3]
img
Будьте осторожны с тем, какие ссылки вы открываете и по каким сайтам переходите - это может быть мошенничество! Фишинг - это мошенническая деятельность, направленная на выманивание вашей личной информации, такой как номера кредитных карт, пароли и другие важные данные. Это также можно описать как кражу личных данных или как разновидность социальной инженерии. Мошеннические схемы часто опираются на строки в электронных письмах, веб-сайтах или в чате, которые, исходят от службы такой, как ваш банк, поставщик платежных карт или ваша социальная сеть. Цель социальной инженерии обычно состоит в том, чтобы незаметно установить шпионское ПО или обмануть вас, раскрыв ваши пароли или другую личную информацию. Никогда не отвечайте на запросы об обновлении информации вашей учетной записи, если вы сами их не запрашивали. Такие сообщения могут быть попытками мошенничества, направленного на кражу вашей личности. Большинство уважаемых компаний никогда не отправляют незапрашиваемые сообщения с запросом вашего пароля или другой личной информации. И помните, если что-то звучит слишком хорошо, чтобы быть правдой, это, вероятно, не так. Как вы можете защитить себя от мошеннической информации? Последующие советы могут помочь избежать мошенничества в интернете: Держите брандмауэр включенным. Всегда поддерживайте свое программное обеспечение и операционную систему в актуальном состоянии. Всегда держите свой антивирус в актуальном состоянии. Уделите достаточно внимания ссылкам на сайт! Поскольку многие мошенники в интернете полагаются на то, что пользователь нажимает на ссылку, это очень хороший способ защитить себя, просто обращая внимание на то, что вы нажимаете в электронной почте, в чате или на веб-сайтах. Если вы получили письмо, которое вы не ожидали, и оно содержит ссылку, и вы хотите ее открыть, напишите ссылку непосредственно в свой веб-браузер. Если веб-ссылка приходит с сайта, который вы часто посещаете, используйте свои интернет-закладки для доступа к сайту. Удалить спам! Не открывайте его и не отвечайте на него, даже если вы хотите, чтобы вас удалили из списка рассылки. Когда вы отвечаете, вы подтверждаете отправителю, что ваша учетная запись активна. Будьте осторожны при предоставлении ваших личных или финансовых данных в интернете. Не заполняйте формы в электронных письмах, которые запрашивают у вас личную или финансовую информацию. Используйте надежные пароли и избегайте использования одних и тех же паролей для разных интернет-банков и других важных учетных записей. Регулярно проверяйте свои банковские выписки и немедленно сообщайте о платежах, на которые вы не дали своего согласия. Ни при каких обстоятельствах не оплачивайте счета или не выполняйте другие финансовые операции на общедоступном компьютере, если вы находитесь в открытой общедоступной беспроводной сети. Если вам все-таки нужно войти на общедоступном компьютере, отдайте предпочтение тому, который требует пароля, это повышает безопасность.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59