Powered by TechShilpo
Your Linux server agent
Point a domain at a folder, get free HTTPS in seconds, and be told the moment something breaks — then have it fixed in plain English, instead of reading Nginx logs at 2 a.m.
$ curl -fsSL https://devserver.techshilpo.com/install.php | sh -s -- --host --public
One command. Ubuntu, Debian, Rocky, Alma — anything that runs Docker.
What it does
Everything a small server actually needs, without a control panel that takes the machine over.
→ Domains in one step
Add a domain, choose a folder, done. Static sites, PHP, reverse proxies and Node apps each get a configuration written for them — not a generic template you have to fix.
🔒 Free SSL, renewed for you
Let's Encrypt certificates issued and renewed automatically. It checks DNS before asking, so you don't burn a weekly rate limit on a typo.
◎ Real health, not just 200
A database error page returns 200. A blank white page returns 200. DevServer AI calls those what they are: broken.
✦ AI that explains, then asks
It reads your config, logs and container state, tells you the root cause — and what isn't wrong. Fixes are proposed for your approval, never applied behind your back.
◆ An assistant that can fix things
Ask "why is my site down?" and it reads the real config, logs, containers and your site's own files before answering — then repairs what it found, once you approve. Every file it rewrites is archived first, so an AI fix is always reversible. Works with a free Groq key and runs on their hardware, costing your server no memory at all.
⊞ Setup Domain, guided
One form: domain, Nginx or Apache, what the site runs on, which port, HTTPS. It lists the libraries the site needs and which are missing, shows every port already in use, and reports each step — including the ones that fail.
◷ Checks on a schedule
Watch your sites and containers on your own interval and get an email the moment something goes down — and when it comes back. One email per outage, not one per check. Containers found stopped can be started again automatically.
▤ The server at a glance
Memory, disk, CPU load and uptime with bars that turn amber before they turn red. Start, stop and restart Docker containers from the same page. No remove button — that one does not exist.
▣ Databases without the risk
Create a MySQL or MariaDB database, a user of its own, and grant access to that one database — by tick box, from a list that never includes DROP. There is no button to drop a database or remove a user, and no API route for it either.
↺ Nothing is ever lost
Removing a domain disables and archives it. The files, database, certificate and logs all stay exactly where they were.
⌘ UI, API and CLI
A dashboard for everyday work, a REST API for automation, and a
devserver command for the terminal. Same engine behind
all three.
It cannot delete your data
Not "it won't" — it can't. The destructive commands are blocked by the build, by the running process, and by a validator that checks every AI suggestion before you ever see it.
- ✓Your website files are never touched by a removal.
- ✓Your databases are never connected to, let alone dropped.
- ✓Your certificates survive disabling HTTPS, and keep renewing.
- ✓Your Nginx config is backed up before every change, and restored if the test fails.
- ✓Your logs are rotated, never erased.
If the correct fix genuinely is destructive, it tells you and shows you the command — and lets you decide. That is the whole design.
Up and running in about a minute
SSH into your server and run one command.
Install
# on your server — manages the server itself, dashboard reachable from your phone
curl -fsSL https://devserver.techshilpo.com/install.php | sh -s -- --host --public
--host manages this server: the Nginx, sites, certificates and
containers you already have. --public makes the dashboard reachable
over the network instead of localhost only. Leave both off and the agent
manages only its own container, with the dashboard on localhost.
Ports 80 and 443 already taken? The installer notices and picks free ones automatically. On a server under 2 GB of RAM it also installs the slim image, which leaves out Claude Code — the Assistant needs no memory here.
Prefer to read it first?
# download, read, then run — always fine by us
curl -fsSL https://devserver.techshilpo.com/install.php -o install.sh
less install.sh
sh install.sh
Open the dashboard
# installed with --public: the installer prints this URL when it finishes http://YOUR-SERVER-IP:8771/ # paste the access token it printed, and you are in — from any browser, # including your phone
The dashboard is protected by an access token whether or not it is public, and the token is required on every request.
Prefer it not exposed at all?
# install without --public, and the dashboard binds to localhost only curl -fsSL https://devserver.techshilpo.com/install.php | sh -s -- --host # then reach it through SSH from your own machine ssh -L 8771:127.0.0.1:8771 you@your-server # and open http://127.0.0.1:8771
This is the stricter option: nothing listens on a public interface, so the control panel cannot be reached at all without SSH access. Your sites stay public on 80 and 443 either way, as they should be.
What people use it for
The everyday jobs of running a Linux server, and where DevServer AI handles each one.
Add a domain to Nginx with free SSL
Point an A record at the server, open Setup Domain, and
tick "Enable HTTPS". The Nginx server block is generated, tested with
nginx -t, and a Let's Encrypt certificate is issued and
renewed for you.
Host a PHP site with the right FPM socket
The PHP-FPM socket is detected rather than hardcoded, so the version actually installed is the one wired up. Missing extensions — mysqli, gd, mbstring — are listed with the command to install them.
Put a domain in front of a Docker container
Choose the container and, if it publishes no host port, the Docker network it sits on. The proxy reaches it by name over Docker's own DNS, so nothing has to be exposed to the host at all.
Find out why a site returns 502
A 502 is almost always the backend, not Nginx. The assistant reads the error log, checks whether anything is listening on the proxy target, and inspects the container — then says which of those it was.
Get an email when a website goes down
Set a check interval and an address. Websites and containers are checked on that schedule, over HTTP and HTTPS, and you are emailed when something drops — and again when it comes back.
Renew a Let's Encrypt certificate before it expires
Renewal runs twice daily, the interval Let's Encrypt recommends. Certificates are listed with days remaining, and DNS is checked before a request so a typo does not burn a weekly rate limit.
Serve a site whose entry point is not index.php
Some apps start at home.php, app.php or
main.html. Set the index file in Setup Domain and nginx serves
it for the folder — instead of returning 403 because it looked for a file
that was never there.
Give an app its own database and user
One form makes the database, the user and the grant between them, scoped to that database only, and shows you the connection details once. The password can be generated for you.
Run commands on the server from a phone
A real shell in the browser, running as an unprivileged user rather than root, with every command written to the audit log and a confirmation prompt before anything destructive.
Restart a Docker container that keeps stopping
Start, stop and restart from the container list — or let scheduled checks start it again automatically. Nothing is ever removed, recreated or rebuilt.
Questions
Will this break the sites already on my server?
No. Install with --host and it manages the Nginx you already
have, adopting your existing sites where it can and leaving the rest
alone — nothing needs to stop. Without --host it runs its own
Nginx inside the container, and if ports 80 and 443 are taken it picks
free ones rather than fighting for them. Either way your existing
configuration files are never edited or removed.
Do I have to use the AI features?
No. Detection and diagnosis work with no AI configured at all — you still get “nothing is listening on port 8080, the container exited with an out-of-memory kill”. Adding a provider gives you a fuller written explanation on top.
Which AI providers can I use? Where does my data go?
Anthropic Claude by default, plus OpenAI, Google Gemini, Ollama, or any OpenAI-compatible endpoint. Ollama runs entirely on your own server, so nothing leaves the machine. With a hosted provider you choose exactly what may be sent — config, logs, page content — and IPs, emails and credentials are stripped first. Your key is encrypted on your server and never leaves it.
Can the AI change my server on its own?
No. Anything that changes the server — adding a domain, issuing a certificate, editing a file in your website — stops and shows you what it is about to do. It runs only after you approve it, and the approval comes from a separate request the model has no way to make. Anything destructive does not exist as a tool at all.
When it repairs a file, the previous version is copied to the Archive first. Every AI edit can be undone.
Can it tell me when a site goes down?
Yes. Set an interval, add your email, and it checks every managed
domain and every container on that schedule. You get one email when
something breaks and one when it recovers — not one per check.
Containers found stopped can be started again automatically, if you
tick that box. Add your SMTP details so the mail actually leaves the
server; most machines have no working sendmail.
Does it work with Apache, or only Nginx?
Both. Setup Domain detects which are installed and lets you pick.
Apache virtual hosts are generated with the same care as Nginx
configs: whole files, tested with configtest before any
reload, and backed up before anything is replaced.
Can it manage my MySQL databases?
It creates databases and users, and grants a user access to one specific
database by tick box. It lists what exists and who can reach what. You give
it the credentials of an admin database user once; the password is stored
with 0600 permissions and never sent back to the browser or put on a command
line where ps would show it.
It cannot drop a database, remove a user or empty a table — those are not buttons, not API routes, and DROP is not in the list of privileges it will grant to anyone. A destroyed database has no archive to restore from, which is exactly why the option does not exist.
Can I stop and start my Docker containers from the panel?
Start, stop and restart, yes. Remove, no — there is no button, no API route and no code path for it anywhere. Stopping a container is reversible with one click; removing one is not, and that is exactly where the line is drawn.
What happens to my data if I remove the container?
Nothing. Every piece of state lives in Docker volumes: your sites, certificates, website files and settings. Upgrading replaces the container and keeps the volumes. Re-running the installer is safe at any time.
What does it cost?
DevServer AI is free to run, and the certificates it issues are free from Let's Encrypt. If you connect a hosted AI provider, you pay that provider directly for what you use — there is a per-hour call limit in the settings so it cannot surprise you.