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:
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user