Level 1 — Dev
For development and tests, with test data. Do not put real customer data or real production passwords on a Dev server.
What you do
| # | Step | Where | Why |
|---|---|---|---|
| 1 | Save the passwords the installer showed at its end in your password manager. | The end of the install. Later: /etc/codehero/credentials.conf (root only). | You need them outside the server. |
| 2 | If the server came from a version before 5.7.0 and you still sign in with admin123, set your own password. | The page «Set your password» opens by itself after that sign-in. It asks for the one-time setup code the upgrade showed in a box (console: sudo cat /etc/codehero/panel-setup-code). | Older versions published that password. The code proves that it is you. |
| 3 | Set the panel’s name and the previews’ name. | Settings → Domains | The panel’s login never reaches a project page. |
| 4 | Get a real certificate for both names. | Settings → Certificates → Import Let's Encrypt | The browser checks that it talks to your server. |
| 5 | Read Do not lock yourself out. Then turn on 2FA. | Settings → Security → Enable 2FA | A stolen password alone does not open the panel. |
| 6 | Allow 9453 and 9454 only from your own IPs. | Your cloud’s firewall, or your router | Strangers do not reach the sign-in page. |
| 7 | Give each project a container. | Project → Container Isolation (LXC) → Create Container | A project’s code runs in its own hardened container. |
| 8 | Press Apply security on each container made before 5.7.0. | Project → Container tab | The upgrade does not harden old containers. |
| 9 | Use test data in tickets, previews and screenshots. | Your tickets | Ticket text, code and screenshots go to the ticket’s AI provider. |
| 10 | Put passwords and keys in the project’s Secrets panel. | Project → 🔐 Secrets | Never in a ticket’s text or in the chat. |
| 11 | Install updates. | Updates (the server, its containers, the AI tools) · Settings → 📦 Manual Update (CodeHero) | Known faults get fixed. |
| 12 | Make a backup and download it to another machine. | Project → Backup & Restore → Backup History → Download | A copy on the same server is lost with the server. |
What CodeHero already does
| Protection | Since |
|---|---|
| Every new install generates the panel’s and the databases’ passwords. There is no default password. | 5.7.0 |
| The upgrade replaces the old published database passwords with new random ones, only where they are still in use. A password you chose is never changed. | 5.7.0 |
A sign-in with the old panel password admin123 opens only «Set your password». It asks for a one-time setup code that only the upgrade’s output and the server’s root show (not asked after 2FA). | 5.7.0 |
| A new panel password ends every other sign-in, its open terminals and «Remember this device». The upgrade to 5.7.0 ends every sign-in from before. | 5.7.0 |
| Wrong passwords: 5 for one account from one address lock that account at that address for 30 minutes. 20 from one address lock that address. Other addresses are not locked. | 5.7.0 |
| 2FA with an authenticator app (TOTP). 5 wrong codes lock. The code page is valid for 5 minutes. | 2FA before 5.7.0; the limits 5.7.0 |
| The panel answers only over HTTPS. With a domain and a real certificate the browser keeps to HTTPS (HSTS). | 5.7.0 |
| nginx removes the panel’s login cookie from every request to a project. A change (POST, PUT, DELETE) is taken only from the panel’s own pages. | 5.7.0 |
| phpMyAdmin opens only from a signed-in panel. | before 5.7.0 |
| The server’s MySQL answers only on the server itself and to its containers. An upgraded server got it unless a database account needed another host; then the panel shows a notice and you decide. | before 5.7.0 |
| A preview needs its project’s preview key, on every request — this server’s own requests too. nginx checks it for the path it really serves. A ticket’s tools send only their own project’s key. | 5.7.0 |
New containers are hardened: AppArmor without nesting, a seccomp filter, the dangerous capabilities dropped, /proc/sys and /sys read only, no device of the server. | 5.7.0 |
| The AI’s file reads stay inside its project. Its commands are checked part by part. A search, copy or archive of the whole server or of every project’s folder is refused. | 5.7.0 |
| A ticket’s browser and web tools reach only its own project’s preview and container, checked on every redirect. The browser trusts only this server’s preview certificate; every other certificate is checked normally. | 5.7.0 |
| The containers of different projects cannot reach each other, unless a project allows another on its Container tab («Allow access from»). Each container can use only its own address: it cannot pretend to be another container or the server. | 5.7.0 |
The Logs menu’s diagnostic ZIP hides every secret value and key shape it knows ([hidden]). If a secret file could not be read, its manifest.json says "sanitized": "partial" and names the file. | 5.7.0 |
| Your registered secrets are kept out of what the AI sees. A ticket cannot read the platform’s provider keys. | before 5.7.0 |
| Every CodeHero release is signed. 📦 Manual Update installs only a signed release, and never an older version. | 5.7.0 |
| ZIP backups, snapshots and container images. A safety copy before every restore. | before 5.7.0 |
Limits
- The secrets filter cannot see a value shorter than 8 characters, or a value inside a screenshot.
- The previews port (
9867) is open to whoever your firewall lets in. The preview key protects each project.
What a reviewer will still ask
- Can you sign in when the phone with the authenticator is lost?
- There are no backup codes. Keep the 2FA «Manual entry code» offline, or add it to a second authenticator. The last resort is the console (see 2FA).
- Is there a copy outside the server?
- Only the copies you download. Backups to external storage (S3, SFTP) are planned, not built.
- Who can reach the panel?
- Whoever your firewall lets in. CodeHero does not filter the internet for you.
- Can one project harm another?
- Containers are hardened, and the containers of different projects cannot reach each other unless you allow it. They still share the server’s kernel. There are no memory or CPU limits per container yet. A project without a container runs its AI commands as
claudeon the server.