Как освоить OpenShift и Django: инструкция для разработчика
Для кого эта статья:
- Начинающие разработчики и студенты, интересующиеся Python и веб-разработкой
- Инженеры, желающие освоить контейнеризацию и развертывание приложений
Профессионалы, стремящиеся улучшить свои навыки в работе с OpenShift и Django
Погружение в мир контейнеризации и веб-разработки
Пройдите тест, узнайте какой профессии подходитеСколько вам лет0%До 18От 18 до 24От 25 до 34От 35 до 44От 45 до 49От 50 до 54Больше 55
Погружение в мир контейнеризации и веб-разработки может показаться устрашающим, особенно когда речь идёт о таких мощных инструментах, как OpenShift и Django. Многие начинающие разработчики останавливаются, встречая стену технической документации и непонятных терминов. Но представьте: всего через несколько часов вы сможете развернуть своё первое полноценное веб-приложение в профессиональной облачной среде. Именно такой путь от полного новичка до уверенного разработчика я расскажу в этом руководстве. 🚀
Хотите системно освоить не только Django и OpenShift, но и стать профессиональным Python-разработчиком с нуля? Обучение Python-разработке от Skypro даст вам все необходимые навыки – от основ программирования до развертывания высоконагруженных приложений в облаке. Вместо разрозненных уроков вы получите структурированную программу с реальными проектами в портфолио и гарантией трудоустройства.
Базовые концепции OpenShift и Django для новичков
Прежде чем мы погрузимся в практику, необходимо разобраться в ключевых концепциях. Давайте рассмотрим, что такое OpenShift и Django, и почему эта комбинация технологий стала такой популярной.
OpenShift – это платформа контейнеризации корпоративного уровня, основанная на Kubernetes. Если вы никогда не сталкивались с контейнерами, представьте их как легковесные виртуальные машины, которые содержат всё необходимое для запуска вашего приложения. OpenShift берёт на себя управление этими контейнерами, их масштабирование и оркестрацию.
Django – это высокоуровневый Python-фреймворк для веб-разработки, который следует принципу "батарейки включены". Это означает, что Django предоставляет всё необходимое для быстрой разработки, от ORM (Object-Relational Mapping) для работы с базами данных до встроенной административной панели.
| Особенность | OpenShift | Django |
|---|---|---|
| Тип технологии | Платформа контейнеризации | Веб-фреймворк |
| Основной язык | Не зависит (поддерживает многие) | Python |
| Цель использования | Развертывание и управление приложениями | Разработка веб-приложений |
| Ключевое преимущество | Автоматизация, масштабирование | Скорость разработки, безопасность |
Почему стоит выбрать именно эту комбинацию для изучения? Django позволяет быстро создавать функциональные веб-приложения, а OpenShift предоставляет профессиональную среду для их развертывания. Это значительно сокращает время от идеи до работающего в продакшене продукта.
Ключевые концепции OpenShift, которые нужно понимать новичку:
- Pods — базовые единицы вычислений в OpenShift, обычно содержат один или несколько контейнеров
- Services — абстракции, определяющие логический набор подов и политику доступа к ним
- Routes — механизм для предоставления внешнего доступа к сервисам
- Deployments — описывают желаемое состояние подов и как их обновлять
Базовые концепции Django:
- Models — классы Python, определяющие структуру данных
- Views — функции или классы, обрабатывающие HTTP-запросы
- Templates — HTML-файлы с шаблонной логикой для отображения данных
- URLs — конфигурация маршрутизации запросов
Михаил Петров, ведущий инженер-девопс
Ещё пару лет назад я проводил техническое интервью с кандидатом, который утверждал, что имеет опыт работы с Django. Когда я попросил его развернуть простое приложение в облаке, он растерялся. Это типичная ситуация: многие разработчики знают, как создать приложение локально, но теряются при необходимости масштабного развертывания.
Я дал ему шанс и предложил пару часов на изучение OpenShift. Удивительно, но к концу дня он не только развернул приложение, но и настроил автоматическое масштабирование. Этот опыт показал мне, что связка OpenShift и Django идеально подходит для быстрого освоения, даже если вы раньше не работали с контейнерами. Сейчас этот разработчик — один из ключевых членов нашей команды.

Настройка рабочего окружения для OpenShift и Django
Настройка правильного окружения — это фундамент успешной разработки. Давайте пошагово рассмотрим, что вам понадобится для комфортной работы с OpenShift и Django. 🛠️
Для начала, вам необходимо установить Python и виртуальное окружение. Используйте Python 3.8 или выше для наилучшей совместимости с Django:
# Установка virtualenv
pip install virtualenv
# Создание виртуального окружения
virtualenv venv
# Активация в Windows
venv\Scripts\activate
# Активация в Linux/Mac
source venv/bin/activate
Теперь установим Django:
pip install django
Для работы с OpenShift вам потребуются несколько инструментов:
- oc (OpenShift CLI) — основной инструмент для взаимодействия с кластером OpenShift
- Docker или Podman — для локальной работы с контейнерами
- Git — для управления версиями кода
Установка OpenShift CLI:
Для Windows:
- Скачайте последнюю версию с официального сайта
- Распакуйте архив и добавьте путь к oc.exe в переменную PATH
Для Linux:
# Загрузка последней версии
wget https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-client-linux.tar.gz
# Распаковка
tar xvzf openshift-client-linux.tar.gz
# Перемещение в директорию из PATH
sudo mv oc /usr/local/bin/
Для Mac:
brew install openshift-cli
После установки всех инструментов, проверьте их работоспособность:
python --version
django-admin --version
oc version
docker --version # или podman --version
git --version
Теперь вам нужно настроить доступ к кластеру OpenShift. Для обучения вы можете использовать:
| Опция | Преимущества | Недостатки |
|---|---|---|
| Red Hat Developer Sandbox | Бесплатно, официально, 30-дневный доступ | Ограниченные ресурсы |
| Minishift (для OpenShift 3) | Локальное развертывание, полный контроль | Высокие требования к ресурсам ПК |
| CodeReady Containers (для OpenShift 4) | Локальное развертывание, современная версия | Очень высокие требования к ресурсам |
| Облачные провайдеры (AWS, Azure) | Полнофункциональный кластер | Платно после пробного периода |
Для начинающих я рекомендую Developer Sandbox — это самый быстрый способ получить доступ к реальному кластеру OpenShift без сложной настройки. После регистрации вы получите файл конфигурации, который нужно применить командой:
oc login --token=sha256~XXXXXX --server=https://api.sandbox-m3.1530.p1.openshiftapps.com:6443
Проверьте подключение:
oc whoami
oc projects
Ваше рабочее окружение готово! Теперь вы можете начать разработку Django-приложения с прицелом на развертывание в OpenShift. 🎉
Создание первого Django-проекта для развертывания
Теперь, когда ваше окружение настроено, давайте создадим Django-проект, который впоследствии развернем в OpenShift. Я покажу вам, как структурировать проект для бесшовного деплоя в контейнерной среде. 📝
Создайте новый Django-проект с помощью следующей команды:
django-admin startproject openshift_demo
cd openshift_demo
Давайте создадим простое приложение для нашего проекта:
python manage.py startapp demo_app
Добавьте приложение в INSTALLED_APPS в файле settings.py:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'demo_app', # Добавляем наше приложение
]
Теперь создадим простую модель в файле demo_app/models.py:
from django.db import models
class Task(models.Model):
title = models.CharField(max_length=200)
description = models.TextField(blank=True, null=True)
completed = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
Создадим представление в demo_app/views.py:
from django.shortcuts import render
from .models import Task
def task_list(request):
tasks = Task.objects.all().order_by('-created_at')
return render(request, 'demo_app/task_list.html', {'tasks': tasks})
Создайте каталог для шаблонов и базовый шаблон:
mkdir -p demo_app/templates/demo_app
Создайте файл demoapp/templates/demoapp/task_list.html:
<!DOCTYPE html>
<html>
<head>
<title>Task Manager</title>
<style>
body { font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; }
h1 { color: #333; }
.task { border: 1px solid #ddd; padding: 10px; margin-bottom: 10px; border-radius: 5px; }
.completed { background-color: #e8f5e9; }
.task h2 { margin-top: 0; }
</style>
</head>
<body>
<h1>Task Manager</h1>
<div>
{% for task in tasks %}
<div class="task {% if task.completed %}completed{% endif %}">
<h2>{{ task.title }}</h2>
<p>{{ task.description|default:"No description provided." }}</p>
<p>Status: {% if task.completed %}Completed{% else %}Pending{% endif %}</p>
<small>Created: {{ task.created_at }}</small>
</div>
{% empty %}
<p>No tasks available.</p>
{% endfor %}
</div>
</body>
</html>
Настройте URL-маршрутизацию в demo_app/urls.py (сначала создайте этот файл):
from django.urls import path
from . import views
urlpatterns = [
path('', views.task_list, name='task_list'),
]
И обновите основной файл urls.py в каталоге проекта:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('demo_app.urls')),
]
Теперь применим миграции и создадим суперпользователя:
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
Для адаптации проекта к развертыванию в OpenShift, нам необходимо сделать несколько важных изменений:
- Создать Dockerfile
- Настроить переменные окружения
- Создать файл requirements.txt
- Обновить настройки базы данных
Создайте файл requirements.txt в корневом каталоге проекта:
django>=3.2,<4.0
gunicorn>=20.0.4
psycopg2-binary>=2.8.6
whitenoise>=5.2.0
django-environ>=0.4.5
Создайте файл Dockerfile в корневом каталоге:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN python manage.py collectstatic --noinput
EXPOSE 8080
CMD ["gunicorn", "openshift_demo.wsgi:application", "--bind", "0.0.0.0:8080"]
Обновите файл settings.py для работы с переменными окружения:
import os
import environ
env = environ.Env()
# Читаем .env файл, если он существует
environ.Env.read_env()
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = env('SECRET_KEY', default='your-default-secret-key-for-development')
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = env.bool('DEBUG', default=False)
ALLOWED_HOSTS = ['*'] # В продакшен-среде следует ограничить
# Database
DATABASES = {
'default': {
'ENGINE': env('DATABASE_ENGINE', default='django.db.backends.sqlite3'),
'NAME': env('DATABASE_NAME', default=os.path.join(BASE_DIR, 'db.sqlite3')),
'USER': env('DATABASE_USER', default=''),
'PASSWORD': env('DATABASE_PASSWORD', default=''),
'HOST': env('DATABASE_HOST', default=''),
'PORT': env('DATABASE_PORT', default=''),
}
}
# Static files
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
# Simplified static file handling
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
# Add WhiteNoise middleware
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware', # Add this line
# ... other middleware
]
Создайте файл .gitignore, чтобы исключить ненужные файлы из репозитория:
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# Django
*.log
local_settings.py
db.sqlite3
media/
# Virtual Environment
venv/
ENV/
# IDE
.idea/
.vscode/
*.swp
*.swo
Инициализируйте Git-репозиторий и сделайте первый коммит:
git init
git add .
git commit -m "Initial Django project setup for OpenShift deployment"
Теперь ваш Django-проект полностью подготовлен для развертывания в OpenShift! Мы создали базовое приложение для управления задачами и адаптировали его для контейнерной среды с помощью Dockerfile и настроек для работы с переменными окружения. 🎯
Анна Смирнова, DevOps-специалист
Когда я только начинала работать с Django и OpenShift, меня постоянно преследовали проблемы с настройкой статических файлов. На локальной машине всё работало отлично, но после деплоя CSS и JavaScript просто переставали загружаться.
Однажды я потратила целый день, пытаясь решить эту проблему для важного проекта с близким дедлайном. Ситуация казалась безвыходной, пока я не добавила WhiteNoise middleware и не настроила STATIC_ROOT правильно.
Этот опыт научил меня всегда тестировать конфигурацию в контейнере перед деплоем. Теперь, готовя Django-проект для OpenShift, я всегда начинаю с правильной настройки статических файлов и переменных окружения — это экономит часы отладки впоследствии.
Деплой Django-приложения в OpenShift: шаг за шагом
Развертывание Django-приложения в OpenShift может показаться сложным, но я разобью этот процесс на управляемые шаги. Следуя этому руководству, вы успешно опубликуете свое приложение в облачной среде. 🚢
Сначала убедитесь, что вы вошли в свой кластер OpenShift через командную строку:
oc login --token=<your_token> --server=<your_server>
Создайте новый проект в OpenShift (или используйте существующий):
oc new-project django-demo
У нас есть несколько способов развернуть приложение в OpenShift:
- Напрямую из Git-репозитория (Source-to-Image)
- С использованием нашего Dockerfile
- Через YAML-манифесты
- С помощью оператора OpenShift Pipelines
Для начинающих наиболее прямолинейным является второй метод. Давайте создадим нашу сборку на основе подготовленного ранее Dockerfile:
oc new-build --name=django-app --binary=true
Это создаст BuildConfig, но не запустит сборку немедленно. Теперь отправьте содержимое вашей директории для сборки:
oc start-build django-app --from-dir=. --follow
Флаг --follow позволит вам наблюдать за процессом сборки в реальном времени.
После успешной сборки создайте приложение, используя ваш образ:
oc new-app django-app
Чтобы ваше приложение было доступно извне, создайте маршрут:
oc expose service django-app
Получите URL вашего приложения:
oc get route django-app
На этом этапе ваше приложение должно быть доступно по указанному URL, но скорее всего оно не будет работать корректно без настройки базы данных и переменных окружения.
Давайте добавим базу данных PostgreSQL:
oc new-app postgresql-ephemeral \
--name=postgresql \
--param=POSTGRESQL_USER=djangouser \
--param=POSTGRESQL_PASSWORD=djangopassword \
--param=POSTGRESQL_DATABASE=djangodb
Теперь настроим переменные окружения для вашего Django-приложения:
oc set env deployment/django-app \
SECRET_KEY="a-secure-secret-key" \
DEBUG="False" \
DATABASE_ENGINE="django.db.backends.postgresql" \
DATABASE_NAME="djangodb" \
DATABASE_USER="djangouser" \
DATABASE_PASSWORD="djangopassword" \
DATABASE_HOST="postgresql" \
DATABASE_PORT="5432" \
ALLOWED_HOSTS="*"
После обновления переменных окружения ваш под будет автоматически перезапущен с новыми настройками. Однако вам все еще нужно применить миграции. Для этого выполните:
# Найдите имя вашего пода
oc get pods
# Запустите миграции в поде
oc rsh <pod_name> python manage.py migrate
Давайте также создадим суперпользователя для доступа к админке:
oc rsh <pod_name> python manage.py createsuperuser
Для более надежного и управляемого развертывания стоит создать файл конфигурации DeploymentConfig. Создайте файл deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: django-app
labels:
app: django-app
spec:
replicas: 1
selector:
matchLabels:
app: django-app
template:
metadata:
labels:
app: django-app
spec:
containers:
- name: django
image: image-registry.openshift-image-registry.svc:5000/django-demo/django-app:latest
ports:
- containerPort: 8080
env:
- name: SECRET_KEY
value: "your-secure-secret-key"
- name: DEBUG
value: "False"
- name: DATABASE_ENGINE
value: "django.db.backends.postgresql"
- name: DATABASE_NAME
value: "djangodb"
- name: DATABASE_USER
value: "djangouser"
- name: DATABASE_PASSWORD
value: "djangopassword"
- name: DATABASE_HOST
value: "postgresql"
- name: DATABASE_PORT
value: "5432"
resources:
limits:
cpu: "500m"
memory: "512Mi"
requests:
cpu: "250m"
memory: "256Mi"
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 15
timeoutSeconds: 2
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 30
timeoutSeconds: 2
Примените этот файл конфигурации:
oc apply -f deployment.yaml
Для управления секретами, такими как пароли и ключи, лучше использовать OpenShift Secrets вместо прямого указания в Deployment:
oc create secret generic django-secrets \
--from-literal=secret-key="your-very-secure-secret-key" \
--from-literal=db-password="djangopassword"
Затем обновите ваш Deployment, чтобы использовать эти секреты:
oc set env deployment/django-app --from=secret/django-secrets
Вот основные команды OpenShift для управления вашим развернутым приложением:
| Действие | Команда |
|---|---|
| Проверить логи | oc logs deployment/django-app |
| Масштабировать приложение | oc scale deployment/django-app --replicas=3 |
| Обновить образ | oc start-build django-app --from-dir=. --follow |
| Перезапустить деплоймент | oc rollout restart deployment/django-app |
| Удалить приложение | oc delete all --selector app=django-app |
После успешного развертывания, зайдите на URL вашего приложения и убедитесь, что оно работает корректно. Вы должны увидеть список задач (или сообщение "No tasks available").
Поздравляю! Вы успешно развернули Django-приложение в OpenShift. Это большое достижение, которое открывает путь к более сложным сценариям развертывания и масштабирования. 🎊
Расширенные возможности обучения OpenShift и Django
Когда вы освоили основы и успешно развернули своё первое Django-приложение в OpenShift, пора двигаться дальше. В этом разделе я расскажу о расширенных возможностях обеих технологий и как продолжить ваше обучение. 🔍
Расширенные возможности Django, которые стоит изучить:
- Django REST framework – создавайте мощные API для вашего приложения
- Celery – асинхронные задачи и планирование
- Django Channels – WebSockets и реальновременные функции
- Django CMS – готовая система управления контентом
- Django-allauth – расширенная аутентификация, включая социальные сети
- Django-debug-toolbar – незаменимый инструмент для отладки и оптимизации
Расширенные возможности OpenShift:
- Операторы – автоматизация сложных рабочих нагрузок
- Serverless – запускайте приложения только при наличии запросов
- Service Mesh – управление микросервисной архитектурой
- CI/CD Pipelines – автоматизация сборки и развертывания
- Horizontal Pod Autoscaler – автоматическое масштабирование при нагрузке
- Persistent Volumes – хранение данных между развертываниями
Как лучше строить свое обучение? Предлагаю следующие этапы и проекты для развития ваших навыков:
- Уровень 1: Основы – Блог с базовой функциональностью, развернутый в OpenShift
- Уровень 2: Промежуточный – Интернет-магазин с RESTful API и аутентификацией
- Уровень 3: Продвинутый – Приложение с микросервисной архитектурой, CI/CD и автомасштабированием
Для эффективного обучения я рекомендую следующие ресурсы:
| Ресурс | Тип | Особенности |
|---|---|---|
| Django Documentation | Официальная документация | Полное и актуальное руководство |
| Django Girls Tutorial | Бесплатный курс | Идеально для абсолютных новичков |
| OpenShift Interactive Learning Portal | Интерактивные лабораторные работы | Практический подход с готовыми средами |
| Two Scoops of Django | Книга | Лучшие практики от экспертов |
| Kubernetes: Up and Running | Книга | Отличное введение в Kubernetes |
Для более глубокого понимания OpenShift рекомендую изучить следующие концепции:
- Безопасность и RBAC – управление доступом на основе ролей
- Network Policies – контроль сетевого трафика между подами
- Resource Quotas – ограничение использования ресурсов в проекте
- Multistage Builds – оптимизация процесса сборки контейнеров
- StatefulSets – для приложений, требующих постоянных идентификаторов
Для Django-разработчиков особенно полезно будет изучить:
- Оптимизация производительности – кэширование, оптимизация запросов, профилирование
- Написание тестов – unit, integration, functional тесты
- Безопасность веб-приложений – защита от CSRF, XSS, SQL-инъекций
- Интернационализация и локализация – многоязычные приложения
- Масштабирование Django – стратегии для высоконагруженных приложений
Практический совет: для ускорения обучения создайте учебную дорожную карту с конкретными проектами. Например:
- Неделя 1-2: Создание простого API с Django REST Framework и его деплой в OpenShift
- Неделя 3-4: Добавление аутентификации, тестов и настройка CI/CD-пайплайна
- Неделя 5-6: Интеграция с базой данных PostgreSQL в OpenShift и настройка резервного копирования
- Неделя 7-8: Реализация асинхронных задач с Celery и Redis в контейнерной среде
Помните, что изучение OpenShift и Django — это марафон, а не спринт. Регулярно практикуйтесь, участвуйте в сообществах и не бойтесь экспериментировать. Чем больше ошибок вы сделаете в процессе обучения, тем глубже будет ваше понимание этих мощных технологий. 🌱
Освоив Django и OpenShift, вы получаете в руки исключительно мощный инструментарий для создания и развертывания современных веб-приложений любой сложности. Вместо того чтобы тратить часы на ручную настройку серверов или борьбу с проблемами масштабирования, вы можете сосредоточиться на написании кода, который решает реальные бизнес-задачи. Технологическая эволюция не останавливается, но фундаментальные принципы контейнеризации и структурированной веб-разработки, которые вы освоили, останутся актуальными еще долгие годы, позволяя вам быстро адаптироваться к новым требованиям рынка.
Читайте также
- Python backend разработчик: навыки от новичка до профессионала
- Кортежи в Python: мощный инструмент для неизменяемых данных
- Алгоритмы и структуры данных Python: от основ до собеседований
- ООП в Python: учебники, примеры и ресурсы для разработчиков
- 5 способов превратить сайт в мобильное приложение без кода
- 50+ идей для Python pet-проектов: от новичка до профессионала
- Python-проекты и IDE: от начинающих до опытных разработчиков
- Создание игр на Python для новичков: от идеи до рабочего проекта
- Топ-5 Python фреймворков тестирования: сравнение и примеры кода
- Создание консольной игры на Python: от первого кода до готового проекта


