Compare commits
10 commits
392a0b4620
...
8638ffba24
| Author | SHA1 | Date | |
|---|---|---|---|
| 8638ffba24 | |||
| fd22c75850 | |||
| 5d1e1429e8 | |||
| 917a1ffa2b | |||
| 320f481089 | |||
| 834937fc74 | |||
| 4938dc07e4 | |||
| 7bac1b5a91 | |||
| cbe1df234d | |||
| 9f4fcb9654 |
11 changed files with 243 additions and 35 deletions
1
LICENSE.md
Normal file
1
LICENSE.md
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
MIT
|
||||||
67
README.md
Normal file
67
README.md
Normal 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 для подробной информации.
|
||||||
|
|
@ -5,10 +5,15 @@ ServerName localhost
|
||||||
|
|
||||||
<Directory "/var/www/html">
|
<Directory "/var/www/html">
|
||||||
Options Indexes FollowSymLinks
|
Options Indexes FollowSymLinks
|
||||||
AllowOverride All
|
AllowOverride None
|
||||||
Require all granted
|
Require all granted
|
||||||
</Directory>
|
</Directory>
|
||||||
|
|
||||||
|
<Location /server-status>
|
||||||
|
SetHandler server-status
|
||||||
|
Require ip 10.10.1.0/24
|
||||||
|
</Location>
|
||||||
|
|
||||||
ErrorLog /proc/self/fd/2
|
ErrorLog /proc/self/fd/2
|
||||||
CustomLog /proc/self/fd/1 common
|
CustomLog /proc/self/fd/1 common
|
||||||
</VirtualHost>
|
</VirtualHost>
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
apiVersion: 1
|
||||||
|
providers:
|
||||||
|
- name: 'apache-dashboard'
|
||||||
|
type: file
|
||||||
|
disableDeletion: false
|
||||||
|
updateIntervalSeconds: 10
|
||||||
|
allowUiUpdates: true
|
||||||
|
options:
|
||||||
|
path: /var/lib/grafana/dashboard
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
apiVersion: 1
|
||||||
|
datasources:
|
||||||
|
- name: Prometheus
|
||||||
|
type: prometheus
|
||||||
|
access: proxy
|
||||||
|
url: http://10.10.1.3:9090
|
||||||
|
isDefault: true
|
||||||
8
manufacturer/configs/prometheus/prometheus.yml
Normal file
8
manufacturer/configs/prometheus/prometheus.yml
Normal 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']
|
||||||
|
|
@ -4,3 +4,4 @@ RUN docker-php-ext-install mysqli
|
||||||
|
|
||||||
RUN a2enmod status
|
RUN a2enmod status
|
||||||
RUN a2enmod rewrite
|
RUN a2enmod rewrite
|
||||||
|
RUN a2enmod headers
|
||||||
32
manufacturer/container/grafana/import_dashboard.sh
Executable file
32
manufacturer/container/grafana/import_dashboard.sh
Executable 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}"
|
||||||
|
|
@ -4,4 +4,7 @@ MYSQL_ROOT_PASSWORD=wordpress
|
||||||
MYSQL_USER=wordpress
|
MYSQL_USER=wordpress
|
||||||
MYSQL_PASSWORD=wordpress
|
MYSQL_PASSWORD=wordpress
|
||||||
|
|
||||||
|
GRAFANA_URL=10.10.1.4
|
||||||
|
DASHBOARD_ID=893
|
||||||
|
GF_SECURITY_ADMIN_PASSWORD=admin
|
||||||
|
|
||||||
108
manufacturer/container/services/docker-compose.yml
Normal file
108
manufacturer/container/services/docker-compose.yml
Normal 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
|
||||||
|
|
@ -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:
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue