Настройка веб-сервера в docker (nginx + php + mariadb)

Установка Docker в Centos 7

В Centos 7 Docker устанавливается так же штатно, через официальный репозиторий. Прежде чем его подключить, убедитесь, что у вас установлен пакет yum-utils.

# yum install yum-utils

После этого подключаем репозиторий докера.

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

Теперь можно приступить к установке Docker на Centos 7.

# yum install docker-ce docker-ce-cli containerd.io

Запускаем докер и добавляем в автозагрузку.

# systemctl enable --now docker

Проверяем работу:

# systemctl status docker

Запускаем контейнер c nginx для теста.

# docker run -d -p 80:80 --restart=always --name nginx-proxy nginx

Убеждаемся, что все запущено и корректно работает.

# docker ps
# ss -tulnp

На этом установка Docker на Centos 7 закончена. Для верности можете в браузере проверить, что nginx запущен и работает.

Установка docker-compose на Centos

Зачастую для работы с докером требуется также docker-compose. Он позволяет быстро запускать проекты, состоящие из нескольких контейнеров. По своей сути docker-compose просто скрипт на python. Так что для его работы нужен собственно сам скрипт и некоторые компоненты python. Последнюю версию скрипта можно посмотреть в репозитории на github — https://github.com/docker/compose/releases/. В моем случае это 1.27.4.

Устанавливаем docker-compose на Centos.

# curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose

Делаем файл исполняемым и на всякий случай добавляем символьную ссылку еще и в /usr/bin.

# chmod +x /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Смотрим, все ли корректно установилось.

# docker-compose -v
docker-compose version 1.27.4, build 40524192

Для теста можете запустить что-то с помощью docker-compose. Например, . Для этого создаем файл docker-compose.yaml следующего содержания.

version: '3'

services:
  mysql:
    image: mysql:8
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
    volumes:
      - "./db:/var/lib/mysql"

  wordpress:
    image: wordpress:php7.4-apache
    ports:
      - "80:80"
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: root
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - "./wp:/var/www/html/"

После этого запускаем проект.

# docker-compose up

Поднимутся два контейнера — один с mysql, другой с web сервером и исходниками wordpress. Если получите ошибку соединения с базой данных:

MySQL Connection Error: (2002) No route to host

Значит у вас запущен firewalld. Он не дает нормально работать dns в докере. Вам необходимо отключить firewalld и перезапустить докер.

# systemctl stop firewalld
# systemctl restart docker

После этого запускайте docker-compose еще раз и проверяйте работу. Должно получиться примерно так.

# docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                 NAMES
f4edc21405e4        wordpress:php7.4-apache   "docker-entrypoint.s…"   31 minutes ago      Up 52 seconds       0.0.0.0:80->80/tcp    root_wordpress_1
2c80b7811bb5        mysql:8                   "docker-entrypoint.s…"   31 minutes ago      Up 52 seconds       3306/tcp, 33060/tcp   root_mysql_1

Docker-compose успешно установлен и проверен на Centos. Можно использовать по назначению.

Контейнеры Docker

Экземпляр изображения называется контейнером. Контейнер представляет среду выполнения для отдельного приложения, процесса или службы.

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

Мы можем запускать, останавливать, удалять и управлять контейнером с помощью подкоманды .

Следующая команда запустит контейнер Docker на основе образа CentoOS. Если у вас нет образа локально, он сначала загрузит его:

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

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

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

Чтобы вывести список запущенных контейнеров :, введите:

Если у вас нет работающих контейнеров, вывод будет пустым.

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

Чтобы удалить один или несколько контейнеров, просто скопируйте идентификатор контейнера (или идентификаторы) сверху и вставьте их после подкоманды :

Установка phpmyadmin на CentOS 7

Для удобства управления базами веб сайтов я всегда использую phpmyadmin. Установим ее:

# yum install -y phpmyadmin

Копируем файлы панели в наш виртуальный домен, созданный ранее:

# cp -R /usr/share/phpMyAdmin/* /web/sites/pma.site1.ru/www
# chown -R nginx:nginx /web/sites/pma.site1.ru/www

Заходим по адресу http://pma.site1.ru/ и проверяем, все ли в порядке.

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

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

# cd /var/lib/php/
# mkdir session
# chown nginx:nginx session/

После этого загрузилась панель phpmyadmin:

Более подробную информацию об установке и настройке phpmyadmin смотрите в отдельной статье.

На этом все, настройка nginx + php-fpm на CentOS7 закончена.

Онлайн курс по Linux

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Administrator Linux. Professional» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

Что даст вам этот курс:

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

Проверьте себя на вступительном тесте и смотрите подробнее программу по .

Настройка Nginx

К настоящему времени у вас уже должен быть установлен Nginx с сертификатом SSL в вашей системе, если нет, проверьте предварительные требования для этого руководства.

Откройте текстовый редактор и создайте новый серверный блок nginx :

Добавьте следующие строки:

/etc/nginx/conf.d/example.com.conf

Не забудьте заменить example.com на свой домен WordPress и указать правильный путь к файлам сертификатов SSL. Все HTTP-запросы будут перенаправлены на HTTPS . Фрагменты, используемые в этой конфигурации, созданы в этом руководстве .

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

Если ошибок нет, результат должен выглядеть так:

и вы можете перезапустить Nginx , набрав:

Настройка Nginx

К настоящему времени у вас уже должен быть установлен Nginx с SSL-сертификатом в вашей системе, если не проверены предварительные условия для этого урока.

Чтобы создать новый блок сервера для нашего экземпляра WordPress мы будем использовать рецепт Nginx с официального сайта Nginx.

Откройте ваш текстовый редактор и создайте новый блок сервера nginx:

Добавьте следующие строки:

Не забудьте заменить example.com доменом WordPress и указать правильный путь к файлам SSL-сертификатов. Все HTTP-запросы будут перенаправлены на HTTPS. Фрагменты, используемые в этой конфигурации, созданы в этом руководстве.

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

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

и вы можете перезапустить Nginx, набрав:

Шаг #1: Настройка файервола

По умолчанию в CentOS 7 80-порт, на котором работает http-сервер, фильтруется файерволом. Доступ к 80-порту можно получить с локального хоста, но никак не с внешнего. Для того, чтобы другие компьютеры могли подключаться к нашему серверу по 80-порту (т.е могли просматривать сайты) нам необходимо его открыть, добавив новое правило работы межсетевого экрана, с помощью утилиты .

Для начала убедимся, что файервол у нас запущен и включен в автозапуск при перезагрузке сервера:

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

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

Перезапустим службу для того, чтобы изменения вступили в силу.

Убедимся в том, что службы и добавлены в публичную зону.

В появившейся строке результата, должны быть указаны слова и .

Теперь, при удачно выполненных предыдущих действиях, ваши будущие сайты будут доступны для всех.

Подключение к базе из веб-сервера

По отдельности, наши серверы готовы к работе. Теперь настроим их таким образом, чтобы из веб-сервера можно было подключиться к СУБД.

Зайдем в контейнер с базой данных:

docker exec -it maria_db /bin/bash

Подключимся к mariadb:

:/# mysql -p

Создадим базу данных, если таковой еще нет:

> CREATE DATABASE docker_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

* в данном примере мы создаем базу docker_db.

Создаем пользователя для доступа к нашей базе данных:

> GRANT ALL PRIVILEGES ON docker_db.* TO ‘docker_db_user’@’%’ IDENTIFIED BY ‘docker_db_password’;

* и так, мы дали полные права на базу docker_db пользователю docker_db_user, который может подключаться от любого хоста (%). Пароль для данного пользователя — docker_db_password.

Отключаемся от СУБД:

> quit

Выходим из контейнера:

:/# exit

Теперь перезапустим наши контейнеры с новым параметром, который будет объединять наши контейнеры по внутренней сети.

Останавливаем работающие контейнеры и удаляем их:

docker stop maria_db web_server

docker rm maria_db web_server

Создаем docker-сеть:

docker network create net1

* мы создали сеть net1.

Создаем новые контейнеры из наших образов и добавляем опцию —net, которая указывает, какую сеть будет использовать контейнер:

docker run —name maria_db —net net1 -d -v mariadb:/var/lib/mysql mariadb

docker run —name web_server —net net1 -d -p 80:80 dmosk/webapp:v1

* указав опцию —net, наши контейнеры начинают видеть друг друга по своим именам, которые мы задаем опцией —name.

Готово. Для проверки соединения с базой данных в php мы можем использовать такой скрипт:

<?php
ini_set(«display_startup_errors», 1);
ini_set(«display_errors», 1);
ini_set(«html_errors», 1);
ini_set(«log_errors», 1);
error_reporting(E_ERROR | E_PARSE | E_WARNING);
$con = mysqli_connect(‘maria_db’, ‘docker_db_user’, ‘docker_db_password’, ‘docker_db’);
?>

* в данном примере мы подключаемся к базе docker_db на сервере maria_db с использованием учетной записи docker_db_user и паролем docker_db_password.

После его запуска, мы увидим либо пустой вывод (если подключение выполнено успешно), либо ошибку.

Настройка PHP-FPM Nginx CentOS

Если вам нужен Nginx, то скорее всего, вам нужно также настроить его для работы с интерпретатором PHP. Дальше будет разобрана настройка php-fpm Nginx CentOS 7. Прочитать более подробно про установку PHP 7 в CentOS можно в отдельной статье, а в этой статье мы будем работать с версией, доступной в официальных репозиториях. Для Nginx нам необходимо установить пакет php-fpm:

Затем запустите службу php-fpm командой:

Откройте конфигурационный файл php-fpm, который находится по адресу /etc/php-fpm.d/www.conf и посмотрите, на каком порту ожидает соединений запущенная служба. По умолчанию это 9000:

Далее нам осталось только связать Nginx с новой службой. Для этого в секцию server добавьте такой код:

Здесь очень важно значение этого параметра:

Оно должно соответствовать тому, которое мы видели в файле /etc/php-fpm.d/www.conf. Это адрес и порт на котором ожидает подключения служба php-fpm. Всё остальное можно оставить как есть и модифицировать при необходимости. Затем перезагрузите Nginx:

Опция reload позволяет перечитать конфигурацию без перезагрузки веб-сервера. Осталось создать тестовый файл с таким содержимым:

Затем откройте адрес сервера на который был установлен Nginx плюс phpinfo.php в браузере:

Теперь вы увидите, что php-fpm nginx настроен полностью и корректно работает.

Обратите внимание, что секция location для php — это регулярное выражение и если у вас будут более общие регулярные выражения, то эта секция должна находиться перед ними, потому что Nginx не будет проверять все регулярные выражения и искать самое подходящее, а выберет первое, которое совпадёт

Образы Docker

Образ Docker состоит из серии слоев, представляющих инструкции в файле Dockerfile образа, которые составляют исполняемое программное приложение. Изображение — это неизменяемый двоичный файл, включающий приложение и все другие зависимости, такие как двоичные файлы, библиотеки и инструкции, необходимые для запуска приложения. Короче говоря, образ Docker — это, по сути, снимок контейнера Docker.

Docker Hub — это облачная служба реестра, которая, помимо прочего, используется для хранения образов Docker в общедоступном или частном репозитории.

Для поиска изображения в репозитории Docker Hub просто используйте подкоманду . Например, чтобы найти образ CentOS, запустите:

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

Как видите, в результатах поиска отображается таблица с пятью столбцами: , , , и . Официальный образ — это образ, который Docker разрабатывает совместно с партнерами по разработке.

Если мы хотим загрузить официальную сборку CentOS 7, мы можем сделать это с помощью подкоманды :

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

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

Если по какой-то причине вы хотите удалить изображение, вы можете сделать это с помощью подкоманды :

Возможные проблемы

1. undefined symbol: seccomp_api_set

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

/usr/bin/containerd: symbol lookup error: /usr/bin/containerd: undefined symbol: seccomp_api_set

Причина: ошибка возникает, если установить свежую версию containerd на систему с необновленной библиотекой libseccomp.

Решение: обновляем libseccomp.

а) в CentOS:

yum update libseccomp

б) в Ubuntu:

apt-get —only-upgrade install libseccomp2

2. error initializing network controller list bridge addresses failed no available network

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

error initializing network controller list bridge addresses failed no available network

Причина: система не может создать docker-интерфейс.

Решение: создаем docker-интерфейс вручную. Устанавливаем утилиту для работы с bridge-интерфейсами.

а) в CentOS:

yum install bridge-utils

б) в Ubuntu:

apt-get install bridge-utils

Создаем интерфейс:

brctl addbr docker0

Назначаем IP-адреса на созданный интерфейс:

ip addr add 192.168.84.1/24 dev docker0

* в нашем примере для docker мы задали адрес 192.168.84.1.

Включаем созданный интерфейс:

ip link set dev docker0 up

Можно запускать docker:

systemctl start docker

Установка PHP 7.2

CentOS 7 поставляется с PHP версии 5.4. Рекомендуемая версия PHP для WordPress — PHP 7.2.

Чтобы установить PHP и все необходимые расширения PHP, выполните следующие команды:

Мы установили PHP FPM, потому что мы будем использовать Nginx в качестве веб-сервера.

По умолчанию PHP FPM запускается как пользовательский на порту 9000. Мы изменим пользователя на и переключимся с сокета TCP на сокет Unix. Для этого откройте файл отредактируйте строки, выделенные желтым:

/etc/php-fpm.d/www.conf

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

После внесения изменений включите и запустите службу PHP FPM:

4: Настройка TLS/SSL на веб-сервере Nginx

Теперь нужно настроить веб-сервер Nginx для обслуживания сертификата.

Если веб-сервер Nginx ещё не установлен, установите его сейчас. Сначала добавьте репозиторий epel при помощи команды:

Затем установите Nginx:

Затем отредактируйте конфигурационный файл Nginx, чтобы настроить поддержку сертификата. По умолчанию он хранится в /etc/nginx/conf.d. Создайте новый файл по имени ssl.conf .

Вставьте в него следующий код, заменив example.com своим доменом:

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

Этот код настраивает сервер для поддержки SSL и сертификата Let’s Encrypt.

Примечание: Этот код настраивает поддержку только стандартной страницы Nginx; чтобы обслуживать больше страниц, отредактируйте этот файл.

Теперь нужно настроить переадресацию HTTP-трафика (порт 80) на порт HTTPS (443).

Конфигурационный файл Nginx по умолчанию позволяет быстро добавлять директивы к блоку server для порта 80, создавая файлы в каталоге /etc/nginx/default.d.

Создайте новый файл с именем ssl-redirect.conf и откройте его для редактирования с помощью следующей команды:

Вставьте в него строку:

Сохраните и закройте файл. Трафик HTTP перенаправляется на порт 443.

Запустите Nginx:

Затем включите Nginx как сервис:

Теперь веб-сервер поддерживает сертификат TLS/SSL. Протестируйте работу сертификата при помощи браузера.

Настройка Nginx:

Редактируем конфигурационный файл Nginx:

 
mcedit /etc/nginx/nginx.conf

Вот готовый конфиг:

 
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user  "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       :80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            proxy_pass http://127.0.0.1:8080/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_connect_timeout 120;
            proxy_send_timeout 120;
            proxy_read_timeout 180;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
    
    
    server {
        listen  80;
        server_name test3.local;
        location / {
            root  /home/public/test3.local/www;
            index  index.html index.htm;
            try_files $uri $uri/ =404;
        }
        error_page  500 502 503 504  /50x.html;
        location = /50x.html {
            root  /usr/share/nginx/html;
        }
    }
    
    server {
        listen       80;
        server_name  test4.local;
        root         /usr/share/nginx/html;

        location / {
            proxy_pass http://127.0.0.1:8000/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_connect_timeout 120;
            proxy_send_timeout 120;
            proxy_read_timeout 180;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       :443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

Тут 3 набора правил:

  •  
            listen       80 default_server;
            listen       :80 default_server;
    

    — отправляет все запросы, не обработанные другим правилом, на Apache (http://127.0.0.1:8080/ — данный порт, указывали при настроке Apache)

  •  
            listen  80;
            server_name test3.local;
    

    — это тестовый домен, который будет обрабатывать сам Nginx (Присутствует только для примера)

  •  
            listen       80;
            server_name  test4.local;
    

    — отправляет все запросы, у которых доменное имя test4.local на WSGI (http://127.0.0.1:8000/ — это стандартный порт WSGI

Далее перезагружаем Nginx

 
systemctl restart nginx

На этом все.

Также можно не устанавливать Python и Flask на хостовую машину, а поднять ее через Docker конетйнер: Как сделать и запустить образ Docker с Python Flask на борту. Соответственно в настройках b>Nginx нужно будет указать тот порт (http://127.0.0.1:8000/), который будет указан при запуске контейнера.

Установка PHP 7.2

CentOS 7 поставляется с версией PHP 5.4. Рекомендуемая версия PHP для WordPress — PHP 7.2.

Чтобы установить PHP и все необходимые расширения PHP, выполните следующие команды:

Мы установили PHP FPM, потому что мы будем использовать Nginx в качестве веб-сервера.

По умолчанию PHP FPM будет работать как пользователь на порту 9000. Мы изменим пользователя на и переключимся с сокета TCP на сокет Unix. Для этого откройте файл отредактируйте строки, выделенные желтым цветом:

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

После внесения изменений включите и запустите службу PHP FPM:

Описание платформы

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

Контейнеризация – процесс, при котором приложения Линукс развертываются в контейнерах. Идея об изолировании приложений возникла еще при создании первых моделей ПК, а применяться на практике начала только недавно. Популярности контейнеризации поспособствовали высокие темпы развития ПО.

Итак, в чем главные отличия образа от контейнера:

  1. Под образом подразумевается некий исполняемый пакет, в который включены библиотеки, программный код, конфигурационные файлы, среда выполнения и ее переменные – все, что требуется для открытия приложения.
  2. Под контейнером подразумевается экземпляр образа. То есть один образ может вмещать в себя сразу несколько контейнеров.

Открыть образы можно в режиме «для чтения». Образы платформы делятся на два вида: дистрибутивы Линукс и сконфигурированное корпоративное ПО, подготовленное к запуску. Вид можно прописать в специальном файле Dockerfile. Он представляет собой файл текстового формата, который может понять только демон Docker. Файл создается для того, чтобы можно было запустить новый образ.

Обратите внимание: демоном называется компонент Docker, которому поручено выполнять трудные задачи создания, распределения и запуска изображений сразу после поступления команды от Docker-клиентов. Открыть приложение на платформе можно в несколько шагов:

Открыть приложение на платформе можно в несколько шагов:

  1. Выбрать нужное приложение.
  2. Описать его в Dockerfile, указать среду для выполнения приложения.
  3. Сформировать общий файл – образ, который будет включать в себя набор библиотек (без общей системной) и исполняемые файлы. Все элементы войдут в контейнер и станут неизменными при дальнейшей работе.
  4. Запустить платформу, в которой уже указан образ приложения, использующегося для решения прикладной задачи.

5: Автоматическое обновление сертификата

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

Надёжный способ обеспечить своевременное обновление сертификата – это демон cron.

Вместо плагина Standalone используйте плагин Webroot; он позволяет проверить домен сервера, не останавливая веб-сервер. Плагин Webroot добавляет скрытый файл в document root веб-сервера, который необходим Let’s Encrypt CA  для подтверждения домена.

Использование плагина Webroot

Плагин Webroot помещает специальный файл в каталог ./well-known в главном каталоге веб-сервера. После этого Let’s Encrypt может открыть этот файл, чтобы подтвердить домен. В зависимости от настроек сервера вам может понадобиться явно разрешить доступ к каталогу ./well-known.

Чтобы центр сертификации Let’s Encrypt смог получить доступ к каталогу, нужно изменить настройки Nginx.

Откройте ssl.conf:

В блок server добавьте следующий код:

Если ранее вы изменили путь к root-каталогу, укажите новый путь в директиве root, иначе плагин Webroot не сможет найти этот каталог. По умолчанию главный каталог находится в /usr/share/nginx/html.

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

Теперь можно использовать плагин Webroot для обновления сертификата. Указать доменные имена можно при помощи опции –d.

После этого нужно перезапустить Nginx, чтобы получить доступ к обновлённому сертификату.

Конфигурационный файл Let’s Encrypt

Чтобы упростить процесс обновления Let’s Encrypt, создайте конфигурационный файл:

Откройте его:

Файл должен выглядеть так (закомментированные строки опущены):

Можно не указывать домен в команде, а просто использовать конфигурационный файл Let’s Encrypt для автоматического внесения домена в команду. Для обновления сертификата можно использовать следующую команду:

Скрипт для обновления сертификата

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

Загрузите скрипт и сделайте его исполняемым; предварительно можно просмотреть его содержимое

Скрипт le-renew-webroot использует домен в качестве аргумента. Если сертификат не нуждается в обновлении, скрипт просто сообщит, сколько дней осталось до истечения срока действия сертификата.

Примечание: Скрипт не запустится, если файла /usr/local/etc/le-renew-webroot.ini не существует. Также нужно убедиться, что в начале конфигурационного файла и в начале сертификата (при его создании) был указан один и тот же домен.

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

После этого нужно отредактировать crontab и добавить в таблицу новую команду, которая будет запускаться раз в неделю.

Добавьте следующую строку:

Сохраните и закройте файл. Теперь cron будет запускать команду le-renew-webroot каждый понедельник в 2:30 ночи, а вывод команды будет помещён в лог /var/log/le-renewal.log.

Примечание: Больше информации о работе cron можно получить в статье «Автоматизация задач с помощью cron».

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: