Initial commit: Claude Dev Container with Java multi-version, Docker CLI, and web terminal
This commit is contained in:
5
.env.example
Normal file
5
.env.example
Normal file
@@ -0,0 +1,5 @@
|
||||
# Copy this file to .env and set your own passwords
|
||||
|
||||
# Web terminal credentials
|
||||
TERMINAL_USER=developer
|
||||
TERMINAL_PASSWORD=changeme
|
||||
12
.gitignore
vendored
Normal file
12
.gitignore
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
# Environment variables (contains passwords!)
|
||||
.env
|
||||
|
||||
# Claude credentials (personal/sensitive)
|
||||
claude-credentials/
|
||||
|
||||
# Persistent data folders
|
||||
workspace/
|
||||
|
||||
# Docker
|
||||
.DS_Store
|
||||
*.log
|
||||
104
Dockerfile
Normal file
104
Dockerfile
Normal file
@@ -0,0 +1,104 @@
|
||||
FROM ubuntu:22.04
|
||||
|
||||
# Prevent interactive prompts during installation
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Set up user and workspace
|
||||
ENV USER=developer
|
||||
ENV HOME=/home/$USER
|
||||
ENV WORKSPACE=$HOME/workspace
|
||||
ENV SDKMAN_DIR=$HOME/.sdkman
|
||||
|
||||
# Install base dependencies
|
||||
RUN apt-get update && apt-get install -y \
|
||||
curl \
|
||||
wget \
|
||||
git \
|
||||
build-essential \
|
||||
zip \
|
||||
unzip \
|
||||
software-properties-common \
|
||||
ca-certificates \
|
||||
gnupg \
|
||||
lsb-release \
|
||||
sudo \
|
||||
nano \
|
||||
vim \
|
||||
htop \
|
||||
net-tools \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Create developer user with sudo privileges
|
||||
RUN useradd -m -s /bin/bash -G sudo $USER && \
|
||||
echo "$USER ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
|
||||
mkdir -p $WORKSPACE && \
|
||||
chown -R $USER:$USER $HOME
|
||||
|
||||
# Switch to developer user
|
||||
USER $USER
|
||||
WORKDIR $HOME
|
||||
|
||||
# Install SDKMAN
|
||||
RUN curl -s "https://get.sdkman.io" | bash
|
||||
|
||||
# Install multiple Java versions via SDKMAN
|
||||
RUN bash -c "source $SDKMAN_DIR/bin/sdkman-init.sh && \
|
||||
sdk install java 11.0.22-tem && \
|
||||
sdk install java 17.0.10-tem && \
|
||||
sdk install java 21.0.2-tem && \
|
||||
sdk install java 25-tem && \
|
||||
sdk default java 25-tem"
|
||||
|
||||
# Install Maven and Gradle
|
||||
RUN bash -c "source $SDKMAN_DIR/bin/sdkman-init.sh && \
|
||||
sdk install maven && \
|
||||
sdk install gradle"
|
||||
|
||||
# Switch back to root for system-level installations
|
||||
USER root
|
||||
|
||||
# Install Docker CLI (no daemon - will use host socket)
|
||||
RUN install -m 0755 -d /etc/apt/keyrings && \
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
|
||||
chmod a+r /etc/apt/keyrings/docker.gpg && \
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
|
||||
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
|
||||
apt-get update && \
|
||||
apt-get install -y docker-ce-cli docker-compose-plugin && \
|
||||
usermod -aG docker $USER && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install ttyd (web terminal)
|
||||
RUN wget https://github.com/tsl0922/ttyd/releases/download/1.7.7/ttyd.x86_64 -O /usr/local/bin/ttyd && \
|
||||
chmod +x /usr/local/bin/ttyd
|
||||
|
||||
# Install Node.js (needed for Claude Code CLI)
|
||||
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
|
||||
apt-get install -y nodejs && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Switch back to developer user
|
||||
USER $USER
|
||||
|
||||
# Install Claude Code CLI
|
||||
RUN npm install -g @anthropic-ai/claude-code
|
||||
|
||||
# Create .claude directory (will be mounted with credentials from Mac)
|
||||
RUN mkdir -p $HOME/.claude
|
||||
|
||||
# Source SDKMAN in bashrc for interactive shells
|
||||
RUN echo 'source "$SDKMAN_DIR/bin/sdkman-init.sh"' >> $HOME/.bashrc
|
||||
|
||||
# Create startup script
|
||||
USER root
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
# Expose ports
|
||||
# 7681: ttyd (web terminal)
|
||||
EXPOSE 7681
|
||||
|
||||
USER $USER
|
||||
WORKDIR $WORKSPACE
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
40
Makefile
Normal file
40
Makefile
Normal file
@@ -0,0 +1,40 @@
|
||||
.PHONY: help build up down restart logs shell clean
|
||||
|
||||
help:
|
||||
@echo "Claude Dev Container - Commands"
|
||||
@echo ""
|
||||
@echo " make build - Build the Docker image"
|
||||
@echo " make up - Start the container"
|
||||
@echo " make down - Stop the container"
|
||||
@echo " make restart - Restart the container"
|
||||
@echo " make logs - Show container logs"
|
||||
@echo " make shell - Open bash shell in container"
|
||||
@echo " make clean - Remove container and image"
|
||||
@echo ""
|
||||
|
||||
build:
|
||||
docker compose build
|
||||
|
||||
up:
|
||||
docker compose up -d
|
||||
@echo ""
|
||||
@echo "Container started!"
|
||||
@echo " VS Code: http://localhost:8080"
|
||||
@echo " Web Terminal: http://localhost:7681"
|
||||
@echo ""
|
||||
|
||||
down:
|
||||
docker compose down
|
||||
|
||||
restart:
|
||||
docker compose restart
|
||||
|
||||
logs:
|
||||
docker compose logs -f
|
||||
|
||||
shell:
|
||||
docker exec -it claude-dev-container bash
|
||||
|
||||
clean:
|
||||
docker compose down
|
||||
docker rmi claude-dev-container-claude-dev || true
|
||||
150
QUICKSTART.md
Normal file
150
QUICKSTART.md
Normal file
@@ -0,0 +1,150 @@
|
||||
# 🚀 Quick Start
|
||||
|
||||
## Voorbereiding (BELANGRIJK!)
|
||||
|
||||
### 1. Kopieer Claude credentials van Mac
|
||||
|
||||
**Op je Mac** (waar je al ingelogd bent in Claude Code):
|
||||
|
||||
```bash
|
||||
# Check of credentials bestaan
|
||||
ls -la ~/.claude
|
||||
|
||||
# Kopieer naar NAS
|
||||
scp -r ~/.claude/ admin@[nas-ip]:/docker/claude-dev/claude-credentials
|
||||
```
|
||||
|
||||
**Of via Finder**: Cmd+Shift+G → `~/.claude` → Upload naar NAS
|
||||
|
||||
---
|
||||
|
||||
## Voor Synology
|
||||
|
||||
### 2. Upload naar Synology
|
||||
Upload deze hele folder naar: `/docker/claude-dev`
|
||||
|
||||
### 3. Check Docker group ID
|
||||
```bash
|
||||
ssh admin@[nas-ip]
|
||||
getent group docker
|
||||
# Output: docker:x:999:...
|
||||
```
|
||||
|
||||
### 4. Pas docker-compose.yml aan (als nodig)
|
||||
```yaml
|
||||
group_add:
|
||||
- "999" # <- Zet hier het juiste nummer uit stap 3
|
||||
```
|
||||
|
||||
### 5. Zet wachtwoorden
|
||||
```bash
|
||||
cd /docker/claude-dev
|
||||
cp .env.example .env
|
||||
nano .env # Pas TERMINAL_PASSWORD aan
|
||||
```
|
||||
|
||||
### 6. Start via Container Manager
|
||||
- Open Container Manager
|
||||
- Project → Create
|
||||
- Selecteer `/docker/claude-dev`
|
||||
- Start!
|
||||
|
||||
### 7. Open terminal
|
||||
Browser → `http://[synology-ip]:7681`
|
||||
Login met credentials uit `.env`
|
||||
|
||||
---
|
||||
|
||||
## Lokaal testen (Mac/Linux)
|
||||
|
||||
```bash
|
||||
# Check setup
|
||||
./check-setup.sh
|
||||
|
||||
# Kopieer je eigen credentials
|
||||
cp -r ~/.claude ./claude-credentials
|
||||
|
||||
# Setup credentials
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
|
||||
# Build en start
|
||||
make build && make up
|
||||
|
||||
# Of zonder Makefile:
|
||||
docker compose build
|
||||
docker compose up -d
|
||||
|
||||
# Open terminal
|
||||
open http://localhost:7681
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Eerste keer in de container
|
||||
|
||||
```bash
|
||||
# Check of Claude werkt
|
||||
claude --version
|
||||
|
||||
# Test authentication
|
||||
claude "Hello, can you help me?"
|
||||
|
||||
# Check Java versies
|
||||
sdk list java
|
||||
|
||||
# Test Docker toegang
|
||||
docker ps
|
||||
|
||||
# Start coding!
|
||||
claude chat
|
||||
```
|
||||
|
||||
## Claude Code commando's
|
||||
|
||||
```bash
|
||||
# Interactive chat
|
||||
claude chat
|
||||
|
||||
# One-shot
|
||||
claude "Maak een Spring Boot REST API"
|
||||
|
||||
# Met context
|
||||
claude --context pom.xml src/ "add JUnit tests"
|
||||
|
||||
# Model kiezen
|
||||
claude -m claude-opus-4 "complex vraag"
|
||||
```
|
||||
|
||||
## Java versie switchen
|
||||
|
||||
```bash
|
||||
# Tijdelijk (deze sessie)
|
||||
sdk use java 17.0.10-tem
|
||||
|
||||
# Permanent
|
||||
sdk default java 21.0.2-tem
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Claude zegt "not authenticated"**:
|
||||
```bash
|
||||
# Check credentials
|
||||
ls -la ~/.claude
|
||||
# Als leeg: opnieuw kopiëren van Mac
|
||||
```
|
||||
|
||||
**Terminal vraagt om login maar credentials werken niet**:
|
||||
- Check `.env` bestand
|
||||
- Restart container: `docker compose restart`
|
||||
|
||||
**Docker permission denied**:
|
||||
- Check `group_add` in docker-compose.yml
|
||||
- Moet matchen met output van `getent group docker`
|
||||
|
||||
---
|
||||
|
||||
**Klaar! 🎉** Open `http://[ip]:7681` en begin met `claude chat`
|
||||
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! 🚀
|
||||
49
check-setup.sh
Normal file
49
check-setup.sh
Normal file
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🔍 Claude Dev Container - Setup Check"
|
||||
echo "======================================"
|
||||
echo ""
|
||||
|
||||
# Check if .env exists
|
||||
if [ -f .env ]; then
|
||||
echo "✅ .env file exists"
|
||||
else
|
||||
echo "❌ .env file missing - copy from .env.example"
|
||||
echo " Run: cp .env.example .env"
|
||||
fi
|
||||
|
||||
# Check Docker socket
|
||||
if [ -e /var/run/docker.sock ]; then
|
||||
echo "✅ Docker socket found"
|
||||
DOCKER_GID=$(stat -c '%g' /var/run/docker.sock 2>/dev/null || stat -f '%g' /var/run/docker.sock)
|
||||
echo " Docker group ID: $DOCKER_GID"
|
||||
echo ""
|
||||
echo " ⚠️ Make sure docker-compose.yml has 'group_add: [\"$DOCKER_GID\"]'"
|
||||
else
|
||||
echo "⚠️ Docker socket not found at /var/run/docker.sock"
|
||||
echo " This is normal if you're not on the Synology host"
|
||||
fi
|
||||
|
||||
# Check Docker
|
||||
if command -v docker &> /dev/null; then
|
||||
echo "✅ Docker installed"
|
||||
docker --version
|
||||
else
|
||||
echo "❌ Docker not found"
|
||||
fi
|
||||
|
||||
# Check Docker Compose
|
||||
if docker compose version &> /dev/null; then
|
||||
echo "✅ Docker Compose available"
|
||||
docker compose version
|
||||
elif command -v docker-compose &> /dev/null; then
|
||||
echo "✅ Docker Compose available (standalone)"
|
||||
docker-compose --version
|
||||
else
|
||||
echo "❌ Docker Compose not found"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "======================================"
|
||||
echo "Ready to build? Run: make build && make up"
|
||||
echo "Or: docker compose build && docker compose up -d"
|
||||
32
docker-compose.yml
Normal file
32
docker-compose.yml
Normal file
@@ -0,0 +1,32 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
claude-dev:
|
||||
build: .
|
||||
container_name: claude-dev-container
|
||||
restart: unless-stopped
|
||||
|
||||
ports:
|
||||
- "7681:7681" # ttyd (web terminal)
|
||||
|
||||
environment:
|
||||
# Set custom terminal credentials via .env file
|
||||
- TERMINAL_USER=${TERMINAL_USER:-developer}
|
||||
- TERMINAL_PASSWORD=${TERMINAL_PASSWORD:-changeme}
|
||||
|
||||
volumes:
|
||||
# Mount host Docker socket (for Synology)
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
|
||||
# Persistent workspace
|
||||
- /volume1/docker/claude-dev/workspace:/home/developer/workspace
|
||||
|
||||
# Claude Code credentials (copy from Mac ~/.claude)
|
||||
- /volume1/docker/claude-dev/claude-config:/home/developer/.claude
|
||||
|
||||
# Run as developer user
|
||||
user: "1000:1000"
|
||||
|
||||
# Give access to docker group (typically GID 999 on Synology, adjust if needed)
|
||||
group_add:
|
||||
- "999" # Docker group - check with: getent group docker on your Synology
|
||||
47
entrypoint.sh
Normal file
47
entrypoint.sh
Normal file
@@ -0,0 +1,47 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Source SDKMAN for Java commands
|
||||
source "$SDKMAN_DIR/bin/sdkman-init.sh"
|
||||
|
||||
# Display startup info
|
||||
echo "==================================="
|
||||
echo "Claude Dev Container Starting..."
|
||||
echo "==================================="
|
||||
echo "Available Java versions:"
|
||||
sdk list java | grep installed
|
||||
echo ""
|
||||
echo "Current Java version:"
|
||||
java -version
|
||||
echo ""
|
||||
echo "Claude Code CLI: $(claude --version 2>/dev/null || echo 'installed')"
|
||||
echo ""
|
||||
echo "==================================="
|
||||
echo "Services:"
|
||||
echo " - Web terminal: http://localhost:7681"
|
||||
echo "==================================="
|
||||
echo ""
|
||||
echo "Quick start:"
|
||||
echo " claude chat # Start interactive chat"
|
||||
echo " claude 'your prompt' # One-shot command"
|
||||
echo " sdk list java # Show Java versions"
|
||||
echo " sdk use java 17 # Switch Java version"
|
||||
echo " docker ps # Docker commands work!"
|
||||
echo ""
|
||||
echo "==================================="
|
||||
|
||||
# Get credentials from environment variables or use defaults
|
||||
TERMINAL_USER=${TERMINAL_USER:-developer}
|
||||
TERMINAL_PASSWORD=${TERMINAL_PASSWORD:-changeme}
|
||||
|
||||
# Check if Claude credentials exist
|
||||
if [ -f "$HOME/.claude/session.json" ]; then
|
||||
echo "✅ Claude Code credentials found - ready to use!"
|
||||
else
|
||||
echo "⚠️ No Claude credentials found"
|
||||
echo " Copy ~/.claude from your Mac to ./claude-credentials/"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Start ttyd with basic auth
|
||||
echo "Starting web terminal on port 7681..."
|
||||
exec ttyd -p 7681 -c $TERMINAL_USER:$TERMINAL_PASSWORD bash
|
||||
54
setup-credentials.sh
Normal file
54
setup-credentials.sh
Normal file
@@ -0,0 +1,54 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🔐 Claude Credentials Setup"
|
||||
echo "============================"
|
||||
echo ""
|
||||
|
||||
# Check if running on Mac
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
echo "✅ Running on Mac"
|
||||
|
||||
# Check if ~/.claude exists
|
||||
if [ -d "$HOME/.claude" ]; then
|
||||
echo "✅ Found Claude credentials at ~/.claude"
|
||||
|
||||
# Create target directory
|
||||
mkdir -p ./claude-credentials
|
||||
|
||||
# Copy credentials
|
||||
echo ""
|
||||
echo "Copying credentials..."
|
||||
cp -r "$HOME/.claude/"* ./claude-credentials/ 2>/dev/null
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ Credentials copied to ./claude-credentials/"
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo "1. If deploying to Synology, upload this folder"
|
||||
echo "2. Or build and run locally: make build && make up"
|
||||
else
|
||||
echo "❌ Failed to copy credentials"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "❌ No Claude credentials found at ~/.claude"
|
||||
echo ""
|
||||
echo "Please login to Claude Code first:"
|
||||
echo " 1. Install Claude Code CLI: npm install -g @anthropic-ai/claude-code"
|
||||
echo " 2. Run: claude"
|
||||
echo " 3. Complete the login flow"
|
||||
echo " 4. Run this script again"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "ℹ️ Not running on Mac"
|
||||
echo ""
|
||||
echo "To copy credentials from your Mac:"
|
||||
echo ""
|
||||
echo " scp -r ~/.claude/ user@this-machine:$(pwd)/claude-credentials"
|
||||
echo ""
|
||||
echo "Or manually copy the ~/.claude folder from your Mac"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "============================"
|
||||
Reference in New Issue
Block a user