Enhance development workflow and deployment practices for Archipelago

- Updated the Development-Workflow documentation to clarify deployment strategy, emphasizing direct deployment to the live system for testing.
- Added detailed instructions for the deployment command, including syncing code, building frontend and backend, and restarting services.
- Improved SSH key management section to assist with authentication issues.
- Expanded the testing workflow to include steps for checking logs and syncing changes back to the ISO build.
- Updated the ISO build integration section to ensure system-level changes are captured for future builds.
- Refactored various sections for clarity and completeness, including deployment paths and system configuration files.
This commit is contained in:
Dorian
2026-02-01 13:24:03 +00:00
parent 00d1af12f0
commit 34fc06726e
28 changed files with 1248 additions and 285 deletions

View File

@@ -23,7 +23,13 @@ impl DockerPackageScanner {
/// Scan Docker containers and convert to package data
pub async fn scan_containers(&self) -> Result<HashMap<String, PackageDataEntry>> {
let containers = self.runtime.list_containers().await?;
let containers = match self.runtime.list_containers().await {
Ok(c) => c,
Err(e) => {
debug!("Failed to list containers: {}", e);
return Ok(HashMap::new());
}
};
debug!("Found {} containers", containers.len());
@@ -39,22 +45,37 @@ impl DockerPackageScanner {
"penpot-exporter",
"penpot-valkey",
"penpot-mailcatch",
"bitcoin-ui",
"lnd-ui",
"endurain-db",
"nextcloud-db",
];
for container in containers {
// Only process archy-* containers from docker-compose
if !container.name.starts_with("archy-") {
continue;
// First pass: collect UI containers
let mut ui_containers: HashMap<String, String> = HashMap::new();
for container in &containers {
if container.name.ends_with("-ui") {
// Map bitcoin-ui -> bitcoin, lnd-ui -> lnd
let parent_app = container.name.strip_suffix("-ui").unwrap_or(&container.name);
if !container.ports.is_empty() {
if let Some(ui_address) = extract_lan_address(&container.ports) {
ui_containers.insert(parent_app.to_string(), ui_address);
}
}
}
// Extract app ID from container name (archy-bitcoin -> bitcoin)
let app_id = container.name.strip_prefix("archy-")
.unwrap_or(&container.name)
.to_string();
}
debug!("Found {} UI containers", ui_containers.len());
for container in containers {
// Extract app ID from container name
// Support both archy-* containers (docker-compose) and plain names (manual)
let app_id = if container.name.starts_with("archy-") {
container.name.strip_prefix("archy-")
.unwrap_or(&container.name)
.to_string()
} else {
// Use the container name as-is for manually started containers
container.name.clone()
};
// Skip backend services (databases, APIs, etc.)
if excluded_services.contains(&app_id.as_str()) {
@@ -62,11 +83,25 @@ impl DockerPackageScanner {
continue;
}
// Skip UI containers (they're merged with their parent apps)
if app_id.ends_with("-ui") {
debug!("Skipping UI container: {}", app_id);
continue;
}
// Get metadata for this app
let metadata = get_app_metadata(&app_id);
// Extract port from container
let lan_address = extract_lan_address(&container.ports);
// Check if this app has a separate UI container
let lan_address = if let Some(ui_address) = ui_containers.get(&app_id) {
debug!("Using UI container address for {}: {}", app_id, ui_address);
Some(ui_address.clone())
} else {
// Extract port from the main container
extract_lan_address(&container.ports)
};
debug!("Container {}: ports={:?}, lan_address={:?}", app_id, container.ports, lan_address);
// Convert container state to package/service state
let (package_state, service_status) = convert_state(&container.state);
@@ -146,11 +181,11 @@ struct AppMetadata {
fn get_app_metadata(app_id: &str) -> AppMetadata {
match app_id {
"bitcoin" => AppMetadata {
title: "Bitcoin Core".to_string(),
"bitcoin" | "bitcoin-core" | "bitcoin-knots" => AppMetadata {
title: "Bitcoin Knots".to_string(),
description: "Full Bitcoin node implementation".to_string(),
icon: "/assets/img/app-icons/bitcoin-core.png".to_string(),
repo: "https://github.com/bitcoin/bitcoin".to_string(),
icon: "/assets/img/app-icons/bitcoin-knots.webp".to_string(),
repo: "https://github.com/bitcoinknots/bitcoin".to_string(),
},
"btcpay" | "btcpay-server" => AppMetadata {
title: "BTCPay Server".to_string(),