Nectere Arch
Arch deploys a container image from a registry to Azure Container Instances, Azure Container Apps or Google Cloud Run, or packages it as a bundle for a plain Docker host. ACI deployments can also be updated, restarted and given storage after the fact.
Nectere Array › Menu › Deploy › Nectere Arch01The app
The mock works like the app. Click through the sidebar, open a deployment, or step through Deploy with Next and Back. The switch changes who is signed in.
A user handles day-to-day work. Users, Server Logs and Backup are admin only. Array sign-on hides Users and Logout because Array owns the accounts.
02Concepts
Arch doesn't build images. It starts from an image already pushed to a registry.
ghcr.io/acme/web-api:latest, and the login to pull it. Inspect records its ports and folders.docker-compose.yml, a README with pull and start steps, and a .env file.Typical order
- Credentials: add the cloud login for the target, plus a registry login if the image is private and not on GHCR. Press Test.
- Apps: register the image and press Inspect.
- Deploy: pick a target and app, step through to Review, press Deploy.
- Deployments: wait for succeeded and open the URL.
03Getting Arch
In Nectere Array, open Menu › Deploy › Nectere Arch, name the tile, pick a sign-in mode and press Deploy. Press Open once the tile shows Running. Restarts, Arch updates and its logs are on the back of the tile.
admin, other Array users as user.04Sign-in and setup
With Application sign-in, the first visit shows a setup form. The name and password entered there become the admin account. After that everyone uses Log In.
| Rule | Value |
|---|---|
| Sign-in lasts | 8 hours |
| Lockout | 5 wrong passwords for one username in 15 minutes locks it for 5 minutes |
| Minimum password | 8 characters |
| Usernames | Letters, numbers, dots, hyphens, underscores and @ |
Array sign-on
These forms don't appear. Opening the tile from Array signs you in, and the sidebar shows your name with no Logout button. If the Array session expires while Arch is open, Arch shows its own Log In page. Don't log in there. Go back to Array and reopen the tile.
05Sidebar and notifications
| Item | Who sees it |
|---|---|
| Dashboard, Apps, Credentials, Deploy, Deployments | Everyone |
| Users | admin with Application sign-in. Hidden with Array sign-on. |
| Server Logs, Backup | admin |
Footer
Signed-in user, plus Logout with Application sign-in.
Notifications
Top right, gone after about four seconds. Green is success, rose is failure, blue is information.
Dialogs close with ×, Cancel, Close or Escape. Clicking outside a dialog does nothing, so a half-filled form isn't lost.
06Dashboard
The landing page.
- 1Counts. Active Deployments counts only deployments that are
running. The rest are totals. - 2Shortcuts. Register App and Add Credential open their panel with the form up. New Deployment opens the wizard.
- 3Recent Deployments. The ten newest. Click a row to open it.
07Apps
An app points at one image tag in one registry. Auth means Arch holds a login for it, Public means it doesn't. Deleting an app leaves its deployments alone.
Register App
The registry decides where the login comes from. GHCR takes a token in the form and the rest use a saved credential. Public images need neither. When editing, the token box is always blank; leave it blank to keep the saved token.
| Registry | Login comes from |
|---|---|
| GHCR | GHCR Token on the app (optional) |
| ACR | An Azure Service Principal or a Registry Username / Password credential |
| ECR | An AWS Access Keys credential |
| GAR | A GCP Service Account credential |
| Docker Hub / Generic v2 | A Registry Username / Password credential |
The Credential list only shows matching types. If it's empty, add the credential first. Image references with odd characters are rejected.
Inspect
Inspect reads the image from the registry without running it and saves its exposed ports and folder list. The wizard uses these to fill in Port and offer volumes. Large images take a minute or so, and closing the window doesn't stop it.
| Message | When |
|---|---|
| Name and Image are required | One of them is blank |
| Inspection already running | Inspect pressed again before the first run finished |
| An inspection is already running for this app | Another user is inspecting it |
| Failed to fetch manifest: … 401 (Unauthorized) | The login can't read the image, or a private image has no login |
08Credentials
Cloud and registry logins. Row icons, left to right: Test, Access report (cloud only), Edit, Delete.
Credential types
Type sets the fields. Saved secrets show as dots: leave them to keep the secret, type over them to replace it. Type can't be changed after saving.
| Type | Fields | Used for |
|---|---|---|
| Azure Service Principal | Tenant ID, Client ID, Client Secret, Subscription ID | ACI and Container Apps, ACR pulls |
| AWS Access Keys | Access Key ID, Secret Access Key, Default Region | ECR pulls |
| GCP Service Account | Project ID, Service Account JSON Key | Cloud Run, GAR pulls |
| Registry Username / Password | Username, Password / Token | ACR, Docker Hub and other registries |
Test
Test signs in for real and reports back in a notification. Azure results end with the client secret length, which catches a secret truncated on paste. Tests time out after 90 seconds.
| Type | Passing message |
|---|---|
| Azure Service Principal | Service principal authenticated; subscription reachable. (client secret length: 40) |
| AWS Access Keys | AWS keys valid. {"UserId": "AIDAWXH3EXAMPLE5KQ", "Account": "418272791002", "Arn": "arn:aws:iam::418272791002:user/arch-deploy"} |
| GCP Service Account | GCP service account activated. |
| Registry Username / Password | Stored. Registry username/password is checked when an image is pulled. |
| Azure, subscription wrong | Login worked but subscription not reachable: … |
Access report
The shield icon runs read checks for an Azure, AWS or Google credential at three levels: tenant or organisation, then subscription, account or project, then billing. Denied rows with an orange i have a fix as a copyable command. A run takes 15 to 60 seconds. The last result stays, marked cached, until Refresh.
| Cloud | Scope box | Levels checked |
|---|---|---|
| Azure | Subscription ID, defaults to the credential's subscription | Tenant, Subscription, Billing |
| AWS | Account ID or role ARN, defaults to the key's own account | Organization, Account, Billing |
| Project ID, defaults to the credential's project | Organization, Project, Billing |
| Result | Means |
|---|---|
| Allowed OK | Passed |
| Denied Error | Not permitted, or the call failed |
| Partial | Mixed results within the level |
| Info Skipped | Informational, or not applicable to this identity type |
09Deploy
Steps depend on the target: seven for ACI, five for Cloud Run. The mock lets you click the rail to jump between steps. The app only moves with Next and Back.
| Target | App | Credential | Configure | Network | Env Vars | Volumes | Review |
|---|---|---|---|---|---|---|---|
| Azure ACI | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Azure Container Apps | ✓ | ✓ | ✓ | – | ✓ | ✓ | ✓ |
| GCP Cloud Run | ✓ | ✓ | ✓ | – | ✓ | – | ✓ |
| Local Bundle | ✓ | – | ✓ | – | ✓ | ✓ | ✓ |
App and Credential
Next stays disabled until an app card is selected. The Credential step lists Azure Service Principals for both Azure targets and GCP Service Accounts for Cloud Run. With none saved it shows No matching credentials. Add a azure-sp in the Credentials panel first. Local Bundle skips the step and uses the app's registry login.
Configure
Port is pre-filled for inspected apps (Auto-detected from image inspection). Otherwise the hint reads No port discovered — inspect the image or enter manually. Names take letters, numbers, hyphens and underscores, up to 63 characters, and are lowercased.
| Field | Targets | Notes |
|---|---|---|
| Resource Group | ACI, Container Apps | Required. Created if missing. |
| Container App Name / Service Name / App Name | All | Required. Label varies by target. |
| Port | All | Required, 1 to 65535. Blank on a bundle means 8080. |
| HTTPS | ACI | Changes the access URL to https:// and nothing else. The image must serve TLS itself. |
| Location / Region | All but Local Bundle | Per-cloud list, first entry is the default |
| vCPU, Memory (GB) | ACI | 0.1 to 4 cores, 0.1 to 16 GB. Defaults 2 and 4. |
| Container Size | Container Apps | Fixed pairs from 0.25 vCPU · 0.5 GiB to 4 vCPU · 8 GiB, all valid on the platform |
| Container Apps Environment | Container Apps | Blank means <app-name>-env. Reuses an existing one in the resource group. |
| Custom Domain | Container Apps | Optional. See Custom domain. |
| Allow unauthenticated access (public) | Cloud Run | On by default. Off requires Google sign-in. |
| Registry login in bundle | Local Bundle | See below |
Registry login in a bundle
Sets which pull login ships in the README. Embed the app's credential writes the app's own token. Embed a different token takes a read-only token for this bundle only; Arch doesn't save it. Keep it private leaves the login out for whoever runs the bundle to supply.
Network (ACI only)
Public IP is open to anyone. Private VNet has no public address. VNet + Load Balancer sits behind a public load balancer that admits only the source addresses you list. Both VNet modes take an existing network and subnet, or Create New makes a /28.
Env Vars and Volumes
Key and value rows, passed to the container as environment variables or written to .env in a bundle. Empty rows are ignored. The × on the last row clears it.
Volumes lists the folders found by inspection. Tick the ones that need to survive a restart; anything below a ticked folder greys out. On Azure each becomes a file share on a storage account created with the deployment. In a bundle each becomes a folder under ./data. Uninspected apps can skip the step.
Review
Press Deploy (Generate Bundle for a Local Bundle). Arch shows Deployment started and opens the new deployment.
| Message | Fix |
|---|---|
| Select a credential to continue | Click a credential card first |
| Resource Group is required | Fill it in on Configure |
| App Name: letters, numbers, hyphens or underscores only (max 63) | Remove spaces, dots and other symbols |
| A valid port is required (1-65535) | Enter the port the image listens on |
| Select an existing VNet and subnet, or create a new VNet | Finish the Network step or switch to Public IP |
| Enter the token to embed, or choose another option | Paste the token or pick another option |
| Too many background jobs running (limit 6). Wait for one to finish and try again. | Six deploys, inspections or destroys are already running. Wait for one. |
10Deployments
Every deployment, failed ones included. ACI rows show their resource group under the target. Click a row for its detail view.
Detail view
Layout varies by target and outcome. Callouts refer to the ACI view.
- 1Header buttons. Show Deployment Template is always there. Succeeded ACI deployments add Check for Updates, Redeploy Image and Restart Container.
- 2Summary cards. Status, location, timing and the rest at a glance.
- 3Configuration. Includes the digest actually deployed and the URL.
- 4Deployed Resources. Created means Arch made it, Existing means it was reused. Destroy All Resources is underneath.
- 5Helpful Commands.
azcommands to open a shell in the container and follow its logs. Container Apps adds platform logs and a replica list. - 6Persistent Storage. ACI volumes, with Add Volume Mount and a Remove per row.
- 7Logs. Every step of every action, newest last, following live while something runs. Delete is here.
| What you can do | ACI | Container Apps | Cloud Run | Local Bundle |
|---|---|---|---|---|
| Open the URL, read the log | ✓ | ✓ | ✓ | log only |
| Check for Updates, Redeploy Image, Restart Container | ✓ | – | – | – |
| Add or remove storage afterwards | ✓ | – | – | – |
| Bind a custom domain | – | ✓ | – | – |
| Helpful Commands | ✓ | ✓ | – | – |
| Download the bundle, Docker install scripts | – | – | – | ✓ |
| Destroy | ✓ | ✓ | ✓ | – |
Updates and restarts (ACI)
Arch records the image digest at deploy time. Check for Updates compares it with what the tag points to now, and if they differ Apply Update moves the container to the newer image. Redeploy Image does the same without checking. Both end with Image updated — restart the container to apply changes.
Restart Container confirms with Restart the container? It will be briefly unavailable. The container is down for a few seconds.
For GHCR images the digests and Package line link to the image page on GitHub.
| Message | Means |
|---|---|
| Update started - restart container to apply | New image in place, restart still needed |
| Container restarting | Restart accepted |
| Can only update succeeded deployments | Redeploy a failed deployment instead |
| A update job is already running for this deployment - … | Wait for it, then retry |
Storage after deploy (ACI)
In Add Volume Mount, press Inspect, pick a folder and press Attach Storage. Arch adds a 50 GB file share and restarts the container with it mounted over that folder. The share starts empty, so copy out anything worth keeping first.
The folder list comes from the app's inspection. No cached paths. Go to GHCR Apps and click Inspect Image first. means the app needs inspecting under Apps. Remove confirms with Remove this volume mount? The container app will be restarted.
No storage account found in deployment resources.Custom domain (Container Apps)
Arch doesn't edit DNS. With a custom domain set in the wizard, the detail view lists two records to create: a TXT proving ownership and a CNAME pointing at the app (an A record for a bare domain such as corp.lab). Then press Bind Domain. Azure issues a free certificate in 5 to 20 minutes.
A bind before DNS has propagated fails. Press it again later.
| Log line | Means |
|---|---|
| Waiting for the managed certificate to issue (typically 5-20 minutes)... | Records accepted, certificate in progress |
| Bind failed - check the DNS records exist and have propagated, then retry. | Azure can't see the records yet |
| Gave up after 30 minutes - certificate is still provisioning. Re-run the bind later; progress carries over. | Press Bind Domain again later |
| Domain bound - managed certificate issued for billing.corp.lab | Done. The certificate auto-renews. |
Local bundle downloads
Download Bundle (.zip) gets everything. The other buttons preview single files. Docker install scripts… covers hosts without Docker: apt and dnf Linux, generic Linux, Windows and macOS.
On the target host, unzip and follow the README from that folder: create the data folders, log in to the registry if told to, then docker compose pull and docker compose up -d. Update and stop steps are in the README too.
Deployment template
ARM Template is the exact template sent for an ACI deployment. Other targets show No saved template available for this deployment. Deployment Inputs lists every wizard choice, for any target.
Destroy and delete
Destroy All Resources (Destroy Service on Cloud Run) deletes what Arch built in the cloud and logs each item. It confirms first with This will DELETE the cloud resources created by this deployment. This cannot be undone. Continue? The resource group is kept, as is anything Arch didn't create, such as a pre-existing Container Apps environment.
Delete removes the deployment from Arch with its log, template and bundle. Cloud resources keep running.
All resources destroyed, then Delete.11Statuses
| Status | Badge | Means |
|---|---|---|
| pending | pending | Accepted, not started |
| running | running | Deploy in progress. Counts as Active. |
| succeeded | succeeded | Up. URL is on the detail view. |
| failed | failed | The last red log line has the reason |
| destroying | destroying | Removing cloud resources |
| destroyed | destroyed | Cloud resources gone. The record stays until Delete. |
| destroy_failed | destroy_failed | Something couldn't be removed. Check the log and finish in the cloud console. |
| interrupted | interrupted | Arch restarted mid-deploy. Check the cloud for what got built. |
The Deployments filter has no Destroyed or Interrupted option. Those show under All.
12Users
Admin only, Application sign-in only. A user can register apps, manage credentials, deploy, update and destroy; an admin also gets Users, Server Logs and Backup. Edit changes the role and nothing else, so a forgotten password means deleting and re-adding the account. Your own account can't be deleted.
Under Array sign-on the panel is hidden and shows User accounts are managed in Nectere Array. if reached.
13Server Logs
The last 500 lines of today's app-wide activity, tagged by area. Refresh loads newer lines.
14Backup and restore
- Export configuration downloads
necterearch-conf-YYYYMMDD-HHmmss.zipwith apps, credentials, deployments, logs and bundles. - Import configuration replaces everything, with no merge. It confirms with
This OVERWRITES all current configuration with the uploaded backup. Continue? - After
Import complete. Restart the app container to apply., restart from the Array tile with State › Restart. - Credentials in the backup are encrypted with the tile's
AZ_CREDENTIAL_KEY, so the zip holds no readable secrets. They only open on a tile with the same key value in its .env.
15Things to know
- Delete doesn't destroy. Destroy first.
- Inspect before deploying. No inspection means no port auto-fill, no volumes, and no storage on ACI later.
- Aftercare is ACI only. Other targets update by deploying again.
- A tag isn't a version. An ACI deployment of
lateststays on the recorded digest until an update is applied. - Cloud Run only pulls from Google's registries. Push GHCR or Docker Hub images to Artifact Registry first.
- Container Apps lose their disk unless volumes are picked in the wizard.
- HTTPS on ACI is a label. The image must serve TLS.
- Arch doesn't touch DNS.
- Old login subtitle.
GHCR → Azure Container Instancesis left over from the first version.
16Troubleshooting
| You see | Do this |
|---|---|
AADSTS7000215: Invalid client secret provided in a deploy log | The credential holds the secret ID instead of its value, or the secret expired. Paste the value and Test. The reported length should match. |
Login worked but subscription not reachable | Wrong Subscription ID, or no role on it. The Access report shows which. |
MANIFEST_UNKNOWN or manifest … is not found | The tag doesn't exist. Fix the app's Image URL and redeploy. |
Inspect fails with 401 (Unauthorized) | Add a token or the right credential to the app. |
| Port comes up empty in the wizard | Inspect the app, or type the port. |
| The Credential step is empty | Add an Azure Service Principal (Azure targets) or GCP Service Account (Cloud Run). |
Cloud Run log warns Cloud Run can only pull from Artifact Registry / GCR | Push the image to Artifact Registry, register that copy and deploy it. |
No cached paths. Go to GHCR Apps and click Inspect Image first. | Inspect the source app under Apps, then retry Add Volume Mount. |
| Bind Domain keeps failing | Check the TXT and CNAME records match exactly, give DNS time, bind again. |
A deployment sits on interrupted | Arch restarted mid-run. Check what got built, then Destroy or redeploy. |
A … job is already running for this deployment | Wait for the current action. Progress is in the deployment log. |
| Sent to the Log In page on an Array sign-on tile | The Array session expired. Reopen the tile from Array. |
| Credentials won't work after restoring a backup | This tile's AZ_CREDENTIAL_KEY differs from the source tile's. Copy the original value into its .env and restart it. |