Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions Docker/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
### environment ################
TIMEZONE=Europe/Moscow

### sites ######################
SITES_ENABLED_PATH=./nginx/hosts

### IDE ########################
PHP_IDE_CONFIG=serverName=Docker

### code #######################
PHP_VERSION=8.0
APP_CODE_PATH_HOST=./code
APP_CODE_PATH_DOCKER=/var/www/html
PHP_ERROR_LOG_PATH=./log/php_errors/

### x-debug ####################
X_DEBUG=1
X_DEBUG_ERROR_LOG_PATH=./log/x-debug/

### memprof ####################
### только MEMPROF_PROFILE_ENABLE=null отключает Memprof,
### для включения использовать любое значение.
### В документации рекомендуют 1
################################
MEMPROF_PROFILE_ENABLE=null
MEMPROF_LOG_PATH_HOST=./log/memprof
MEMPROF_LOG_PATH_DOCKER=/var/log/memprof/

### unix socket ################
UNIX_SOCKET_PATH_HOST=./storage/docker/sock
UNIX_SOCKET_PATH_DOCKER=/sock

### mysql-Master ###############
MYSQL_MASTER_DB=laravel
MYSQL_MASTER_ROOT_PASSWORD=password
MYSQL_MASTER_STORAGE_PLACE=./storage/docker/mysql1
MYSQL_MASTER_LOG_PATH_HOST=./log/mysql/master
MYSQL_MASTER_LOG_PATH_DOCKER=/var/log/mysql/

### mysql-Slave ################
MYSQL_SLAVE_DB=laravel
MYSQL_SLAVE_ROOT_PASSWORD=password
MYSQL_SLAVE_STORAGE_PLACE=./storage/docker/mysql2
MYSQL_SLAVE_LOG_PATH_HOST=./log/mysql/slave
MYSQL_SLAVE_LOG_PATH_DOCKER=/var/log/mysql/

### postgres ###################
PGSQL_DB_NAME=postgres
PGSQL_DB_USER=postgres
PGSQL_DB_PASSWORD=password
PGSQL_STORAGE_PLACE=./storage/docker/postgres/data

### Redis ######################
REDIS_CONF=./redis/conf/redis/etc
REDIS_DATA=./storage/docker/redis/data
REDIS_LOG=./log/docker/redis/

### Elasticsearch ##############
ELASTICSEARCH_DATA=./storage/docker/elasticsearch/data

125 changes: 125 additions & 0 deletions Docker/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
# Docker
____
### Набор контейнеров для работы
| Обозначение | Путь к dockerfile | Описание |
|----|:----:|:----|
| `>app`| ./fpm |исполнение скриптов |
| `>workspace` | ./workspace | контейнер для выполнения служебных функций (composer, npm и т.д) |
| `>webserver`| ./nginx | webserver проекта |
| `>mysql-master`| Из репозитория | мастер база данных Mysql |
| `>mysql-slave`| Из репозитория | slave база данных Mysql |
| `>postgres`| Из репозитория | база данных Postgres |
| `>redis`| ./redis | база данных Redis |
| `>elasticsearch`| Из репозитория | база данных Elasticsearch |
| `>memcached`| ./memcached | контейнер, где крутиться memcached |

### Назначение папок
- code (Место расположения исполняемого кода)
- [application.loc](./code/application.loc) - код для сайта application.loc
- [otus.loc](./code/otus.loc) - код для сайта otus.loc
- log (Логи)
- [memprof](log/memprof) - путь сохранения в проекте для данных из memprof берется из `$_SERVER['MEMPROF_LOG_PATH']`
```
Используется в коде например так:
$memprofPath = $_SERVER['MEMPROF_LOG_PATH'];
memprof_dump_callgrind(fopen($memprofPath."memprof_logs.out", "w"));
```
- [php_errors](log/php_errors) - расположение логов ошибок PHP
- [xdebug](log/x-debug) - расопложение логов x-debug
- storage->docker (Хранение данных)
- elasticsearch
- data
- nodes
- 0 - `нулевая нода у эластики`
- mysql1 - `Место хранения данных Mysql-master`
- mysql2 - `Место хранения данных Mysql-slave`
- postgres - `Место хранения данных Postgres`
- redis - `Место хранения данных elasticsearch`
- sock - `Место хранения unix-socket`

### Структура .env

>#### environment
|Параметр|Назначение|
|----|----|
|TIMEZONE=Europe/Moscow| Зона времени, устанавливаемая на все контейнеры |

>#### Sites
|Параметр|Назначение|
|----|----|
|SITES_ENABLED_PATH=./nginx/hosts| Место на хосте, где находятся конфигурационные файлы для папки sites-enabled Веб-сервера. |

Достаточно положить в эту папку новый, настроенный файл типа `newsite.loc.conf`,
в ./code создать новую директорию с кодом,
установить в файле `hosts` связь доменного имени с localhost,
перезагрузить веб-сервер и готово. Можно пользоваться новым доменным именем `http://newsite.loc`

>#### IDE
|Параметр|Назначение|
|----|----|
|PHP_IDE_CONFIG=serverName=Docker| Имя сервера в IDE, для режима пошаговой отладки x-debug, должно совпадать со значением в serverName |


>#### code
|Параметр|Назначение|
|----|----|
|PHP_VERSION=8.0| версия PHP |
|APP_CODE_PATH_HOST=./code| Местоположение кода на хосте |
|APP_CODE_PATH_DOCKER=/var/www/html| Местоположение кода в контейнерах |
|PHP_ERROR_LOG_PATH=./log/php_errors/ | Место складывания логов ошибок PHP |

>#### x-debug
|Параметр|Назначение|
|----|----|
|X_DEBUG=1|при true или 1 включается x-debug|
|X_DEBUG_ERROR_LOG_PATH=./log/x-debug/| Место складывания логов x-Debug |

>#### memprof
|Параметр|Назначение|
|----|----|
|MEMPROF_LOG_PATH_HOST=./log/memprof| путь для лога memprof на хосте |
|MEMPROF_LOG_PATH_DOCKER=/var/log/memprof/| путь для лога memprof в контейнере |

>#### unix socket
|Параметр|Назначение|
|----|----|
|UNIX_SOCKET_PATH_HOST=./storage/docker/sock| путь для файла сокета на хосте |
|UNIX_SOCKET_PATH_DOCKER=/sock| путь для файла сокета в контейнере |

>#### mysql-Master
|Параметр|Назначение|
|----|----|
|MYSQL_MASTER_DB=laravel| имя базы данных mysql-master |
|MYSQL_MASTER_ROOT_PASSWORD=password| пароль |
|MYSQL_MASTER_STORAGE_PLACE=./storage/docker/mysql1| путь к каталогу хранения данных |
|MYSQL_MASTER_LOG_PATH_HOST=./log/mysql/master| Место где можно смотреть логи на хосте |
|MYSQL_MASTER_LOG_PATH_DOCKER=/var/log/mysql/| Место хранения MySql логов в контейнере |

>#### mysql-Slave
|Параметр|Назначение|
|----|----|
|MYSQL_SLAVE_DB=laravel| имя базы данных mysql-slave |
|MYSQL_SLAVE_ROOT_PASSWORD=password| пароль |
|MYSQL_SLAVE_STORAGE_PLACE=./storage/docker/mysql2| путь к каталогу хранения данных |
|MYSQL_SLAVE_LOG_PATH_HOST=./log/mysql/master| Место где можно смотреть логи на хосте |
|MYSQL_SLAVE_LOG_PATH_DOCKER=/var/log/mysql/| Место хранения MySql логов в контейнере |

>#### postgres
|Параметр|Назначение|
|----|----|
|PGSQL_DB_NAME=postgres| имя базы данных Postgres - задается при создании контейнера, если базы нет |
|PGSQL_DB_USER=postgres| имя пользователя - задается при создании контейнера, если базы нет |
|PGSQL_DB_PASSWORD=password| пароль - задается при создании контейнера, если базы нет |
|PGSQL_STORAGE_PLACE=./storage/docker/postgres/data| путь к каталогу хранения данных |

>#### Redis
|Параметр|Назначение|
|----|----|
|REDIS_CONF=./redis/conf/redis/etc|местоположение конфигурационного файла redis|
|REDIS_DATA=./storage/docker/redis/data| путь к каталогу хранения данных |
|REDIS_LOG=./log/docker/redis/| путь к каталогу логов |

>#### Elasticsearch
|Параметр|Назначение|
|----|----|
|ELASTICSEARCH_DATA=./storage/docker/elasticsearch/data| путь к каталогу хранения данных |
107 changes: 107 additions & 0 deletions Docker/code/application.loc/checker.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Сайт APPLICATION.LOC Запущен из Контейнера.<br><br>
<form action="index.php" method="post">
<button type="submit" name="checker" value="checkAll">Запустить все</button>
<pre>
<table border="1" style="font-size: x-large">
<tr>
<th width="100px">Что проверяем</th>
<th width="50px">Проверка</th>
<th>Результат</th>
</tr>
<tr>
<td>Server Address</td>
<td align="center"><button type="submit" name="checker" value="address">Info</button></td>
<td id="address"></td>
</tr>
<tr>
<td>Тип запуска</td>
<td align="center"><button type="submit" name="checker" value="sapi_name">Info</button></td>
<td id="sapi_name"></td>
</tr>
<tr>
<td>Postgres PDO</td>
<td align="center"><button type="submit" name="checker" value="postgresPDO">Check</button></td>
<td id="postgresPDO"></td>
</tr>
<tr>
<td>Postgres pg_connect</td>
<td align="center"><button type="submit" name="checker" value="pg_connect">Check</button></td>
<td id="pg_connect"></td>
</tr>
<tr>
<td>MySQL PDO</td>
<td align="center"><button type="submit" name="checker" value="mysqlPDO">Check</button></td>
<td id="mysqlPDO"></td>
</tr>
<tr>
<td>MySQL mysqli</td>
<td align="center"><button type="submit" name="checker" value="mysqli">Check</button></td>
<td id="mysqli"></td>
</tr>
<tr>
<td>ElasticSearch</td>
<td align="center"><button type="submit" name="checker" value="elastic">Check</button></td>
<td><span id="elastic"></span> | <span id="elastic-php"></span></td>
</tr>
<tr>
<td>Memcached</td>
<td align="center"><button type="submit" name="checker" value="memcached">Check</button></td>
<td id="memcached"></td>
</tr>
<tr>
<td>Redis</td>
<td align="center"><button type="submit" name="checker" value="redis">Info</button></td>
<td id="redis"></td>
</tr>
<tr>
<td>Memprof</td>
<td align="center"><button type="submit" name="checker" value="memprof">Info</button></td>
<td id="memprof"></td>
</tr>
<tr>
<td>opcache</td>
<td align="center"><button type="submit" name="checker" value="opcache">Info</button></td>
<td id="opcache"></td>
</tr>
</table>
</pre>
</form>

</body>
<script>
function print_r(arr, space) {
//Проверка аргумента
//Если он есть, то присвоить себя
//Иначе присвоить пустую строку
space = space || "";
var result = " " + (arr.length ? "Array" : "Object") + " \n " + space + " ( \n";
var iter = 0;
//Такой вид прохода по массиву позволяет вызывать эту функцию любым массивом
// (даже с объектом)
for (var i in arr) {
iter++;
//Проверка на существование следующего элемента массива
// (или объекта, неважно)
if (arr[i] != null) {
if ((arr[i].length > 0 || typeof (arr[i]) === "object") && typeof (arr[i]) !== "string") {
result += "\t" + space + " [ " + i + " ] =>" + print_r(arr[i], space + "\t");
} else {
result += "\t" + space + " [ " + i + " ] => " + arr[i];
}
if (iter < Object.keys(arr).length) {
result += ",";
}
result += "\n";
}
}
return result + space + " )";
}
</script>
</html>
Loading