/
arvliv
/
esp32-code-server
Обзор
Документация
Войти
/
arvliv
/
esp32-code-server
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Dockerfile
126 строк
7 KB
Artyom Ivanov
first_commit
07 авг 2026, 12:01
07 авг 2026, 12:01
fb1f7b2
Код
Авторство
О чём код?
FROM archlinux:latest # 1. Обновление системы и установка базовых пакетов + зависимостей для сборки (sudo, base-devel) RUN echo ":: Обновляем зеркала для pacman..." && \ curl -s "https://archlinux.org/mirrorlist/?protocol=https&use_mirror_status=on" | sed -e 's/^#Server/Server/' > /etc/pacman.d/mirrorlist && \ pacman -Syu --noconfirm && \ pacman -S --noconfirm wget uv git mc nano curl usbutils debugedit fakeroot python python-pip sudo base-devel && \ pacman -Scc --noconfirm # 2. Настройка локали для поддержки кириллицы в консоли (от root) RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ locale-gen ENV LANG=en_US.UTF-8 # 3. Создание пользователя 'user' с явным UID 1000 и настройка безпарольного sudo RUN useradd -m -s /bin/bash -u 1000 user && \ echo 'user ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/user && \ chmod 0440 /etc/sudoers.d/user && \ chown -R user:user /home/user # Переключаемся на пользователя 'user' для всех дальнейших действий USER user WORKDIR /home/user # 4. Установка code-server через официальный скрипт RUN curl -fsSL https://code-server.dev/install.sh | sh # Добавляем ~/.local/bin в PATH ENV PATH="/home/user/.local/bin:${PATH}" # 5. Создание конфигурации code-server (доступ без пароля) RUN mkdir -p ~/.config/code-server && \ echo -e "bind-addr: 0.0.0.0:8080\nauth: none\ncert: true" > ~/.config/code-server/config.yaml # 6. Подготовка PlatformIO окружения через uv RUN mkdir -p ~/.platformio/platforms && \ cd ~/.platformio && \ uv venv --seed --python 3.12 penv # Установка pioarduino core внутрь созданного виртуального окружения RUN /home/user/.platformio/penv/bin/pip install https://github.com/pioarduino/platformio-core/archive/refs/heads/pioarduino.zip # Клонирование платформы espressif32 RUN git clone https://github.com/pioarduino/platform-espressif32.git --depth=1 /home/user/.platformio/platforms/platform-espressif32 # 7. Патч для реализации OFFLINE режима (закомментирован, раскомментируйте при необходимости) # RUN sed -i '/if has_internet_connection() or github_actions:/,/sys.exit(1)/s/^/# /' \ # /home/user/.platformio/platforms/platform-espressif32/builder/penv_setup.py && \ # sed -i 's/# else:/else:/' /home/user/.platformio/platforms/platform-espressif32/builder/penv_setup.py && \ # sed -i 's/# print/ print/' /home/user/.platformio/platforms/platform-espressif32/builder/penv_setup.py # 8. Установка расширений в code-server RUN code-server --install-extension pioarduino.pioarduino-ide \ --install-extension llvm-vs-code-extensions.vscode-clangd # 8.5. Глобальная настройка VS Code (code-server) для работы с clangd и PlatformIO RUN mkdir -p ~/.local/share/code-server/User && \ echo '{"clangd.path":"clangd","clangd.arguments":["--background-index","--clang-tidy","--header-insertion=never","--completion-style=detailed","--all-scopes-completion"],"C_Cpp.intelliSenseEngine":"disabled","C_Cpp.autocomplete":"disabled","C_Cpp.formatting":"disabled","C_Cpp.errorSquiggles":"disabled","files.associations":{"*.ino":"cpp","*.h":"cpp"},"workbench.statusBar.hidden":["pioarduino.home"]}' > ~/.local/share/code-server/User/settings.json # 8.6. Создание надежного bash-скрипта для настройки clangd в PlatformIO проектах RUN mkdir -p /home/user/.local/bin && \ printf '#!/bin/bash\n\ # Скрипт для настройки clangd в текущем PlatformIO проекте\n\ \n\ if [ ! -f "platformio.ini" ]; then\n\ echo "❌ Ошибка: файл platformio.ini не найден в текущей директории"\n\ echo "Перейдите в корень вашего PlatformIO проекта и запустите скрипт снова"\n\ exit 1\n\ fi\n\ \n\ echo "🔧 Настройка clangd для PlatformIO проекта..."\n\ \n\ # 1. Создаем или обновляем .clangd файл\n\ cat > .clangd << '"'"'CLANGDEOF'"'"'\n\ CompileFlags:\n\ CompilationDatabase: .\n\ Add:\n\ - "-ferror-limit=0"\n\ - "-fspell-checking"\n\ CLANGDEOF\n\ echo "✅ Создан/обновлен файл .clangd"\n\ \n\ # 2. Очищаем кэш и запускаем генерацию базы данных компиляции\n\ # (clean решает 99%% проблем с отсутствием файла в .pio/build)\n\ echo "⚙️ Очистка и генерация compile_commands.json..."\n\ pio run -t clean > /dev/null 2>&1\n\ pio run -t compiledb\n\ \n\ # 3. Ищем файл. Сначала в .pio/build\n\ FOUND_DB=$(find .pio/build -name "compile_commands.json" -type f 2>/dev/null | head -n 1)\n\ \n\ if [ -n "$FOUND_DB" ]; then\n\ cp "$FOUND_DB" ./compile_commands.json\n\ echo "✅ compile_commands.json успешно скопирован из .pio/build в корень проекта!"\n\ elif [ -f "./compile_commands.json" ]; then\n\ echo "✅ compile_commands.json уже существует в корне проекта и готов к использованию!"\n\ else\n\ echo "❌ Не удалось найти compile_commands.json нигде в проекте."\n\ echo "💡 Попробуйте выполнить вручную: pio run -t clean && pio run -t compiledb"\n\ fi\n\ \n\ echo "🚀 Перезапустите code-server (или перезагрузите окно), если подсветка не появилась сразу."\n\ ' > /home/user/.local/bin/pio-clangd-setup && \ chmod +x /home/user/.local/bin/pio-clangd-setup # 8.7. Создание директории для проектов RUN mkdir -p /home/user/projects WORKDIR /home/user/projects # 9. Добавление алиаса в .bashrc RUN echo 'alias pio-clangd="pio-clangd-setup"' >> /home/user/.bashrc && \ echo 'export PLATFORMIO_OFFLINE=1' >> /home/user/.bashrc && \ echo 'export PLATFORMIO_SETTING_PROJECTS_DIR="/home/user/projects"' >> /home/user/.bashrc && \ echo 'export PLATFORMIO_SETTING_ENABLE_TELEMETRY=false' >> /home/user/.bashrc && \ echo 'export PLATFORMIO_SETTING_CHECK_PLATFORMIO_INTERVAL=99999999' >> /home/user/.bashrc # 10. Очистка пользовательского кэша (включая кэш сборки AUR) для уменьшения веса Docker-образа RUN rm -rf ~/.cache ~/.platformio/.cache # Открываем порт наружу EXPOSE 8080 # Запуск code-server с автоматическим открытием папки проектов CMD ["code-server", "--bind-addr", "0.0.0.0:8080", "/home/user/projects"]