====== Aider AI w kontenerze ====== Uruchomienie najprostszej możliwej instancji Aider w kontenerach jedną komendą (to znaczy skryptem). ==== Pliki konfiguracyjne ==== $ cat requirements.txt aider-chat==0.86.2 aiohappyeyeballs==2.6.1 aiohttp==3.13.3 aiosignal==1.4.0 annotated-doc==0.0.4 annotated-types==0.7.0 anyio==4.12.1 asgiref==3.11.1 attrs==25.4.0 backoff==2.2.1 beautifulsoup4==4.14.3 certifi==2026.1.4 cffi==2.0.0 charset-normalizer==3.4.4 click==8.3.1 ConfigArgParse==1.7.1 diff-match-patch==20241021 diskcache==5.6.3 distro==1.9.0 fastapi==0.128.8 fastuuid==0.14.0 filelock==3.20.3 flake8==7.3.0 frozenlist==1.8.0 fsspec==2026.2.0 gitdb==4.0.12 GitPython==3.1.46 grep-ast==0.9.0 h11==0.16.0 hf-xet==1.2.0 httpcore==1.0.9 httpx==0.28.1 huggingface_hub==1.4.1 idna==3.11 importlib_metadata==7.2.1 importlib_resources==6.5.2 Jinja2==3.1.6 jiter==0.13.0 json5==0.13.0 jsonschema==4.26.0 jsonschema-specifications==2025.9.1 litellm==1.81.10 markdown-it-py==4.0.0 MarkupSafe==3.0.3 mccabe==0.7.0 mdurl==0.1.2 mixpanel==5.0.0 mslex==1.3.0 multidict==6.7.1 networkx==3.4.2 numpy==1.26.4 openai==2.20.0 orjson==3.11.7 oslex==0.1.3 packaging==26.0 pathspec==1.0.4 pexpect==4.9.0 pillow==12.1.1 posthog==7.8.6 prompt_toolkit==3.0.52 propcache==0.4.1 psutil==7.2.2 ptyprocess==0.7.0 pycodestyle==2.14.0 pycparser==3.0 pydantic==2.12.5 pydantic_core==2.41.5 pydub==0.25.1 pyflakes==3.4.0 Pygments==2.19.2 pypandoc==1.16.2 pyperclip==1.11.0 python-dateutil==2.9.0.post0 python-dotenv==1.2.1 PyYAML==6.0.3 referencing==0.37.0 regex==2026.1.15 requests==2.32.5 rich==14.3.2 rpds-py==0.30.0 scipy==1.15.3 shellingham==1.5.4 shtab==1.8.0 six==1.17.0 smmap==5.0.2 sniffio==1.3.1 socksio==1.0.0 sounddevice==0.5.5 soundfile==0.13.1 soupsieve==2.8.3 starlette==0.52.1 tiktoken==0.12.0 tokenizers==0.22.2 tqdm==4.67.3 tree-sitter==0.25.2 tree-sitter-c-sharp==0.23.1 tree-sitter-embedded-template==0.25.0 tree-sitter-language-pack==0.13.0 tree-sitter-yaml==0.7.2 typer==0.23.0 typer-slim==0.23.0 typing-inspection==0.4.2 typing_extensions==4.15.0 urllib3==2.6.3 watchfiles==1.1.1 wcwidth==0.6.0 yarl==1.22.0 zipp==3.23.0 $ cat Dockerfile from registry.redhat.io/rhel10/python-312-minimal@sha256:c0717a2e8da811f7100b00ed59d6997fa7d3178b95039ac805d414e783a15641 USER 0 RUN pip install --upgrade "pip==26.1.2" ADD requirements.txt /tmp/ RUN pip install --requirement /tmp/requirements.txt RUN rm -f /tmp/requirements.txt RUN mkdir -p /opt/aider_ai RUN chown -R 1001:0 /opt/aider_ai USER 1001 ENV AIDER_GIT=false ENV AIDER_DARK_MODE=true ENV OLLAMA_API_BASE=http://nazwa.hosta:11434/ ENV AIDER_ANALYTICS_DISABLE=true ENV AIDER_CHECK_UPDATE=false ENV AIDER_SHOW_RELEASE_NOTES=false ENV OLLAMA_MODEL=qwen3.5:9b WORKDIR /opt/aider_ai CMD aider --model=ollama_chat/${OLLAMA_MODEL} Zamienić "nazwa.hosta" oraz model i jego wersję na preferowane. ==== Budowanie obrazu ==== $ podman login registry.redhat.io Wpisać nazwę użytkownka oraz hasło dla konta redhat.com. $ podman build -t aiderai . ==== Uruchomienie ==== Uruchomienie kontenera w bieżącym (dowolnym) katalogu ręcznie: $ podman mkdir pulpit $ podman unshare chown 1001:0 pulpit/ $ podman unshare chmod 770:0 pulpit/ $ podman run --rm -it --env OLLAMA_MODEL='qwen3.5:9b' --name=aider_alfa --volume ./pulpit/:/opt/aider_ai/:rw,Z aiderai Model można wybrać za pomocą zmiennej //OLLAMA_MODEL//. Skrypt do uruchamiania powyższego trochę szybciej: $ cat ~/.local/bin/aiderinit #!/usr/bin/bash if [ ! -d pulpit ] ; then mkdir pulpit fi podman unshare chown 1001:0 pulpit podman unshare chmod 770 pulpit podman run --rm -it --env OLLAMA_MODEL='qwen3.5:9b' --name=aider_alfa --volume ./pulpit/:/opt/aider_ai/:rw,Z aiderai ==== Uwagi ==== Aider w takiej konfiguracji nie zrobi dwóch rzeczy: * nie zapamięta kontekstu pomiędzy sesjami, * nie zrobi repozytorium typu git, gdzie będzie wersjonować kolejne zmiany w kodzie. Katalog //pulpit// jest do dyspozycji aidera. Nie polecam wrzucać tam plików, lub ich ręcznie modyfikować, ponieważ poprawne działanie aidera, oraz modelu zarazem, polega na analizie dotychczasowych promptów oraz historii czatów w plikach //.aider.chat.history.md// oraz //.aider.input.history// z katalogu pulpit. Nazwa lokalnego katalogu //pulpit// może być dowolna.