DocUA commited on
Commit
40bcd18
·
1 Parent(s): 859af98

Виправлення 2

Browse files
Files changed (5) hide show
  1. Dockerfile +20 -25
  2. app.py +3 -35
  3. init.sql +3 -3
  4. requirements.txt +1 -2
  5. start.sh +7 -21
Dockerfile CHANGED
@@ -1,34 +1,29 @@
1
- FROM ubuntu:20.04
2
-
3
- # Встановлення необхідних пакетів
4
- RUN apt-get update && apt-get install -y \
5
- wget \
6
- gnupg \
7
- lsb-release \
8
- python3 \
9
- python3-pip \
10
- procps \
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 /tmp/init.sql
23
 
24
- # Копіювання Python Flask додатку
25
- COPY app.py /app/app.py
26
  WORKDIR /app
27
 
28
- # Встановлення Python бібліотек
29
- RUN pip3 install flask
 
 
 
 
 
30
 
31
- # Скрипт для запуску MySQL і Flask
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 {{ 'online' if status else 'offline' }}">
77
- <strong>Статус MySQL:</strong> {{ 'Запущено' if status else 'Не запущено' }}
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) -- Поле для текстових значень максимум 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
- gradio==3.50.2
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
- service mysql start
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
- # Перезапуск MySQL з новими налаштуваннями
24
- service mysql restart
 
25
 
26
- # Запуск Flask додатку
 
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