znt/readme.txt.md

13 KiB
Raw Permalink Blame History

📦 Полное руководство: Установка 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. Создайте рабочую папку

mkdir -p ~/Документы/zdocker/zentao
cd ~/Документы/zdocker/zentao

1.2. Настройте права Docker (опционально, чтобы не вводить sudo)

# Добавить текущего пользователя в группу docker
sudo usermod -aG docker $USER
# Применить изменения (или перезайдите в систему)
newgrp docker
# Проверка: должно работать без sudo
docker --version

🐳 Шаг 2: Запуск базового контейнера

2.1. Скачайте образ Ubuntu 22.04

docker pull ubuntu:22.04

2.2. Запустите контейнер с пробросом портов

docker run -it --name zentao-stack \
  -p 8080:80 \
  -p 3307:3306 \
  ubuntu:22.04 bash

Вы окажетесь внутри контейнера: root@<container_id>:/#


⚙️ Шаг 3: Установка системных пакетов (внутри контейнера)

# Обновление индексов пакетов
apt update

# Установка базовых утилит
apt install -y curl wget git unzip nano vim net-tools

🐬 Шаг 4: Установка и настройка MariaDB

4.1. Установка сервера

DEBIAN_FRONTEND=noninteractive apt install -y mariadb-server

4.2. Запуск службы

service mariadb start

4.3. Настройка пароля для root

mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '1234'; FLUSH PRIVILEGES;"

4.4. Создание базы и пользователя для ZenTao

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. Установка

apt install -y nginx

5.2. Запуск

service nginx start

5.3. Проверка (должно вернуть 200 OK)

curl -I http://localhost

🐘 Шаг 6: Установка PHP 8.1 и расширений для ZenTao

6.1. Установка PHP-FPM и модулей

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

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

service php8.1-fpm start

🔗 Шаг 7: Настройка Nginx для работы с PHP

7.1. Перезапись конфигурации виртуального хоста

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

nginx -t && service nginx reload

📦 Шаг 8: Установка ZenTao из Git-репозитория

8.1. Подготовка веб-корня

cd /var/www/html
rm -rf ./* ./.??* 2>/dev/null || true

8.2. Клонирование репозитория

git clone https://gitlab.com/mzhoot/znt.git .

8.3. Настройка прав доступа

# Владелец веб-сервера
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. Активация установщика

# Переименование установщика (файл по умолчанию имеет расширение .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

echo "<?php echo 'PHP_OK';" > /var/www/html/www/test.php
curl http://localhost/test.php
# Ожидаемый вывод: PHP_OK
rm /var/www/html/www/test.php

9.2. Проверка редиректа на установщик

curl -I http://localhost/
# Ожидаем: 302 Found + location: install.php

9.3. Проверка подключения к БД

mysql -u zentao -pzentao_pass123 -e "SELECT 'DB OK' AS status;" zentao

🔁 Шаг 10: Настройка автозапуска служб (опционально, но удобно)

# Добавьте в ~/.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. После успешной установки удалите установщик (требование безопасности):

    # Внутри контейнера:
    rm -f /var/www/html/www/install.php
    

💾 Шаг 12: Сохранение данных (критично!)

⚠️ По умолчанию все данные хранятся внутри контейнера. При удалении контейнера (docker rm zentao-stack) всё пропадёт.

Вариант А: Сохранить образ контейнера (быстро, но негибко)

# На хосте, после настройки:
docker commit zentao-stack zentao-stack-saved

Вариант Б: Использовать тома при запуске (рекомендуется)

# Удалите старый контейнер и запустите новый с томами:
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"

🔐 Безопасность (для продакшена)

# 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! 🐳📊🚀