From 691fbc5e9e7fa36db1933d010ad25bc65bf673b9 Mon Sep 17 00:00:00 2001 From: mzhoot Date: Tue, 28 Apr 2026 15:39:30 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D0=B8=D1=81=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D1=83=D1=8E=20=D1=83?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D1=83=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.txt.md | 384 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 384 insertions(+) create mode 100644 readme.txt.md diff --git a/readme.txt.md b/readme.txt.md new file mode 100644 index 00000000..23baa301 --- /dev/null +++ b/readme.txt.md @@ -0,0 +1,384 @@ +# 📦 Полное руководство: Установка ZenTao в Docker-контейнер (Ubuntu 22.04 + Nginx + PHP 8.1 + MariaDB) + +> ⚠️ **Внимание**: Все пароли и настройки в этом руководстве предназначены **только для локальной разработки/тестирования**. Для продакшена используйте сложные пароли, SSL, разделение сервисов и другие меры безопасности. + +--- + +## 🗂 Структура итоговой системы + +``` +🐳 Docker-контейнер "zentao-stack" +├── 🐧 Ubuntu 22.04 LTS +├── 🌐 Nginx 1.18 (порт 80 внутри → 8080 на хосте) +├── 🐘 PHP 8.1-FPM + расширения для ZenTao +├── 🐬 MariaDB 10.6 (порт 3306 внутри → 3307 на хосте) +├── 📦 ZenTao (из репозитория https://gitlab.com/mzhoot/znt.git) +└── 🔧 Git, curl, wget и другие утилиты +``` + +--- + +## 🚀 Шаг 1: Подготовка на хосте (ваш компьютер) + +### 1.1. Создайте рабочую папку +```bash +mkdir -p ~/Документы/zdocker/zentao +cd ~/Документы/zdocker/zentao +``` + +### 1.2. Настройте права Docker (опционально, чтобы не вводить `sudo`) +```bash +# Добавить текущего пользователя в группу docker +sudo usermod -aG docker $USER +# Применить изменения (или перезайдите в систему) +newgrp docker +# Проверка: должно работать без sudo +docker --version +``` + +--- + +## 🐳 Шаг 2: Запуск базового контейнера + +### 2.1. Скачайте образ Ubuntu 22.04 +```bash +docker pull ubuntu:22.04 +``` + +### 2.2. Запустите контейнер с пробросом портов +```bash +docker run -it --name zentao-stack \ + -p 8080:80 \ + -p 3307:3306 \ + ubuntu:22.04 bash +``` + +> ✅ Вы окажетесь внутри контейнера: `root@:/#` + +--- + +## ⚙️ Шаг 3: Установка системных пакетов (внутри контейнера) + +```bash +# Обновление индексов пакетов +apt update + +# Установка базовых утилит +apt install -y curl wget git unzip nano vim net-tools +``` + +--- + +## 🐬 Шаг 4: Установка и настройка MariaDB + +### 4.1. Установка сервера +```bash +DEBIAN_FRONTEND=noninteractive apt install -y mariadb-server +``` + +### 4.2. Запуск службы +```bash +service mariadb start +``` + +### 4.3. Настройка пароля для root +```bash +mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '1234'; FLUSH PRIVILEGES;" +``` + +### 4.4. Создание базы и пользователя для ZenTao +```bash +mysql -u root -p1234 -e " + CREATE DATABASE IF NOT EXISTS zentao CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + GRANT ALL PRIVILEGES ON zentao.* TO 'zentao'@'localhost' IDENTIFIED BY 'zentao_pass123'; + FLUSH PRIVILEGES; +" +``` + +📝 **Сохраните эти данные** — они понадобятся при веб-установке: + +| Параметр | Значение | +|----------|----------| +| Хост БД | `localhost` | +| Порт | `3306` | +| Имя БД | `zentao` | +| Пользователь | `zentao` | +| Пароль | `zentao_pass123` | +| Префикс таблиц | `zt_` (по умолчанию) | + +--- + +## 🌐 Шаг 5: Установка и настройка Nginx + +### 5.1. Установка +```bash +apt install -y nginx +``` + +### 5.2. Запуск +```bash +service nginx start +``` + +### 5.3. Проверка (должно вернуть `200 OK`) +```bash +curl -I http://localhost +``` + +--- + +## 🐘 Шаг 6: Установка PHP 8.1 и расширений для ZenTao + +### 6.1. Установка PHP-FPM и модулей +```bash +apt install -y php8.1-fpm php8.1-mysql php8.1-mbstring php8.1-gd \ + php8.1-curl php8.1-zip php8.1-xml php8.1-intl php8.1-bcmath \ + php8.1-opcache php8.1-cli php8.1-imagick +``` + +### 6.2. Настройка параметров PHP для ZenTao +```bash +cat > /etc/php/8.1/fpm/conf.d/99-zentao.ini << 'EOF' +upload_max_filesize = 50M +post_max_size = 50M +memory_limit = 256M +max_execution_time = 120 +date.timezone = Europe/Moscow +opcache.enable = 1 +opcache.memory_consumption = 128 +display_errors = Off +EOF +``` + +### 6.3. Запуск PHP-FPM +```bash +service php8.1-fpm start +``` + +--- + +## 🔗 Шаг 7: Настройка Nginx для работы с PHP + +### 7.1. Перезапись конфигурации виртуального хоста +```bash +cat > /etc/nginx/sites-available/default << 'EOF' +server { + listen 80; + server_name localhost; + root /var/www/html/www; + index index.php index.html index.htm; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/run/php/php8.1-fpm.sock; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + } + + location ~ /\.ht { + deny all; + } +} +EOF +``` + +### 7.2. Проверка и перезагрузка Nginx +```bash +nginx -t && service nginx reload +``` + +--- + +## 📦 Шаг 8: Установка ZenTao из Git-репозитория + +### 8.1. Подготовка веб-корня +```bash +cd /var/www/html +rm -rf ./* ./.??* 2>/dev/null || true +``` + +### 8.2. Клонирование репозитория +```bash +git clone https://gitlab.com/mzhoot/znt.git . +``` + +### 8.3. Настройка прав доступа +```bash +# Владелец веб-сервера +chown -R www-www-data /var/www/html + +# Стандартные права +find /var/www/html -type d -exec chmod 755 {} \; +find /var/www/html -type f -exec chmod 644 {} \; + +# Папки с правами на запись (кэш, конфиги, загрузки) +chmod -R 775 /var/www/html/www/data /var/www/html/tmp /var/www/html/config 2>/dev/null || true +``` + +### 8.4. Активация установщика +```bash +# Переименование установщика (файл по умолчанию имеет расширение .tmp) +mv /var/www/html/www/install.php.tmp /var/www/html/www/install.php +# (Опционально) скрипт обновления +mv /var/www/html/www/upgrade.php.tmp /var/www/html/www/upgrade.php 2>/dev/null || true +``` + +--- + +## 🧪 Шаг 9: Финальная проверка + +### 9.1. Проверка обработки PHP +```bash +echo " /var/www/html/www/test.php +curl http://localhost/test.php +# Ожидаемый вывод: PHP_OK +rm /var/www/html/www/test.php +``` + +### 9.2. Проверка редиректа на установщик +```bash +curl -I http://localhost/ +# Ожидаем: 302 Found + location: install.php +``` + +### 9.3. Проверка подключения к БД +```bash +mysql -u zentao -pzentao_pass123 -e "SELECT 'DB OK' AS status;" zentao +``` + +--- + +## 🔁 Шаг 10: Настройка автозапуска служб (опционально, но удобно) + +```bash +# Добавьте в ~/.bashrc внутри контейнера: +cat >> ~/.bashrc << 'EOF' + +# Auto-start services for ZenTao stack +service mariadb start &>/dev/null +service nginx start &>/dev/null +service php8.1-fpm start &>/dev/null +EOF + +# Применить изменения +source ~/.bashrc +``` + +Теперь при каждом входе в контейнер (`docker start -ai zentao-stack` или `docker exec -it zentao-stack bash`) службы запустятся автоматически. + +--- + +## 🌐 Шаг 11: Завершение установки через веб-интерфейс + +1. Откройте в браузере на хосте: + 👉 **`http://localhost:8080`** + +2. Пройдите шаги установщика: + - ✅ Проверка окружения (все пункты должны быть зелёными) + - 🗄 Настройка БД (введите данные из шага 4.4) + - 👤 Создание администратора + - 🌍 Выбор языка и региона + +3. **После успешной установки удалите установщик** (требование безопасности): + ```bash + # Внутри контейнера: + rm -f /var/www/html/www/install.php + ``` + +--- + +## 💾 Шаг 12: Сохранение данных (критично!) + +⚠️ **По умолчанию все данные хранятся внутри контейнера.** При удалении контейнера (`docker rm zentao-stack`) всё пропадёт. + +### Вариант А: Сохранить образ контейнера (быстро, но негибко) +```bash +# На хосте, после настройки: +docker commit zentao-stack zentao-stack-saved +``` + +### Вариант Б: Использовать тома при запуске (рекомендуется) +```bash +# Удалите старый контейнер и запустите новый с томами: +docker run -it --name zentao-stack \ + -p 8080:80 -p 3307:3306 \ + -v zentao_files:/var/www/html \ + -v zentao_db:/var/lib/mysql \ + zentao-stack-saved bash +``` + +✅ Преимущества томов: +- Данные переживут удаление/пересоздание контейнера +- Легко делать бэкапы (`docker run --rm -v zentao_db:/db -v $(pwd):/backup alpine tar czf /backup/db.tar.gz -C /db .`) +- Можно подключить к другому контейнеру + +--- + +## 🛠 Полезные команды для управления + +| Задача | Команда (на хосте) | +|--------|-------------------| +| Остановить контейнер | `docker stop zentao-stack` | +| Запустить контейнер | `docker start -ai zentao-stack` | +| Подключиться к работающему | `docker exec -it zentao-stack bash` | +| Посмотреть логи Nginx | `docker exec zentao-stack tail -f /var/log/nginx/error.log` | +| Бэкап БД | `docker exec zentao-stack mysqldump -u root -p1234 zentao > backup.sql` | +| Обновить код ZenTao | `docker exec zentao-stack bash -c "cd /var/www/html && git pull"` | + +--- + +## 🔐 Безопасность (для продакшена) + +```bash +# 1. Смените пароли по умолчанию +mysql -u root -p1234 -e "ALTER USER 'zentao'@'localhost' IDENTIFIED BY 'СложныйПароль!';" + +# 2. Отключите отображение ошибок PHP (уже сделано в 99-zentao.ini) +# display_errors = Off + +# 3. Настройте HTTPS (самоподписанный сертификат для тестов) +openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ + -keyout /etc/ssl/private/nginx-selfsigned.key \ + -out /etc/ssl/certs/nginx-selfsigned.crt \ + -subj "/C=RU/ST=Moscow/L=Moscow/O=Local/CN=localhost" + +# 4. Обновите конфиг Nginx для HTTPS (добавьте listen 443 ssl + пути к сертификатам) +``` + +--- + +## 🧭 Возможные проблемы и решения + +| Проблема | Решение | +|----------|---------| +| ❌ `502 Bad Gateway` | `service php8.1-fpm start` (PHP-FPM не запущен) | +| ❌ `403 Forbidden` | `chown -R www-www-data /var/www/html && chmod -R 755 /var/www/html` | +| ❌ Белый экран | Временно: `echo "display_errors=On" >> /etc/php/8.1/fpm/conf.d/99-debug.ini && service php8.1-fpm restart` | +| ❌ Не сохраняется конфиг | `chmod -R 775 /var/www/html/www/data /var/www/html/config` | +| ❌ Ошибка подключения к БД | Проверьте: хост `localhost`, порт `3306`, пользователь `zentao`, пароль `zentao_pass123` | +| ❌ Git не клонирует | Проверьте интернет: `ping gitlab.com` | + +--- + +## ✅ Итог + +После выполнения всех шагов у вас есть полностью рабочий стек: + +``` +🌐 Браузер → [хост:8080] → [контейнер:80] → Nginx → PHP-FPM → ZenTao + ↓ + MariaDB (порт 3306) +``` + +**Доступ:** +- 🌍 Веб-интерфейс: `http://localhost:8080` +- 🗄 Управление БД с хоста: `mysql -h 127.0.0.1 -P 3307 -u zentao -pzentao_pass123 zentao` + +--- + +> 💡 **Совет на будущее**: Для удобства управления несколькими сервисами рассмотрите переход на `docker-compose.yml` — это позволит запускать весь стек одной командой `docker compose up -d` и упростит масштабирование. + +Если что-то пойдёт не так — напишите текст ошибки, помогу быстро разобраться. Удачи с использованием ZenTao! 🐳📊🚀 \ No newline at end of file