mirror of
https://github.com/Zie619/n8n-workflows.git
synced 2025-11-25 03:15:25 +08:00
Resolves build failure caused by PEP 668 "externally-managed-environment" protection in Python 3.11+. The --break-system-packages flag is safe to use in this containerized development environment as it won't affect the host system. This allows pip to install development tools (black, flake8, isort) globally within the container as intended. Fixes devcontainer creation error that was preventing environment setup.
93 lines
2.8 KiB
Docker
93 lines
2.8 KiB
Docker
FROM node:20
|
|
|
|
ARG TZ
|
|
ENV TZ="$TZ"
|
|
|
|
# Install basic development tools, Python, and iptables/ipset
|
|
RUN apt update && apt install -y less \
|
|
git \
|
|
procps \
|
|
sudo \
|
|
fzf \
|
|
zsh \
|
|
man-db \
|
|
unzip \
|
|
gnupg2 \
|
|
gh \
|
|
iptables \
|
|
ipset \
|
|
iproute2 \
|
|
dnsutils \
|
|
aggregate \
|
|
jq \
|
|
python3 \
|
|
python3-pip \
|
|
python3-venv \
|
|
python3-dev
|
|
|
|
# Ensure default node user has access to /usr/local/share
|
|
RUN mkdir -p /usr/local/share/npm-global && \
|
|
chown -R node:node /usr/local/share
|
|
|
|
ARG USERNAME=node
|
|
|
|
# Persist bash history.
|
|
RUN SNIPPET="export PROMPT_COMMAND='history -a' && export HISTFILE=/commandhistory/.bash_history" \
|
|
&& mkdir /commandhistory \
|
|
&& touch /commandhistory/.bash_history \
|
|
&& chown -R $USERNAME /commandhistory
|
|
|
|
# Set `DEVCONTAINER` environment variable to help with orientation
|
|
ENV DEVCONTAINER=true
|
|
|
|
# Create workspace and config directories and set permissions
|
|
RUN mkdir -p /workspace /home/node/.claude && \
|
|
chown -R node:node /workspace /home/node/.claude
|
|
|
|
WORKDIR /workspace
|
|
|
|
RUN ARCH=$(dpkg --print-architecture) && \
|
|
wget "https://github.com/dandavison/delta/releases/download/0.18.2/git-delta_0.18.2_${ARCH}.deb" && \
|
|
sudo dpkg -i "git-delta_0.18.2_${ARCH}.deb" && \
|
|
rm "git-delta_0.18.2_${ARCH}.deb"
|
|
|
|
# Set up non-root user
|
|
USER node
|
|
|
|
# Install global packages
|
|
ENV NPM_CONFIG_PREFIX=/usr/local/share/npm-global
|
|
ENV PATH=$PATH:/usr/local/share/npm-global/bin
|
|
|
|
# Set the default shell to zsh rather than sh
|
|
ENV SHELL=/bin/zsh
|
|
|
|
# Default powerline10k theme
|
|
RUN sh -c "$(wget -O- https://github.com/deluan/zsh-in-docker/releases/download/v1.2.0/zsh-in-docker.sh)" -- \
|
|
-p git \
|
|
-p fzf \
|
|
-a "source /usr/share/doc/fzf/examples/key-bindings.zsh" \
|
|
-a "source /usr/share/doc/fzf/examples/completion.zsh" \
|
|
-a "export PROMPT_COMMAND='history -a' && export HISTFILE=/commandhistory/.bash_history" \
|
|
-x
|
|
|
|
# Install Python packages and create symlink
|
|
# Fix for PEP 668 "externally-managed-environment" error in Python 3.11+
|
|
# The --break-system-packages flag is safe to use in this devcontainer environment
|
|
# because we're in an isolated container where system package conflicts won't
|
|
# affect the host system. This allows pip to install packages globally within
|
|
# the container, which is the expected behavior for development environments.
|
|
RUN pip3 install --upgrade pip --break-system-packages && \
|
|
pip3 install black flake8 isort --break-system-packages && \
|
|
ln -sf /usr/bin/python3 /usr/local/bin/python
|
|
|
|
# Install Claude
|
|
RUN npm install -g @anthropic-ai/claude-code
|
|
|
|
# Copy and set up firewall script
|
|
COPY init-firewall.sh /usr/local/bin/
|
|
USER root
|
|
RUN chmod +x /usr/local/bin/init-firewall.sh && \
|
|
echo "node ALL=(root) NOPASSWD: /usr/local/bin/init-firewall.sh" > /etc/sudoers.d/node-firewall && \
|
|
chmod 0440 /etc/sudoers.d/node-firewall
|
|
USER node
|