Compare commits

...

10 commits

11 changed files with 243 additions and 35 deletions

1
LICENSE.md Normal file
View file

@ -0,0 +1 @@
MIT

67
README.md Normal file
View file

@ -0,0 +1,67 @@
# Тестовое задание
## Запуск WordPress с базой данных MariaDB, Apache, Prometheus и Grafana
### Описание
Данный проект разработан для быстрого развертывания WordPress сайта с использованием базы данных MariaDB и веб-сервера Apache. Кроме того, в проект включен Prometheus для мониторинга и Grafana для визуализации данных.
### Содержание
- [Требования](#требования)
- [Установка](#установка)
- [Запуск](#запуск)
- [Мониторинг с Prometheus](#мониторинг-с-prometheus)
- [Визуализация с Grafana](#визуализация-с-grafana)
- [Лицензия](#лицензия)
### Требования
- Установленный Docker
- Установленный Docker Compose
### Установка
1. Клонируйте репозиторий:
```bash
git clone https://code.zhs.one/stransit/test.git && cd test
```
### Запуск
Для запуска всех сервисов используется Docker Compose. Просто выполните следующую команду:
```bash
docker-compose -f manufacturer/containe/services/docker-compose.yml up -d
```
Это развернет WordPress, MariaDB, Prometheus и Grafana в фоновом режиме.
### Мониторинг с Prometheus
Prometheus будет собирать метрики с Apache. Чтобы убедиться, что Prometheus работает, откройте браузер и перейдите по адресу:
```
http://localhost:9090
```
Здесь вы можете проверить доступные метрики и выполнить запросы.
### Визуализация с Grafana
Grafana предоставляет мощные возможности визуализации для ваших метрик. Для доступа к интерфейсу Grafana откройте браузер и перейдите по адресу:
```
http://localhost:3000
```
По умолчанию, логин и пароль:
- **Логин:** admin
- **Пароль:** admin
### Лицензия
Проект лицензирован под MIT License. Ознакомьтесь с файлом LICENSE для подробной информации.

View file

@ -5,10 +5,15 @@ ServerName localhost
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
AllowOverride None
Require all granted
</Directory>
<Location /server-status>
SetHandler server-status
Require ip 10.10.1.0/24
</Location>
ErrorLog /proc/self/fd/2
CustomLog /proc/self/fd/1 common
</VirtualHost>

View file

@ -0,0 +1,9 @@
apiVersion: 1
providers:
- name: 'apache-dashboard'
type: file
disableDeletion: false
updateIntervalSeconds: 10
allowUiUpdates: true
options:
path: /var/lib/grafana/dashboard

View file

@ -0,0 +1,7 @@
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://10.10.1.3:9090
isDefault: true

View file

@ -0,0 +1,8 @@
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'apache'
metrics_path: '/metrics'
static_configs:
- targets: ['10.10.1.5:9117']

View file

@ -3,4 +3,5 @@ FROM php:8.3-apache
RUN docker-php-ext-install mysqli
RUN a2enmod status
RUN a2enmod rewrite
RUN a2enmod rewrite
RUN a2enmod headers

View file

@ -0,0 +1,32 @@
#!/bin/bash
GF_SECURITY_ADMIN_PASSWORD=admin
GRAFANA_URL=localhost
DASHBOARD_FILE="dashboard.json"
DATA_SOURCE_UID="10.10.1.3:9090"
GRAFANA_URL=http://admin:${GF_SECURITY_ADMIN_PASSWORD}@${GRAFANA_URL}:3000
if [[ ! -f "$DASHBOARD_FILE" ]]; then
echo "Ошибка: Файл с дашбордом '${DASHBOARD_FILE}' не найден."
exit 1
fi
DASHBOARD_JSON=$(<"$DASHBOARD_FILE")
DASHBOARD_JSON=$(echo "$DASHBOARD_JSON" | sed "s/\${DS_LOCALHOST}/$DATA_SOURCE_UID/g")
IMPORT_JSON=$(jq -n --argjson dashboard "$DASHBOARD_JSON" \
'{dashboard: $dashboard, overwrite: true}')
echo "Измененный JSON дашборда:"
echo "$IMPORT_JSON"
response=$(curl -X POST "${GRAFANA_URL}/api/dashboards/import" \
-H "Content-Type: application/json" \
-d "${IMPORT_JSON}")
echo "Ответ от Grafana: ${response}"

View file

@ -4,4 +4,7 @@ MYSQL_ROOT_PASSWORD=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress
GRAFANA_URL=10.10.1.4
DASHBOARD_ID=893
GF_SECURITY_ADMIN_PASSWORD=admin

View file

@ -0,0 +1,108 @@
services:
db:
image: mariadb:11.6.2
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
networks:
db:
ipv4_address: 10.10.2.2
hostname: wordpress_db
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:6.7.1-php8.3-fpm-alpine
networks:
wp:
db:
ipv4_address: 10.10.2.3
volumes:
- wordpress_data:/var/www/html
apache:
build:
context: ../../../.
dockerfile: manufacturer/container/apache/Dockerfile
image: custom-apache:v5.3
networks:
metrics:
ipv4_address: 10.10.1.2
wp:
ports:
- "80:80"
- "443:443"
volumes:
- wordpress_data:/var/www/html
- ../../configs/apache/apache.conf:/etc/apache2/sites-available/000-default.conf
depends_on:
- wordpress
prometheus:
image: prom/prometheus:v3.1.0
volumes:
- ../../configs/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
networks:
metrics:
ipv4_address: 10.10.1.3
ports:
- "9090:9090"
exporter:
image: lusotycoon/apache-exporter
container_name: exporter
privileged: true
networks:
metrics:
ipv4_address: 10.10.1.5
ports:
- mode: ingress
target: 9117
published: "9117"
protocol: tcp
restart: unless-stopped
entrypoint: /bin/apache_exporter --scrape_uri="http://10.10.1.2/server-status?auto"
grafana:
image: grafana/grafana:11.4.0
networks:
metrics:
ipv4_address: 10.10.1.4
ports:
- "3000:3000"
environment:
GF_SECURITY_ADMIN_PASSWORD: ${GF_SECURITY_ADMIN_PASSWORD}
volumes:
- grafana_data:/var/lib/grafana
- ../../configs/grafana/provisioning:/etc/grafana/provisioning
# - ../grafana/import_dashboard.sh:/docker-entrypoint-init.d/import_dashboard.sh
# entrypoint: [ "/bin/sh", "-c", "chmod +x /docker-entrypoint-init.d/import_dashboard.sh && /docker-entrypoint-init.d/import_dashboard.sh" ]
volumes:
db_data:
grafana_data:
wordpress_data:
networks:
db:
name: db
driver: bridge
external: false
ipam:
config:
- subnet: 10.10.2.0/24
wp:
name: wp
driver: bridge
external: false
metrics:
name: metrics
driver: bridge
external: false
ipam:
config:
- subnet: 10.10.1.0/24

View file

@ -1,33 +0,0 @@
services:
db:
image: mariadb:11.6.2
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:6.7.1-php8.3-fpm-alpine
volumes:
- wordpress_data:/var/www/html
apache:
build:
context: ../../../.
dockerfile: manufacturer/container/apache/Dockerfile
image: custom-apache:v5.2
ports:
- "80:80"
- "443:443"
volumes:
- wordpress_data:/var/www/html
- ../../configs/apache/apache.conf:/etc/apache2/sites-available/000-default.conf
depends_on:
- wordpress
volumes:
wordpress_data:
db_data: