> ## Documentation Index
> Fetch the complete documentation index at: https://docs.instapods.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshooting

> Solutions to common InstaPods issues.

## SSH Issues

### "REMOTE HOST IDENTIFICATION HAS CHANGED"

This happens when a new pod reuses an SSH port previously used by a deleted pod.

**Fix**: Remove the stale host key:

```bash theme={null}
ssh-keygen -R "[nbg1-1.instapods.app]:PORT"
```

Then reconnect. The CLI handles this automatically when you delete a pod via `instapods pods delete`.

### "Permission denied (publickey)"

Your SSH key isn't authorized on the pod.

**Fix**: Add your key:

```bash theme={null}
instapods ssh-keys add my-app
```

Or add it via the dashboard's SSH tab.

### SSH connection timeout

The pod may be stopped, or the SSH port might be blocked.

**Fix**:

1. Check pod status: `instapods pods get my-app`
2. If stopped, start it: `instapods pods start my-app`
3. Verify you're using the correct port

## Pod Issues

### Pod stuck in "creating" state

Rarely, a pod creation can get stuck if the underlying container fails to start.

**Fix**: Delete the pod and create a new one:

```bash theme={null}
instapods pods delete my-app -f
instapods pods create my-app --preset nodejs
```

### Application not responding on the public URL

Check that your application is listening on the correct port:

| Preset  | Required Port                   |
| ------- | ------------------------------- |
| Static  | 80 (handled by nginx)           |
| PHP     | 80 (handled by nginx + PHP-FPM) |
| Node.js | **3000**                        |
| Python  | **8000**                        |

For Node.js and Python, your app must bind to `0.0.0.0` (not `127.0.0.1` or `localhost`):

```javascript theme={null}
// Node.js — correct
app.listen(3000, '0.0.0.0');

// Node.js — incorrect (won't be accessible)
app.listen(3000, 'localhost');
```

```python theme={null}
# Python — correct
app.run(host='0.0.0.0', port=8000)

# Python — incorrect
app.run(host='127.0.0.1', port=8000)
```

### Pod shows "suspended" status

Your team's subscription is suspended due to unpaid invoices.

**Fix**: Go to **Billing** in the dashboard and pay the outstanding invoice. After payment, manually start your pods.

## Service Issues

### Service stuck in "installing"

Service installation runs in the background and typically takes 8–15 seconds. If it's been more than a minute:

1. Check the service status: `instapods services list my-app`
2. If it shows "error", the installation failed — check the error message
3. Try removing and reinstalling:
   ```bash theme={null}
   # Via API
   curl -X DELETE https://app.instapods.com/api/pods/my-app/services/mysql \
     -H "Authorization: Bearer YOUR_TOKEN"

   instapods services add my-app -s mysql -w
   ```

### "Plan does not allow services"

You're on the Launch plan, which doesn't support database services.

**Fix**: Upgrade to the Build plan or higher from the billing page.

## File Issues

### Files not appearing after upload

If you uploaded files via SCP or the CLI but they don't appear in the dashboard file browser:

1. Verify the file path — the file browser starts from the pod's app root (`/home/instapod/app`)
2. Check file permissions: `instapods exec my-app -- ls -la /home/instapod/app/`
3. Make sure you uploaded to the correct directory (PHP uses `/home/instapod/app/public` for web files)

### "Permission denied" when writing files

Files in the app directory should be owned by the `instapod` user. If they're owned by `root`:

```bash theme={null}
instapods exec my-app -- sudo chown -R instapod:instapod /home/instapod/app
```

## Domain Issues

### Domain verification failing

1. Check that the DNS record has propagated: `dig CNAME app.example.com` or `dig TXT _instapods.app.example.com`
2. Ensure the record matches exactly what InstaPods expects (shown on the domains page)
3. Wait a few minutes and try again — DNS propagation can take time

### SSL certificate not provisioning

After domain verification, SSL provisioning runs via certbot. If it fails:

1. Ensure the domain points to the correct server IP
2. Check that ports 80 and 443 are accessible
3. Try removing and re-adding the domain

## Getting Help

If your issue isn't covered here:

* Check the pod's **Events** tab for error details
* Check pod **Logs** for application-level errors
* Contact support through the dashboard
