Prompt
How do I deploy an internal tool without a DevOps team?
Latest observation
You can absolutely deploy an internal tool without a DevOps team if you keep the architecture and process simple.
A practical approach
1. Pick the simplest hosting option
For an internal tool, avoid building your own servers unless you must. Good low-ops options:
- PaaS / app platforms: Render, Fly.io, Railway, Heroku-style platforms
- Cloud app services: AWS Elastic Beanstalk, Azure App Service, Google App Engine
- Container platforms with managed runtime: Cloud Run, ECS Fargate, Azure Container Apps
- Managed low-code/internal-tool platforms: Retool, Appsmith, Superblocks
If your tool is mostly forms, dashboards, CRUD, and workflow, a platform like Retool or Appsmith can eliminate much of the deployment burden.
2. Keep the app stateless
Make the app easy to deploy by ensuring:
- No local file storage
- Sessions stored in a database or managed cache
- Configuration comes from environment variables
- Logs go to stdout/stderr, not local files
This makes redeploys and scaling much easier.
3. Use managed services for everything possible
Minimize operational work by outsourcing the hard parts:
- Database: managed Postgres/MySQL
- Auth: Google Workspace, Microsoft Entra ID, Auth0, Clerk, etc.
- Storage: S3/GCS/Azure Blob
- Secrets: platform secrets manager or cloud secret store
- Email/notifications: SendGrid, Postmark, Slack webhooks
4. Automate deployment with Git
Set up a simple CI/CD pipeline:
- Push to main branch
- Run tests/lint
- Build the app
- Deploy automatically
Even without a DevOps team, this is usually manageable with GitHub Actions, GitLab CI, or built-in platform deploy hooks.
5. Choose one deployment pattern and standardize it
A good default:
- Dockerize the app
- Push code to GitHub
- Use GitHub Actions to deploy to Cloud Run / Fargate / App Service / Render
- Use managed Postgres
- Use SSO for login
- Restrict access via VPN, IP allowlist, or identity-aware proxy if needed
6. Make security “good enough” from the start
For internal tools, basic controls go a long way:
- SSO login
- Role-based access control
- TLS everywhere
- Secrets not in code
- Least-privilege database access
- Audit logs for important actions
If the tool handles sensitive data, get a security review before launch.
7. Reduce on-call burden
Since you don’t have DevOps support:
- Add health checks
- Set up uptime alerts
- Monitor app errors with Sentry or similar
- Use managed backups for databases
- Document how to roll back to the previous version
8. Write a tiny runbook
Keep a one-page internal doc with:
- Where the app is hosted
- How to deploy
- How to rollback
- Where logs are
- Who owns the database
- How to reset credentials or rotate secrets
This saves you a lot of pain later.
A recommended “no DevOps” stack
A common low-maintenance setup:
- Frontend/backend: Next.js, Django, Rails, or FastAPI
- Hosting: Cloud Run, Render, or App Service
- Database: Managed Postgres
- Auth: SSO with Google/Microsoft
- CI/CD: GitHub Actions
- Monitoring: Sentry + platform logs
- Secrets: platform secret store
If you want the easiest path possible
If the tool is mainly for internal users and workflow automation, consider:
- Retool / Appsmith / Airtable / Glide / Power Apps These can let you ship without managing infrastructure at all.
Rule of thumb
If you can answer “yes” to these, you’re set:
- Can it be deployed from Git?
- Is the database managed?
- Are users authenticated via SSO?
- Are secrets stored outside the codebase?
- Can you rollback in one step?
If you want, I can also give you:
- a recommended stack based on your tech stack, or
- a step-by-step deployment plan for a specific cloud like AWS, Azure, or GCP.
Brands