ПОЛНАЯ ИНСТРУКТУРА: Система отслеживания багов
alensav (Ubuntu) + 🍊 Orange PI (Сервер) + 📱 Android
1. НАСТРОЙКА СТРУКТУРЫ КАТАЛОГОВ
На alensav (Ubuntu):
bash
Copy
Download
# Открываем терминал на alensav
# Создаем основной каталог проекта
mkdir -p /home/alensav/my-project/bugs
cd /home/alensav/my-project
На Orange PI:
bash
Copy
Download
# Открываем отдельное окно терминала для Orange PI (ssh уже подключен)
# Создаем каталоги на сервере
mkdir -p /home/orangepi/my-project/bugs
cd /home/orangepi/my-project
📁 2. СОЗДАНИЕ ФАЙЛОВ СИСТЕМЫ
На Orange PI (серверная часть):
bash
Copy
Download
# На Orange PI создаем файл сервера
cat > /home/orangepi/my-project/bug-server.py << 'EOF'
#!/usr/bin/env python3
import http.server
import socketserver
import json
import os
import sys
from datetime import datetime
PORT = 8001
BUGS_DIR = 'bugs'
os.makedirs(BUGS_DIR, exist_ok=True)
class BugHandler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
try:
if self.path == '/api/bugs':
self.send_response(200)
self.send_header('Content-type', 'application/json; charset=utf-8')
self.send_header('Access-Control-Allow-Origin', '*')
self.end_headers()
bugs = []
if os.path.exists(BUGS_DIR):
for filename in sorted(os.listdir(BUGS_DIR)):
if filename.endswith('.md'):
filepath = os.path.join(BUGS_DIR, filename)
try:
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
lines = content.split('\n')
title = lines[0].replace('#', '').strip() if lines else 'Без названия'
status = 'Открыт'
author = 'alensav'
date = datetime.now().strftime('%d.%m.%Y')
for line in lines:
if '**Статус:**' in line:
status = line.replace('**Статус:**', '').strip()
elif '**Автор:**' in line:
author = line.replace('**Автор:**', '').strip()
elif '**Дата:**' in line:
date = line.replace('**Дата:**', '').strip()
bug_id = filename.split('-')[0]
bugs.append({
'id': bug_id,
'title': title,
'status': status,
'author': author,
'date': date,
'filename': filename
})
except Exception as e:
print(f"Ошибка чтения {filename}: {e}")
response = {
'success': True,
'bugs': bugs,
'count': len(bugs),
'server': 'Orange PI'
}
self.wfile.write(json.dumps(response, ensure_ascii=False).encode('utf-8'))
elif self.path == '/mobile':
self.send_response(200)
self.send_header('Content-type', 'text/html; charset=utf-8')
self.end_headers()
html = '''<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>🐛 Баг-трекер</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; background: #f0f0f0; }
.header { background: #4CAF50; color: white; padding: 20px; border-radius: 10px; text-align: center; }
.bug-card { background: white; padding: 15px; margin: 10px 0; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
</style>
</head>
<body>
<div class="header">
<h1>🐛 Баг-трекер</h1>
<p>Orange PI Server • Mobile Version</p>
</div>
<div id="bugs"><p>Загрузка багов...</p></div>
<script>
fetch('/api/bugs')
.then(r => r.json())
.then(data => {
const bugsHtml = data.bugs.map(bug => `
<div class="bug-card">
<h3>#${bug.id}: ${bug.title}</h3>
<p>Статус: ${bug.status} | Автор: ${bug.author}</p>
</div>
`).join('');
document.getElementById('bugs').innerHTML = bugsHtml || '<p>Нет багов</p>';
});
</script>
</body>
</html>'''
self.wfile.write(html.encode('utf-8'))
else:
self.send_response(200)
self.send_header('Content-type', 'text/html; charset=utf-8')
self.end_headers()
self.wfile.write(b'<h1>🐛 Bug Tracker Server</h1><p>Use <a href="/api/bugs">/api/bugs</a> or <a href="/mobile">/mobile</a></p>'.encode())
except Exception as e:
print(f"Ошибка: {e}")
self.send_error(500, "Server error")
print("🚀 Сервер багов запускается...")
print(f"📡 Порт: {PORT}")
with socketserver.TCPServer(("", PORT), BugHandler) as httpd:
print(f"✅ Сервер работает на http://0.0.0.0:{PORT}")
httpd.serve_forever()
EOF
# Даем права на выполнение
chmod +x /home/orangepi/my-project/bug-server.py
На alensav (клиентская часть):
bash
Copy
Download
# На alensav создаем скрипт управления
cat > /home/alensav/my-project/bug-tracker << 'EOF'
#!/bin/bash
BUGS_DIR="/home/alensav/my-project/bugs"
SERVER_URL="http://192.168.1.75:8001"
case "$1" in
create)
if [ -z "$2" ]; then
echo "Использование: $0 create \"Описание бага\""
exit 1
fi
cd /home/alensav/my-project
mkdir -p bugs
BUG_COUNT=$(ls bugs/*.md 2>/dev/null | wc -l)
BUG_ID=$((BUG_COUNT + 1))
FILENAME="bugs/${BUG_ID}-$(echo "$2" | tr ' ' '-').md"
cat > "$FILENAME" << BUGFILE
# Баг #${BUG_ID}: $2
**Статус:** ⚙️ Открыт
**Автор:** alensav
**Дата:** $(date +'%d.%m.%Y %H:%M')
## Описание
Баг создан на главном компьютере.
## Комментарии
BUGFILE
echo "✅ Баг создан: $FILENAME"
;;
list)
echo "📋 ЛОКАЛЬНЫЕ БАГИ:"
echo "=================="
for file in /home/alensav/my-project/bugs/*.md 2>/dev/null; do
if [ -f "$file" ]; then
ID=$(basename "$file" | cut -d'-' -f1)
TITLE=$(head -n1 "$file" | sed 's/^# Баг #...: //')
echo -e "${ID}:\t${TITLE}"
fi
done | sort -n
;;
server-status)
echo "📊 СТАТУС СИСТЕМЫ:"
echo "================="
# Проверка сервера
echo -n "🌐 Сервер Orange PI: "
if curl -s --connect-timeout 3 "$SERVER_URL/api/bugs" >/dev/null; then
echo "✅ РАБОТАЕТ"
echo ""
curl -s "$SERVER_URL/api/bugs" | python3 -c "
import json
data = json.load(open(0))
print(f'📁 Багов на сервере: {data[\"count\"]}')
print(f'🌐 Веб-интерфейс: $SERVER_URL')
print(f'📱 Мобильная версия: $SERVER_URL/mobile')
"
else
echo "❌ НЕДОСТУПЕН"
echo ""
echo "💡 Решение: Запустите сервер на Orange PI:"
echo " cd /home/orangepi/my-project"
echo " python3 bug-server.py"
fi
;;
sync)
echo "🔄 СИНХРОНИЗАЦИЯ С ORANGE PI:"
rsync -av /home/alensav/my-project/bugs/ orangepi@192.168.1.75:/home/orangepi/my-project/bugs/
echo "✅ Баги синхронизированы"
;;
web)
echo "🌐 ОТКРЫВАЮ ВЕБ-ИНТЕРФЕЙС..."
xdg-open "$SERVER_URL/mobile" 2>/dev/null || echo "📱 Откройте: $SERVER_URL/mobile"
;;
*)
echo "🐛 СИСТЕМА ОТСЛЕЖИВАНИЯ БАГОВ"
echo "Главный: alensav | Сервер: Orange PI"
echo ""
echo "Команды:"
echo " $0 create \"Описание\" - Создать баг"
echo " $0 list - Список багов"
echo " $0 server-status - Статус системы"
echo " $0 sync - Синхронизировать"
echo " $0 web - Открыть веб-интерфейс"
echo ""
echo "Пример:"
echo " $0 create \"Ошибка компиляции\""
echo " $0 sync"
echo " $0 web"
;;
esac
EOF
chmod +x /home/alensav/my-project/bug-tracker
🚀 3. ЗАПУСК СИСТЕМЫ
На Orange PI (запуск сервера):
bash
Copy
Download
# В терминале Orange PI
cd /home/orangepi/my-project
# Запускаем сервер (оставляем работать в foreground)
python3 bug-server.py
Окно Orange PI оставляем открытым! Сервер должен продолжать работать.
На alensav (проверка работы):
bash
Copy
Download
# В терминале alensav
cd /home/alensav/my-project
# Проверяем статус системы
./bug-tracker server-status
🎯 4. РАБОЧИЙ ПРОЦЕСС (ЕЖЕДНЕВНОЕ ИСПОЛЬЗОВАНИЕ)
Утро - проверка багов на Orange PI:
bash
Copy
Download
# На Orange PI (если нужно проверить логи)
cd /home/orangepi/my-project
# Сервер уже работает, просто проверяем в браузере с телефона
На alensav - создание багов:
bash
Copy
Download
# На alensav создаем новый баг
cd /home/alensav/my-project
./bug-tracker create "Ошибка сегментации при загрузке модуля"
# Синхронизируем с сервером
./bug-tracker sync
# Проверяем
./bug-tracker list
Проверка на Android телефоне:
text
Copy
Download
Открыть браузер на Android и перейти:
http://192.168.1.75:8001/mobile
📱 5. МОБИЛЬНЫЙ ДОСТУП
QR-код для быстрого доступа (опционально):
bash
Copy
Download
# На Orange PI создаем QR-код
cd /home/orangepi/my-project
cat > generate-qr.py << 'EOF'
#!/usr/bin/env python3
import qrcode
url = "http://192.168.1.75:8001/mobile"
qr = qrcode.make(url)
qr.save("bug-tracker-qr.png")
print(f"✅ QR-код создан: bug-tracker-qr.png")
print(f"📱 URL: {url}")
EOF
python3 generate-qr.py
На Android телефоне:
- Подключиться к той же WiFi сети
- Открыть браузер
- Ввести адрес: http://192.168.1.75:8001/mobile
- (Опционально) Отсканировать QR-код
🔧 6. УСТРАНЕНИЕ ПРОБЛЕМ
Если сервер не доступен:
bash
Copy
Download
# На Orange PI проверяем:
cd /home/orangepi/my-project
ps aux | grep bug-server.py
# Если не запущен, запускаем:
python3 bug-server.py
Если нет связи между компьютерами:
bash
Copy
Download
# На alensav проверяем связь:
ping 192.168.1.75
# Проверяем SSH:
ssh orangepi@192.168.1.75 "echo OK"
Если баги не отображаются на телефоне:
bash
Copy
Download
# На alensav синхронизируем:
cd /home/alensav/my-project
./bug-tracker sync
# На Orange PI проверяем файлы:
cd /home/orangepi/my-project
ls -la bugs/
📁 7. СТРУКТУРА КАТАЛОГОВ (ИТОГ)
На alensav:
text
Copy
Download
/home/alensav/my-project/
├── bug-tracker # Скрипт управления
└── bugs/ # Локальная копия багов
├── 001-*.md
└── 002-*.md
На Orange PI:
text
Copy
Download
/home/orangepi/my-project/
├── bug-server.py # Веб-сервер
├── bugs/ # Основная папка багов
│ ├── 001-*.md
│ └── 002-*.md
└── server.log # Логи сервера
✅ 8. ТЕСТОВЫЙ СЦЕНАРИЙ
Шаг 1: Запуск сервера
bash
Copy
Download
# На Orange PI:
cd /home/orangepi/my-project
python3 bug-server.py
Шаг 2: Создание тестового бага
bash
Copy
Download
# На alensav:
cd /home/alensav/my-project
./bug-tracker create "Тестовый баг для проверки системы"
./bug-tracker sync
Шаг 3: Проверка
bash
Copy
Download
# На alensav:
./bug-tracker server-status
./bug-tracker web
Шаг 4: Проверка на телефоне
text
Copy
Download
Открыть на Android: http://192.168.1.75:8001/mobile
🎯 КОМАНДЫ ДЛЯ ЗАПОМНИНАНИЯ
На alensav (основные):
bash
Copy
Download
cd /home/alensav/my-project
./bug-tracker create "Описание бага" # Создать
./bug-tracker list # Посмотреть
./bug-tracker sync # Синхронизировать
./bug-tracker server-status # Проверить сервер
На Orange PI (сервер):
bash
Copy
Download
cd /home/orangepi/my-project
python3 bug-server.py # Запуск сервера
Система готова к работе! 🚀