Initial commit: Claude Dev Container with Java multi-version, Docker CLI, and web terminal
This commit is contained in:
239
README.md
Normal file
239
README.md
Normal file
@@ -0,0 +1,239 @@
|
||||
# Claude Dev Container
|
||||
|
||||
Docker container met Java development environment, Claude Code CLI, web terminal en Docker CLI.
|
||||
|
||||
## Features
|
||||
|
||||
- 🔢 **Multiple Java versions** (11, 17, 21, 25) via SDKMAN - makkelijk switchen
|
||||
- 🤖 **Claude Code CLI** - AI coding assistant in de terminal
|
||||
- 🖥️ **Web terminal** (ttyd) met basic authentication
|
||||
- 🐳 **Docker CLI** - gebruikt host Docker socket (Synology compatible)
|
||||
- 📦 **Maven & Gradle** pre-installed
|
||||
- 🔐 **Password protected** terminal
|
||||
|
||||
## Installatie op Synology
|
||||
|
||||
### 1. Claude credentials voorbereiden (BELANGRIJK!)
|
||||
|
||||
**Op je Mac** waar je al ingelogd bent in Claude Code:
|
||||
|
||||
```bash
|
||||
# Check of credentials bestaan
|
||||
ls -la ~/.claude
|
||||
|
||||
# Kopieer naar NAS (pas IP aan)
|
||||
scp -r ~/.claude/ admin@[nas-ip]:/docker/claude-dev/claude-credentials
|
||||
```
|
||||
|
||||
**Of via Finder:**
|
||||
1. Cmd+Shift+G → typ `~/.claude`
|
||||
2. Kopieer de hele folder
|
||||
3. Upload naar NAS via File Station → `/docker/claude-dev/claude-credentials`
|
||||
|
||||
### 2. Bestanden voorbereiden
|
||||
|
||||
Upload deze folder naar je Synology (bijv. via File Station naar `/docker/claude-dev`).
|
||||
|
||||
**Structuur moet zijn:**
|
||||
```
|
||||
/docker/claude-dev/
|
||||
├── claude-credentials/ # Gekopieërd van Mac ~/.claude
|
||||
│ └── session.json # (en andere bestanden)
|
||||
├── Dockerfile
|
||||
├── docker-compose.yml
|
||||
├── entrypoint.sh
|
||||
└── ...
|
||||
```
|
||||
|
||||
### 3. Wachtwoorden instellen
|
||||
|
||||
```bash
|
||||
cd /docker/claude-dev
|
||||
cp .env.example .env
|
||||
nano .env # Pas terminal wachtwoord aan
|
||||
```
|
||||
|
||||
### 4. Docker group ID checken (belangrijk!)
|
||||
|
||||
SSH naar je Synology en check de Docker group ID:
|
||||
```bash
|
||||
getent group docker
|
||||
```
|
||||
|
||||
Je ziet iets als: `docker:x:999:...`
|
||||
|
||||
Als het getal **niet** 999 is, pas het aan in `docker-compose.yml` bij `group_add`.
|
||||
|
||||
### 5. Container starten
|
||||
|
||||
Via **Container Manager**:
|
||||
1. Open Container Manager
|
||||
2. Ga naar Project
|
||||
3. Klik "Create"
|
||||
4. Selecteer de folder met `docker-compose.yml`
|
||||
5. Start het project
|
||||
|
||||
**Of via SSH:**
|
||||
```bash
|
||||
cd /docker/claude-dev
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### 6. Toegang
|
||||
|
||||
**Web Terminal**: `http://[synology-ip]:7681`
|
||||
- Login: gebruik `TERMINAL_USER` en `TERMINAL_PASSWORD` uit `.env`
|
||||
|
||||
## Claude Code gebruiken
|
||||
|
||||
In de terminal:
|
||||
|
||||
```bash
|
||||
# Interactive chat
|
||||
claude chat
|
||||
|
||||
# One-shot commando
|
||||
claude "Maak een Spring Boot REST API"
|
||||
|
||||
# Met opties
|
||||
claude -p "Schrijf unit tests" --model claude-opus-4
|
||||
|
||||
# Hulp
|
||||
claude --help
|
||||
```
|
||||
|
||||
Claude gebruikt automatisch je gemounte credentials uit `~/.claude`.
|
||||
|
||||
## Java versies switchen
|
||||
|
||||
```bash
|
||||
# Lijst van geïnstalleerde versies
|
||||
sdk list java
|
||||
|
||||
# Switch voor huidige sessie
|
||||
sdk use java 17.0.10-tem
|
||||
|
||||
# Zet als default
|
||||
sdk default java 21.0.2-tem
|
||||
|
||||
# Check huidige versie
|
||||
java -version
|
||||
```
|
||||
|
||||
## Docker gebruiken
|
||||
|
||||
De container gebruikt de Docker socket van je Synology host:
|
||||
|
||||
```bash
|
||||
# Werkt gewoon
|
||||
docker ps
|
||||
docker images
|
||||
docker run hello-world
|
||||
docker compose up
|
||||
```
|
||||
|
||||
## Workspace persistentie
|
||||
|
||||
Je code wordt opgeslagen in: `./workspace/`
|
||||
|
||||
Deze map is gemount, dus je werk blijft bewaard na container restart.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Claude Code zegt "not authenticated"
|
||||
|
||||
Check of credentials correct gemount zijn:
|
||||
```bash
|
||||
# In de container
|
||||
ls -la ~/.claude
|
||||
cat ~/.claude/session.json
|
||||
```
|
||||
|
||||
Als de folder leeg is:
|
||||
1. Kopieer opnieuw vanaf Mac: `scp -r ~/.claude admin@[nas]:/docker/claude-dev/claude-credentials`
|
||||
2. Check permissions: `chmod -R 755 ./claude-credentials`
|
||||
3. Restart container
|
||||
|
||||
### Docker permission denied
|
||||
|
||||
Check of de `group_add` in `docker-compose.yml` matcht met je Docker group ID:
|
||||
```bash
|
||||
getent group docker
|
||||
```
|
||||
|
||||
### Container start niet
|
||||
|
||||
Check logs:
|
||||
```bash
|
||||
docker logs claude-dev-container
|
||||
```
|
||||
|
||||
Of via Container Manager: selecteer container → Details → Log
|
||||
|
||||
### Poort in gebruik
|
||||
|
||||
Pas de poort aan in `docker-compose.yml`:
|
||||
```yaml
|
||||
ports:
|
||||
- "7682:7681" # bijv. 7682 in plaats van 7681
|
||||
```
|
||||
|
||||
## Structuur
|
||||
|
||||
```
|
||||
claude-dev-container/
|
||||
├── Dockerfile # Container definitie
|
||||
├── docker-compose.yml # Synology deployment
|
||||
├── entrypoint.sh # Startup script
|
||||
├── .env # Wachtwoorden (niet committen!)
|
||||
├── .env.example # Template voor .env
|
||||
├── claude-credentials/ # Gekopieërd van Mac ~/.claude (niet committen!)
|
||||
├── workspace/ # Je code (persistent)
|
||||
└── README.md # Deze file
|
||||
```
|
||||
|
||||
## Custom aanpassingen
|
||||
|
||||
### Meer Java versies toevoegen
|
||||
|
||||
Edit `Dockerfile`, voeg toe in de SDKMAN sectie:
|
||||
```dockerfile
|
||||
sdk install java 23-tem && \
|
||||
```
|
||||
|
||||
### Extra tools installeren
|
||||
|
||||
In de `Dockerfile`, voeg toe bij apt-get install of maak een nieuwe RUN statement.
|
||||
|
||||
### Memory limits instellen
|
||||
|
||||
In `docker-compose.yml`:
|
||||
```yaml
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 4G
|
||||
```
|
||||
|
||||
## Claude Code CLI opties
|
||||
|
||||
```bash
|
||||
# Model kiezen
|
||||
claude -m claude-opus-4 "vraag"
|
||||
claude -m claude-sonnet-4 "vraag"
|
||||
|
||||
# Context toevoegen
|
||||
claude --context file1.java file2.java "refactor deze code"
|
||||
|
||||
# Headless mode (non-interactive output)
|
||||
claude -p "genereer code"
|
||||
|
||||
# Working directory
|
||||
claude --cwd /path/to/project "maak tests"
|
||||
```
|
||||
|
||||
Zie volledige documentatie: https://code.claude.com/docs
|
||||
|
||||
---
|
||||
|
||||
Veel plezier met coderen! 🚀
|
||||
Reference in New Issue
Block a user