Docker Lamp перенаправляет https

#docker #apache #https

#docker #apache #https

Вопрос:

Я новичок в docker. Я установил docker lamp (mattrayner / lamp).

Я помещаю свой проект в /var/www/html, и когда я просматриваю проект, я всегда перенаправляюсь на https.

Проблема в том, что с https localhost это выдает ошибку. Однако с http проект работает.

Кто-нибудь может дать мне несколько предложений?

Спасибо всем за вашу доступность.

Ответ №1:

Мне, наконец, удалось получить образ mattrayner / lamp: latest-1804, работающий локально по протоколу HTTPS с использованием самозаверяющего сертификата,

Я не думаю, что это подходит для производства, конечно (поскольку оно самозаверяющее, и вы, вероятно, используете файл docker-compose), но оно позволяет локальную разработку на HTTPS для приложения,

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

Решение

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

 Lamp
│   Dockerfile
│
└───app
│   │   index.php
│   
└───certs
│   │   docker.crt
│   |   docker.key
│   |   key.pem
└───ssl
│   │   custom-ssl.conf
 

Файл Dockerfile

 FROM mattrayner/lamp:latest-1804

# Copy self-signed certificate onto ssl cert directory in docker container
COPY certs/docker.crt certs/docker.key /etc/ssl/certs/

# Copy custom ssl config file to apache virtual sites directory in docker container
COPY ssl/custom-ssl.conf /etc/apache2/sites-available/custom-ssl.conf

# Enable SSL, enable custom site and restart apache server
RUN a2enmod ssl amp;amp; a2ensite custom-ssl.conf amp;amp; service apache2 restart

# Copy application directory (containing index.php)
COPY /app .

# Set 'run.sh' as default command for docker container
CMD ["/run.sh"]

 

Пользовательский файл конфигурации SSL

 <VirtualHost *:443>
  # Directory where webpages are stored
  DocumentRoot "/var/www/html"

  # Name of your server (could be a domain name)
  ServerName localhost
  
  # Switch on SSL
  SSLEngine on

  # Paths to Self-Signed certificate and key
  SSLCertificateFile /etc/ssl/certs/docker.crt
  SSLCertificateKeyFile /etc/ssl/certs/docker.key
</VirtualHost>
 

Самозаверяющие сертификаты

Вы можете перенаправить в каталог ‘certs’ и сгенерировать самозаверяющий сертификат, используя следующую команду:

 openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout docker.key -out docker.crt
 

Приложение

Мое приложение состояло всего из ‘index.php «файл в каталоге «приложение». Содержимое ‘index.php ‘файл выглядит следующим образом:

 <?php
$db = new PDO('mysql:host=localhost', 'root', null);

function getOSInformation()
 {
     if (false == function_exists("shell_exec") || false == is_readable("/etc/os-release")) {
         return null;
     }

      $os         = shell_exec('cat /etc/os-release');
     $listIds    = preg_match_all('/.*=/', $os, $matchListIds);
     $listIds    = $matchListIds[0];

      $listVal    = preg_match_all('/=.*/', $os, $matchListVal);
     $listVal    = $matchListVal[0];

      array_walk($listIds, function(amp;$v, $k){
         $v = strtolower(str_replace('=', '', $v));
     });

      array_walk($listVal, function(amp;$v, $k){
         $v = preg_replace('/=|"/', '', $v);
     });

      return array_combine($listIds, $listVal);
 }
$osInfo = getOSInformation();
?>
<!doctype html>
<html lang=en>
<head>
    <meta charset=utf-8>
    <title>Hello World from Docker-LAMP</title>

    <style>
        @import 'https://fonts.googleapis.com/css?family=Montserrat|Raleway|Source Code Pro';

        body { font-family: 'Raleway', sans-serif; }
        h2 { font-family: 'Montserrat', sans-serif; }
        pre {
            font-family: 'Source Code Pro', monospace;

            padding: 16px;
            overflow: auto;
            font-size: 85%;
            line-height: 1.45;
            background-color: #f7f7f7;
            border-radius: 3px;

            word-wrap: normal;
        }

        .container {
            max-width: 1024px;
            width: 100%;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="container">
        <header>
            <img src="https://cdn.rawgit.com/mattrayner/docker-lamp/831976c022782e592b7e2758464b2a9efe3da042/docs/logo.svg" alt="Docker LAMP logo" />
            <h2>Welcome to <a href="https://github.com/mattrayner/docker-lamp" target="_blank">Docker-Lamp</a> a.k.a mattrayner/lamp</h2>
        </header>
        <article>
            <p>
                For documentation, <a href="https://github.com/mattrayner/docker-lamp" target="_blank">click here</a>.
            </p>
        </article>
        <section>
            <pre>
OS: <?php echo $osInfo['pretty_name']; ?><br/>
Apache: <?php echo apache_get_version(); ?><br/>
MySQL Version: <?php echo $db->getAttribute( PDO::ATTR_SERVER_VERSION ); ?><br/>
PHP Version: <?php echo phpversion(); ?><br/>
phpMyAdmin Version: <?php echo getenv('PHPMYADMIN_VERSION'); ?>
            </pre>
        </section>
    </div>
</body>
</html>
 

Создание и запуск решения

Построение образа Docker

Чтобы создать образ docker для этого приложения, вы можете перенаправить в каталог ‘Lamp’ (базовый каталог) и выполнить следующую команду:

 docker build . -t lamp
 

Запуск образа Docker в контейнере Docker

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

 docker run -p 443:443 lamp
 

ВАЖНОЕ ПРИМЕЧАНИЕ — ваше приложение будет доступно только после того, как вы увидите в журналах контейнера сообщение «apache2 перешел в РАБОЧЕЕ состояние» и «mysqld перешел в РАБОЧЕЕ состояние»

Доступ к приложению

Вы должны иметь доступ к приложению по адресу ‘https://localhost ‘

ВАЖНОЕ ПРИМЕЧАНИЕ — при первом доступе вы увидите предупреждение «Ваше соединение не является частным», вы можете нажать «Дополнительно», а также нажать «перейти к «https://localhost «‘

Комментарии:

1. Большое спасибо, Джейсон, теперь все работает нормально! Отлично!

2. Не беспокойтесь! Рад, что смог помочь 🙂