- Revised README.md to clarify the use of Docker alongside Podman for containerization. - Updated API documentation to reflect new RPC endpoints, including `auth.logout`. - Enhanced WebSocket handling in the API for better connection management. - Modified Neode UI to utilize a curated list of Docker-based applications, replacing previous Start9 registry calls. - Improved error handling and logging in the marketplace for better user experience.
5.8 KiB
5.8 KiB
Console Errors Fixed - Docker Focus Complete
Issues Resolved
✅ 1. External API Call Spam
Problem: Console flooded with 403/404 errors from Start9 registry and GitHub API
registry.start9.comreturning 404api.github.comrate limiting with 403 errors- 20+ failed network requests on every page load
Solution:
- Disabled external API calls in development mode (
import.meta.env.DEV) - Apps.vue now skips registry/GitHub fetches and uses local data
- Marketplace.vue directly loads curated list without external calls
- Changed log levels from
warntodebugfor expected failures
✅ 2. StartOS Package References Removed
Problem: App used StartOS-specific packages (.s9pk files) instead of standard Docker images
Solution:
- Removed all Start9Labs wrapper repo references
- Updated
dummyApps.tsto point to official upstream repos:- Bitcoin Core → bitcoin/bitcoin
- BTCPay Server → btcpayserver/btcpayserver
- Home Assistant → home-assistant/core
- LND → lightningnetwork/lnd
- Mempool → mempool/mempool
- Marketplace now lists Docker Hub images instead of
.s9pkURLs - Install function changed from
manifestUrltodockerImageparameter
✅ 3. Docker-First Architecture
Complete shift to Docker-based deployment:
Development:
- All apps run in Docker containers via docker-compose
- Standard images from Docker Hub
- No StartOS wrappers needed
Production (future):
- Same Docker images packaged in Alpine Linux
- Podman instead of Docker
- Standard containers, not proprietary formats
Files Modified
/neode-ui/src/views/Apps.vue
// Before: Tried to fetch from registry and GitHub
watch(() => Object.keys(store.packages).length, async () => {
await fetch('https://registry.start9.com/api/v1/packages')
await fetch('https://api.github.com/users/Start9Labs/repos')
// etc...
})
// After: Skip external calls in dev
const isDev = import.meta.env.DEV
if (isDev) {
console.log('[Apps] Using local app data (dev mode, external API calls disabled)')
return
}
/neode-ui/src/views/Marketplace.vue
// Before: Complex fallback chain to Start9 packages
async function loadCommunityMarketplace() {
await fetch('https://registry.start9.com/api/v1/packages')
await fetch('https://api.github.com/users/Start9Labs/repos')
// Returns .s9pk download URLs
}
// After: Direct Docker image list
async function loadCommunityMarketplace() {
console.log('📦 Loading Docker-based app marketplace')
communityApps.value = getCuratedAppList() // Returns dockerImage field
}
/neode-ui/src/utils/dummyApps.ts
// Before:
'wrapper-repo': 'https://github.com/Start9Labs/bitcoind-startos'
// After:
'wrapper-repo': 'https://github.com/bitcoin/bitcoin'
New App Structure
Each app now includes:
{
id: 'bitcoin',
title: 'Bitcoin Core',
version: '27.0.0',
description: 'Run a full Bitcoin node',
icon: '/assets/img/app-icons/bitcoin.svg',
author: 'Bitcoin Core',
dockerImage: 'lncm/bitcoind:v27.0', // ← NEW
manifestUrl: null, // ← No more .s9pk files
repoUrl: 'https://github.com/bitcoin/bitcoin'
}
Console Output Now
Before (Noisy):
[Apps] Fetching app info from Start9 registry...
registry.start9.com/api/v1/packages:1 Failed to load resource: 404
Could not connect to Start9 registry... HTTP 404
[Apps] Fetching GitHub info for dummy apps...
api.github.com/users/Start9Labs/repos:1 Failed to load resource: 403
[GitHub] Failed to fetch repo Start9Labs/bitcoind-startos: 403
[GitHub] Failed to fetch repo Start9Labs/btcpayserver-startos: 403
... 20+ more errors ...
After (Clean):
[Apps] Using local app data (dev mode, external API calls disabled)
[Apps] Real packages from store: 0 apps
[Apps] Dummy apps available: 13 apps
[Apps] Returning dummy apps
📦 Loading Docker-based app marketplace
📦 Loaded 20 Docker-based apps
Marketplace Apps (20 Docker Images)
All apps now reference standard Docker images:
- Bitcoin Core -
lncm/bitcoind:v27.0 - BTCPay Server -
btcpayserver/btcpayserver:1.13.5 - LND -
lightninglabs/lnd:v0.17.4-beta - Mempool -
mempool/frontend:v2.5.0 - Home Assistant -
homeassistant/home-assistant:2024.1 - Grafana -
grafana/grafana:10.2.0 - SearXNG -
searxng/searxng:latest - Ollama -
ollama/ollama:latest - OnlyOffice -
onlyoffice/documentserver:7.5.1 - Penpot -
penpotapp/frontend:latest - Nextcloud -
nextcloud:28 - Vaultwarden -
vaultwarden/server:1.30.0-alpine - Jellyfin -
jellyfin/jellyfin:10.8.13 - PhotoPrism -
photoprism/photoprism:latest - Immich -
ghcr.io/immich-app/immich-server:release - File Browser -
filebrowser/filebrowser:v2.27.0 - Nginx Proxy Manager -
jc21/nginx-proxy-manager:latest - Portainer -
portainer/portainer-ce:2.19.4 - Uptime Kuma -
louislam/uptime-kuma:1.23.11 - Fedimint -
fedimint/fedimintd:v0.3.0
Testing
Reload the page and check console:
- ✅ No 403/404 errors
- ✅ Clean log output
- ✅ Apps display correctly
- ✅ Marketplace shows Docker-based apps
- ✅ No StartOS references
Architecture Benefits
Development
- Use official Docker images directly
- No proprietary package format
- Easy to add new apps (just specify Docker image)
- Standard docker-compose workflow
Production
- Same Docker images, different runtime (Podman)
- Alpine Linux base (130MB vs 1.5GB+)
- Security: rootless containers, AppArmor profiles
- No vendor lock-in
Next Steps
- ✅ Console is clean
- ✅ Docker images specified
- 🔄 Backend needs Docker integration
- 🔄 Install button should pull and run containers
- 🔄 Start/Stop should control Docker containers
Summary: App is now 100% Docker-focused with no StartOS dependencies. Console is clean. Ready for backend Docker integration.