<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Deep Patel]]></title><description><![CDATA[Deep Patel is a DevOps engineer working with AWS, Azure, Terraform, Docker, and CI/CD. Open to remote cloud and deployment projects.]]></description><link>https://pdeep1506.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6ad65811601a561b218a348e/21ad6235-347f-4c67-81b8-cd1ec3b9ab30.png</url><title>Deep Patel</title><link>https://pdeep1506.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Tue, 27 Oct 2026 01:17:50 GMT</lastBuildDate><atom:link href="https://pdeep1506.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How I Deployed a JavaScript App on Affordable Hosting (and How to Choose the Right Host)]]></title><description><![CDATA[How I chose low-cost hosting, deployed a JavaScript app, and tested it after launch. A practical guide to picking the right host for your app.]]></description><link>https://pdeep1506.hashnode.dev/deploy-javascript-app-affordable-hosting</link><guid isPermaLink="true">https://pdeep1506.hashnode.dev/deploy-javascript-app-affordable-hosting</guid><category><![CDATA[JavaScript]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Devops articles]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[deployment]]></category><category><![CDATA[Cloud Computing]]></category><dc:creator><![CDATA[Deep Patel]]></dc:creator><pubDate>Mon, 26 Oct 2026 06:27:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ad65811601a561b218a348e/a0030703-4741-4ff4-b427-c34b321653a6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In June 2025, a client came to me with a finished JavaScript application and a simple request: get it online, keep the hosting cost low, and make sure it works. The job took about 8 hours over four days. Cheap hosting is easy to find. Cheap hosting that fits your app, stays online, and doesn’t surprise you with extra costs takes more thought. Here’s the process I followed.</p>
<p>The Challenge • An existing JavaScript application, already built • No hosting chosen yet • A small budget, so cost mattered as much as reliability • A requirement that the app work correctly after deployment, not just “upload and hope”</p>
<p>Step 1: Work Out What Kind of App It Is</p>
<p>The hosting choice depends on what you are deploying, so I started there:</p>
<p>• Static frontend only (React, Vue, plain JS built into HTML, CSS, and JS files): needs file hosting only • Node.js backend or API: needs a server that stays running • Database: needs a managed database or a server you maintain • Background jobs or file uploads: needs persistent storage and a process that doesn’t sleep</p>
<p>Step 2: Match the App to a Hosting Type</p>
<table>
<thead>
<tr>
<th>Hosting type</th>
<th>Good for</th>
<th>Watch out for</th>
</tr>
</thead>
<tbody><tr>
<td>Static hosts (Netlify, Vercel, Cloudflare Pages, GitHub Pages)</td>
<td>Frontend-only apps</td>
<td>Backend code needs functions or a separate server</td>
</tr>
<tr>
<td>App platforms (Render, Railway, <a href="http://Fly.io">Fly.io</a>)</td>
<td>Node apps with little setup</td>
<td>Some free tiers put servers to sleep after inactivity</td>
</tr>
<tr>
<td>Small VPS (AWS Lightsail, DigitalOcean, Hetzner)</td>
<td>Full control, predictable monthly price</td>
<td>You manage updates, security, and backups</td>
</tr>
<tr>
<td>Shared hosting</td>
<td>Very simple sites</td>
<td>Often poor fit for Node.js apps</td>
</tr>
</tbody></table>
<p>Prices and free-tier limits change often, so check each provider’s current pricing page before deciding.</p>
<p>What I chose:Firebase Hosting, with Cloud Firestore as the database.</p>
<p>Why: The app was a JavaScript frontend that already used Firestore, so keeping hosting and database in the same Firebase project meant fewer moving parts and one place for the client to manage everything. Firebase Hosting serves files over a global CDN with free HTTPS, which fit a small budget, and its free tier was enough for an app of this size. Deploying takes one command from the project folder, so future updates are quick and the client doesn’t need me for small changes.</p>
<p>Step 3: Deploy It Properly</p>
<p>• Environment variables: moved secrets such as API keys and database URLs out of the code and into the host’s settings</p>
<p>• Build and start commands: [your commands, for example npm run build and node server.js], tested before the first deploy</p>
<p>• Git-based deploys: connected the repository so pushing to main redeploys automatically, which means the client doesn’t need me for small updates • Domain and HTTPS: pointed DNS to the host and confirmed the SSL certificate was active</p>
<p>• CORS and API URLs: checked that the frontend talks to the right backend in production, not localhost</p>
<p>Step 4: Test After Deployment</p>
<p>“It deployed” isn’t the same as “it works.” I checked:</p>
<p>• Every main page and user flow on desktop and mobile</p>
<p>• Forms, logins, and API calls in the live environment</p>
<p>• Browser console and server logs for errors</p>
<p>• Page load speed</p>
<p>• That refreshing a page doesn’t return a 404 (a common single-page-app problem)</p>
<p>Step 5: Keep It Running</p>
<p>• Added a free uptime monitor so the client is alerted if the site goes down</p>
<p>• Confirmed how logs can be viewed</p>
<p>• Explained backups, if a database is involved</p>
<p>• Wrote a short handover note covering how to redeploy, where the environment variables live, and what the monthly cost should be</p>
<p>Hidden Costs to Check Before You Choose a Host</p>
<p>• Bandwidth or request limits</p>
<p>• Database storage and connection limits</p>
<p>• Build minutes Domain renewal</p>
<p>• Email sending (often not included)</p>
<p>• The price after a free trial or free tier ends</p>
<p>A host that looks cheaper per month can cost more once these are counted.</p>
<p>Lessons Learned</p>
<ol>
<li>Choose the host after you understand the app, not before.</li>
<li>The cheapest option isn’t always the best value. A server that sleeps can cost you users.</li>
<li>Automate deploys. Git-based deploys save the client money on every future change. Hand over documentation. A client who understands their setup is more likely to hire you again.\</li>
</ol>
<p>Need Something Similar?</p>
<p>I help teams and small businesses deploy JavaScript, MERN, and Laravel applications on AWS, Azure, and budget-friendly hosts, with security and CI/CD included. If you have an app that’s ready to go live, you can reach me on <a href="http://www.linkedin.com/in/pdeep1506">www.linkedin.com/in/pdeep1506</a> or <a href="mailto:pdeep1506.work@gmail.com">pdeep1506.work@gmail.com</a> .</p>
<p>Related: How I Deployed a Laravel + React App to Production on AWS :- <a href="https://pdeep1506.hashnode.dev/laravel-react-aws-production-deployment">https://pdeep1506.hashnode.dev/laravel-react-aws-production-deployment</a></p>
]]></content:encoded></item><item><title><![CDATA[How I Deployed a Laravel + React Application to Production on AWS]]></title><description><![CDATA[Step-by-step case study: how I set up AWS, a production LAMP stack, security testing, and AWS WAF to deploy a Laravel and React app safely.]]></description><link>https://pdeep1506.hashnode.dev/laravel-react-aws-production-deployment</link><guid isPermaLink="true">https://pdeep1506.hashnode.dev/laravel-react-aws-production-deployment</guid><category><![CDATA[AWS]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Laravel]]></category><category><![CDATA[React]]></category><category><![CDATA[websecurity]]></category><dc:creator><![CDATA[Deep Patel]]></dc:creator><pubDate>Mon, 19 Oct 2026 18:02:27 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ad65811601a561b218a348e/f874ac44-2eda-4963-877c-e39f17db464a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Getting an application “working on my machine” is one milestone. Getting it safely into production is a different job. This summer, I took on a project where a development team had finished their Laravel application and needed it live on AWS, secured and production-ready. Here is how it went and what I learned.</p>
<h3>The Challenge</h3>
<p>The client’s team had built the application and needed someone to own the infrastructure side:</p>
<ul>
<li><p>AWS environment setup</p>
</li>
<li><p>Production LAMP stack configuration for the Laravel backend</p>
</li>
<li><p>Deployment of the React frontend</p>
</li>
<li><p>Security testing of the application</p>
</li>
<li><p>A web application firewall (WAF) in front of everything</p>
</li>
</ul>
<p>The project ran from July 2025 to early September 2025. It took longer than first planned because the scope grew along the way, which is common in real deployments.</p>
<h3>Step 1: Laying the AWS Foundation</h3>
<p>Before touching the application, I set up the cloud environment:</p>
<ul>
<li><p><strong>Networking:</strong> a VPC with public and private subnets, so only what needs to be internet-facing is exposed</p>
</li>
<li><p><strong>Compute:</strong> EC2 instances for the application servers</p>
</li>
<li><p><strong>Access control:</strong> IAM roles with least-privilege permissions instead of shared credentials</p>
</li>
<li><p><strong>Security groups:</strong> tight inbound rules, allowing only the ports the app requires</p>
</li>
</ul>
<h3>Step 2: Production LAMP Stack for Laravel</h3>
<p>Laravel runs well on Linux, Apache, MySQL, and PHP, but production needs more than <code>composer install</code>:</p>
<ul>
<li><p>Apache virtual hosts configured with the document root pointing to <code>/public</code></p>
</li>
<li><p>PHP-FPM tuned for production, with debug mode off</p>
</li>
<li><p>A properly secured <code>.env</code> file, never exposed or committed</p>
</li>
<li><p>Correct file permissions for <code>storage</code> and <code>bootstrap/cache</code></p>
</li>
<li><p>Queue workers and the scheduler managed with Supervisor and cron</p>
</li>
<li><p>Database access locked down, with credentials separated from the app server</p>
</li>
<li><p>HTTPS enforced with a valid SSL certificate</p>
</li>
</ul>
<p>The goal is a setup that survives reboots, deploys cleanly, and can be reproduced.</p>
<h3>Step 3: Deploying the React Application</h3>
<p>The React frontend was built into static assets and served alongside the backend. Key points:</p>
<ul>
<li><p>Environment-specific API URLs set at build time</p>
</li>
<li><p>Compressed, cached static assets</p>
</li>
<li><p>Proper routing fallbacks so client-side routes don’t return 404s on refresh</p>
</li>
<li><p>CORS configured so the frontend and API talk to each other, and nobody else</p>
</li>
</ul>
<h3>Step 4: Security Testing</h3>
<p>Before calling anything production-ready, I tested the application the way an attacker would think about it. I checked for:</p>
<ul>
<li><p>Common vulnerabilities such as SQL injection, XSS, and CSRF</p>
</li>
<li><p>Exposed files and directories, such as <code>.env</code>, <code>.git</code>, and backups</p>
</li>
<li><p>Weak or missing security headers</p>
</li>
<li><p>Outdated packages and server software</p>
</li>
<li><p>Misconfigured permissions and open ports</p>
</li>
</ul>
<p>Each finding was documented and fixed, then retested. Laravel’s built-in protections help a lot, but they don’t cover server misconfiguration. That part is the infrastructure owner’s job.</p>
<h3>Step 5: Adding a Web Application Firewall</h3>
<p>The last layer was an AWS WAF in front of the application. It filters malicious traffic before it reaches the servers:</p>
<ul>
<li><p>Managed rule sets covering common attacks (OWASP-style threats)</p>
</li>
<li><p>Rate limiting to slow brute-force and bot traffic</p>
</li>
<li><p>Blocking of known bad inputs and suspicious patterns</p>
</li>
</ul>
<p>I started in monitoring mode to check for false positives, then switched to blocking once the rules were tuned. Going straight to blocking can break legitimate users.</p>
<h3>Lessons Learned</h3>
<ol>
<li><p><strong>Scope changes are normal.</strong> Deployments uncover things nobody planned for. Clear communication matters more than a perfect initial estimate.</p>
</li>
<li><p><strong>Security is a layer cake.</strong> Network rules, server hardening, application checks, and a WAF each catch different problems.</p>
</li>
<li><p><strong>Document everything.</strong> A deployment the client can’t understand or repeat is only half delivered.</p>
</li>
<li><p><strong>Staging first.</strong> Test the full flow before production, every time.</p>
</li>
</ol>
<h3>Final Thoughts</h3>
<p>The client left a 4.9/5 review and said they’d hire me again.</p>
<h3>Need something similar?</h3>
<p>I help teams take finished applications to secure, production-ready infrastructure on AWS and Azure: server setup, CI/CD, security hardening, and WAF. If you have a Laravel, Node.js, or React app ready to go live, you can reach me on <a href="http://www.linkedin.com/in/pdeep1506">www.linkedin.com/in/pdeep1506</a> or <a href="mailto:pdeep1506.work@gmail.com">pdeep1506.work@gmail.com</a> .</p>
]]></content:encoded></item></channel></rss>