mirror of
https://github.com/basnijholt/compose-farm.git
synced 2026-02-03 14:13:26 +00:00
fix: Make SSH agent socket optional in docker-compose.yml (#132)
This commit is contained in:
19
README.md
19
README.md
@@ -43,8 +43,8 @@ A minimal CLI tool to run Docker Compose commands across multiple hosts via SSH.
|
|||||||
- [What Compose Farm doesn't do](#what-compose-farm-doesnt-do)
|
- [What Compose Farm doesn't do](#what-compose-farm-doesnt-do)
|
||||||
- [Installation](#installation)
|
- [Installation](#installation)
|
||||||
- [SSH Authentication](#ssh-authentication)
|
- [SSH Authentication](#ssh-authentication)
|
||||||
- [SSH Agent (default)](#ssh-agent-default)
|
- [SSH Agent](#ssh-agent)
|
||||||
- [Dedicated SSH Key (recommended for Docker/Web UI)](#dedicated-ssh-key-recommended-for-dockerweb-ui)
|
- [Dedicated SSH Key (default for Docker)](#dedicated-ssh-key-default-for-docker)
|
||||||
- [Configuration](#configuration)
|
- [Configuration](#configuration)
|
||||||
- [Single-host example](#single-host-example)
|
- [Single-host example](#single-host-example)
|
||||||
- [Multi-host example](#multi-host-example)
|
- [Multi-host example](#multi-host-example)
|
||||||
@@ -208,9 +208,9 @@ cp .envrc.example .envrc && direnv allow
|
|||||||
|
|
||||||
Compose Farm uses SSH to run commands on remote hosts. There are two authentication methods:
|
Compose Farm uses SSH to run commands on remote hosts. There are two authentication methods:
|
||||||
|
|
||||||
### SSH Agent (default)
|
### SSH Agent
|
||||||
|
|
||||||
Works out of the box if you have an SSH agent running with your keys loaded:
|
Works out of the box when running locally if you have an SSH agent running with your keys loaded:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Verify your agent has keys
|
# Verify your agent has keys
|
||||||
@@ -220,9 +220,9 @@ ssh-add -l
|
|||||||
cf up --all
|
cf up --all
|
||||||
```
|
```
|
||||||
|
|
||||||
### Dedicated SSH Key (recommended for Docker/Web UI)
|
### Dedicated SSH Key (default for Docker)
|
||||||
|
|
||||||
When running compose-farm in Docker, the SSH agent connection can be lost (e.g., after container restart). The `cf ssh` command sets up a dedicated key that persists:
|
When running in Docker, SSH agent sockets are ephemeral and can be lost after container restarts. The `cf ssh` command sets up a dedicated key that persists:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Generate key and copy to all configured hosts
|
# Generate key and copy to all configured hosts
|
||||||
@@ -250,6 +250,13 @@ volumes:
|
|||||||
- cf-ssh:${CF_HOME:-/root}/.ssh
|
- cf-ssh:${CF_HOME:-/root}/.ssh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Option 3: SSH agent forwarding** - if you prefer using your host's ssh-agent
|
||||||
|
```yaml
|
||||||
|
volumes:
|
||||||
|
- ${SSH_AUTH_SOCK}:/ssh-agent:ro
|
||||||
|
```
|
||||||
|
Note: Requires `SSH_AUTH_SOCK` environment variable to be set. The socket path is ephemeral and changes across sessions.
|
||||||
|
|
||||||
Run setup once after starting the container (while the SSH agent still works):
|
Run setup once after starting the container (while the SSH agent still works):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ services:
|
|||||||
# Defaults to root (0:0) for backwards compatibility
|
# Defaults to root (0:0) for backwards compatibility
|
||||||
user: "${CF_UID:-0}:${CF_GID:-0}"
|
user: "${CF_UID:-0}:${CF_GID:-0}"
|
||||||
volumes:
|
volumes:
|
||||||
- ${SSH_AUTH_SOCK}:/ssh-agent:ro
|
|
||||||
# Compose directory (contains compose files AND compose-farm.yaml config)
|
# Compose directory (contains compose files AND compose-farm.yaml config)
|
||||||
- ${CF_COMPOSE_DIR:-/opt/stacks}:${CF_COMPOSE_DIR:-/opt/stacks}
|
- ${CF_COMPOSE_DIR:-/opt/stacks}:${CF_COMPOSE_DIR:-/opt/stacks}
|
||||||
# SSH keys for passwordless auth (generated by `cf ssh setup`)
|
# SSH keys for passwordless auth (generated by `cf ssh setup`)
|
||||||
@@ -15,6 +14,8 @@ services:
|
|||||||
- ${CF_SSH_DIR:-~/.ssh/compose-farm}:${CF_HOME:-/root}/.ssh/compose-farm
|
- ${CF_SSH_DIR:-~/.ssh/compose-farm}:${CF_HOME:-/root}/.ssh/compose-farm
|
||||||
# Option 2: Named volume - managed by Docker, shared between services
|
# Option 2: Named volume - managed by Docker, shared between services
|
||||||
# - cf-ssh:${CF_HOME:-/root}/.ssh
|
# - cf-ssh:${CF_HOME:-/root}/.ssh
|
||||||
|
# Option 3: SSH agent forwarding (uncomment if using ssh-agent)
|
||||||
|
# - ${SSH_AUTH_SOCK}:/ssh-agent:ro
|
||||||
environment:
|
environment:
|
||||||
- SSH_AUTH_SOCK=/ssh-agent
|
- SSH_AUTH_SOCK=/ssh-agent
|
||||||
# Config file path (state stored alongside it)
|
# Config file path (state stored alongside it)
|
||||||
@@ -31,13 +32,14 @@ services:
|
|||||||
# Run as current user to preserve file ownership on mounted volumes
|
# Run as current user to preserve file ownership on mounted volumes
|
||||||
user: "${CF_UID:-0}:${CF_GID:-0}"
|
user: "${CF_UID:-0}:${CF_GID:-0}"
|
||||||
volumes:
|
volumes:
|
||||||
- ${SSH_AUTH_SOCK}:/ssh-agent:ro
|
|
||||||
- ${CF_COMPOSE_DIR:-/opt/stacks}:${CF_COMPOSE_DIR:-/opt/stacks}
|
- ${CF_COMPOSE_DIR:-/opt/stacks}:${CF_COMPOSE_DIR:-/opt/stacks}
|
||||||
# SSH keys - use the SAME option as cf service above
|
# SSH keys - use the SAME option as cf service above
|
||||||
# Option 1: Host path (default)
|
# Option 1: Host path (default)
|
||||||
- ${CF_SSH_DIR:-~/.ssh/compose-farm}:${CF_HOME:-/root}/.ssh/compose-farm
|
- ${CF_SSH_DIR:-~/.ssh/compose-farm}:${CF_HOME:-/root}/.ssh/compose-farm
|
||||||
# Option 2: Named volume
|
# Option 2: Named volume
|
||||||
# - cf-ssh:${CF_HOME:-/root}/.ssh
|
# - cf-ssh:${CF_HOME:-/root}/.ssh
|
||||||
|
# Option 3: SSH agent forwarding (uncomment if using ssh-agent)
|
||||||
|
# - ${SSH_AUTH_SOCK}:/ssh-agent:ro
|
||||||
# XDG config dir for backups and image digest logs (persists across restarts)
|
# XDG config dir for backups and image digest logs (persists across restarts)
|
||||||
- ${CF_XDG_CONFIG:-~/.config/compose-farm}:${CF_HOME:-/root}/.config/compose-farm
|
- ${CF_XDG_CONFIG:-~/.config/compose-farm}:${CF_HOME:-/root}/.config/compose-farm
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
Reference in New Issue
Block a user