Use ssh_alias and ssh_key from config in bootstrap text instructions

Replace hardcoded 'data-analyst' and '~/.ssh/data_analyst_server' in
the copyBootstrapInstructions JS function with values from instance config.
Pass ssh_alias and ssh_key to dashboard template context.
This commit is contained in:
Petr 2026-03-14 21:06:37 +01:00
parent 13938bf72f
commit 6728da63fb
2 changed files with 14 additions and 11 deletions

View file

@ -872,6 +872,8 @@ def register_routes(app: Flask) -> None:
username_error=username_error,
server_host=Config.SERVER_HOST,
server_hostname=Config.SERVER_HOSTNAME,
ssh_alias=Config.SSH_ALIAS,
ssh_key=Config.SSH_KEY,
bootstrap_yaml=bootstrap_yaml,
telegram_status=telegram_status,
desktop_status=desktop_status,

View file

@ -2428,34 +2428,35 @@
var serverHostname = {{ server_hostname | tojson }};
var webappUrl = serverHostname ? 'http://' + serverHostname : '';
var sshHost = 'data-analyst';
var sshAlias = {{ ssh_alias | tojson }};
var sshKey = {{ ssh_key | tojson }};
var instructions = 'Set up my AI Data Analyst local environment.\n\n'
+ 'Connection details:\n'
+ ' Server IP: ' + serverHost + '\n'
+ ' Webapp: ' + webappUrl + '\n'
+ ' My username: ' + username + '\n'
+ ' SSH key: ~/.ssh/data_analyst_server (already generated)\n\n'
+ ' SSH key: ' + sshKey + ' (already generated)\n\n'
+ 'Steps:\n\n'
+ '1. SSH config\n'
+ ' Check ~/.ssh/config - if a Host entry named "' + sshHost + '" already exists\n'
+ ' Check ~/.ssh/config - if a Host entry named "' + sshAlias + '" already exists\n'
+ ' with a DIFFERENT server, ask me what name to use instead.\n'
+ ' Otherwise add:\n'
+ ' Host ' + sshHost + '\n'
+ ' Host ' + sshAlias + '\n'
+ ' HostName ' + serverHost + '\n'
+ ' User ' + username + '\n'
+ ' IdentityFile ~/.ssh/data_analyst_server\n'
+ ' IdentityFile ' + sshKey + '\n'
+ ' StrictHostKeyChecking accept-new\n'
+ ' Then test: ssh ' + sshHost + ' echo ok\n\n'
+ ' Then test: ssh ' + sshAlias + ' echo ok\n\n'
+ '2. Create project folders (use explicit mkdir, not brace expansion):\n'
+ ' mkdir -p server/docs server/scripts server/parquet server/metadata server/examples\n'
+ ' mkdir -p user/duckdb user/notifications user/artifacts user/scripts user/parquet user/sessions\n\n'
+ '3. Download from server via rsync (use --no-perms --no-group to avoid macOS permission errors).\n'
+ ' Skip directories that don\'t exist on the server (rsync exit code 23 = missing source).\n'
+ ' rsync -avz --no-perms --no-group ' + sshHost + ':server/scripts/ ./server/scripts/\n'
+ ' rsync -avz --no-perms --no-group ' + sshHost + ':server/docs/ ./server/docs/\n'
+ ' rsync -avz --no-perms --no-group ' + sshHost + ':server/examples/ ./server/examples/\n'
+ ' rsync -avz --no-perms --no-group ' + sshHost + ':server/metadata/ ./server/metadata/\n'
+ ' rsync -avz --no-perms --no-group --progress ' + sshHost + ':server/parquet/ ./server/parquet/\n'
+ ' rsync -avz --no-perms --no-group ' + sshAlias + ':server/scripts/ ./server/scripts/\n'
+ ' rsync -avz --no-perms --no-group ' + sshAlias + ':server/docs/ ./server/docs/\n'
+ ' rsync -avz --no-perms --no-group ' + sshAlias + ':server/examples/ ./server/examples/\n'
+ ' rsync -avz --no-perms --no-group ' + sshAlias + ':server/metadata/ ./server/metadata/\n'
+ ' rsync -avz --no-perms --no-group --progress ' + sshAlias + ':server/parquet/ ./server/parquet/\n'
+ ' Note: some folders may be empty if data sync hasn\'t run on the server yet. That\'s OK.\n\n'
+ '4. Set up Python venv:\n'
+ ' python3 -m venv .venv\n'