bash@wsl2:~
01

Запуск Django на Windows через WSL2 и Docker

Полное руководство от установки до production

Windows 10/11

Ваша основная система

WSL2

Подсистема Linux

Ubuntu 22.04

Дистрибутив Linux

Docker Engine

Контейнеризация

Django 5.x

Фреймворк Python

Цели этого руководства:

1. Установить Linux на Windows

Без переустановки системы, без виртуальных машин

2. Настроить Docker в терминале

Чистая установка через bash, без Docker Desktop

3. Запустить Django из Git

Свой проект в контейнере за 5 минут

Требования:

Windows 10 версии 2004+ или Windows 11
Доступ в интернет для загрузки пакетов
Аккаунт GitHub (для своего проекта)
Права администратора

Время выполнения:

15-30 мин
Установка WSL2
10-15 мин
Настройка Ubuntu
15-20 мин
Установка Docker
5-10 мин
Запуск Django
02

Установка WSL2 на Windows

Подсистема Linux для Windows

Что такое WSL2?

Windows Subsystem for Linux 2 (WSL2) - это полноценная подсистема Linux, интегрированная в Windows.

Нативная скорость

Практически нет накладных расходов

Полный Linux

Все команды bash, apt, ssh, git

Интеграция

Доступ к файлам Windows из Linux

Совместимость

Работает с VS Code, Docker, Python

Пошаговая установка WSL2:

1

Проверка версии Windows

Нажмите Win + R, введите winver

# Должна быть версия:
# Windows 10: 2004 (19041) или выше
# Windows 11: любая версия
2

Включение компонентов Windows

Откройте PowerShell от имени администратора:

# Запустите эти команды в PowerShell
wsl --install

Эта команда автоматически установит WSL2 и Ubuntu

3

Альтернативный способ (если первая не сработала)

# Включение компонентов вручную
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Перезагрузите компьютер после выполнения команд

4

Установка ядра Linux

Скачайте и установите пакет обновления ядра:

5

Установка WSL2 по умолчанию

# Установите WSL2 как версию по умолчанию
wsl --set-default-version 2

Проверка установки:

# Проверьте версию WSL
wsl --version

# Должно вывести:
# WSL version: 2.0.9.0
# Kernel version: 5.15.90.1
# WSLg version: 1.0.51

Ожидаемый вывод:

PS C:\> wsl --version
WSL version: 2.0.9.0
Kernel version: 5.15.90.1
WSLg version: 1.0.51
MSRDC version: 1.2.3770
✓ WSL установлен успешно!

Частые проблемы и решения:

Ошибка: "WSL 2 requires an update to its kernel component"

Решение

Скачайте и установите пакет обновления ядра по ссылке выше.

Команда wsl не найдена

Решение

Обновите Windows до последней версии или установите WSL вручную через "Включение компонентов Windows".

Virtualization is disabled in BIOS

Решение

Включите виртуализацию в BIOS/UEFI (Intel VT-x или AMD-V).

03

Установка и настройка Ubuntu в WSL2

Наш Linux-дистрибутив для работы

Почему именно Ubuntu?

Самый популярный

Больше всего документации и решений проблем

Огромные репозитории

Все нужные пакеты доступны через apt

Большое сообщество

Легко найти помощь в решении проблем

Стабильность

LTS версии поддерживаются 5 лет

Установка Ubuntu 22.04 LTS:

1. Установка из Microsoft Store

Простой способ

Откройте Microsoft Store и найдите "Ubuntu":

В поиске Microsoft Store введите "Ubuntu"

Выберите "Ubuntu 22.04 LTS" (не Ubuntu 20.04 или 24.04)

Нажмите "Получить""Установить"

2. Установка через командную строку

Для продвинутых
# Установите Ubuntu через PowerShell
wsl --install -d Ubuntu-22.04

3. Первый запуск и настройка

После установки запустите Ubuntu из меню "Пуск" или выполните:

# Запуск Ubuntu
wsl
При первом запуске:
  1. Введите имя пользователя (латинскими буквами, без пробелов)
  2. Введите пароль (не будет отображаться при вводе)
  3. Подтвердите пароль
Installing, this may take a few minutes...
Please create a default UNIX user account.
Username: yourname
New password: [скрыто]
Retype new password: [скрыто]
✓ Installation successful!
yourname@DESKTOP:~$ _

Настройка Ubuntu после установки:

1. Обновление системы

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

# Обновите установленные пакеты
sudo apt upgrade -y

# Установите базовые утилиты
sudo apt install -y curl wget git vim nano

2. Настройка рабочего каталога

# Перейдите в домашнюю директорию
cd ~

# Создайте папку для проектов
mkdir -p projects/django

# Проверьте доступ к Windows файлам
ls /mnt/c/Users/ВашеИмяПользователяWindows/

3. Настройка Git

# Настройте имя пользователя и email для Git
git config --global user.name "Ваше Имя"
git config --global user.email "ваш.email@example.com"

# Сохраните пароли в кэше
git config --global credential.helper store

# Проверьте настройки
git config --list

4. Настройка псевдонимов (aliases)

# Откройте файл .bashrc
nano ~/.bashrc

# Добавьте в конец файла:
alias ll='ls -la'
alias ..='cd ..'
alias ...='cd ../..'
alias python='python3'
alias pip='pip3'

# Сохраните изменения (Ctrl+X, Y, Enter)
# Примените изменения:
source ~/.bashrc

Интеграция WSL с Windows:

Доступ к файлам Windows

Все диски Windows доступны в /mnt/c/, /mnt/d/ и т.д.

VS Code Integration

Установите расширение "Remote - WSL" для работы из VS Code

Сетевые порты

Порты в WSL автоматически пробрасываются в Windows

04

Установка Docker Engine в Ubuntu WSL2

Без Docker Desktop, только консоль

Два пути установки Docker:

Docker Desktop

Не рекомендуется
  • Тяжеловесное приложение
  • Платно для компаний
  • Избыточно для WSL2

Docker Engine

Наш выбор
  • Легковесный, только CLI
  • Бесплатный всегда
  • Идеально для WSL2
  • Полный контроль

Пошаговая установка Docker Engine:

1. Удаление старых версий (если были)

# Удалите старые версии Docker
sudo apt remove docker docker-engine docker.io containerd runc -y
sudo apt autoremove -y

2. Установка зависимостей

# Обновите пакеты
sudo apt update

# Установите необходимые пакеты
sudo apt install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

3. Добавление GPG-ключа Docker

# Создайте папку для ключей
sudo mkdir -p /etc/apt/keyrings

# Скачайте и добавьте ключ Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

4. Настройка репозитория Docker

# Добавьте репозиторий Docker
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. Установка Docker Engine

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

# Установите Docker Engine
sudo apt install -y docker-ce docker-ce-cli containerd.io

# Проверьте установку
docker --version
Ожидаемый вывод:
Docker version 24.0.7, build afdd53b

6. Настройка прав для пользователя

По умолчанию Docker требует sudo. Исправим это:

# Добавьте текущего пользователя в группу docker
sudo usermod -aG docker $USER

# Примените изменения группы (нужен перезаход)
newgrp docker

# Проверьте, что docker работает без sudo
docker run hello-world
Должно вывести:
Hello from Docker!
This message shows that your installation appears to be working correctly.

7. Настройка Docker для запуска при старте WSL

# Включите автозапуск Docker
sudo systemctl enable docker

# Но WSL2 не использует systemd по умолчанию
# Решение: добавить запуск в .bashrc
echo "# Start Docker daemon automatically when logging in if not running." >> ~/.bashrc
echo 'RUNNING=`ps aux | grep dockerd | grep -v grep`' >> ~/.bashrc
echo 'if [ -z "$RUNNING" ]; then' >> ~/.bashrc
echo '    sudo dockerd > /dev/null 2>&1 &' >> ~/.bashrc
echo '    disown' >> ~/.bashrc
echo 'fi' >> ~/.bashrc

# Примените изменения
source ~/.bashrc

Проверка и настройка после установки:

1. Проверка установки

# Проверьте версию Docker
docker --version

# Проверьте версию Docker Compose
docker compose version

# Запустите тестовый контейнер
docker run --rm hello-world

2. Установка Docker Compose

# Docker Compose обычно устанавливается с Docker Engine
# Если нет - установите отдельно:
sudo apt install -y docker-compose

# Или используйте новую версию:
sudo apt install -y docker-compose-plugin

3. Настройка Docker для WSL2

# Создайте конфигурацию для WSL2
sudo tee /etc/docker/daemon.json > /dev/null <

Основные команды Docker:

Работа с контейнерами

docker ps Список запущенных контейнеров
docker ps -a Список всех контейнеров
docker run -d nginx Запустить контейнер в фоне
docker stop имя_контейнера Остановить контейнер
docker rm имя_контейнера Удалить контейнер

Работа с образами

docker images Список образов
docker pull ubuntu Скачать образ
docker rmi имя_образа Удалить образ
docker build -t имя . Собрать образ из Dockerfile

Логи и мониторинг

docker logs имя_контейнера Показать логи контейнера
docker stats Статистика контейнеров
docker exec -it имя_контейнера bash Войти в контейнер
05

Запуск Django проекта в Docker

Контейнеризация интернет-магазина

Архитектура нашего проекта:

Docker Контейнеры

  • 📦 Django контейнер
  • 🗄️ PostgreSQL контейнер
  • 🚀 Nginx контейнер (опционально)

Docker Compose

Управление несколькими контейнерами

docker-compose.yml

GitHub репозиторий

Ваш проект Django магазина

https://github.com/ваш-логин/django-shop

Структура Django проекта:

django-shop/
Dockerfile Конфигурация контейнера Django
docker-compose.yml Оркестрация контейнеров
requirements.txt Зависимости Python
config/
settings.py
urls.py
products/
cart/
static/
media/

1. Dockerfile для Django:

Dockerfile
# Используем официальный Python образ
FROM python:3.11-slim

# Устанавливаем системные зависимости
RUN apt-get update \
    && apt-get install -y \
        gcc \
        libpq-dev \
        && rm -rf /var/lib/apt/lists/*

# Устанавливаем рабочую директорию
WORKDIR /app

# Копируем зависимости
COPY requirements.txt .

# Устанавливаем Python зависимости
RUN pip install --no-cache-dir -r requirements.txt

# Копируем проект
COPY . .

# Создаем статику
RUN python manage.py collectstatic --noinput

# Открываем порт 8000
EXPOSE 8000

# Запускаем сервер
CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:8000"]

2. docker-compose.yml:

docker-compose.yml
version: '3.8'

services:
  db:
    image: postgres:15
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_DB=django_shop
      - POSTGRES_USER=django_user
      - POSTGRES_PASSWORD=secret_password
    restart: always

  web:
    build: .
    command: >
      sh -c "python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8000"
    volumes:
      - .:/app
      - static_volume:/app/static
      - media_volume:/app/media
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgres://django_user:secret_password@db:5432/django_shop
      - DEBUG=True
    depends_on:
      - db
    restart: always

volumes:
  postgres_data:
  static_volume:
  media_volume:

3. requirements.txt:

requirements.txt
Django>=5.0,<6.0
gunicorn>=20.0,<22.0
psycopg2-binary>=2.9,<3.0
pillow>=10.0,<11.0
django-environ>=0.10,<0.11

# Для разработки
ipython>=8.0,<9.0
django-debug-toolbar>=4.0,<5.0

4. Настройки Django для Docker:

config/settings.py
import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

SECRET_KEY = os.environ.get('SECRET_KEY', 'your-secret-key-here')

DEBUG = os.environ.get('DEBUG', 'False') == 'True'

ALLOWED_HOSTS = ['localhost', '127.0.0.1']

# Настройки базы данных для Docker
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ.get('POSTGRES_DB', 'django_shop'),
        'USER': os.environ.get('POSTGRES_USER', 'django_user'),
        'PASSWORD': os.environ.get('POSTGRES_PASSWORD', 'secret_password'),
        'HOST': os.environ.get('POSTGRES_HOST', 'db'),
        'PORT': os.environ.get('POSTGRES_PORT', '5432'),
    }
}

# Статические файлы
STATIC_URL = '/static/'
STATIC_ROOT = '/app/static'

# Медиа файлы
MEDIA_URL = '/media/'
MEDIA_ROOT = '/app/media'

Запуск проекта:

1. Клонирование проекта из GitHub

# Перейдите в папку проектов
cd ~/projects/django

# Клонируйте ваш репозиторий
git clone https://github.com/ваш-логин/django-shop.git
cd django-shop

2. Сборка и запуск контейнеров

# Соберите образы и запустите контейнеры
docker-compose up --build -d

# Проверьте статус
docker-compose ps

# Следите за логами
docker-compose logs -f web

3. Создание миграций и суперпользователя

# Выполните миграции
docker-compose exec web python manage.py migrate

# Создайте суперпользователя
docker-compose exec web python manage.py createsuperuser

# Загрузите фикстуры (если есть)
docker-compose exec web python manage.py loaddata фикстуры.json

4. Проверка работы

Откройте в браузере:

http://localhost:8000 Главная страница
http://localhost:8000/admin Админка Django
06

Практическое задание: Сборка проекта

От теории к практике

Задание:

0/4

Соберите полную конфигурацию для запуска Django проекта в Docker.

Цель: Создать 4 ключевых файла для развертывания

Файлы проекта:

0 файлов 0/4 готово

Перетащите сюда блоки кода из списка

Доступные блоки кода:

Готовый проект для скачивания:

Полная конфигурация

Все файлы для быстрого старта

Содержимое архива:

django-docker-template/
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
├── .env.example
├── .dockerignore
├── deploy.sh
├── nginx/
│   └── nginx.conf
├── config/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── README.md

Что вы изучили:

WSL2 на Windows

Установка и настройка Linux подсистемы

Ubuntu в WSL

Работа с терминалом Linux

Docker Engine

Установка и управление контейнерами

Django в Docker

Контейнеризация веб-приложений

Что дальше:

1

Оптимизация Dockerfile

Многоступенчатая сборка, кэширование

2

База данных PostgreSQL

Настройка репликации, бэкапы

3

CI/CD пайплайн

Автоматическое развертывание

Терминал
$ Добро пожаловать в терминал презентации!
$ Используйте кнопки для выполнения команд.