Featured image

“The best tools are the ones you forget you’re using”

Il Problema Link to heading

Ogni volta che perdo la connessione o che chiudo un terminale mi trovo con tutte le sessioni

Mi serviva un ambiente di sviluppo che non dipenda dal laptop, magari comandabile da remoto. Ho istanziato un container sul server Proxmox, accessibile via SSH da Mac o telefono, con sessioni che non si interrompono mai. Vediamo come ho configurato tmux.

Container LXC per Development Link to heading

Ho creato un container dedicato su Proxmox. Specifiche:

  • CT ID: 108
  • Hostname: dev-workspace
  • Template: Ubuntu 22.04
  • Storage: 50GB su local-lvm
  • RAM: 4GB + 2GB swap
  • CPU: 4 core
  • IP: 192.168.1.216/24
  • Features: nesting=1
pct start 108
pct enter 108

Setup Base Link to heading

Ho installato solo l’essenziale:

apt update && apt upgrade -y
apt install -y git curl vim tmux

Node.js con nvm:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
nvm install --lts
nvm alias default 'lts/*'
npm install -g pnpm yarn @angular/cli

La prassi sarebbe quella di usare un altro utente, ma uso root direttamente. Il server è accessibile solo via VPN Wireguard, quindi non c’è esposizione diretta su Internet e mi sento più sicuro.

SSH Link to heading

Ho installato OpenSSH e modificato la configurazione per permettere login root:

apt install -y openssh-server
systemctl enable ssh

# Modifica config per permettere root login
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
systemctl restart ssh

Sul Mac ho aggiunto un alias in ~/.ssh/config:

Host dev-workspace
    HostName 192.168.1.216
    User root
    ServerAliveInterval 60

Ora mi connetto con ssh dev-workspace.

tmux Link to heading

tmux mantiene le sessioni attive sul server anche quando disconnetto. Configurazione minimale:

echo "set -g history-limit 10000" > ~/.tmux.conf

Comandi base:

tmux new -s dev          # Crea sessione
tmux attach -t dev       # Riconnetti
Ctrl+a d                 # Disconnetti (sessione resta attiva)
Ctrl+a c                 # Nuova finestra
Ctrl+a 0-9               # Switch finestra

Connessione Link to heading

ssh dev-workspace

Se ricevo l’errore “WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED”, rimuovo la vecchia chiave:

ssh-keygen -R 192.168.1.216

Accesso da Android Link to heading

Ho installato Termux da F-Droid:

pkg update && pkg upgrade
pkg install openssh

Connessione (con Wireguard VPN attivo):

ssh [email protected]
tmux attach -t dev

Termux ha una riga extra con tasti speciali (Ctrl, Alt, ESC). Uso Ctrl+a come prefix tmux.

Claude Code Link to heading

Installazione:

npm install -g @anthropic-ai/claude-code
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Workspace:

mkdir -p ~/workspace/{projects,docs/context}
cd ~/workspace/projects

Uso in tmux:

tmux new -s dev
claude code                  # Finestra 0
Ctrl+a c                     # Nuova finestra per git/npm

Syncthing per File di Contesto Link to heading

Ho installato Syncthing per sincronizzare documentazione e specifiche dal Mac al server:

apt install -y syncthing
systemctl enable syncthing@root
systemctl start syncthing@root

Configurazione per accesso remoto:

systemctl stop syncthing@root
nano /root/.local/state/syncthing/config.xml
# Cambio <address>127.0.0.1:8384</address> in <address>0.0.0.0:8384</address>
systemctl start syncthing@root

Accedo alla UI da http://192.168.1.216:8384 e configuro:

  1. Sul Mac: aggiungo sottocartella come nuova folder in Syncthing
  2. Connetto i due device scambiando Device ID
  3. Sul server: accetto la folder e mappo su /root/workspace/docs/context

Ora i file di contesto si sincronizzano automaticamente e Claude Code può accedervi.

Workflow Link to heading

Il setup è completo. Ora posso:

  1. Scrivere specifiche sul Mac → Syncthing sincronizza sul server
  2. Connettermi via SSH da Mac o telefono
  3. Agganciare la sessione tmux esistente
  4. Claude Code ha accesso ai file di contesto aggiornati
  5. Disconnettermi quando voglio, le sessioni restano attive