|
| 1 | +FROM ubuntu:24.04 |
| 2 | + |
| 3 | +ENV LANG="C.UTF-8" |
| 4 | + |
| 5 | +### MINIMAL BASE PACKAGES ### |
| 6 | +RUN apt-get update \ |
| 7 | + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ |
| 8 | + ca-certificates \ |
| 9 | + curl \ |
| 10 | + git \ |
| 11 | + build-essential \ |
| 12 | + unzip \ |
| 13 | + xz-utils \ |
| 14 | + sudo \ |
| 15 | + gnupg \ |
| 16 | + lsof \ |
| 17 | + net-tools \ |
| 18 | + && rm -rf /var/lib/apt/lists/* |
| 19 | + |
| 20 | +### DOCKER ENGINE ### |
| 21 | +RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \ |
| 22 | + && echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu noble stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \ |
| 23 | + && apt-get update \ |
| 24 | + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ |
| 25 | + docker-ce \ |
| 26 | + && rm -rf /var/lib/apt/lists/* |
| 27 | + |
| 28 | +### GITHUB CLI ### |
| 29 | +RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | gpg --dearmor -o /usr/share/keyrings/githubcli-archive-keyring.gpg \ |
| 30 | + && echo "deb [arch=amd64 signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \ |
| 31 | + && apt-get update \ |
| 32 | + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ |
| 33 | + gh \ |
| 34 | + && rm -rf /var/lib/apt/lists/* |
| 35 | + |
| 36 | +### CREATE BLINK USER ### |
| 37 | +RUN groupadd -r blink && useradd -r -g blink -m -s /bin/bash blink \ |
| 38 | + && echo 'blink ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers \ |
| 39 | + && usermod -aG docker blink |
| 40 | + |
| 41 | +### CREATE WORKSPACE DIRECTORY ### |
| 42 | +RUN mkdir -p /workspace && chown blink:blink /workspace |
| 43 | + |
| 44 | +USER blink |
| 45 | +ENV HOME=/home/blink |
| 46 | +WORKDIR /workspace |
| 47 | + |
| 48 | +### NODE VIA NVM ### |
| 49 | +ARG NODE_VERSION=22.13.0 |
| 50 | +ENV NVM_DIR=/home/blink/.nvm |
| 51 | +ENV PATH=/home/blink/.local/bin:/home/blink/.local/bun/bin:$NVM_DIR/versions/node/v${NODE_VERSION}/bin:$PATH |
| 52 | +RUN mkdir -p $NVM_DIR \ |
| 53 | + && curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash \ |
| 54 | + && . $NVM_DIR/nvm.sh \ |
| 55 | + && nvm install $NODE_VERSION \ |
| 56 | + && nvm use $NODE_VERSION \ |
| 57 | + && nvm alias default $NODE_VERSION \ |
| 58 | + && npm install -g typescript prettier eslint pnpm yarn \ |
| 59 | + && echo 'export NVM_DIR="$HOME/.nvm"' >> /home/blink/.bashrc \ |
| 60 | + && echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> /home/blink/.bashrc \ |
| 61 | + && echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"' >> /home/blink/.bashrc |
| 62 | + |
| 63 | +### BUN ### |
| 64 | +ARG BUN_VERSION=1.2.14 |
| 65 | +RUN mkdir -p /home/blink/.local/bun/bin \ |
| 66 | + && curl -L "https://github.com/oven-sh/bun/releases/download/bun-v${BUN_VERSION}/bun-linux-x64-baseline.zip" \ |
| 67 | + -o /tmp/bun.zip \ |
| 68 | + && unzip -q /tmp/bun.zip -d /tmp \ |
| 69 | + && mv /tmp/bun-linux-x64-baseline/bun /home/blink/.local/bun/bin/ \ |
| 70 | + && chmod +x /home/blink/.local/bun/bin/bun \ |
| 71 | + && rm -rf /tmp/bun.zip /tmp/bun-linux-x64-baseline |
| 72 | + |
| 73 | +### PYTHON (system python + pip) ### |
| 74 | +USER root |
| 75 | +RUN apt-get update \ |
| 76 | + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ |
| 77 | + python3 \ |
| 78 | + python3-pip \ |
| 79 | + python3-venv \ |
| 80 | + && rm -rf /var/lib/apt/lists/* |
| 81 | +USER blink |
| 82 | +RUN python3 -m pip install --user --break-system-packages \ |
| 83 | + black ruff mypy uv |
| 84 | + |
| 85 | +### GO ### |
| 86 | +ARG GO_VERSION=1.23.8 |
| 87 | +ENV PATH=/home/blink/.local/go/bin:/home/blink/go/bin:$PATH |
| 88 | +RUN mkdir -p /home/blink/.local \ |
| 89 | + && curl -L "https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" \ |
| 90 | + | tar -xz -C /home/blink/.local \ |
| 91 | + && mv /home/blink/.local/go /home/blink/.local/go-tmp \ |
| 92 | + && mkdir -p /home/blink/.local/go \ |
| 93 | + && mv /home/blink/.local/go-tmp/* /home/blink/.local/go/ \ |
| 94 | + && rmdir /home/blink/.local/go-tmp |
| 95 | + |
| 96 | +### RUST ### |
| 97 | +ENV PATH=/home/blink/.cargo/bin:$PATH |
| 98 | +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \ |
| 99 | + sh -s -- -y --profile minimal --no-modify-path |
| 100 | + |
| 101 | +### RIPGREP (manual install) ### |
| 102 | +ARG RG_VERSION=14.1.1 |
| 103 | +RUN curl -L "https://github.com/BurntSushi/ripgrep/releases/download/${RG_VERSION}/ripgrep-${RG_VERSION}-x86_64-unknown-linux-musl.tar.gz" \ |
| 104 | + | tar -xz --strip-components=1 -C /tmp \ |
| 105 | + && mkdir -p /home/blink/.local/bin \ |
| 106 | + && mv /tmp/rg /home/blink/.local/bin/ |
| 107 | + |
| 108 | +### JQ (manual install) ### |
| 109 | +RUN curl -L "https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-amd64" \ |
| 110 | + -o /home/blink/.local/bin/jq \ |
| 111 | + && chmod +x /home/blink/.local/bin/jq |
| 112 | + |
| 113 | +### SHELL SETUP ### |
| 114 | +RUN echo 'export PATH="$HOME/.local/bin:$HOME/.bun/bin:$HOME/.local/go/bin:$HOME/go/bin:$HOME/.cargo/bin:$PATH"' >> /home/blink/.bashrc |
| 115 | + |
| 116 | +### GIT SETUP ### |
| 117 | +RUN git config --global core.pager "cat" |
| 118 | + |
| 119 | +ENTRYPOINT ["/bin/bash", "-c", "echo 'Installing blink...'; bun install -g blink@latest; echo 'Blink installed successfully!'; /home/blink/.bun/bin/blink compute server"] |
0 commit comments