#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. Не беспокойтесь! Рад, что смог помочь 🙂