diff --git a/LICENSE b/LICENSE index f71a527..f841fcc 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2024 Dominik Zogg +Copyright (c) 2026 Dominik Zogg Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 45b07bc..22cded6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,51 @@ # docker +## setup on host + +### bash + +```sh +touch ~/.bash_docker +touch ~/.bash_history +``` + +### zsh + +```sh +touch ~/.zsh_docker +touch ~/.zsh_history +``` + +### git + +```sh +touch ~/.gitconfig +touch ~/.gitignore +``` + +### ssh + +```sh +mkdir -p ~/.ssh +touch github.pub +``` + +### opencode - coding agent + +```sh +mkdir -p ~/.config/opencode +[ ! -f ~/.local/share/opencode/auth.json ] && echo '{}' > ~/.config/opencode/tui.json +mkdir -p ~/.local/share/opencode +[ ! -f ~/.local/share/opencode/auth.json ] && echo '{}' > ~/.local/share/opencode/auth.json +``` + +### pi - coding agent + +```sh +mkdir -p ~/.pi/agent +[ ! -f ~/.pi/agent/auth.json ] && echo '{}' > ~/.pi/agent/auth.json +``` + ## Copyright -2024 Dominik Zogg +2026 Dominik Zogg diff --git a/docker-compose.yml b/docker-compose.yml index 2b39d4c..51a2e6c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,26 +1,38 @@ +name: chubbyphp services: php: container_name: chubbyphp-php - hostname: php + hostname: chubbyphp-php build: dockerfile: ./docker/php/Dockerfile context: ./ args: USER_ID: ${USER_ID:-1000} GROUP_ID: ${GROUP_ID:-1000} + userns_mode: keep-id environment: MONGODB_URI: mongodb://root:6RHL8hKl2XmqKTmxeXOS@mongo:27017/?authSource=admin POSTGRES_URL: pgsql://root:82fJ1z90aeRFAAhHTM1s@postgres:5432?charset=utf8 SSH_AUTH_SOCK: /ssh-agent volumes: - ${PWD}/..:/app + - $SSH_AUTH_SOCK:/ssh-agent + # bash - ~/.bash_docker:/home/php/.bash_docker - ~/.bash_history:/home/php/.bash_history - - ~/.gitconfig:/home/php/.gitconfig - - ~/.gitignore:/home/php/.gitignore + # zsh - ~/.zsh_docker:/home/php/.zsh_docker - ~/.zsh_history:/home/php/.zsh_history - - $SSH_AUTH_SOCK:/ssh-agent + # git + - ~/.gitconfig:/home/php/.gitconfig + - ~/.gitignore:/home/php/.gitignore + # ssh + - ~/.ssh/github.pub:/home/php/.ssh/github.pub + # opencode - coding agent + - ~/.config/opencode/tui.json:/home/php/.config/opencode/tui.json + - ~/.local/share/opencode/auth.json:/home/php/.local/share/opencode/auth.json + # pi + - ~/.pi/agent/auth.json:/home/php/.pi/agent/auth.json depends_on: - mongo - postgres @@ -28,8 +40,8 @@ services: - "host.docker.internal:host-gateway" mongo: container_name: chubbyphp-mongo - hostname: mongo - image: mongo:6.0 + hostname: chubbyphp-mongo + image: mongo:8.0.4 # check before upgrade https://www.mongodb.com/community/forums/t/mongodb-8-x-and-linux-kernel-6-19/337547 environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: 6RHL8hKl2XmqKTmxeXOS @@ -39,8 +51,8 @@ services: - mongo:/data/db postgres: container_name: chubbyphp-postgres - hostname: postgres - image: postgres:16 + hostname: chubbyphp-postgres + image: postgres:17 command: -c log_statement=all -c log_error_verbosity=VERBOSE environment: POSTGRES_USER: root @@ -51,7 +63,7 @@ services: - postgres:/var/lib/postgresql/data nginx: container_name: chubbyphp-nginx - hostname: nginx + hostname: chubbyphp-nginx image: nginx ports: - '443:443' diff --git a/docker/php/Dockerfile b/docker/php/Dockerfile index 3f96e6a..6088ecb 100644 --- a/docker/php/Dockerfile +++ b/docker/php/Dockerfile @@ -1,30 +1,34 @@ -FROM rockylinux/rockylinux:9.5 +FROM rockylinux/rockylinux:10.0 SHELL ["/bin/bash", "-c"] RUN dnf upgrade -y --refresh -RUN dnf install -y epel-release https://rpms.remirepo.net/enterprise/remi-release-9.rpm +RUN dnf install -y epel-release https://rpms.remirepo.net/enterprise/remi-release-10.rpm RUN dnf install -y --nobest \ - compat-openssl11 \ git \ glibc-langpack-de \ langpacks-de \ + libatomic \ nmap-ncat \ php83-php-ast \ php83-php-bcmath \ php83-php-cli \ php83-php-devel \ php83-php-fpm \ + php83-php-gd \ php83-php-intl \ php83-php-mbstring \ php83-php-opcache \ + php83-php-pecl-amqp \ php83-php-pecl-apcu \ php83-php-pecl-memcached \ php83-php-pecl-mongodb \ php83-php-pecl-pcov \ - php83-php-pecl-swoole5 \ + php83-php-pecl-rdkafka6 \ + php83-php-pecl-redis \ + php83-php-pecl-swoole6 \ php83-php-pecl-xdebug3 \ php83-php-pecl-zip \ php83-php-pgsql \ @@ -53,13 +57,31 @@ COPY docker/php/files / ARG USER_ID ARG GROUP_ID -RUN groupadd -g ${GROUP_ID} php \ +RUN getent group ${GROUP_ID} >/dev/null || groupadd -g ${GROUP_ID} php \ && useradd -u ${USER_ID} -g ${GROUP_ID} -s /bin/bash -M php \ && chown -Rf php: /home/php \ && echo 'php ALL=(ALL) NOPASSWD: ALL' > '/etc/sudoers.d/php' USER php +WORKDIR /home/php + +RUN curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir "$HOME/.fnm" --skip-shell \ + && source ~/.bashrc \ + && fnm install 24 \ + && fnm default 24 \ + && fnm use 24 \ + && npm install -g corepack@latest + +RUN source ~/.bashrc \ + && npm install -g opencode-ai@latest \ + && mkdir -p "$HOME/.config/opencode" \ + && mkdir -p "$HOME/.local/share/opencode" + +RUN source ~/.bashrc \ + && npm install -g @earendil-works/pi-coding-agent \ + && mkdir -p "$HOME/.pi/agent" + WORKDIR /app CMD /usr/bin/supervisord diff --git a/docker/php/files/home/php/.bashrc b/docker/php/files/home/php/.bashrc index e9b864f..bdc55a8 100644 --- a/docker/php/files/home/php/.bashrc +++ b/docker/php/files/home/php/.bashrc @@ -1,3 +1,7 @@ +source $HOME/.sharedrc + +eval "$(fnm env --shell=bash --use-on-cd)" + export CLICOLOR='true' export PS1='\[\e[1;32m\]\h\[\e[0m\] \[\e[1;37m\]\w\[\e[0m\] \[\e[3m\]($(git rev-parse --abbrev-ref HEAD 2> /dev/null))\[\e[23m\] \[\e[1;32m\]\u\[\e[0m\] ' @@ -6,9 +10,6 @@ export HISTCONTROL='ignoreboth:erasedups' export HISTFILE=~/.bash_history export PROMPT_COMMAND='history -a' -source $HOME/.sharedrc - if [ -f "$HOME/.bash_docker" ]; then source $HOME/.bash_docker fi - diff --git a/docker/php/files/home/php/.sharedrc b/docker/php/files/home/php/.sharedrc index 9acaf8b..119f808 100644 --- a/docker/php/files/home/php/.sharedrc +++ b/docker/php/files/home/php/.sharedrc @@ -1,4 +1,6 @@ -# history +# fnm +export PATH=$HOME/.fnm:$PATH + export HISTSIZE=5000 export SAVEHIST=100000 diff --git a/docker/php/files/home/php/.ssh/known_hosts b/docker/php/files/home/php/.ssh/known_hosts new file mode 100644 index 0000000..e69de29 diff --git a/docker/php/files/home/php/.zshrc b/docker/php/files/home/php/.zshrc index fb02211..5b08240 100644 --- a/docker/php/files/home/php/.zshrc +++ b/docker/php/files/home/php/.zshrc @@ -1,3 +1,7 @@ +source $HOME/.sharedrc + +eval "$(fnm env --shell=zsh --use-on-cd)" + autoload colors && colors setopt PROMPT_SUBST export PROMPT='%{$fg_bold[green]%}%m%{$reset_color%} %{$fg_bold[white]%}%~%{$reset_color%} ($(git symbolic-ref --short HEAD 2> /dev/null)) %{$fg_bold[green]%}%n%{$reset_color%} % ' @@ -10,8 +14,6 @@ setopt inc_append_history export HISTFILE=~/.zsh_history -source $HOME/.sharedrc - if [ -f "$HOME/.zsh_docker" ]; then source $HOME/.zsh_docker fi