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">
|
||||
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>
|
||||
|
|
@ -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']
|
||||
|
|
@ -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
|
||||
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_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