Для реализации LEMP-стека в контейнере на Fedora (которая основана на RPM) вы можете использовать Fedora в качестве базового образа. Однако более популярным выбором, особенно для Docker, может быть образ с CentOS или другой RPM-базированный дистрибутив, например, Rocky Linux или AlmaLinux. Тем не менее, вы можете использовать Fedora, так как она поддерживает последние версии пакетов.
Вот пошаговая инструкция по настройке LEMP-стека с использованием Docker на Fedora:
### Шаг 1: Создание структуры проекта
Создайте директорию для вашего проекта и перейдите в нее:
```bash
mkdir my_lemp_stack
cd my_lemp_stack
```
### Шаг 2: Создание Dockerfile
Создайте файл `Dockerfile` в этой директории и добавьте следующие строки:
```dockerfile
# Используем базовый образ Fedora
FROM fedora:latest
# Устанавливаем зависимости для Nginx, PHP и MySQL
RUN dnf -y update && \
dnf -y install nginx php php-fpm php-mysqlnd mariadb-server php-mbstring
# Копируем конфигурационные файлы
COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./www /var/www/html
# Открываем порты
EXPOSE 80
# Запускаем Nginx и PHP-FPM
CMD ["sh", "-c", "nginx; php-fpm"]
```
### Пояснения к Dockerfile
1. `FROM fedora:latest`: Определяет базовый образ, использующий Fedora.
2. `RUN dnf -y update ...`: Обновляет систему и устанавливает необходимые пакеты (`nginx`, `php`, `php-fpm`, `mariadb-server`).
3. `COPY ./nginx.conf /etc/nginx/nginx.conf`: Копирует ваш файл конфигурации Nginx в контейнер.
4. `COPY ./www /var/www/html`: Копирует веб-директорию с вашими PHP-скриптами.
5. `EXPOSE 80`: Указывает, что контейнер слушает на порту 80.
6. `CMD ["sh", "-c", "nginx; php-fpm"]`: Запускает Nginx и PHP-FPM.
### Шаг 3: Создание конфигурации Nginx
Создайте файл `nginx.conf` в корне вашего проекта:
```nginx
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location /metrics {
stub_status on;
allow 127.0.0.1; # разрешить доступ только локально
deny all; # закрыть доступ всем остальным
}
}
```
### Шаг 4: Создание PHP-скрипта
Создайте директорию `www` и добавьте файл `index.php` в нее:
```php
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$result = $mysqli->query("SELECT * FROM your_table LIMIT 2");
while ($row = $result->fetch_assoc()) {
echo $row['your_column1'] . "<br/>";
echo $row['your_column2'] . "<br/>";
}
$mysqli->close();
```
### Шаг 5: Сборка Docker-образа
В терминале выполните команду:
```bash
docker build -t my_lemp_stack .
```
### Шаг 6: Запуск контейнера
Запустите контейнер с помощью команды:
```bash
docker run -d -p 80:80 --name my_lemp_container my_lemp_stack
```
### Шаг 7: Проверка работоспособности
Откройте веб-браузер и перейдите по адресу `http://localhost`. Вы должны увидеть ваши строки из базы данных. Для доступа к метрикам Nginx используйте `http://localhost/metrics`.
### Пояснения к метрикам
Метрики Nginx будут содержать информацию о текущем состоянии сервера, такие как:
- `active connections`: