Описать локальную установку для тестов
This commit is contained in:
parent
215fab3bec
commit
691fbc5e9e
384
readme.txt.md
Normal file
384
readme.txt.md
Normal file
|
|
@ -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@<container_id>:/#`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚙️ Шаг 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 "<?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. Проверка редиректа на установщик
|
||||||
|
```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! 🐳📊🚀
|
||||||
Loading…
Reference in a new issue