Ansible playbook for automated installation of Claude development environment on Rocky Linux ARM64 servers.
I personally use Hetzner Cloud for all my Claude dev servers - great performance, unbeatable prices, and ARM64 support.
👉 Get €20 FREE credits with this link - enough to test this setup for weeks!
IMPORTANT: For working with Claude CLI, login as user dev (not root):
ssh dev@<server-ip>- EPEL repository
- Basic tools (git, tmux, htop, curl, wget)
- Development Tools (gcc, make, ...)
- Docker CE + Docker Compose plugin
- NVM + Node.js LTS
- Python 3 + pip
- Go (ARM64)
- Claude CLI (@anthropic-ai/claude-code)
- Claunch +
clcommand (interactive session manager)
/srcdirectory for projects~/README.txt- quick reference for working on server- MOTD - shows running Claude sessions on login
- PATH in
.bashrcfor Go, NVM, ~/bin
# macOS
brew install ansible
# or pip
pip install ansible- Rocky Linux 9 (ARM64)
- SSH access as root
- Internet connection
ansible -i inventory.ini claude_servers -m pingansible-playbook -i inventory.ini playbook.yml --checkansible-playbook -i inventory.ini playbook.yml# Docker only
ansible-playbook -i inventory.ini playbook.yml --tags docker
# Claude tools only
ansible-playbook -i inventory.ini playbook.yml --tags claude,claunch
# MOTD and README only
ansible-playbook -i inventory.ini playbook.yml --tags motd,templates- Copy the example inventory (if not done already):
cp inventory.ini.example inventory.ini- Edit
inventory.ini:
[claude_servers]
my-server ansible_host=1.2.3.4 ansible_user=root
another-server ansible_host=5.6.7.8 ansible_user=root
[claude_servers:vars]
git_user_name=Your Name
git_user_email=your@email.com- Run the playbook:
ansible-playbook -i inventory.ini playbook.ymlHost my-claude-server
HostName 1.2.3.4
User dev
IdentityFile ~/.ssh/id_rsa
- VS Code:
Cmd+Shift+P→ "Remote-SSH: Connect to Host" - Select
my-claude-server - Open
/src/<project>
After login, MOTD displays overview of running Claude sessions.
The easiest way to work with Claude on the server is the cl command - an interactive session manager:
cl # Interactive menu - select existing session or create new oneThis gives you a menu to:
- See all running tmux sessions
- Attach to any existing session with one keypress
- Start a new Claude session in current directory
cd /src
mkdir my-project && cd my-project
git init
cl # Interactive menu to start Claudeclaunch # Start Claude in current directory
claunch --tmux # Start in tmux (persistent session)
claunch list # List running sessions
claunch clean # Clean orphaned sessionscl # Easiest way - interactive menu
# or manually:
claunch --tmux # Start Claude in tmux
# Ctrl+B, D # Detach
tmux attach -t <name> # Reattachcl # Interactive session manager
src # Alias for "cd /src"
cat ~/README.txt # Quick referenceremoteclaude/
├── README.md # This file
├── CLAUDE.md # Context for Claude
├── inventory.ini.example # Server list template (copy to inventory.ini)
├── inventory.ini # Your local server list (git ignored)
├── playbook.yml # Main Ansible playbook
├── server-readme.txt # Copy of README for server
└── templates/
├── new-project.sh.j2 # New project script
├── docker-compose.template.yml.j2 # Docker template
├── README.txt.j2 # README for ~/README.txt
├── motd.sh.j2 # MOTD script
└── cl.sh.j2 # Interactive session manager
ssh-copy-id root@<server-ip>ansible -i inventory.ini claude_servers -m ping -vvvsystemctl status docker
journalctl -u dockersource ~/.bashrc
# or
~/bin/claunch --help