One place for hosting & domains

      создание

      Создание самоподписанных сертификатов SSL для Apache в Ubuntu 18.04


      Предыдущая версия данного обучающего руководства была написана Джастином Эллингвудом

      Введение

      Веб-протокол TLS или протокол безопасности транспортного уровня, а также предшествовавший ему веб-протокол SSL или протокол уровня защищенных сокетов, используются для помещения обычного трафика в защищенную оболочку с шифрованием.

      С помощью этой технологии серверы могут обеспечивать безопасный обмен трафиком между серверами и клиентами без возможности перехвата сообщений третьими сторонами. Система сертификатов также помогает пользователям подтверждать подлинность сайтов, к которым они подключаются.

      В этом обучающем модуле мы покажем, как создать самоподписанный сертификат SSL для использования с веб-сервером Apache в Ubuntu 18.04.

      Примечание. Самоподписанный сертификат шифрует данные, которыми ваш сервер обменивается с любыми клиентами. Однако поскольку он не подписан доверенным центром сертификации из числа встроенных в браузеры, пользователи не могут использовать этот сертификат для автоматической проверки подлинности вашего сервера.

      Самоподписанный сертификат полезен в ситуациях, когда у вашего сервера нет доменного имени, а также в случаях, когда шифрованный веб-интерфейс не предназначен для взаимодействия с пользователями. Если у вас есть доменное имя, в большинстве случае будет полезнее использовать сертификат, подписанный центром сертификации. Вы можете узнать, как создать бесплатный доверенный сертификат с помощью проекта Let’s Encrypt, здесь.

      Предварительные требования

      Для начала у вас должен быть пользователь без прав root с привилегиями sudo. Чтобы создать такую учетную запись пользователя, следуйте указаниям руководства «Начальная настройка сервера с Ubuntu 18.04».

      Также вам потребуется установить веб-сервер Apache. Если вы хотите установить на сервере полный комплект LAMP (Linux, Apache, MySQL, PHP), следуйте указаниям обучающего модуля «Установка LAMP в Ubuntu 18.04». Если вы хотите просто установить веб-сервер Apache, пропустите шаги, относящиеся к установке PHP и MySQL.

      Когда предварительные требования будут выполнены, переходите к приведенным ниже шагам.

      Шаг 1 – Создание сертификата SSL

      Протоколы TLS и SSL используют сочетание открытого сертификата и закрытого ключа. Секретный ключ SSL хранится на сервере. Он используется для шифрования отправляемых на клиентские системы данных. Сертификат SSL находится в открытом доступе для всех, кто запрашивает этот контент. Его можно использовать для расшифровки контента, подписанного соответствующим ключом SSL.

      Мы можем создать самоподписанный ключ и пару сертификатов OpenSSL с помощью одной команды:

      • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

      Вам будет предложено ответить на ряд вопросов. Прежде чем перейти к этому шагу, посмотрим, что делает отправляемая нами команда:

      • openssl: это базовый инструмент командной строки для создания и управления сертификатами OpenSSL, ключами и другими файлами.
      • req: данная субкоманда указывает, что мы хотим использовать управление запросами подписи сертификатов X.509 (CSR). X.509 — это стандарт инфраструктуры открытых ключей, используемый SSL и TLS для управления ключами и сертификатами. Вы хотим создать новый сертификат X.509, и поэтому используем эту субкоманду.
      • -x509: это дополнительно изменяет предыдущую субкоманду, сообщая утилите, что мы хотим создать самоподписанный сертификат, а не сгенерировать запрос на подпись сертификата, как обычно происходит.
      • -nodes: этот параметр указывает OpenSSL пропустить опцию защиты сертификата с помощью пароля. Для чтения этого файла при запуске сервера без вмешательства пользователя нам потребуется Apache. Кодовая фраза может предотвратить это, поскольку нам придется вводить ее после каждого перезапуска.
      • -days 365: данный параметр устанавливает срок, в течение которого сертификат будет считаться действительным. Здесь мы устанавливаем срок действия в один год.
      • -newkey rsa:2048: указывает, что мы хотим генерировать новый сертификат и новый ключ одновременно. Мы не создали требуемый ключ для подписи сертификата на предыдущем шаге, и поэтому нам нужно создать его вместе с сертификатом. Часть rsa:2048 указывает, что мы создаем ключ RSA длиной 2048 бит.
      • -keyout: эта строка указывает OpenSSL, где мы разместим создаваемый закрытый ключ.
      • -out: данный параметр указывает OpenSSL, куда поместить создаваемый сертификат.

      Как мы указывали выше, эти опции создают и файл ключа, и сертификат. Нам будет задано несколько вопросов о нашем сервере, чтобы правильно вставить информацию в сертификат.

      Укажите подходящие ответы. Самая важная строка — это строка, где запрашивается обычное имя (т. е. FQDN сервера или ВАШЕ имя). Вам нужно ввести доменное имя, связанное с вашим сервером или, что более вероятно, публичный IP-адрес вашего сервера.

      В целом диалоги выглядят примерно так:

      Output

      Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:New York City Organization Name (eg, company) [Internet Widgits Pty Ltd]:Bouncy Castles, Inc. Organizational Unit Name (eg, section) []:Ministry of Water Slides Common Name (e.g. server FQDN or YOUR name) []:server_IP_address Email Address []:admin@your_domain.com

      Оба созданных вами файла будут помещены в соответствующие подкаталоги в каталоге /etc/ssl.

      Шаг 2 — Настройка Apache для использования SSL

      Мы создали файлы ключа и сертификата в каталоге /etc/ssl. Теперь нам просто нужно изменить конфигурацию Apache, чтобы воспользоваться их преимуществами.

      Внесем несколько небольших изменений в нашу конфигурацию:

      1. Создадим сниппет конфигурации, чтобы задать надежные параметры SSL по умолчанию.
      2. Мы изменим входящий в комплект файл виртуального хоста SSL Apache, чтобы он указывал на сгенерированные нами сертификаты SSL.
      3. (Рекомендуется) Мы изменим незашифрованный файл виртуального хоста, чтобы он автоматически перенаправлял запросы на шифрованный виртуальный хост.

      После завершения настройки мы получим защищенную конфигурацию SSL.

      Создание сниппета конфигурации Apache с надежными настройками шифрования

      Прежде всего, мы создадим сниппет конфигурации Apache для определения некоторых параметров SSL. При этом в Apache будет настроен надежный пакет шифров SSL и будут включены расширенные функции, которые обеспечат безопасность нашего сервера. Настраиваемые нами параметры смогут использовать любые виртуальные хосты с SSL.

      Создайте новый сниппет в каталоге /etc/apache2/conf-available. Мы назовем файл ssl-params.conf, чтобы сделать его назначение очевидным:

      • sudo nano /etc/apache2/conf-available/ssl-params.conf

      Для безопасной настройки Apache SSL мы используем рекомендации Реми ван Эльста на сайте Cipherli.st. Этот сайт создан для предоставления удобных настроек шифрования для популярного программного обеспечения.

      Рекомендованные настройки на вышеуказанном сайте обеспечивают высокий уровень безопасности. Иногда это достигается за счет совместимости клиентских систем. Если вам требуется поддержка старых версий клиентов, вы можете использовать альтернативный список, нажав на странице ссылку «Да, мне нужны настройки шифрования для устаревшего / старого программного обеспечения». Этот список можно заменить для копируемых ниже элементов.

      Выбор конфигурации в основном зависит от того, какие системы вам нужно поддерживать. Оба варианта обеспечивают высокий уровень безопасности.

      Для наших целей мы скопируем предоставленные настройки полностью. Мы внесем только одно небольшое изменение. Мы отключим заголовок Strict-Transport-Security (HSTS).

      Предварительная загрузка HSTS повышает безопасность, но может иметь далеко идущие последствия, если ее включить случайно или неправильно. В этом обучающем модуле мы не будем включать настройки, но вы можете изменить их, если понимаете возможные последствия.

      Прежде чем принимать решения, прочитайте о строгой безопасности транспорта HTTP или HSTS, в особенности о функции «предварительной загрузки»

      Вставьте конфигурацию в открытый нами файл ssl-params.conf:

      /etc/apache2/conf-available/ssl-params.conf

      SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
      SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
      SSLHonorCipherOrder On
      # Disable preloading HSTS for now.  You can use the commented out header line that includes
      # the "preload" directive if you understand the implications.
      # Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
      Header always set X-Frame-Options DENY
      Header always set X-Content-Type-Options nosniff
      # Requires Apache >= 2.4
      SSLCompression off
      SSLUseStapling on
      SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
      # Requires Apache >= 2.4.11
      SSLSessionTickets Off
      

      Сохраните файл и закройте его после завершения.

      Изменение файла виртуального хоста Apache SSL по умолчанию

      Теперь изменим /etc/apache2/sites-available/sl.conf, используемый по умолчанию файл виртуального хоста Apache SSL. Если вы используете другой файл серверных блоков, используйте имя этого файла в приведенных ниже командах.

      Прежде чем продолжить, создадим резервную копию первоначального файла виртуального хоста SSL:

      • sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak

      Теперь откройте файл виртуального хоста SSL для внесения изменений:

      • sudo nano /etc/apache2/sites-available/default-ssl.conf

      С удалением большинства комментариев содержание файла виртуального хоста по умолчанию должно выглядеть примерно так:

      /etc/apache2/sites-available/default-ssl.conf

      <IfModule mod_ssl.c>
              <VirtualHost _default_:443>
                      ServerAdmin webmaster@localhost
      
                      DocumentRoot /var/www/html
      
                      ErrorLog ${APACHE_LOG_DIR}/error.log
                      CustomLog ${APACHE_LOG_DIR}/access.log combined
      
                      SSLEngine on
      
                      SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
                      SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
      
                      <FilesMatch ".(cgi|shtml|phtml|php)$">
                                      SSLOptions +StdEnvVars
                      </FilesMatch>
                      <Directory /usr/lib/cgi-bin>
                                      SSLOptions +StdEnvVars
                      </Directory>
      
              </VirtualHost>
      </IfModule>
      

      Мы внесем в файл незначительные изменения. Мы внесем желаемые изменения в файл виртуального хоста (адрес электронной почты администратора сервера, имя сервера и т. д.), а также изменим директив SSL, чтобы они указывали на наши файлы сертификатов и ключей.

      После внесения изменений ваш серверный блок должен выглядеть примерно так:

      /etc/apache2/sites-available/default-ssl.conf

      <IfModule mod_ssl.c>
              <VirtualHost _default_:443>
                      ServerAdmin your_email@example.com
                      ServerName server_domain_or_IP
      
                      DocumentRoot /var/www/html
      
                      ErrorLog ${APACHE_LOG_DIR}/error.log
                      CustomLog ${APACHE_LOG_DIR}/access.log combined
      
                      SSLEngine on
      
                      SSLCertificateFile      /etc/ssl/certs/apache-selfsigned.crt
                      SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
      
                      <FilesMatch ".(cgi|shtml|phtml|php)$">
                                      SSLOptions +StdEnvVars
                      </FilesMatch>
                      <Directory /usr/lib/cgi-bin>
                                      SSLOptions +StdEnvVars
                      </Directory>
      
              </VirtualHost>
      </IfModule>
      

      Сохраните файл и закройте его после завершения.

      (Рекомендуется) Изменение файла хоста HTTP для перенаправления на HTTPS

      В настоящее время сервер будет предоставлять нешифрованный трафик HTTP и шифрованный трафик HTTPS. В большинстве случаев для обеспечения безопасности рекомендуется включить автоматическое перенаправление HTTP на HTTPS. Если вы не хотите использовать эту функцию, или она вам не нужна, вы можете спокойно пропустить этот раздел.

      Чтобы изменить файл нешифрованного виртуального хоста для перенаправления всего трафика для шифрования SSL, мы можем открыть файл /etc/apache2/sites-available/000-default.conf:

      • sudo nano /etc/apache2/sites-available/000-default.conf

      Внутри файла в блоках конфигурации VirtualHost нам нужно добавить директиву Redirect, которая должна направлять весь трафик на версию сайта с шифрованием SSL:

      /etc/apache2/sites-available/000-default.conf

      <VirtualHost *:80>
              . . .
      
              Redirect "/" "https://your_domain_or_IP/"
      
              . . .
      </VirtualHost>
      

      Сохраните файл и закройте его после завершения.

      Шаг 3 — Настройка брандмауэра

      Если у вас включен брандмаэр ufw в соответствии с предварительными требованиями, вам может потребоваться изменить настройки для поддержки трафика SSL . К счастью, Apache регистрирует несколько профилей ufw после установки.

      Мы можем просмотреть доступные профили с помощью следующей команды:

      Список должен выглядеть примерно так:

      Output

      Available applications: Apache Apache Full Apache Secure OpenSSH

      Вы можете просмотреть текущие настройки с помощью следующей команды:

      Если вам разрешен только обычный трафик HTTP, результаты могут выглядеть следующий образ:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

      Чтобы разрешить дополнительный трафик HTTPS, мы разрешим профиль «Apache Full» и удалим избыточный профиль «Apache»:

      • sudo ufw allow 'Apache Full'
      • sudo ufw delete allow 'Apache'

      Теперь ваш статус должен выглядеть примерно так:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

      Шаг 4 — Активация изменений в Apache

      Мы внесли изменения и настроили брандмауэр, и теперь можем включить в Apache модули SSL и заголовков, активировать наш виртуальный хост SSL и перезапустить Apache.

      Мы можем активровать mod_ssl, модуль Apache SSL, и модуль mod_headers, необходимый для некоторых настроек нашего сниппета SSL, с помощью команды a2enmod:

      • sudo a2enmod ssl
      • sudo a2enmod headers

      Теперь мы можем активировать виртуальный хост SSL с помощью команды a2ensite:

      • sudo a2ensite default-ssl

      Также нам нужно будет активировать файл ssl-params.conf для считывания заданных значений:

      Мы активировали наш сайт и все необходимые модули. Теперь нам нужно проверить наши файлы на наличие ошибок в синтаксисе. Для этого можно ввести следующую команду:

      • sudo apache2ctl configtest

      Если проверка будет успешно пройдена, мы получим результат, выглядящий примерно так:

      Output

      AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK

      Первая строка — это сообщение о том, что директива ServerName не задана глобально. Если вы хотите избавиться от этого сообщения, вы можете задать для ServerName доменное имя вашего сервера или IP-адрес в каталоге /etc/apache2/apache2.conf. Это необязательно, потому что данное сообщение не наносит никакого вреда.

      Если в результатах есть сообщение Syntax OK, в вашей конфигурации нет синтаксических ошибок. Мы можем безопасно перезапустить Apache для внесения изменений:

      • sudo systemctl restart apache2

      Шаг 5 — Тестирование шифрования

      Теперь мы готовы протестировать наш сервер SSL.

      Откройте браузер и введите https:// и доменное имя или IP-адрес вашего сервера в адресную панель:

      https://server_domain_or_IP
      

      Поскольку созданный нами сертификат не подписан одним из доверенных центров сертификации вашего браузера, вы увидите пугающее предупреждение, которое будет выглядеть примерно так:

      Предупреждение о самоподписанном сертификате Apache

      Такое предупреждение нормально, и его следует ожидать. Сертификат нам нужен только для шифрования, а не для подтверждения подлинности нашего хоста третьей стороной. Нажмите «Дополнительно», а затем нажмите на указанную ссылку, чтобы перейти к своему хосту:

      Обход предупреждения о самоподписанном сертификате Apache

      Теперь должен открыться ваш сайт. Если вы посмотрите в адресную строку браузера, вы увидите символ замка со знаком «x». В данном случае это означает, что сертификат не удается проверить. Ваше соединение все равно шифруется.

      Если вы настроили Apache для перенаправления HTTP на HTTPS, вы можете проверить правильность перенаправления функций:

      http://server_domain_or_IP
      

      Если при этом появляется такой же значок, перенаправление работает правильно.

      Шаг 6 – Переключение на постоянное перенаправление

      Если перенаправление работает правильно, и вы хотите разрешить только шифрованный трафик, вам следует снова изменить файл нешифрованного виртуального хоста Apache и сделать перенаправление постоянным.

      Откройте файл конфигурации серверного блока еще раз:

      • sudo nano /etc/apache2/sites-available/000-default.conf

      Найдите добавленную нами строку Redirect. Добавьте в эту строку атрибут permanent, который изменяет тип перенаправления с временного перенаправления 302 на постоянное перенаправление 301:

      /etc/apache2/sites-available/000-default.conf

      <VirtualHost *:80>
              . . .
      
              Redirect permanent "/" "https://your_domain_or_IP/"
      
              . . .
      </VirtualHost>
      

      Сохраните и закройте файл.

      Проверьте конфигурацию на ошибки синтаксиса:

      • sudo apache2ctl configtest

      Когда вы будете готовы, перезапустите Apache, чтобы сделать перенаправление постоянным:

      • sudo systemctl restart apache2

      Заключение

      Вы настроили сервер Apache для использования защищенного шифрования клиентских соединений. Это обеспечит безопасное обслуживание запросов и не даст третьим сторонам возможности считывать ваш трафик.



      Source link

      Создание и вывод изображений WebP для ускорения себ-сайта


      Автор выбрал фонд Apache Software Foundation для получения пожертвования в рамках программы Write for DOnations.

      Введение

      WebP — открытый формат изображений, разработанный компанией Google в 2010 году на основе видеоформата VP8. С тех пор количество веб-сайтов и мобильных приложений с использованием формата WebP значительно выросло. Как Google Chrome, так и Opera поддерживают оригинальный формат WebP, и поскольку на эти браузеры приходится около 74% всего веб-трафика, пользователи могут получать доступ к веб-сайтам быстрее, если на них используются изображения WebP. Также имеются планы внедрения WebP в Firefox.

      Формат WebP поддерживает сжатие изображений как с потерями, так и без потерь, включая анимацию. Его основное преимущество по сравнению с другими форматами изображений, используемыми в сети — гораздо меньший размер файла, что ускоряет загрузку веб-страниц и сокращает использование полосы пропускания. Использование изображений WebP может обеспечивать значительное ускорение загрузки страниц. Если приложение или веб-сайт сталкиваются с проблемами производительности или возросшего трафика, то преобразование изображений в этот формат может оптимизировать производительность страниц.

      В этом обучающем руководстве вы будете использовать инструмент командной строки cwebp для преобразования изображений в формат WebP, создавая скрипты, которые будут наблюдать за изображениями и преобразовывать их в конкретной директории. Затем вы изучите два способа показывать изображения WebP своим посетителям.

      Предварительные требования

      Работа с изображениями WebP не требует конкретного дистрибутива, но мы продемонстрируем, как работать с соответствующим программным обеспечением на Ubuntu 16.04 и CentOS 7. Для прохождения данного обучающего руководства вам потребуется следующее:

      • Сервер, созданный пользователем sudo без прав root. Для настройки сервера Ubuntu 16.04 следуйте нашему руководству по начальной настройке сервера Ubuntu 16.04. Если вы хотите использовать CentOS, то можете настроить сервер CentOS 7 при помощи нашего «Обучающего руководства по начальной настройке сервера CentOS 7».

      • Apache, установленный на сервере. Если вы используете Ubuntu, то можете следовать первому шагу руководства «Установка стека Linux, Apache, MySQL, PHP (LAMP) на Ubuntu 16.04». Если вы используете CentOS, следуйте первому шагу «Установка стека Linux, Apache, MySQL, PHP (LAMP) на CentOS 7». Обязательно измените настройки брандмауэра для разрешения трафика HTTP и HTTPS.

      • mod_rewrite, установленный на сервере. Если вы используете Ubuntu, то можете следовать нашему руководству «Как переписывать URL-адреса при помощи mod_rewrite для Apache на Ubuntu 16.04». По умолчанию mod_rewrite установлен и активирован на CentOS 7.

      Шаг 1 — Установка cwebp и подготовка директории изображений

      В этом разделе мы установим программное обеспечение для преобразования изображений и создания директории с изображениями в качестве средства тестирования.

      На Ubuntu 16.04 можно установить cwebp (это утилита, которая позволяет сжимать изображения в формат .webp),“ введя следующее:

      • sudo apt-get update
      • sudo apt-get install webp

      В CentOS 7 введите:

      • sudo yum install libwebp-tools

      Для создания новой директории изображений, которая называется webp, в корневой директории Apache (находится по умолчанию в /var/www/html), введите:

      • sudo mkdir /var/www/html/webp

      Дайте права на данную директорию вашему пользователю sammy без прав root:

      • sudo chown sammy: /var/www/html/webp

      Для тестирования команд можно скачать бесплатные изображения JPEG и PNG, используя wget. Этот инструмент установлен по умолчанию в Ubuntu 16.04; если вы используете CentOS 7, можно установить его, введя следующее:

      Затем загрузите тестовые изображения, используя следующие команды:

      • wget -c "https://upload.wikimedia.org/wikipedia/commons/2/24/Junonia_orithya-Thekkady-2016-12-03-001.jpg?download" -O /var/www/html/webp/image1.jpg
      • wget -c "https://upload.wikimedia.org/wikipedia/commons/5/54/Mycalesis_junonia-Thekkady.jpg" -O /var/www/html/webp/image2.jpg
      • wget -c "https://cdn.pixabay.com/photo/2017/07/18/15/39/dental-care-2516133_640.png" -O /var/www/html/webp/logo.png

      Примечание. Эти изображения доступны для использования и распространения по лицензиям Creative Commons Attribution-ShareAlike и Public Domain Dedication.

      Основная часть вашей работы на следующем шаге будет находиться в директории /var/www/html/webp, в которую можно перейти, введя:

      С имеющимися тестовыми изображениями, при помощи веб-сервера Apache, модуля mod_rewrite и утилиты cwebp вы готовы начинать преобразование изображений.

      Шаг 2 — Сжатие файлов изображений с помощью cwebp

      Показ изображений .webp посетителям сайта требует версий .webp файлов изображений. На этом шаге вы преобразуете изображения JPEG и PNG в формат .webp, используя cwebp. Общий синтаксис команды выглядит следующим образом:

      • cwebp image.jpg -o image.webp

      Параметр -o указывает путь к файлу WebP.

      Поскольку вы все еще находитесь в директории /var/www/html/webp, можно запустить следующую команду для преобразования изображений image1.jpg в image1.webp и image2.jpg​​​ в ​​​image2.webp​​​​:

      • cwebp -q 100 image1.jpg -o image1.webp
      • cwebp -q 100 image2.jpg -o image2.webp

      Если установить параметр качества -q равным 100, сохраняется 100% качества изображения; если он не указан, значение по умолчанию составляет 75.

      Затем проверьте размер изображений JPEG и WebP, используя команду ls. Параметр -l показывает длинный формат списка, который включает размер файла, а параметр -h обеспечивает, что ls выводит на печать изображения читаемых размеров:

      • ls -lh image1.jpg image1.webp image2.jpg image2.webp

      Output

      -rw-r--r-- 1 sammy sammy 7.4M Oct 28 23:36 image1.jpg -rw-r--r-- 1 sammy sammy 3.9M Feb 18 16:46 image1.webp -rw-r--r-- 1 sammy sammy 16M Dec 18 2016 image2.jpg -rw-r--r-- 1 sammy sammy 7.0M Feb 18 16:59 image2.webp

      Данные, выводимые командой ls, показывают, что размер image1.jpg составляет 7,4 Mбайт, а размер image1.webp — 3,9 Mбайт. То же самое относится к изображениям image2.jpg​​​​​​ (16 Mбайт) и image2.webp (7 Mбайт). Эти файлы почти в два раза меньше первоначального размера!

      Для сохранения полных исходных данных этих изображений при сжатии можно использовать параметр -lossless вместо параметра -q. Это наилучший вариант сохранения качества изображений PNG. Для преобразования загруженного изображения PNG из шага 1 введите:

      • cwebp -lossless logo.png -o https://www.digitalocean.com/logo.webp

      Следующая команда показывает, что размер изображения WebP без потерь (60 Кбайт) примерно в два раза меньше размера первоначального изображения PNG (116 Кбайт):

      • ls -lh logo.png https://www.digitalocean.com/logo.webp

      Output

      -rw-r--r-- 1 sammy sammy 116K Jul 18 2017 logo.png -rw-r--r-- 1 sammy sammy 60K Feb 18 16:42 https://www.digitalocean.com/logo.webp

      Преобразованные изображения WebP в директории /var/www/html/webp на 50% меньше исходных JPEG и PNG. На практике степени сжатия могут отличаться в зависимости от определенных факторов: уровень сжатия исходного изображения, формат файла, тип преобразования (с потерями или без потерь), процент качества и операционная система. При преобразовании большего числа изображений можно видеть изменения коэффициентов преобразования, связанные с этими факторами.

      Шаг 3 — Преобразование изображений JPEG и PNG в директории

      Написание скрипта упрощает процесс преобразования, т.к. устраняет ручное преобразование. Теперь напишем скрипт преобразования, который находит файлы JPEG и преобразовывает их в формат WebP с 90% качеством, а также преобразовывает файлы PNG в изображения WebP без потерь.

      Используя nano или предпочитаемый вами редактор, создайте скрипт webp-convert.sh в домашней директории вашего пользователя:

      Первая строка скрипта будет выглядеть следующим образом:

      ~/webp-convert.sh

      find $1 -type f -and ( -iname "*.jpg" -o -iname "*.jpeg" )
      

      Эта строка включает следующие компоненты:

      • find: Эта команда будет искать файлы в конкретной директории.
      • $1: этот позиционный параметр указывает путь к директории изображений, взятый из командной строки. В конечном счете, он делает местоположение директории менее зависимым от местоположения скрипта.
      • -type f: данный параметр указывает команде find искать только обычные файлы.
      • -iname: данный тест соспоставляет имена файлов по заданной схеме. Нечувствительный к регистру тест -iname указывает команде find искать любое имя файла, заканчивающееся на .jpg (*.jpg) или .jpeg (*.jpeg).
      • -o: этот логический оператор указывает команде find вывести файлы, соответствующие первому тесту -iname (-iname "*.jpg") *или *второму (iname "*.jpeg").
      • (): скобки вокруг этих тестов, вместе с оператором -and, обеспечивают, что первый тест (т.е. -type f) всегда выполняется.

      Вторая строка скрипта будет преобразовывать изображения в формат WebP, используя параметр -exec. Общий синтаксис этого параметра — -exec command {} ;​​. Строка {} заменяется каждым файлом, который обрабатывает команда, а символ ; указывает команде find, где заканчивается команда:

      ~/webp-convert.sh

      find $1 -type f -and ( -iname "*.jpg" -o -iname "*.jpeg" ) 
      -exec bash -c 'commands' {} ;
      

      В данном случае для параметра -exec потребуется несколько команд для поиска и преобразования изображений:

      • bash: эта команда будет выполнять небольшой скрипт, создающий версию .webp файла, если она отсутствует. Этот скрипт будет передаваться в bash как строка благодаря опции -c.
      • 'commands': этот заполнитель — скрипт, который будет создавать версии .webp ваших файлов.

      Скрипт в 'commands' будет выполнять следующие функции:

      • Создавать переменную webp_path.
      • Проверять наличие версии .webp файла.
      • Создавать файл, если он отсутствует.

      Малый скрипт выглядит следующим образом:

      ~/webp-convert.sh

      ...
      webp_path=$(sed 's/.[^.]*$/.webp/' <<< "$0");
      if [ ! -f "$webp_path" ]; then
        cwebp -quiet -q 90 "$0" -o "$webp_path";
      fi;
      

      Элементы этого малого скрипта включают в себя следующее:

      • webp_path: эта переменная будет создана с помощью sed и соответствующего имени файла из команды bash, обозначенного по позиционному параметру $0. here string (<<<) будет передавать это имя в sed.
      • if [ ! -f "$webp_path" ]: данный тест будет определять наличие файла под названием "$webp_path", используя логический оператор not (!).
      • cwebp: эта команда будет создавать файл, если он отсутствует, используя параметр -q, чтобы не выводить результат.

      С этим малым скриптом вместо заполнителя 'commands', полный скрипт преобразования изображений JPEG теперь будет выглядеть следующим образом:

      ~/webp-convert.sh

      # converting JPEG images
      find $1 -type f -and ( -iname "*.jpg" -o -iname "*.jpeg" ) 
      -exec bash -c '
      webp_path=$(sed 's/.[^.]*$/.webp/' <<< "$0");
      if [ ! -f "$webp_path" ]; then
        cwebp -quiet -q 90 "$0" -o "$webp_path";
      fi;' {} ;
      

      Для преобразования изображений PNG в WebP мы будем использовать тот же подход, с двумя отличиями: Во-первых, шаблон -iname в команде find будет "*.png". Во-вторых, команда преобразования будет использовать параметр -lossless вместо параметра качества -q.

      Завершенный скрипт выглядит следующим образом:

      ~/webp-convert.sh

      #!/bin/bash
      
      # converting JPEG images
      find $1 -type f -and ( -iname "*.jpg" -o -iname "*.jpeg" ) 
      -exec bash -c '
      webp_path=$(sed 's/.[^.]*$/.webp/' <<< "$0");
      if [ ! -f "$webp_path" ]; then
        cwebp -quiet -q 90 "$0" -o "$webp_path";
      fi;' {} ;
      
      # converting PNG images
      find $1 -type f -and -iname "*.png" 
      -exec bash -c '
      webp_path=$(sed 's/.[^.]*$/.webp/' <<< "$0");
      if [ ! -f "$webp_path" ]; then
        cwebp -quiet -lossless "$0" -o "$webp_path";
      fi;' {} ;
      

      Сохраните файл и выйдите из редактора.

      Затем проверим скрипт webp-convert.sh на практике, используя файлы в директории /var/www/html/webp. Убедитесь, что файл скрипта является исполняемым, запустив следующую команду:

      • chmod a+x ~/webp-convert.sh

      Запустите скрипт в директории изображений:

      • ./webp-convert.sh /var/www/html/webp

      Ничего не произошло! Это потому, что мы уже преобразовали эти изображения на шаге 2. Далее скрипт webp-convert будет преобразовывать изображения при добавлении нами новых файлов или удалении версий .webp. Чтобы увидеть, как это работает, удалите файлы .webp, созданные нами на шаге 2:

      • rm /var/www/html/webp/*.webp

      Удалив все изображения .webp, снова выполните скрипт, чтобы убедиться, что он работает:

      • ./webp-convert.sh /var/www/html/webp

      Команда ls подтвердит, что скрипт успешно преобразовал изображения:

      • ls -lh /var/www/html/webp

      Output

      -rw-r--r-- 1 sammy sammy 7.4M Oct 28 23:36 image1.jpg -rw-r--r-- 1 sammy sammy 3.9M Feb 18 16:46 image1.webp -rw-r--r-- 1 sammy sammy 16M Dec 18 2016 image2.jpg -rw-r--r-- 1 sammy sammy 7.0M Feb 18 16:59 image2.webp -rw-r--r-- 1 sammy sammy 116K Jul 18 2017 logo.png -rw-r--r-- 1 sammy sammy 60K Feb 18 16:42 https://www.digitalocean.com/logo.webp

      Скрипт на этом шаге — основа использования изображений WebP на вашем сайте, поскольку вам потребуется рабочая версия всех изображений в формате WebP для показа посетителям. На следующем шаге рассмотрим автоматизацию преобразования новых изображений.

      Шаг 4 — Просмотр файлов изображений в директории

      На этом шаге мы создадим новый скрипт для просмотра изменений в директории изображений и автоматического преобразования вновь созданных изображений.

      Создание скрипта, который следит за нашей директорией изображений, может решить некоторые проблемы со скриптом webp-convert.sh в ходе его написания. Например, данный скрипт не будет идентифицировать, переименовали ли мы изображение. Предположим, у нас есть изображение foo.jpg, мы выполняем webp-convert.sh, переименовываем этот файл в bar.jpg, а затем снова выполняем webp-convert.sh — теперь у нас есть идентичные файлы .webp (foo.webp и bar.webp). Для решения этой проблемы, и чтобы не выполнять скрипт вручную, добавим watchers в другой скрипт. Наблюдатели (watchers) наблюдают за конкретными файлами или директориями и запускают команды в ответ на эти изменения.

      Команда inotifywait будет настраивать наблюдатели (watchers) в нашем скрипте. Эта команда является частью inotify-tools — пакета инструментов командной строки, который обеспечивает простой интерфейс подсистемы ядра inotify. Чтобы установить его на Ubuntu 16.04, введите:

      • sudo apt-get install inotify-tools

      В CentOS 7 пакет ​​​inotify-tools доступен в хранилище EPEL. Установите хранилище EPEL и пакет ​​​inotify-tools, используя следующие команды:

      • sudo yum install epel-release
      • sudo yum install inotify-tools

      Далее создайте скрипт webp-watchers.sh в домашней директории вашего пользователя с помощью nano:

      Первая строка скрипта будет выглядеть следующим образом:

      ~/webp-watchers.sh

      inotifywait -q -m -r --format '%e %w%f' -e close_write -e moved_from -e moved_to -e delete $1
      

      Эта строка включает следующие элементы:

      • inotifywait: эта команда следит за изменениями в определенной директории.
      • -q: данный параметр будет указывать команде inotifywait ограничивать свою активность и не генерировать много результатов.
      • -m: данный параметр будет указывать команде inotifywait работать без ограничения времени и не совершать выход после получения одного события.
      • -r: данный параметр будет настраивать наблюдатели рекурсивно, наблюдая за заданной директорией и всеми ее поддиректориями.
      • --format: данный параметр указывает команде inotifywait следить за изменениями с помощью имени события и следующего за ним пути файла. События, за которыми мы хотим наблюдать: close_write (инициируется, когда файл создается и полностью записывается на диск), moved_from и moved_to (инициируется, когда файл перемещается) и delete (инициируется, когда файл удаляется).
      • $1: этот параметр позиционирования хранит путь измененных файлов.

      Далее добавим команду grep, чтобы установить, являются ли наши файлы изображениями JPEG или PNG. Параметр -i будет указывать команде grep игнорировать регистр, -E будет указывать, что grep должна использовать расширенные регулярные выражения, а --line-buffered будет указывать grep передавать совпавшие строки в цикл while:

      ~/webp-watchers.sh

      inotifywait -q -m -r --format '%e %w%f' -e close_write -e moved_from -e moved_to -e delete $1 | grep -i -E '.(jpe?g|png)$' --line-buffered
      

      Далее создадим цикл while с командой read. read будет обрабатывать событие, которое обнаружила команда inotifywait, и присваивать его переменной $operation, а путь обработанного файла — переменной $path:

      ~/webp-watchers.sh

      ...
      | while read operation path; do
        # commands
      done;
      

      Объединим этот цикл с остальным скриптом:

      ~/webp-watchers.sh

      inotifywait -q -m -r --format '%e %w%f' -e close_write -e moved_from -e moved_to -e delete $1 
      | grep -i -E '.(jpe?g|png)$' --line-buffered 
      | while read operation path; do
        # commands
      done;
      

      После того, как цикл while проверил событие, команды внутри цикла будут совершать следующие действия, в зависимости от результата:

      • Создайте новый файл WebP, если новый файл ​​изображения был создан или перенесен в целевую директорию.
      • Удалите файл WebP, если соответствующий файл изображения был удален или перенесен из целевой директории.​​

      Внутри цикла есть три основных раздела. Переменная webp_path будет хранить путь к версии .webp рассматриваемого изображения:

      ~/webp-watchers.sh

      ...
      webp_path="$(sed 's/.[^.]*$/.webp/' <<< "$path")";
      

      Далее скрипт проверит, какое событие произошло:

      ~/webp-watchers.sh

      ...
      if [ $operation = "MOVED_FROM" ] || [ $operation = "DELETE" ]; then
        # commands to be executed if the file is moved or deleted
      elif [ $operation = "CLOSE_WRITE,CLOSE" ] || [ $operation = "MOVED_TO" ]; then
        # commands to be executed if a new file is created
      fi;
      

      Если файл был перенесен или удален, скрипт будет проверять наличие версии .webp. Если она существует, скрипт будет удалять ее с помощью rm:

      ~/webp-watchers.sh

      ...
      if [ -f "$webp_path" ]; then
        $(rm -f "$webp_path");
      fi;
      

      Для вновь созданных файлов сжатие будет осуществляться следующим образом:

      • Если соответствующий файл будет изображением PNG, скрипт будет использовать сжатие без потерь.
      • В противном случае скрипт будет использовать сжатие с потерями с помощью параметра -quality.

      Добавим команды cwebp, которые будут выполнять эти действия, в скрипт:

      ~/webp-watchers.sh

      ...
      if [ $(grep -i '.png$' <<< "$path") ]; then
        $(cwebp -quiet -lossless "$path" -o "$webp_path");
      else
        $(cwebp -quiet -q 90 "$path" -o "$webp_path");
      fi;
      

      Целиком файл webp-watchers.sh будет выглядеть следующим образом:

      ~/webp-watchers.sh

      #!/bin/bash
      echo "Setting up watches.";
      
      # watch for any created, moved, or deleted image files
      inotifywait -q -m -r --format '%e %w%f' -e close_write -e moved_from -e moved_to -e delete $1 
      | grep -i -E '.(jpe?g|png)$' --line-buffered 
      | while read operation path; do
        webp_path="$(sed 's/.[^.]*$/.webp/' <<< "$path")";
        if [ $operation = "MOVED_FROM" ] || [ $operation = "DELETE" ]; then # if the file is moved or deleted
          if [ -f "$webp_path" ]; then
            $(rm -f "$webp_path");
          fi;
        elif [ $operation = "CLOSE_WRITE,CLOSE" ] || [ $operation = "MOVED_TO" ]; then  # if new file is created
           if [ $(grep -i '.png$' <<< "$path") ]; then
             $(cwebp -quiet -lossless "$path" -o "$webp_path");
           else
             $(cwebp -quiet -q 90 "$path" -o "$webp_path");
           fi;
        fi;
      done;
      

      Сохраните и закройте файл. Не забудьте сделать его исполняемым:

      • chmod a+x ~/webp-watchers.sh

      Выполним этот скрипт в директории /var/www/html/webp в фоновом режиме, используя &. Также перенаправим стандартный результат и стандартную ошибку в ~/output.log, чтобы хранить результат в легкодоступном месте:

      • ./webp-watchers.sh /var/www/html/webp > output.log 2>&1 &

      На данный момент вы преобразовали файлы JPEG и PNG в директории /var/www/html/webp в формат WebP, а также настроили наблюдатели для выполнения этих действий с помощью скрипта webp-watchers.sh. Теперь пора изучить варианты показа изображений WebP посетителям вашего веб-сайта.

      Шаг 5 — Показ изображений WebP посетителям сайта с помощью элементов HTML

      На этом шаге мы расскажем, как показывать изображения WebP с элементами HTML. На данный момент в директории /var/www/html/webp должны быть версии .webp каждого тестового изображения JPEG и PNG . Теперь мы можем показывать их в поддерживаемых браузерах с помощью элементов HTML5 (<picture>) или модуля mod_rewrite Apache. На этом шаге мы используем элементы HTML.

      Элемент <picture> позволяет включить изображения напрямую в веб-страницы и задать несколько источников изображений. Если браузер поддерживает формат WebP, он будет загружать версию файла .webp вместо оригинального, что приведет к более быстрой загрузке веб-страниц. Следует отметить, что элемент <picture> широко поддерживается в современных браузерах, поддерживающих формат WebP.

      Элемент <picture> представляет собой контейнер с элементами <source> и <img>, указывающими на конкретные файлы. Если мы используем элемент <source> для указания на изображение .webp, браузер сможет его обработать. В противном случае браузер будет использовать файл изображения, заданный с помощью атрибута src в элементе <img>.

      Мы будем использовать файл logo.png из директории /var/www/html/webp, который мы преобразовали в https://www.digitalocean.com/logo.webp, например с помощью элемента <source>. Мы можем использовать следующий код HTML для показа https://www.digitalocean.com/logo.webp в любом браузере, поддерживающем формат WebP, и logo.png в любом браузере, не поддерживающем WebP или элемент <picture>.

      Создайте файл HTML в /var/www/html/webp/picture.html:

      • nano /var/www/html/webp/picture.html

      Добавьте в веб-страницу следующий код для показа https://www.digitalocean.com/logo.webp в поддерживающих браузерах с помощью элемента <picture>:

      /var/www/html/webp/picture.html

      <picture>
        <source  type="image/webp">
        <img src="https://www.digitalocean.com/logo.png" alt="Site Logo">
      </picture>
      

      Сохраните и закройте файл.

      Чтобы убедиться, что все работает, перейдите в каталог http://your_server_ip/webp/picture.html. Вы должны увидеть тестовое изображение PNG.

      Теперь, когда вы знаете, как показывать изображения .webp напрямую из кода HTML, давайте посмотрим, как автоматизировать этот процесс с помощью модуля mod_rewrite Apache.

      Шаг 6 — Показ изображений WebP с помощью mod_rewrite

      Если мы хотим оптимизировать скорость нашего сайта, но у нас очень много страниц или слишком мало времени для редактирования HTML, то модуль mod_rewrite Apache поможет нам автоматизировать процесс показа изображений .webp в поддерживаемых браузерах.

      Во-первых, создайте файл .htaccess в директории /var/www/html/webp с помощью следующей команды:

      • nano /var/www/html/webp/.htaccess

      Директива ifModule проверит, доступен ли if mod_rewrite; если доступен, то он может быть активирован при помощи RewriteEngine On. Добавьте эти директивы в .htaccess:

      /var/www/html/webp/.htaccess

      <ifModule mod_rewrite.c>
        RewriteEngine On
        # further directives
      </IfModule>
      

      Веб-сервер сделает несколько проверок, чтобы установить, когда показывать изображения .webp пользователю. Когда браузер делает запрос, он включает в запрос заголовок, чтобы указать серверу, что именно браузер способен обрабатывать. В случае с WebP браузер будет направлять заголовок Accept, содержащий image/webp. Мы проверим, отправляет ли браузер этот заголовок с помощью RewriteCond, указывающего критерии, которые должны быть сопоставлены для выполнения правила RewriteRule:

      /var/www/html/webp/.htaccess

      ...
      RewriteCond %{HTTP_ACCEPT} image/webp
      

      Необходимо отфильтровать все, кроме изображений JPEG и PNG. Снова используя RewriteCond, добавьте регулярное выражение (аналогично тому, что мы использовали в предыдущих разделах), чтобы сравнить запрошенную версию URI:

      /var/www/html/webp/.htaccess

      ...
      RewriteCond %{REQUEST_URI}  (?i)(.*)(.jpe?g|.png)$
      

      Модификатор (?i) сделает сравнение нечувствительным к регистру.

      Чтобы проверить наличие версии .webp файла, используйте RewriteCond еще раз следующим образом:

      /var/www/html/webp/.htaccess

      ...
      RewriteCond %{DOCUMENT_ROOT}%1.webp -f
      

      Наконец, если все предыдущие условия выполнены, RewriteRule перенаправляет запрошенный файл JPEG или PNG в соответствующий файл WebP. Обратите внимание, что это перенаправление redirect происходит при помощи флага -R, а не перезаписи rewrite URI-адреса. Разница между перезаписью и перенаправлением — в том, что сервер будет направлять перезаписанный URI-адрес, не сообщая об этом браузеру. Например, URI-адрес покажет, что расширение файла — .png, но на самом деле это будет файл .webp. Добавьте RewriteRule в файл:

      /var/www/html/webp/.htaccess

      ...
      RewriteRule (?i)(.*)(.jpe?g|.png)$ %1.webp [L,T=image/webp,R]
      

      На данный момент раздел mod_rewrite в файле .htaccess завершен. Но что произойдет, если между вашим сервером и клиентом будет промежуточный сервер кэширования? Он может показать неправильную версию конечному пользователю. Именно поэтому стоит проверить, активирован ли модуль mod_headers, чтобы отправить заголовок Vary:Accept. Заголовок Vary указывает серверам кэширования (например, прокси-серверам), что тип содержания документа варьируется в зависимости от возможностей браузера, запрашивающего документ. Кроме того, ответ будет сгенерирован на основе заголовка Accept в запросе. Запрос с другим заголовком Accept может получить другой ответ. Данный заголовок важен, поскольку не позволяет показывать кэшированные изображения WebP в неподдерживаемых браузерах:

      /var/www/html/webp/.htaccess

      ...
      <IfModule mod_headers.c>
        Header append Vary Accept env=REDIRECT_accept
      </IfModule>
      

      Наконец, задайте тип MIME изображений .webp как image/webp в конце файла .htaccess, используя директиву AddType. Благодаря этому, изображения будут показаны с правильным типом MIME:

      /var/www/html/webp/.htaccess

      ...
      AddType image/webp .webp
      

      Это последняя версия нашего файла .htaccess:

      /var/www/html/webp/.htaccess

      <ifModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTP_ACCEPT} image/webp
        RewriteCond %{REQUEST_URI}  (?i)(.*)(.jpe?g|.png)$
        RewriteCond %{DOCUMENT_ROOT}%1.webp -f
        RewriteRule (?i)(.*)(.jpe?g|.png)$ %1.webp [L,T=image/webp,R]
      </IfModule>
      
      <IfModule mod_headers.c>
        Header append Vary Accept env=REDIRECT_accept
      </IfModule>
      
      AddType image/webp .webp
      

      Примечание. Можно объединить этот файл .htaccess с другим файлом .htaccess (при наличии). Если вы используете, например, WordPress, то следует скопировать этот файл .htaccess и вставить его в верхней части существующего файла.

      Давайте на практике сделаем то, что мы изучили на этом шаге. Если вы следовали указаниям в предыдущих шагах, то у вас должны быть изображения logo.png и https://www.digitalocean.com/logo.webp в /var/www/html/webp. Мы используем простой элемент <img>, чтобы добавить изображение logo.png на нашу веб-страницу. Создайте новый файл HTML для проверки конфигурации:

      • nano /var/www/html/webp/img.html

      Введите следующий код HTML в файл:

      /var/www/html/webp/img.html

      <img src="https://www.digitalocean.com/logo.png" alt="Site Logo">
      

      Сохраните и закройте файл.

      При посещении веб-страницы http://your_server_ip/webp/img.html в браузере Chrome вы увидите, что показанное изображение — это версия .webp (попробуйте открыть изображение в новой вкладке). Если вы используете Firefox, то автоматически получите изображение .png.

      Заключение

      В этом обучающем руководстве мы изучили основные методы работы с изображениями WebP. Мы рассказали, как использовать cwebp для преобразования файлов, а также два варианта показа этих изображений пользователям: элемент HTML5 <picture> и модуль Apache mod_rewrite.

      Чтобы настроить скрипты из данного обучающего руководства, можно обратиться к следующим ресурсам:

      • Характеристики формата WebP и использование инструментов преобразования описаны подробнее в документации WebP.
      • Дополнительные сведения об использовании элемента см. в документации по MDN.
      • Чтобы полностью понять, как использовать mod_rewrite, см. документацию.

      Использование формата WebP для изображений значительно сокращает размеры файлов. Это позволяет снизить использование полосы пропускания и быстрее загружать страницы, особенно если на вашем веб-сайте много изображений.



      Source link

      Установка Python 3 и создание среды программирования в Ubuntu 18.04. [Краткое руководство].


      Введение

      Python — гибкий и универсальный язык программирования, хорошо подходящий для создания скриптов, автоматизации, анализа данных, машинного обучения и разработки серверной части приложений.

      В этом обучающем модуле вы научитесь устанавливать Python и создавать среду программирования на сервере Ubuntu 18.04. Более подробную версию настоящего обучающего модуля с более детальными разъяснениями каждого шага можно найти в обучающем модуле Установка Python 3 и настройка среды программирования на сервере Ubuntu 18.04.

      Шаг 1 — Обновление и модернизация

      Выполните вход на сервер Ubuntu 18.04 как пользователь sudo без привилегий root, затем выполните обновление системы и убедитесь. что поставленная версия Python 3 обновлена.

      • sudo apt update
      • sudo apt -y upgrade

      Подтвердите установку, если система предложит вам это.

      Шаг 2 — Проверьте версию Python

      Проверьте установленную версию Python 3 с помощью следующей команды:

      Вы получите примерно следующий результат, в зависимости от времени обновления вашей системы.

      Output

      Python 3.6.7

      Шаг 3 — Установка pip

      Для управления программными пакетами Python необходимо выполнить установку инструмента pip, который устанавливает библиотеки и модули для ваших проектов и управляет этими библиотеками и модулями.

      • sudo apt install -y python3-pip

      Пакеты Python можно установить с помощью следующей команды:

      • pip3 install package_name

      Здесь package_name может относиться к любому пакету или любой библиотеке Python, в том числе Django для веб-разработки или NumPy для научных вычислений. Если вы захотите установить NumPy, вы можете использовать команду pip3 install numpy.

      Шаг 4 — Установка дополнительных инструментов

      Можжно установить несколько дополнительных пакетов и средств разработки, чтобы получить надежную основу для нашей среды программирования:

      • sudo apt install build-essential libssl-dev libffi-dev python3-dev

      Шаг 5 — Установка venv

      Виртуальные среды позволяют выделить на сервере изолированное пространство для проектов Python. Мы будем использовать venv, часть стандартной библиотеки Python 3. Для ее установки нужно ввести:

      • sudo apt install -y python3-venv

      Шаг 6 — Создание виртуальной среды

      Вы можете создать новую среду с помощью команды pyvenv. Мы назовем нашу новую среду my_env, но вы можете выбрать любое желаемое название.

      Шаг 7 — Активизация виртуальной среды

      Активируйте среду с помощью следующей команды. где my_env — имя вашей среды программирования.

      • source my_env/bin/activate

      Командная строка теперь будет иметь префикс с именем вашей среды:

      Шаг 8 — Тестирование виртуальной среды

      Откройте интерпретатор Python:

      Обратите внимание, что в виртуальной среде Python 3 вы можете использовать команду python вместо python3 и pip вместо pip3.

      Вы поймете, что интерпретатор открыт, когда увидите следующее:

      Python 3.6.5 (default, Apr  1 2018, 05:46:30)
      [GCC 7.3.0] on linux
      Type "help", "copyright", "credits" or "license" for more information.
      >>>
      

      Теперь используйте функцию print() для создания традиционной программы Hello, World:

      Output

      Hello, World!

      Шаг 9 — Отключение виртуальной среды

      Закройте интерпретатор Python:

      Закройте виртуальную среду:

      Дополнительное чтение

      Здесь представлены ссылки на более подробные обучающие руководства, связанные с настоящим руководством:



      Source link