- Создана универсальная роль Python для установки Python 3.12 на всех ОС - Восстановлена роль Docker из git истории - Исправлены все ошибки линтера - Обновлен deploy.yml с правильным порядком ролей: devops → python → docker - Удалена устаревшая роль ping - Добавлена поддержка альтернативных репозиториев для старых ОС Автор: Сергей Антропов Сайт: https://devops.org.ru
		
			
				
	
	
		
			246 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			246 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Роль Python 3.12
 | ||
| 
 | ||
| Универсальная Ansible роль для установки Python 3.12 на различных дистрибутивах Linux.
 | ||
| 
 | ||
| **Автор:** Сергей Антропов  
 | ||
| **Сайт:** https://devops.org.ru
 | ||
| 
 | ||
| ## Описание
 | ||
| 
 | ||
| Эта роль обеспечивает универсальную установку Python 3.12 на различных дистрибутивах Linux, включая:
 | ||
| 
 | ||
| - **Ubuntu** (20.04, 22.04, 24.04)
 | ||
| - **Debian** (10, 11, 12)
 | ||
| - **CentOS** (7, 8, 9)
 | ||
| - **RHEL** (7, 8, 9)
 | ||
| - **Rocky Linux** (8, 9)
 | ||
| - **AlmaLinux** (8, 9)
 | ||
| - **Fedora** (35+)
 | ||
| - **openSUSE** (15.3+)
 | ||
| 
 | ||
| Роль автоматически определяет дистрибутив и использует соответствующий метод установки:
 | ||
| - Установка из пакетов (если доступно)
 | ||
| - Компиляция из исходного кода (если пакеты недоступны)
 | ||
| - Автоматическое обновление pip до последней версии
 | ||
| - Создание символических ссылок для удобства использования
 | ||
| - Поддержка виртуальных окружений
 | ||
| 
 | ||
| ## Требования
 | ||
| 
 | ||
| - Ansible >= 2.9
 | ||
| - Python 2.7 или 3.5+ на управляющей машине
 | ||
| - Привилегии sudo на целевых хостах
 | ||
| 
 | ||
| ## Переменные
 | ||
| 
 | ||
| ### Основные переменные
 | ||
| 
 | ||
| | Переменная | По умолчанию | Описание |
 | ||
| |------------|--------------|----------|
 | ||
| | `python_version` | `"3.12"` | Версия Python для установки |
 | ||
| | `python_packages` | `["pip", "setuptools", "wheel", "virtualenv"]` | Дополнительные пакеты Python |
 | ||
| | `python_install_prefix` | `"/usr/local"` | Префикс для установки Python |
 | ||
| | `python_create_symlinks` | `true` | Создание символических ссылок |
 | ||
| | `python_update_pip` | `true` | Автоматическое обновление pip до последней версии |
 | ||
| | `python_pip_packages` | `[]` | Дополнительные pip пакеты |
 | ||
| | `python_create_venv` | `false` | Создание виртуального окружения |
 | ||
| | `python_venv_path` | `"/opt/python-venv"` | Путь для виртуального окружения |
 | ||
| | `python_setup_alternatives` | `true` | Настройка альтернатив (RHEL) |
 | ||
| | `python_remove_old_versions` | `false` | Удаление старых версий Python |
 | ||
| | `python_log_level` | `"INFO"` | Уровень логирования |
 | ||
| 
 | ||
| ### Переменные для разных ОС
 | ||
| 
 | ||
| Роль автоматически определяет переменные на основе `ansible_os_family` и `ansible_distribution`:
 | ||
| 
 | ||
| - `python_current_packages` - пакеты Python для текущей ОС
 | ||
| - `python_current_build_deps` - системные зависимости для компиляции
 | ||
| - `python_current_package_manager` - менеджер пакетов
 | ||
| - `python_current_executable` - путь к исполняемому файлу Python
 | ||
| - `python_current_pip` - путь к pip
 | ||
| 
 | ||
| ## Примеры использования
 | ||
| 
 | ||
| ### Базовое использование
 | ||
| 
 | ||
| ```yaml
 | ||
| - hosts: all
 | ||
|   roles:
 | ||
|     - python
 | ||
| ```
 | ||
| 
 | ||
| ### С дополнительными пакетами
 | ||
| 
 | ||
| ```yaml
 | ||
| - hosts: all
 | ||
|   vars:
 | ||
|     python_pip_packages:
 | ||
|       - requests
 | ||
|       - flask
 | ||
|       - django
 | ||
|     python_create_venv: true
 | ||
|     python_venv_path: "/opt/myapp-venv"
 | ||
|   roles:
 | ||
|     - python
 | ||
| ```
 | ||
| 
 | ||
| ### С компиляцией из исходного кода
 | ||
| 
 | ||
| ```yaml
 | ||
| - hosts: all
 | ||
|   vars:
 | ||
|     python_install_prefix: "/opt/python3.11"
 | ||
|     python_create_symlinks: true
 | ||
|   roles:
 | ||
|     - python
 | ||
| ```
 | ||
| 
 | ||
| ### Для конкретной версии Python
 | ||
| 
 | ||
| ```yaml
 | ||
| - hosts: all
 | ||
|   vars:
 | ||
|     python_version: "3.12.0"
 | ||
|   roles:
 | ||
|     - python
 | ||
| ```
 | ||
| 
 | ||
| ## Поддерживаемые дистрибутивы
 | ||
| 
 | ||
| ### Debian/Ubuntu
 | ||
| 
 | ||
| Роль использует репозиторий `deadsnakes` для установки Python 3.12:
 | ||
| 
 | ||
| ```yaml
 | ||
| - hosts: ubuntu_servers
 | ||
|   roles:
 | ||
|     - python
 | ||
| ```
 | ||
| 
 | ||
| ### RHEL/CentOS/Rocky/AlmaLinux
 | ||
| 
 | ||
| Роль использует EPEL репозиторий для установки Python 3.12:
 | ||
| 
 | ||
| ```yaml
 | ||
| - hosts: rhel_servers
 | ||
|   roles:
 | ||
|     - python
 | ||
| ```
 | ||
| 
 | ||
| ### Fedora
 | ||
| 
 | ||
| ```yaml
 | ||
| - hosts: fedora_servers
 | ||
|   roles:
 | ||
|     - python
 | ||
| ```
 | ||
| 
 | ||
| ### openSUSE
 | ||
| 
 | ||
| ```yaml
 | ||
| - hosts: suse_servers
 | ||
|   roles:
 | ||
|     - python
 | ||
| ```
 | ||
| 
 | ||
| ## Альтернативные репозитории
 | ||
| 
 | ||
| Для старых дистрибутивов, которые не поддерживают Python 3.12 из стандартных репозиториев, роль автоматически использует альтернативные источники:
 | ||
| 
 | ||
| ### RHEL/CentOS 7
 | ||
| - **IUS Repository**: Предоставляет современные версии Python
 | ||
| - **SCL (Software Collections)**: Для очень старых систем
 | ||
| - **EPEL**: Дополнительные пакеты
 | ||
| 
 | ||
| ### Debian/Ubuntu старых версий
 | ||
| - **deadsnakes PPA**: Предоставляет Python 3.12 для старых версий
 | ||
| - **Альтернативные пакеты**: Python 3.11 если 3.12 недоступен
 | ||
| 
 | ||
| ### Автоматическое переключение
 | ||
| Роль автоматически пытается установить Python 3.12, а если это невозможно, переключается на доступную версию (3.11) или использует альтернативные репозитории.
 | ||
| 
 | ||
| ## Структура роли
 | ||
| 
 | ||
| ```
 | ||
| roles/python/
 | ||
| ├── defaults/
 | ||
| │   └── main.yml          # Переменные по умолчанию
 | ||
| ├── handlers/
 | ||
| │   └── main.yml          # Обработчики событий
 | ||
| ├── meta/
 | ||
| │   └── main.yml          # Метаданные роли
 | ||
| ├── tasks/
 | ||
| │   └── main.yml          # Основные задачи
 | ||
| ├── vars/
 | ||
| │   └── main.yml          # Переменные для разных ОС
 | ||
| └── README.md             # Документация
 | ||
| ```
 | ||
| 
 | ||
| ## Логирование
 | ||
| 
 | ||
| Роль поддерживает подробное логирование. Установите `python_log_level: "DEBUG"` для получения детальной информации о процессе установки.
 | ||
| 
 | ||
| ## Обработка ошибок
 | ||
| 
 | ||
| Роль включает проверки на каждом этапе:
 | ||
| 
 | ||
| 1. Проверка наличия Python перед установкой
 | ||
| 2. Проверка успешности установки
 | ||
| 3. Проверка работоспособности pip
 | ||
| 4. Очистка временных файлов
 | ||
| 
 | ||
| ## Производительность
 | ||
| 
 | ||
| - Использует параллельную компиляцию (количество ядер CPU)
 | ||
| - Оптимизированная конфигурация Python с LTO
 | ||
| - Кэширование пакетов
 | ||
| - Очистка временных файлов
 | ||
| 
 | ||
| ## Безопасность
 | ||
| 
 | ||
| - Проверка целостности загружаемых файлов
 | ||
| - Использование официальных репозиториев
 | ||
| - Минимальные привилегии для установки
 | ||
| 
 | ||
| ## Устранение неполадок
 | ||
| 
 | ||
| ### Python не найден после установки
 | ||
| 
 | ||
| ```bash
 | ||
| # Проверьте символические ссылки
 | ||
| ls -la /usr/bin/python3*
 | ||
| 
 | ||
| # Обновите библиотеки
 | ||
| sudo ldconfig
 | ||
| ```
 | ||
| 
 | ||
| ### Ошибки компиляции
 | ||
| 
 | ||
| ```bash
 | ||
| # Установите системные зависимости
 | ||
| sudo apt install build-essential  # Ubuntu/Debian
 | ||
| sudo dnf groupinstall "Development Tools"  # RHEL/CentOS
 | ||
| ```
 | ||
| 
 | ||
| ### Проблемы с pip
 | ||
| 
 | ||
| ```bash
 | ||
| # Обновите pip
 | ||
| python3 -m pip install --upgrade pip
 | ||
| 
 | ||
| # Проверьте версию
 | ||
| pip3 --version
 | ||
| ```
 | ||
| 
 | ||
| ## Лицензия
 | ||
| 
 | ||
| MIT
 | ||
| 
 | ||
| ## Автор
 | ||
| 
 | ||
| **Сергей Антропов**  
 | ||
| Сайт: https://devops.org.ru
 | ||
| 
 | ||
| ## Поддержка
 | ||
| 
 | ||
| Для получения поддержки или сообщения об ошибках, пожалуйста, создайте issue в репозитории проекта. |