Откроем в браузере: http://localhost:4400 и увидим стандартное приветствие
nginx.
Теперь настроим, чтобы nginx отдавал статическое содержимое папки ./www/public.
Сначала создадим папки
mkdir -pv www/public
Создадим файл ./www/pulbic/index.html
Hello World!
Создадим файл конфигурации nginx — nginx/conf/custom.conf. Для начала
скопируем стандартный /etc/nginx/conf.d/default.conf.
Изменим docker-compose.yml
Теперь по адресу http://localhost:4400 отображается 'Hello World!' из файла www/public/index.html.
Прорывом это назвать сложно, но мы определенно двигаемся в нужном направлении.
Настройка php
Начнем с создания папок для хранения файлов настроек контейнера.
Также нам нужно внести изменения в настройки nginx, чтобы файлы с расширением .php обрабатывались php-fpm.
Изменим файл nginx/conf/custom.conf следующим образом
Осталось создать файл www/public/info.php со следующим кодом
Перезапустим наш контейнер
docker-compose restart
И теперь по адресу http://localhost:4400/info.php отображается информация о
настройках php.
Еще немного поэкспериментируем и создадим файл www/Test.php
А содержимое файла www/public/info.php заменим на следующее:
prn();
Теперь по адресу http://localhost:4400/info.php отображается 'success', а это
означает, что php-fpm доступны скрипты расположенные в папке www, а через
браузер они недоступны. Т.е. мы продолжаем двигаться в нужном направлении.
Настройка redis
Это, пожалуй, самая короткая часть.
Redis в этом проекте не будет доступен из внешней сети, но защиту паролем
настроим.
Для этого создадим файл .env
Чтобы протестировать подключение к redis изменим файл www/public/info.php
connect(
'redis',
6379
);
// авторизуемся. 'eustatos' - пароль, который мы задали в файле `.env`
$redis->auth($_ENV['REDIS_PASSWORD']);
// публикуем сообщение в канале 'eustatos'
$redis->publish(
'eustatos',
json_encode([
'test' => 'success'
])
);
// закрываем соединение
$redis->close();
Рестартуем контейнер
docker-compose restart
Теперь подключимся к серверу redis
docker-compose exec redis bash
Перейдем к командной строке. 'eustatos' — пароль, который мы ранее задали в
файле .env
# redis-cli -a eustatos
Подпишемся на канал 'eustatos' (название произвольное, чтобы все работало,
долно совпадать с названием канала, которое мы определили в файле www/public/info.php)
> subscribe eustatos
После всех этих приготовлений, переходим в браузере по адресу http://localhost:4400/info.php и наблюдаем, как в терминале, где мы
подключались к redis появляются примерно следующие строки:
После этого в браузере по адресу http://localhost:5000 отображается «success».
Значит мы еще чуть ближе к нашей цели. Осталось совсем немного.
Изменим файл socket/index.js
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
// подключаемся к redis
const subscriber = require('redis').createClient({
host: 'redis',
port: 6379,
password: 'eustatos'
});
// подписываемся на изменения в каналах redis
subscriber.on('message', function(channel, message) {
// пересылаем сообщение из канала redis в комнату socket.io
io.emit('eustatosRoom', message);
});
// открываем соединение socket.io
io.on('connection', function(socket){
// подписываемся на канал redis 'eustatos' в callback
subscriber.subscribe('eustatos');
});
const port = process.env.PORT || 5000;
http.listen(
port,
function() {
console.log('Listen at ' + port);
}
);
На этом настройка контейнера socket.io завершена.
Настройка клиентского приложения
Клиентское приложение можно развернуть в любом из наших контейнеров, но
для чистоты эксперимента развернем его в отдельном контейнере.
Файлы клиентского приложения разместим в папке client
Откроем сначала в браузере http://localhost:8000. Для демонстрации результата
наших трудов нужно открыть панель разработчика.
Пока ничего не отображается.
Откроем в другой вкладке или окне адрес http://localhost:4400/info.php и посмотри на консоль панели разработчика нашего клиента. Мы должны увидеть:
{test: "success"}
А это значит, что наш сервер благополучно передал клиентскому приложению данные.