Spaces:
Sleeping
Sleeping
Виправлення 2
Browse files- Dockerfile +20 -25
- app.py +3 -35
- init.sql +3 -3
- requirements.txt +1 -2
- start.sh +7 -21
Dockerfile
CHANGED
@@ -1,34 +1,29 @@
|
|
1 |
-
FROM
|
2 |
-
|
3 |
-
# Встановлення
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
&& rm -rf /var/lib/apt/lists/*
|
12 |
-
|
13 |
-
# Налаштування репозиторію MySQL
|
14 |
-
RUN wget https://dev.mysql.com/get/mysql-apt-config_0.8.15-1_all.deb \
|
15 |
-
&& DEBIAN_FRONTEND=noninteractive apt-get install -y ./mysql-apt-config_0.8.15-1_all.deb \
|
16 |
-
&& apt-get update
|
17 |
-
|
18 |
-
# Встановлення MySQL 8.0.22
|
19 |
-
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server
|
20 |
|
21 |
# Копіювання SQL файлу ініціалізації
|
22 |
-
COPY init.sql /
|
23 |
|
24 |
-
#
|
25 |
-
COPY app.py /app/app.py
|
26 |
WORKDIR /app
|
27 |
|
28 |
-
#
|
29 |
-
|
|
|
|
|
|
|
|
|
|
|
30 |
|
31 |
-
# Скрипт для запуску
|
32 |
COPY start.sh /start.sh
|
33 |
RUN chmod +x /start.sh
|
34 |
|
|
|
1 |
+
FROM mysql:8.0.22
|
2 |
+
|
3 |
+
# Встановлення змінних середовища
|
4 |
+
ENV MYSQL_ROOT_PASSWORD=root_password
|
5 |
+
ENV MYSQL_DATABASE=test_db
|
6 |
+
ENV MYSQL_USER=test_user
|
7 |
+
ENV MYSQL_PASSWORD=test_password
|
8 |
+
|
9 |
+
# Створення директорії для ініціалізаційних скриптів
|
10 |
+
RUN mkdir -p /docker-entrypoint-initdb.d
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
12 |
# Копіювання SQL файлу ініціалізації
|
13 |
+
COPY init.sql /docker-entrypoint-initdb.d/
|
14 |
|
15 |
+
# Створення директорії для веб-додатку
|
|
|
16 |
WORKDIR /app
|
17 |
|
18 |
+
# Копіювання файлів веб-додатку
|
19 |
+
COPY app.py requirements.txt /app/
|
20 |
+
|
21 |
+
# Встановлення необхідних пакетів для веб-інтерфейсу
|
22 |
+
RUN apt-get update && apt-get install -y python3 python3-pip && \
|
23 |
+
pip3 install --no-cache-dir -r requirements.txt && \
|
24 |
+
rm -rf /var/lib/apt/lists/*
|
25 |
|
26 |
+
# Скрипт для запуску обох сервісів
|
27 |
COPY start.sh /start.sh
|
28 |
RUN chmod +x /start.sh
|
29 |
|
app.py
CHANGED
@@ -1,6 +1,4 @@
|
|
1 |
from flask import Flask, render_template_string
|
2 |
-
import os
|
3 |
-
import subprocess
|
4 |
import socket
|
5 |
|
6 |
app = Flask(__name__)
|
@@ -9,9 +7,6 @@ app = Flask(__name__)
|
|
9 |
def index():
|
10 |
"""Головна сторінка з інформацією про MySQL сервер"""
|
11 |
|
12 |
-
# Перевірка чи працює MySQL
|
13 |
-
mysql_status = check_mysql_status()
|
14 |
-
|
15 |
# HTML шаблон
|
16 |
template = """
|
17 |
<!DOCTYPE html>
|
@@ -42,17 +37,10 @@ def index():
|
|
42 |
padding: 10px;
|
43 |
margin: 10px 0;
|
44 |
border-radius: 4px;
|
45 |
-
}
|
46 |
-
.status.online {
|
47 |
background-color: #dff0d8;
|
48 |
border: 1px solid #d6e9c6;
|
49 |
color: #3c763d;
|
50 |
}
|
51 |
-
.status.offline {
|
52 |
-
background-color: #f2dede;
|
53 |
-
border: 1px solid #ebccd1;
|
54 |
-
color: #a94442;
|
55 |
-
}
|
56 |
pre {
|
57 |
background-color: #f8f8f8;
|
58 |
border: 1px solid #ddd;
|
@@ -73,13 +61,10 @@ def index():
|
|
73 |
<div class="container">
|
74 |
<h1>MySQL Сервер 8.0.22 для навчальних цілей</h1>
|
75 |
|
76 |
-
<div class="status
|
77 |
-
<strong>Статус MySQL:</strong>
|
78 |
</div>
|
79 |
|
80 |
-
<h2>Інформація про сервер:</h2>
|
81 |
-
<pre>{{ server_info }}</pre>
|
82 |
-
|
83 |
<div class="connection-info">
|
84 |
<h3>Параметри підключення:</h3>
|
85 |
<p><strong>Хост:</strong> {{ host }}</p>
|
@@ -108,24 +93,7 @@ CREATE TABLE IF NOT EXISTS test (
|
|
108 |
hostname = socket.gethostname()
|
109 |
host = socket.gethostbyname(hostname)
|
110 |
|
111 |
-
|
112 |
-
try:
|
113 |
-
ps_output = subprocess.check_output(["ps", "aux"]).decode('utf-8')
|
114 |
-
mysql_process = [line for line in ps_output.split('\n') if 'mysqld' in line]
|
115 |
-
server_info = '\n'.join(mysql_process) if mysql_process else "Деталі процесу MySQL не знайдено"
|
116 |
-
except:
|
117 |
-
server_info = "Не вдалося отримати інформацію про процес MySQL"
|
118 |
-
|
119 |
-
return render_template_string(template, status=mysql_status, server_info=server_info, host=host)
|
120 |
-
|
121 |
-
def check_mysql_status():
|
122 |
-
"""Перевірка статусу MySQL сервера"""
|
123 |
-
try:
|
124 |
-
# Перевірка статусу через утиліту pidof
|
125 |
-
result = subprocess.run(["pidof", "mysqld"], stdout=subprocess.PIPE)
|
126 |
-
return result.returncode == 0
|
127 |
-
except:
|
128 |
-
return False
|
129 |
|
130 |
if __name__ == '__main__':
|
131 |
# Запускаємо веб-сервер на порту 7860 (стандартний для Hugging Face Spaces)
|
|
|
1 |
from flask import Flask, render_template_string
|
|
|
|
|
2 |
import socket
|
3 |
|
4 |
app = Flask(__name__)
|
|
|
7 |
def index():
|
8 |
"""Головна сторінка з інформацією про MySQL сервер"""
|
9 |
|
|
|
|
|
|
|
10 |
# HTML шаблон
|
11 |
template = """
|
12 |
<!DOCTYPE html>
|
|
|
37 |
padding: 10px;
|
38 |
margin: 10px 0;
|
39 |
border-radius: 4px;
|
|
|
|
|
40 |
background-color: #dff0d8;
|
41 |
border: 1px solid #d6e9c6;
|
42 |
color: #3c763d;
|
43 |
}
|
|
|
|
|
|
|
|
|
|
|
44 |
pre {
|
45 |
background-color: #f8f8f8;
|
46 |
border: 1px solid #ddd;
|
|
|
61 |
<div class="container">
|
62 |
<h1>MySQL Сервер 8.0.22 для навчальних цілей</h1>
|
63 |
|
64 |
+
<div class="status">
|
65 |
+
<strong>Статус MySQL:</strong> Запущено
|
66 |
</div>
|
67 |
|
|
|
|
|
|
|
68 |
<div class="connection-info">
|
69 |
<h3>Параметри підключення:</h3>
|
70 |
<p><strong>Хост:</strong> {{ host }}</p>
|
|
|
93 |
hostname = socket.gethostname()
|
94 |
host = socket.gethostbyname(hostname)
|
95 |
|
96 |
+
return render_template_string(template, host=host)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
|
98 |
if __name__ == '__main__':
|
99 |
# Запускаємо веб-сервер на порту 7860 (стандартний для Hugging Face Spaces)
|
init.sql
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
-- Створення тестової таблиці
|
2 |
CREATE TABLE IF NOT EXISTS test (
|
3 |
-
numbers INT,
|
4 |
-
words VARCHAR(10)
|
5 |
);
|
6 |
|
7 |
-- Додавання тестових даних
|
@@ -9,7 +9,7 @@ INSERT INTO test VALUES (1, 'один');
|
|
9 |
INSERT INTO test VALUES (2, 'два');
|
10 |
INSERT INTO test VALUES (3, 'три');
|
11 |
|
12 |
-
--
|
13 |
CREATE USER IF NOT EXISTS 'remote_user'@'%' IDENTIFIED BY 'password';
|
14 |
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%';
|
15 |
FLUSH PRIVILEGES;
|
|
|
1 |
-- Створення тестової таблиці
|
2 |
CREATE TABLE IF NOT EXISTS test (
|
3 |
+
numbers INT,
|
4 |
+
words VARCHAR(10)
|
5 |
);
|
6 |
|
7 |
-- Додавання тестових даних
|
|
|
9 |
INSERT INTO test VALUES (2, 'два');
|
10 |
INSERT INTO test VALUES (3, 'три');
|
11 |
|
12 |
+
-- Налаштування доступу для віддаленого підключення
|
13 |
CREATE USER IF NOT EXISTS 'remote_user'@'%' IDENTIFIED BY 'password';
|
14 |
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%';
|
15 |
FLUSH PRIVILEGES;
|
requirements.txt
CHANGED
@@ -1,2 +1 @@
|
|
1 |
-
|
2 |
-
mysql-connector-python==8.1.0
|
|
|
1 |
+
flask==2.0.1
|
|
start.sh
CHANGED
@@ -1,27 +1,13 @@
|
|
1 |
#!/bin/bash
|
2 |
|
3 |
-
# Ініціалізація бази даних MySql якщо вона ще не ініціалізована
|
4 |
-
if [ ! -d "/var/lib/mysql/mysql" ]; then
|
5 |
-
mysqld --initialize-insecure
|
6 |
-
fi
|
7 |
-
|
8 |
# Запуск MySQL у фоновому режимі
|
9 |
-
|
10 |
-
|
11 |
-
# Створення бази даних і користувача
|
12 |
-
mysql -u root -e "CREATE DATABASE IF NOT EXISTS test_db;"
|
13 |
-
mysql -u root -e "CREATE USER IF NOT EXISTS 'test_user'@'%' IDENTIFIED BY 'test_password';"
|
14 |
-
mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'test_user'@'%';"
|
15 |
-
mysql -u root -e "FLUSH PRIVILEGES;"
|
16 |
-
|
17 |
-
# Імпорт ініціалізаційного SQL файлу
|
18 |
-
mysql -u root test_db < /tmp/init.sql
|
19 |
-
|
20 |
-
# Налаштування MySQL для дозволу віддаленого доступу
|
21 |
-
sed -i 's/bind-address.*=.*/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
|
22 |
|
23 |
-
#
|
24 |
-
|
|
|
25 |
|
26 |
-
# Запуск
|
|
|
27 |
python3 /app/app.py
|
|
|
1 |
#!/bin/bash
|
2 |
|
|
|
|
|
|
|
|
|
|
|
3 |
# Запуск MySQL у фоновому режимі
|
4 |
+
echo "Запуск MySQL..."
|
5 |
+
/entrypoint.sh mysqld &
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
+
# Чекаємо, поки MySQL запуститься
|
8 |
+
echo "Очікування запуску MySQL..."
|
9 |
+
sleep 10
|
10 |
|
11 |
+
# Запуск веб-сервера
|
12 |
+
echo "Запуск веб-інтерфейсу на порту 7860..."
|
13 |
python3 /app/app.py
|