122 lines
3.1 KiB
YAML
122 lines
3.1 KiB
YAML
|
|
# Core Development Environment Template
|
||
|
|
# A full-featured development environment with multiple runtimes
|
||
|
|
#
|
||
|
|
# Variables:
|
||
|
|
# ${SSH_KEY} - SSH public key for access (required)
|
||
|
|
# ${MEMORY:-2048} - Memory in MB (default: 2048)
|
||
|
|
# ${CPUS:-2} - Number of CPUs (default: 2)
|
||
|
|
# ${HOSTNAME:-core-dev} - Hostname for the VM
|
||
|
|
# ${DATA_SIZE:-10G} - Size of persistent /data volume
|
||
|
|
|
||
|
|
kernel:
|
||
|
|
image: linuxkit/kernel:6.6.13
|
||
|
|
cmdline: "console=tty0 console=ttyS0"
|
||
|
|
|
||
|
|
init:
|
||
|
|
- linuxkit/init:v1.2.0
|
||
|
|
- linuxkit/runc:v1.1.12
|
||
|
|
- linuxkit/containerd:v1.7.13
|
||
|
|
- linuxkit/ca-certificates:v1.0.0
|
||
|
|
|
||
|
|
onboot:
|
||
|
|
- name: sysctl
|
||
|
|
image: linuxkit/sysctl:v1.0.0
|
||
|
|
- name: format
|
||
|
|
image: linuxkit/format:v1.0.0
|
||
|
|
- name: mount
|
||
|
|
image: linuxkit/mount:v1.0.0
|
||
|
|
command: ["/usr/bin/mountie", "/dev/sda1", "/data"]
|
||
|
|
- name: dhcpcd
|
||
|
|
image: linuxkit/dhcpcd:v1.0.0
|
||
|
|
command: ["/sbin/dhcpcd", "--nobackground", "-f", "/dhcpcd.conf", "-1"]
|
||
|
|
|
||
|
|
onshutdown:
|
||
|
|
- name: shutdown
|
||
|
|
image: busybox:latest
|
||
|
|
command: ["/bin/echo", "Shutting down..."]
|
||
|
|
|
||
|
|
services:
|
||
|
|
- name: getty
|
||
|
|
image: linuxkit/getty:v1.0.0
|
||
|
|
env:
|
||
|
|
- INSECURE=true
|
||
|
|
|
||
|
|
- name: sshd
|
||
|
|
image: linuxkit/sshd:v1.2.0
|
||
|
|
binds:
|
||
|
|
- /etc/ssh/authorized_keys:/root/.ssh/authorized_keys
|
||
|
|
|
||
|
|
- name: docker
|
||
|
|
image: docker:24.0-dind
|
||
|
|
capabilities:
|
||
|
|
- all
|
||
|
|
net: host
|
||
|
|
pid: host
|
||
|
|
binds:
|
||
|
|
- /var/run:/var/run
|
||
|
|
- /data/docker:/var/lib/docker
|
||
|
|
rootfsPropagation: shared
|
||
|
|
|
||
|
|
- name: dev-tools
|
||
|
|
image: alpine:3.19
|
||
|
|
capabilities:
|
||
|
|
- all
|
||
|
|
net: host
|
||
|
|
binds:
|
||
|
|
- /data:/data
|
||
|
|
command:
|
||
|
|
- /bin/sh
|
||
|
|
- -c
|
||
|
|
- |
|
||
|
|
# Install development tools
|
||
|
|
apk add --no-cache \
|
||
|
|
git curl wget vim nano htop tmux \
|
||
|
|
build-base gcc musl-dev linux-headers \
|
||
|
|
openssh-client jq yq
|
||
|
|
|
||
|
|
# Install Go 1.22.0
|
||
|
|
wget -q https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
|
||
|
|
tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
|
||
|
|
rm go1.22.0.linux-amd64.tar.gz
|
||
|
|
echo 'export PATH=/usr/local/go/bin:$PATH' >> /etc/profile
|
||
|
|
|
||
|
|
# Install Node.js
|
||
|
|
apk add --no-cache nodejs npm
|
||
|
|
|
||
|
|
# Install PHP
|
||
|
|
apk add --no-cache php82 php82-cli php82-curl php82-json php82-mbstring \
|
||
|
|
php82-openssl php82-pdo php82-pdo_mysql php82-pdo_pgsql php82-phar \
|
||
|
|
php82-session php82-tokenizer php82-xml php82-zip composer
|
||
|
|
|
||
|
|
# Keep container running
|
||
|
|
tail -f /dev/null
|
||
|
|
|
||
|
|
files:
|
||
|
|
- path: /etc/hostname
|
||
|
|
contents: "${HOSTNAME:-core-dev}"
|
||
|
|
- path: /etc/ssh/authorized_keys
|
||
|
|
contents: "${SSH_KEY}"
|
||
|
|
mode: "0600"
|
||
|
|
- path: /etc/profile.d/dev.sh
|
||
|
|
contents: |
|
||
|
|
export PATH=$PATH:/usr/local/go/bin
|
||
|
|
export GOPATH=/data/go
|
||
|
|
export PATH=$PATH:$GOPATH/bin
|
||
|
|
cd /data
|
||
|
|
mode: "0755"
|
||
|
|
- path: /etc/motd
|
||
|
|
contents: |
|
||
|
|
================================================
|
||
|
|
Core Development Environment
|
||
|
|
|
||
|
|
Runtimes: Go, Node.js, PHP
|
||
|
|
Tools: git, curl, vim, docker
|
||
|
|
|
||
|
|
Data directory: /data (persistent)
|
||
|
|
================================================
|
||
|
|
|
||
|
|
trust:
|
||
|
|
org:
|
||
|
|
- linuxkit
|
||
|
|
- library
|