Технологии извлечения и анализа данных

Установка Docker

Don’t want to read through all this?

Just point any AI chat (Claude, ChatGPT, etc.) to this page in Markdown or to the llms.txt index, and ask it to generate the config files and commands for you. It’ll read the docs, ask you a few questions about your setup, and give you ready-to-use configuration. Save your time — let the model do the reading.

You could also contact me via Telegram — I’m always eager to help. I’m not being just polite here — I really like to chat with like-minded people, especially if you love coding as much as I do.

Docker обеспечивает полную изоляцию среды разработки для каждого проекта. Даже если модели ведут себя некорректно, они могут повредить только свой контейнер. Пересоздание и перезапуск занимают всего несколько секунд. Это также позволяет добавлять инструменты и конфигурацию для конкретного проекта вместо раздувания универсального образа.

Пользователи Docker Desktop: Если вы предпочитаете графический интерфейс для Docker, ознакомьтесь с инструкциями по установке для вашей платформы: Windows Docker Desktop или Mac Docker Desktop.

У меня есть два Docker-образа: xedant/code:dev-latest и xedant/code:min-latest.

Dev-образ (2.8 ГБ) содержит Pastukhov Code с инструментами, необходимыми для его разработки и сборки — ASP.NET Core SDK и Node.js с инструментами для сборки и линтинга. Вы можете использовать его, если разрабатываете клиент-серверные приложения на ASP.NET Core и Node.js как фронтенд.

Что входит в dev-образ
  • ASP.NET Core 9.0 SDK — build and run .NET applications
  • Node.js (LTS) — JavaScript runtime with npm
  • Python 3 — interpreter with pip and venv
  • Claude Code CLI — AI coding agent
  • dotnet-ef — Entity Framework Core migrations
  • JetBrains ReSharper CLI — .NET code inspection and cleanup
  • flake8 — Python linter
  • Docker + Docker Compose — container management from within the container
  • git — version control
  • mc — Midnight Commander file manager
  • ncdu — disk usage analyzer
  • sqlite3 — database CLI
  • curl, wget, rsync, zip, unzip — networking and file utilities

Минимальный образ (570 МБ) содержит Pastukhov Code с Python и всеми необходимыми инструментами. Это полнофункциональный образ для проектов, которые не используют ASP.NET Core — значительно меньше по размеру, но при этом предоставляет всё необходимое для работы Claude Code из коробки. Вы можете дополнить его своей средой разработки по требованию, попросив модели установить недостающие пакеты. Или собрать свой собственный Docker-образ на его основе, который лучше всего соответствует вашим потребностям. Свяжитесь со мной, если вам понадобится помощь с этим.

Что входит в минимальный образ
  • ASP.NET Core 9.0 Runtime — run .NET applications (no SDK for building)
  • Node.js (LTS) — JavaScript runtime with npm
  • Python 3 — interpreter with pip and venv
  • Claude Code CLI — AI coding agent
  • flake8 — Python linter
  • Docker + Docker Compose — container management from within the container
  • git — version control
  • mc — Midnight Commander file manager
  • ncdu — disk usage analyzer
  • sqlite3 — database CLI
  • curl, wget, rsync, zip, unzip — networking and file utilities

Я планирую выпустить образы для конкретных фреймворков в будущем. Просто свяжитесь со мной через Telegram и расскажите, какой стек вы используете, и я смогу собрать и поддерживать их дальше. Для меня действительно не сложно разработать и поддерживать больше фреймворков и сред разработки, мне просто нужно знать, что вы используете на практике.

Расширение образа кастомными инструментами

Оба образа поставляются со всеми инструментами, необходимыми для работы Claude Code. Но если ваш проект использует специфические языки или инструменты, вы можете собрать собственный образ на основе xedant/code:min-latest, который будет включать именно то, что вам нужно. Таким образом каждый новый контейнер будет запускаться с предварительно установленными инструментами вместо их установки при каждом пересоздании.

Создание собственного Dockerfile

Создайте Dockerfile рядом с вашим docker-compose.yml:

FROM xedant/code:min-latest

# Add system packages
RUN apt-get update && apt-get install -y \
    ruby \
    default-jdk \
    && rm -rf /var/lib/apt/lists/*

# Add Python packages
RUN python3 -m pip install --break-system-packages \
    fastapi \
    pytest

# Add Node.js packages (Node.js is pre-installed in min image)
RUN npm install -g \
    typescript \
    @angular/cli

# Add global tools
RUN dotnet tool install -g Your.Tool.Name

Затем обновите ваш docker-compose.yml, чтобы использовать свой собственный образ вместо предварительно собранного:

services:
  my_project:
    container_name: my_project
    build: .                    # builds from Dockerfile in this directory
    image: my-project:latest    # tag for the built image
    ports:
      - "5001:80"
    volumes:
      - "./MyProject:/project"
    environment:
      - PASTUKHOV_CODE_LOGIN=code
      # ... rest of your environment variables
    restart: unless-stopped
    working_dir: /app

Соберите и запустите свой собственный образ:

docker compose up -d --build

Флаг --build пересобирает ваш образ, если Dockerfile изменился. Без него Docker будет использовать последнюю сборку.

Или просто попросите модель

Если вы не хотите возиться с Dockerfile, вы можете просто попросить Claude Code установить пакеты внутри запущенного контейнера. Он имеет доступ sudo и может устанавливать всё что угодно с помощью apt, pip или npm. Недостаток в том, что эти установки будут потеряны при пересоздании контейнера — сборка собственного образа делает их постоянными.

services:
  xedant_code_demo: # переименуйте в соответствии с названием вашего проекта
    container_name: xedant_code_demo # переименуйте в соответствии с названием вашего проекта
    image: xedant/code:dev-latest
    ports:
      - "5001:80"
    volumes:
      - "./DemoProject:/project" # замените ./DemoProject на папку с вашим проектом
    environment:
      - PASTUKHOV_CODE_LOGIN=code
      - PASTUKHOV_CODE_PASSWORD=5694d08a2e53ffcae0c3103e5ad6f6076abd960eb1f8a56577040bc1028f702b # SHA256-хеш пароля `code`
      - JWT_SECRET_KEY= # должна быть уникальная, сложная для guessing случайная строка (минимум 32 символа). Любой, кто знает этот ключ, может генерировать валидные токены аутентификации. Если опущено, ключ генерируется автоматически, но теряется при пересоздании контейнера, заставляя всех пользователей перелогиниваться
      - ASPNETCORE_ENVIRONMENT=Production
      - ASPNETCORE_URLS=http://+:80 # порт внутри контейнера
      - PASTUKHOV_CODE_PROJECT_PATH=/project # путь к проекту внутри контейнера
      - PASTUKHOV_CODE_GIT_USER_NAME=User # ваше имя для git-коммитов
      - PASTUKHOV_CODE_GIT_USER_EMAIL=me@gmail.com # ваш email для git-коммитов
      - PASTUKHOV_CODE_PROJECT_GIT_URL=https://github.com/Xedant/DemoProject.git # замените на git-URL вашего проекта
      - PASTUKHOV_CODE_PROJECT_GIT_LOGIN= # ваш git-логин
      - PASTUKHOV_CODE_PROJECT_GIT_PASSWORD= # ваш personal access key для git
      - PASTUKHOV_CODE_SKILLS_GIT_URL=https://github.com/Xedant/DemoSkills.git # замените на git-URL ваших навыков
      - PASTUKHOV_CODE_SKILLS_GIT_LOGIN= # ваш git-логин
      - PASTUKHOV_CODE_SKILLS_GIT_PASSWORD= # ваш personal access key для git
      # опционально: хранение данных в Postgres, а не в локальном SQLite. Рекомендуется иметь отдельные базы для каждого из ваших проектов.
      # - PASTUKHOV_CODE_DATABASE=Server=postgres;Port=5433;User Id=code;Password=code;Database=code;Pooling=false;Timeout=600;CommandTimeout=600;KeepAlive=600;
      # опционально: отправка статистики чатов в Clickhouse для визуализации в Grafana
      # - PASTUKHOV_CODE_CLICKHOUSE_URL=Host=clickhouse;Port=8127;Protocol=http;Database=code;Username=code;Password=code
      # опционально: ваш лицензионный ключ, если он есть
      # - PASTUKHOV_CODE_LICENSE=
    restart: unless-stopped
    working_dir: /app

Docker CLI с файлом .env

Вы также можете запустить Pastukhov Code напрямую с помощью команды docker run, сохраняя переменные окружения в файле .env. Это позволяет избежать размещения секретов в вашем compose-файле или в командной строке.

Создайте файл .env рядом с папкой вашего проекта:

# .env
PASTUKHOV_CODE_LOGIN=code
PASTUKHOV_CODE_PASSWORD=5694d08a2e53ffcae0c3103e5ad6f6076abd960eb1f8a56577040bc1028f702b
JWT_SECRET_KEY=
ASPNETCORE_ENVIRONMENT=Production
ASPNETCORE_URLS=http://+:80
PASTUKHOV_CODE_PROJECT_PATH=/project
PASTUKHOV_CODE_GIT_USER_NAME=User
PASTUKHOV_CODE_GIT_USER_EMAIL=me@gmail.com
PASTUKHOV_CODE_PROJECT_GIT_URL=https://github.com/Xedant/DemoProject.git
PASTUKHOV_CODE_PROJECT_GIT_LOGIN=
PASTUKHOV_CODE_PROJECT_GIT_PASSWORD=
PASTUKHOV_CODE_SKILLS_GIT_URL=https://github.com/Xedant/DemoSkills.git
PASTUKHOV_CODE_SKILLS_GIT_LOGIN=
PASTUKHOV_CODE_SKILLS_GIT_PASSWORD=

Затем запустите контейнер:

docker run -d \
  --name xedant_code_demo \
  --env-file .env \
  -p 5001:80 \
  -v ./DemoProject:/project \
  --restart unless-stopped \
  -w /app \
  xedant/code:dev-latest

Флаг --env-file считывает все переменные из файла. Вы можете переопределить отдельные значения, добавив дополнительные флаги -e после него, например -e PASTUKHOV_CODE_LICENSE=your-key.

Автоматически генерируемые учетные данные

Если вы опустите переменные окружения PASTUKHOV_CODE_LOGIN и PASTUKHOV_CODE_PASSWORD, приложение сгенерирует временные учетные данные при запуске. Логин будет code, а случайный пароль будет выведен в консоль контейнера. Просмотреть его можно с помощью:

docker logs xedant_code_demo

Эти учетные данные действительны до перезапуска контейнера. На странице входа будет показано уведомление о временных учетных данных и предложено установить постоянные через переменные окружения.

Генерация хеша пароля

Переменная PASTUKHOV_CODE_PASSWORD должна содержать SHA256-хеш вашего желаемого пароля, а не сам пароль в открытом виде. На странице входа есть встроенный генератор SHA256 — нажмите на ссылку “▸ SHA256 generator” под кнопкой входа. Он работает полностью на стороне клиента: введите пароль, скопируйте хеш и вставьте его в вашу конфигурацию окружения.

Рекомендации по безопасности

Файл .pastukhov/environments.yml внутри вашего проекта предназначен для коммита в git, чтобы он был доступен на каждой установке. Чтобы избежать коммита секретов (API-ключи, лицензионные ключи и т.д.) в систему контроля версий, предоставляйте их как переменные окружения в Docker-контейнере и ссылайтесь на них по имени с использованием синтаксиса $VARIABLE_NAME в environments.yml. См. страницу Окружения для полного списка доступных переменных и принципов их работы:

# .pastukhov/environments.yml
environments:
  production:
    variables:
      API_KEY: $MY_API_KEY          # resolved from the container's environment at runtime
      LICENSE_KEY: $MY_LICENSE_KEY   # not committed to git
      PUBLIC_URL: https://example.com # non-sensitive values are fine to commit directly

Таким образом фактические значения секретов остаются в вашей конфигурации окружения Docker (compose-файл, .env или флаги -e), а environments.yml остается безопасным для коммита.