<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ferry Dermawan</title>
    <description>The latest articles on DEV Community by Ferry Dermawan (@aiferrydermawan).</description>
    <link>https://dev.to/aiferrydermawan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3296505%2Fd6fd10a6-f77d-4d82-9152-98b048b99a8b.jpg</url>
      <title>DEV Community: Ferry Dermawan</title>
      <link>https://dev.to/aiferrydermawan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aiferrydermawan"/>
    <language>en</language>
    <item>
      <title>How to Update Your S3 URLs to CloudFront URLs</title>
      <dc:creator>Ferry Dermawan</dc:creator>
      <pubDate>Mon, 26 Jan 2026 14:46:40 +0000</pubDate>
      <link>https://dev.to/aiferrydermawan/how-to-update-your-s3-urls-to-cloudfront-urls-b5d</link>
      <guid>https://dev.to/aiferrydermawan/how-to-update-your-s3-urls-to-cloudfront-urls-b5d</guid>
      <description>&lt;p&gt;Amazon Web Services (AWS) provides &lt;strong&gt;Amazon S3&lt;/strong&gt; for file storage and &lt;strong&gt;Amazon CloudFront&lt;/strong&gt; as a Content Delivery Network (CDN) to accelerate content delivery. Replacing your S3 file URLs with CloudFront URLs is an essential step to ensure your files load faster, more securely, and more professionally.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll walk through the complete process—from configuring CloudFront to updating your S3 file URLs.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why Should You Replace S3 URLs With CloudFront URLs?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before we dive into the setup steps, here are the main reasons why CloudFront is highly recommended over directly serving files from S3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster load times&lt;/strong&gt; thanks to global edge locations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More stable performance&lt;/strong&gt; with content cached close to your users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stronger security&lt;/strong&gt; with Origin Access Control (OAC), HTTPS, and signed URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More professional URLs&lt;/strong&gt;, like &lt;code&gt;https://cdn.yourdomain.com/image.jpg&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lower data transfer costs&lt;/strong&gt; when configured correctly.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Steps to Replace S3 URLs with CloudFront URLs&lt;/strong&gt;
&lt;/h1&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;1. Prepare Your S3 Bucket&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Make sure your S3 bucket contains the files you want to deliver through CloudFront.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checklist:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure the bucket has the correct permissions.&lt;/li&gt;
&lt;li&gt;Upload all required files.&lt;/li&gt;
&lt;li&gt;You can keep &lt;strong&gt;Block Public Access&lt;/strong&gt; enabled, because CloudFront will access the bucket using OAC.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;2. Create a CloudFront Distribution (New UI – 5 Steps)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When you click &lt;strong&gt;Create distribution&lt;/strong&gt;, CloudFront now displays a new 5-step wizard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Step 1 – Choose a plan&lt;/li&gt;
&lt;li&gt;Step 2 – Get started&lt;/li&gt;
&lt;li&gt;Step 3 – Specify origin&lt;/li&gt;
&lt;li&gt;Step 4 – Enable security&lt;/li&gt;
&lt;li&gt;Step 5 – Review and create&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below is the detailed walkthrough for each step.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1 – Choose a plan&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You’ll see several plan options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Free – $0/month&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pro – $15/month&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Business – $200/month&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Premium – $1000/month&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And at the bottom:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pay as you go (Pricing varies with usage)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For standard CDN usage (websites, apps, static assets), the best option is:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Pay as you go&lt;/strong&gt; — no fixed monthly cost, pay only for what you use.&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Next&lt;/strong&gt; to continue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Fn1hqrcegw%2Farticles%2Fupdate-s3-urls-to-cloudfront%2Fstep-01.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Fn1hqrcegw%2Farticles%2Fupdate-s3-urls-to-cloudfront%2Fstep-01.webp" alt="Step 01" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2 – Get started&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here you define the basic configuration of your distribution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fields to complete:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Distribution name&lt;/strong&gt;
Use a clear, identifiable name, for example:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   s3-ferry-example
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Description (optional)&lt;/strong&gt;&lt;br&gt;
You may add a short note, or leave it empty.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Distribution type&lt;/strong&gt;&lt;br&gt;
Choose:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;✅ &lt;strong&gt;Single website or app&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;(Use Multi-tenant only for SaaS platforms with shared architecture across multiple domains.)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Domain (optional)&lt;/strong&gt;
If you have a Route 53 domain and want to attach a custom CDN domain immediately, you may enter it here.
If your DNS is hosted elsewhere, you can skip this for now and set it up later using your DNS provider + ACM SSL.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Fn1hqrcegw%2Farticles%2Fupdate-s3-urls-to-cloudfront%2Fstep-02.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Fn1hqrcegw%2Farticles%2Fupdate-s3-urls-to-cloudfront%2Fstep-02.webp" alt="Step 02" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3 – Specify origin&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is where you connect CloudFront to your S3 bucket.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Origin type
&lt;/h3&gt;

&lt;p&gt;Select:&lt;br&gt;
✅ &lt;strong&gt;Amazon S3&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. S3 origin
&lt;/h3&gt;

&lt;p&gt;Choose or type your S3 bucket endpoint, for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ferry-example.s3.ap-southeast-1.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also use &lt;strong&gt;Browse S3&lt;/strong&gt; to select your bucket.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Origin path (optional)
&lt;/h3&gt;

&lt;p&gt;If you want CloudFront to serve only a specific folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/path
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Examples: &lt;code&gt;/uploads&lt;/code&gt;, &lt;code&gt;/assets/images&lt;/code&gt;&lt;br&gt;
Leave this empty to serve the entire bucket.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Allow private S3 bucket access to CloudFront
&lt;/h3&gt;

&lt;p&gt;This is critical for security.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Allow private S3 bucket access to CloudFront – Recommended&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This ensures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your bucket remains &lt;strong&gt;private&lt;/strong&gt; (Block Public Access ON)&lt;/li&gt;
&lt;li&gt;CloudFront automatically updates bucket policies so only this distribution can access it&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Origin &amp;amp; cache settings
&lt;/h3&gt;

&lt;p&gt;Default settings are ideal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Origin settings&lt;/strong&gt; → ✅ &lt;em&gt;Use recommended origin settings&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache settings&lt;/strong&gt; → ✅ &lt;em&gt;Use recommended cache settings tailored to serving S3 content&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Fn1hqrcegw%2Farticles%2Fupdate-s3-urls-to-cloudfront%2Fstep-03.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Fn1hqrcegw%2Farticles%2Fupdate-s3-urls-to-cloudfront%2Fstep-03.webp" alt="Step 03" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step 4 – Enable security&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This step configures Web Application Firewall (WAF) protections.&lt;/p&gt;

&lt;p&gt;You have two choices:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. ✅ &lt;strong&gt;Enable security protections&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Protection against common web vulnerabilities&lt;/li&gt;
&lt;li&gt;Malicious traffic filtering&lt;/li&gt;
&lt;li&gt;IP blocking&lt;/li&gt;
&lt;li&gt;Optional Layer 7 DDoS protection (Recommended)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Best for dynamic apps, APIs, login pages, or any high-traffic service.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. ❌ &lt;strong&gt;Do not enable security protections&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Good option if you're serving &lt;strong&gt;static files only&lt;/strong&gt; and want to reduce cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use monitor mode&lt;/strong&gt; — view what would be blocked before enforcing it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click &lt;strong&gt;Next&lt;/strong&gt; after choosing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Fn1hqrcegw%2Farticles%2Fupdate-s3-urls-to-cloudfront%2Fstep-04.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Fn1hqrcegw%2Farticles%2Fupdate-s3-urls-to-cloudfront%2Fstep-04.webp" alt="Step 04" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step 5 – Review and create&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;CloudFront will display a summary of your configuration:&lt;/p&gt;

&lt;h3&gt;
  
  
  General configuration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Distribution name&lt;/li&gt;
&lt;li&gt;Billing (e.g., Pay-as-you-go)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Origin
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;S3 origin (bucket + region)&lt;/li&gt;
&lt;li&gt;Origin path&lt;/li&gt;
&lt;li&gt;CloudFront access: &lt;strong&gt;Yes&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cache settings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Using recommended S3-optimized cache settings&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Whether WAF protections are enabled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If everything looks correct:&lt;/p&gt;

&lt;p&gt;✅ Click &lt;strong&gt;Create distribution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Fn1hqrcegw%2Farticles%2Fupdate-s3-urls-to-cloudfront%2Fstep-05.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Fn1hqrcegw%2Farticles%2Fupdate-s3-urls-to-cloudfront%2Fstep-05.webp" alt="Step 05" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wait a few minutes until the status becomes &lt;strong&gt;Enabled&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Updating your S3 URLs to CloudFront is one of the most effective ways to improve website speed, reliability, and security. The process is simple: create a CloudFront distribution, link it with your S3 bucket, and replace your S3 URLs with your new CloudFront domain.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
    </item>
    <item>
      <title>How to Create an AWS S3 Bucket: Step-by-Step Guide for Beginners</title>
      <dc:creator>Ferry Dermawan</dc:creator>
      <pubDate>Thu, 03 Jul 2025 03:20:33 +0000</pubDate>
      <link>https://dev.to/aiferrydermawan/how-to-create-an-aws-s3-bucket-step-by-step-guide-for-beginners-31g3</link>
      <guid>https://dev.to/aiferrydermawan/how-to-create-an-aws-s3-bucket-step-by-step-guide-for-beginners-31g3</guid>
      <description>&lt;p&gt;Amazon S3 (Simple Storage Service) is a popular cloud storage service from AWS that allows users to store and retrieve any amount of data at any time. Whether you're hosting static websites, storing backups, or serving media content, S3 is a reliable and scalable solution.&lt;/p&gt;

&lt;p&gt;In this guide, you'll learn how to create an S3 bucket step-by-step using the AWS Console.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Log in to AWS Console
&lt;/h2&gt;

&lt;p&gt;Start by logging in to your AWS account via the &lt;a href="https://aws.amazon.com/console/" rel="noopener noreferrer"&gt;AWS Management Console&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpldqpdq61h6jzdbgwxa2.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpldqpdq61h6jzdbgwxa2.webp" alt="image 1" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Open the Amazon S3 Service
&lt;/h2&gt;

&lt;p&gt;After logging in, search for &lt;strong&gt;S3&lt;/strong&gt; in the search bar at the top and click the &lt;strong&gt;S3&lt;/strong&gt; service.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fug2cifaxz1ep9l0zgmql.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fug2cifaxz1ep9l0zgmql.webp" alt="image 2" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Create a New Bucket
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Click the &lt;strong&gt;Create bucket&lt;/strong&gt; button.
&lt;/li&gt;
&lt;li&gt;Enter a unique &lt;strong&gt;Bucket name&lt;/strong&gt; (must be globally unique).
&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Object Ownership&lt;/strong&gt;, choose &lt;strong&gt;ACLs disabled (recommended)&lt;/strong&gt; to simplify permissions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faicrxyon5aodjiksd7w0.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faicrxyon5aodjiksd7w0.webp" alt="image 3" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Configure Encryption
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Scroll down to the &lt;strong&gt;Default encryption&lt;/strong&gt; section.
&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Amazon S3 managed keys (SSE-S3)&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Enable the &lt;strong&gt;Bucket Key&lt;/strong&gt; to reduce the cost of encryption requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwt94oinms67advjbx5ad.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwt94oinms67advjbx5ad.webp" alt="image 4" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Finalize and View Your Bucket
&lt;/h2&gt;

&lt;p&gt;After completing the setup, your new bucket will appear in the S3 bucket list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzsrl6qwgzw577olwpr40.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzsrl6qwgzw577olwpr40.webp" alt="image 5" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click the bucket name to open it and start uploading files, setting permissions, or enabling static website hosting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdvzkel2rnai7nbon3ykb.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdvzkel2rnai7nbon3ykb.webp" alt="image 6" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Setting up an S3 bucket is simple and essential for many AWS-powered applications. With just a few clicks, you can start storing data securely in the cloud. Don't forget to manage access policies and monitor your storage usage for optimal performance and cost.&lt;/p&gt;

&lt;p&gt;Need help with setting permissions or enabling static site hosting? Stay tuned for our upcoming guides on advanced S3 configurations!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
    </item>
    <item>
      <title>How to Secure Nginx with SSL/TLS HTTPS Using Let’s Encrypt on Ubuntu</title>
      <dc:creator>Ferry Dermawan</dc:creator>
      <pubDate>Wed, 02 Jul 2025 02:21:27 +0000</pubDate>
      <link>https://dev.to/aiferrydermawan/how-to-secure-nginx-with-ssltls-https-using-lets-encrypt-on-ubuntu-372b</link>
      <guid>https://dev.to/aiferrydermawan/how-to-secure-nginx-with-ssltls-https-using-lets-encrypt-on-ubuntu-372b</guid>
      <description>&lt;p&gt;Enabling HTTPS on your website is crucial for security, SEO, and user trust. Thankfully, Let’s Encrypt offers free SSL/TLS certificates that are easy to set up on an Nginx server. In this tutorial, we’ll walk through how to secure your Nginx server using Let’s Encrypt on Ubuntu.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Check Your Website Before SSL
&lt;/h2&gt;

&lt;p&gt;Before adding SSL, your website is likely still served over plain HTTP.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;code&gt;http://jadifullstack.id&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcnanb9gpke4yj0kocck.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcnanb9gpke4yj0kocck.webp" alt="Image 1" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 2: Install Certbot and the Nginx Plugin
&lt;/h2&gt;

&lt;p&gt;Make sure your system is up to date:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;certbot python3-certbot-nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Certbot is the tool that will communicate with Let’s Encrypt and configure Nginx automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Request an SSL Certificate
&lt;/h2&gt;

&lt;p&gt;Run the following command to request and install your SSL certificate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;certbot &lt;span class="nt"&gt;--nginx&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; jadifullstack.id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If successful, you'll see a confirmation message:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Successfully received certificate"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0bttt0rpbgm1f29g4x8b.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0bttt0rpbgm1f29g4x8b.webp" alt="Image 2" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Verify HTTPS is Working
&lt;/h2&gt;

&lt;p&gt;After a successful setup, your website will now be accessible via HTTPS.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;code&gt;https://jadifullstack.id&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5yeiqnzef2zijjslcx60.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5yeiqnzef2zijjslcx60.webp" alt="Image 3" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check that your browser shows a secure padlock and that HTTP requests are redirected to HTTPS.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 5: Enable Auto Renewal
&lt;/h2&gt;

&lt;p&gt;Let’s Encrypt certificates expire every 90 days. Certbot makes it easy to auto-renew them.&lt;/p&gt;

&lt;p&gt;You can verify the auto-renewal configuration with this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;certbot renew &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To schedule auto-renewal using &lt;code&gt;cron&lt;/code&gt;, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crontab &lt;span class="nt"&gt;-e&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add the following line to renew the certificate daily at noon:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;0 12 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; /usr/bin/certbot renew &lt;span class="nt"&gt;--quiet&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxf97mwtj231fafi5g9lc.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxf97mwtj231fafi5g9lc.webp" alt="Image 4" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Now your Ubuntu VPS running Nginx is secured with HTTPS using a free SSL certificate from Let’s Encrypt. This simple setup improves trust, SEO ranking, and data protection. Always monitor your certificate expiration or use Certbot's auto-renewal to avoid disruptions.&lt;/p&gt;

&lt;p&gt;Want to take it further? Consider setting up a redirect from HTTP to HTTPS or enabling HTTP/2 for better performance!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>How to Use Elastic IP Address with AWS EC2 Instance: Complete Guide</title>
      <dc:creator>Ferry Dermawan</dc:creator>
      <pubDate>Tue, 01 Jul 2025 02:01:47 +0000</pubDate>
      <link>https://dev.to/aiferrydermawan/how-to-use-elastic-ip-address-with-aws-ec2-instance-complete-guide-3ae0</link>
      <guid>https://dev.to/aiferrydermawan/how-to-use-elastic-ip-address-with-aws-ec2-instance-complete-guide-3ae0</guid>
      <description>&lt;p&gt;When launching an EC2 instance, the public IP address assigned to it can change if the instance is stopped and restarted. To avoid this, AWS provides &lt;strong&gt;Elastic IP addresses&lt;/strong&gt;—a static IPv4 address designed for dynamic cloud computing.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll show you how to allocate and associate an Elastic IP address with your EC2 instance.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Allocate a New Elastic IP Address
&lt;/h2&gt;

&lt;p&gt;From the AWS Management Console, go to the &lt;strong&gt;EC2 Dashboard&lt;/strong&gt;, then select &lt;strong&gt;Elastic IPs&lt;/strong&gt; from the sidebar. Click on &lt;strong&gt;Allocate Elastic IP address&lt;/strong&gt; and confirm.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbtowmzqvclouxvkx4ob.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbtowmzqvclouxvkx4ob.webp" alt="Image 1" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Associate the Elastic IP with Your EC2 Instance
&lt;/h2&gt;

&lt;p&gt;Once the IP is allocated, select it from the list and click &lt;strong&gt;Actions → Associate Elastic IP address&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the &lt;strong&gt;Resource type&lt;/strong&gt;, choose &lt;strong&gt;Instance&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Instance&lt;/strong&gt;, select the EC2 instance you want to assign the IP to.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Associate&lt;/strong&gt; to finalize the configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkb6lrgu02vklyfzz8hr.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkb6lrgu02vklyfzz8hr.webp" alt="Image 2" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Verify IP Assignment
&lt;/h2&gt;

&lt;p&gt;Go to your &lt;strong&gt;EC2 Instances dashboard&lt;/strong&gt; and confirm that the public IP has been updated with your new Elastic IP.&lt;/p&gt;

&lt;p&gt;This IP will remain the same even if you stop and start the instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8hb7x5kumieqcndq7w7.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8hb7x5kumieqcndq7w7.webp" alt="Image 3" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Elastic IP addresses are essential for maintaining a consistent public IP for your cloud services, especially for production environments. Remember that AWS charges for unused Elastic IPs, so always release any IP addresses that are no longer in use.&lt;/p&gt;

&lt;p&gt;With this setup, your EC2 instance is now more stable and accessible under a static IP.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
    </item>
    <item>
      <title>How to Point Your Domain to AWS Route 53 Name Servers</title>
      <dc:creator>Ferry Dermawan</dc:creator>
      <pubDate>Mon, 30 Jun 2025 08:37:11 +0000</pubDate>
      <link>https://dev.to/aiferrydermawan/how-to-point-your-domain-to-aws-route-53-name-servers-d7d</link>
      <guid>https://dev.to/aiferrydermawan/how-to-point-your-domain-to-aws-route-53-name-servers-d7d</guid>
      <description>&lt;p&gt;If you're hosting a website or application on AWS, using Amazon Route 53 as your DNS provider gives you full control over routing traffic. In this guide, you'll learn how to move your domain's name servers to Route 53.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Create a Public Hosted Zone in Route 53
&lt;/h2&gt;

&lt;p&gt;Go to the AWS Route 53 Console. Click on &lt;strong&gt;Hosted zones&lt;/strong&gt; in the sidebar, then choose &lt;strong&gt;Create hosted zone&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enter your &lt;strong&gt;domain name&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Public hosted zone&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create hosted zone&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fusuaktk0vy6nw2envetg.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fusuaktk0vy6nw2envetg.webp" alt="Image 1" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: View Your Route 53 NS Records
&lt;/h2&gt;

&lt;p&gt;After creating the hosted zone, Route 53 automatically generates several records, including the &lt;strong&gt;NS (Name Server)&lt;/strong&gt; records. These are the name servers you need to use for your domain.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3y6c5wcrq719o9d3coty.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3y6c5wcrq719o9d3coty.webp" alt="Image 2" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Update Name Servers on Your Domain Registrar (GoDaddy Example)
&lt;/h2&gt;

&lt;p&gt;Log in to your domain registrar (e.g., GoDaddy), go to your domain settings, and choose &lt;strong&gt;Manage DNS&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scroll to &lt;strong&gt;Nameservers&lt;/strong&gt; and choose: &lt;strong&gt;I'll use my own nameservers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Copy and paste the NS records from Route 53 into the fields.&lt;/li&gt;
&lt;li&gt;Save the changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq3oe3xohnb8e3pof8msu.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq3oe3xohnb8e3pof8msu.webp" alt="Image 3" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: DNS changes can take up to 48 hours to fully propagate.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Using AWS Route 53 as your DNS provider helps ensure high availability, fast response times, and tight integration with other AWS services. After updating your nameservers, you can manage DNS records directly from the Route 53 dashboard.&lt;/p&gt;

&lt;p&gt;Be sure to monitor your DNS configuration and test it using tools like &lt;code&gt;dig&lt;/code&gt;, &lt;code&gt;nslookup&lt;/code&gt;, or online DNS checkers to verify the update was successful.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
    </item>
    <item>
      <title>How to Connect a GoDaddy Domain to a Linux VPS Server</title>
      <dc:creator>Ferry Dermawan</dc:creator>
      <pubDate>Sat, 28 Jun 2025 23:41:54 +0000</pubDate>
      <link>https://dev.to/aiferrydermawan/how-to-connect-a-godaddy-domain-to-a-linux-vps-server-1289</link>
      <guid>https://dev.to/aiferrydermawan/how-to-connect-a-godaddy-domain-to-a-linux-vps-server-1289</guid>
      <description>&lt;p&gt;If you’ve purchased a domain on GoDaddy and host your application on a VPS, pointing your domain to your server allows users to access your website easily. This guide shows you how to connect a GoDaddy domain to a Linux VPS (using Nginx as the web server).&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Get Your VPS IP Address
&lt;/h2&gt;

&lt;p&gt;Connect to your VPS using SSH and run the following command to find your public IP address:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl ifconfig.me
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This IP address will be used in your DNS settings on GoDaddy. Initially, your Laravel application or Nginx welcome page can be accessed via this IP in the browser, such as &lt;code&gt;http://123.456.789.123&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Later, after DNS is properly set up, your site will be accessible using the domain name instead, such as &lt;code&gt;http://jadifullstack.id&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm80z3dtsn2crmz9s0qw0.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm80z3dtsn2crmz9s0qw0.webp" alt="Image 1" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Access Your Domain Settings in GoDaddy
&lt;/h2&gt;

&lt;p&gt;Log in to your &lt;a href="https://www.godaddy.com/" rel="noopener noreferrer"&gt;GoDaddy account&lt;/a&gt; and navigate to &lt;strong&gt;My Products&lt;/strong&gt;. Find the domain you want to configure and click &lt;strong&gt;DNS&lt;/strong&gt; or &lt;strong&gt;Manage DNS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmyzrtfoi25ci3g73t8mc.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmyzrtfoi25ci3g73t8mc.webp" alt="Image 2" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Set Up an A Record
&lt;/h2&gt;

&lt;p&gt;In the DNS Management page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find the &lt;strong&gt;A Record&lt;/strong&gt; section&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;Host&lt;/strong&gt; to &lt;code&gt;@&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;Points to&lt;/strong&gt; to your VPS IP address&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;TTL&lt;/strong&gt; to &lt;code&gt;600 seconds&lt;/code&gt; (or default)&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6rrynh31illrkujovb5.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6rrynh31illrkujovb5.webp" alt="Image 3" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: DNS propagation may take a few minutes up to 48 hours.&lt;/p&gt;

&lt;p&gt;Once this is complete, your server will no longer need to be accessed by IP. Instead, you can use your domain (e.g., &lt;code&gt;jadifullstack.id&lt;/code&gt;) to open your Laravel or Nginx site.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Verify It Works
&lt;/h2&gt;

&lt;p&gt;If Nginx is correctly configured on your VPS (as explained in our &lt;a href="https://dev.to/blog/deploy-laravel-to-vps"&gt;Laravel deployment guide&lt;/a&gt;), your Laravel site should now be accessible from your GoDaddy domain.&lt;/p&gt;

&lt;p&gt;Initially: &lt;code&gt;http://123.456.789.123&lt;/code&gt;&lt;br&gt;
Now: &lt;code&gt;http://jadifullstack.id&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faveg5so75ib24p7q6s2h.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faveg5so75ib24p7q6s2h.webp" alt="Image 4" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;You've successfully pointed your GoDaddy domain to your VPS. Now, your server can be accessed through a human-readable domain name. For production, don’t forget to set up HTTPS using Let’s Encrypt and monitor your DNS settings for consistency.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>How to Deploy a Laravel Application to a VPS: Complete Step-by-Step Guide</title>
      <dc:creator>Ferry Dermawan</dc:creator>
      <pubDate>Sat, 28 Jun 2025 04:43:43 +0000</pubDate>
      <link>https://dev.to/aiferrydermawan/how-to-deploy-a-laravel-application-to-a-vps-complete-step-by-step-guide-3ba1</link>
      <guid>https://dev.to/aiferrydermawan/how-to-deploy-a-laravel-application-to-a-vps-complete-step-by-step-guide-3ba1</guid>
      <description>&lt;p&gt;Deploying your Laravel application to a VPS gives you full control over your environment, performance, and security. In this guide, you'll learn how to deploy Laravel from GitHub to a VPS using the LEMP stack (Linux, Nginx, MySQL, PHP).&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Connect to Your VPS and Update the System
&lt;/h2&gt;

&lt;p&gt;Start by connecting to your VPS via SSH. Once connected, update your package list and upgrade the system:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3c7pmaktwlcrmyd7h5w.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3c7pmaktwlcrmyd7h5w.webp" alt="Image 1" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Install PHP and Required Extensions
&lt;/h2&gt;

&lt;p&gt;Install PHP along with the extensions required by Laravel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;php php-cli php-common php-mbstring php-xml php-bcmath php-curl php-mysql unzip curl php-zip php-tokenizer php-fileinfo php-fpm &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check the installed PHP version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected output: PHP 8.3 (or newer)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe7z8arj7c28uy6ino4hr.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe7z8arj7c28uy6ino4hr.webp" alt="Image 2" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Install MySQL and Create a Database
&lt;/h2&gt;

&lt;p&gt;Install MySQL Server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;mysql-server &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Access the MySQL shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;mysql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Form8k2xvl1vfc42l6sg7.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Form8k2xvl1vfc42l6sg7.webp" alt="Image 3" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a database and a user for your Laravel app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;laravel_db&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;USER&lt;/span&gt; &lt;span class="s1"&gt;'laravel_user'&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;'localhost'&lt;/span&gt; &lt;span class="n"&gt;IDENTIFIED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;'your_secure_password'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;ALL&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;laravel_db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="s1"&gt;'laravel_user'&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;'localhost'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;FLUSH&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;EXIT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 4: Set Up SSH Key to Pull From GitHub
&lt;/h2&gt;

&lt;p&gt;To pull your Laravel project from GitHub, add your VPS SSH key to GitHub:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generate SSH key (if not yet):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; rsa &lt;span class="nt"&gt;-b&lt;/span&gt; 4096 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"your_email@example.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Copy the key:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/id_rsa.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Paste it into &lt;strong&gt;GitHub → Settings → SSH and GPG keys&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0a13uqv3mvj4hx77mqsx.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0a13uqv3mvj4hx77mqsx.webp" alt="Image 4" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Clone the Laravel Project and Configure
&lt;/h2&gt;

&lt;p&gt;Clone the repository into your web directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git@github.com:yourusername/your-laravel-project.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Navigate to the project folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;your-laravel-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install dependencies and configure the app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nb"&gt;install
cp&lt;/span&gt; .env.example .env
php artisan key:generate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update the &lt;code&gt;.env&lt;/code&gt; file with your database credentials:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_DATABASE=laravel_db
DB_USERNAME=laravel_user
DB_PASSWORD=your_secure_password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run Laravel migrations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php artisan migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your project uses frontend assets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set permissions for the storage and bootstrap directories:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; www-data:www-data &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 775 storage bootstrap/cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 6: Configure Nginx
&lt;/h2&gt;

&lt;p&gt;Create a new server block for Laravel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/nginx/sites-available/your-laravel-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste the following configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;yourdomain.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="n"&gt;/var/www/your-laravel-project/public&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;index&lt;/span&gt; &lt;span class="s"&gt;index.php&lt;/span&gt; &lt;span class="s"&gt;index.html&lt;/span&gt; &lt;span class="s"&gt;index.htm&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="n"&gt;/index.php?&lt;/span&gt;&lt;span class="nv"&gt;$query_string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt; &lt;span class="sr"&gt;\.php$&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="nc"&gt;snippets/fastcgi-php&lt;/span&gt;&lt;span class="s"&gt;.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;fastcgi_pass&lt;/span&gt; &lt;span class="s"&gt;unix:/run/php/php8.3-fpm.sock&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;fastcgi_param&lt;/span&gt; &lt;span class="s"&gt;SCRIPT_FILENAME&lt;/span&gt; &lt;span class="nv"&gt;$document_root$fastcgi_script_name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;fastcgi_params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt; &lt;span class="sr"&gt;/\.ht&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;deny&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enable the site and restart Nginx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /etc/nginx/sites-available/your-laravel-project /etc/nginx/sites-enabled/
&lt;span class="nb"&gt;sudo &lt;/span&gt;nginx &lt;span class="nt"&gt;-t&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl reload nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 7: Access Your Laravel Application
&lt;/h2&gt;

&lt;p&gt;Once everything is configured, visit your server's public IP or domain to view the Laravel dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5g0m5tvnj54ykbu5zubr.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5g0m5tvnj54ykbu5zubr.webp" alt="Image 5" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Congratulations! You've successfully deployed your Laravel application to a VPS. This setup gives you complete control over the environment and scales better for production. You can now secure your server with SSL and configure auto-deployment for better CI/CD.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>devops</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>How to Create an AWS EC2 Instance: Beginner’s Guide to Cloud Hosting</title>
      <dc:creator>Ferry Dermawan</dc:creator>
      <pubDate>Fri, 27 Jun 2025 04:06:02 +0000</pubDate>
      <link>https://dev.to/aiferrydermawan/how-to-create-an-aws-ec2-instance-beginners-guide-to-cloud-hosting-51a0</link>
      <guid>https://dev.to/aiferrydermawan/how-to-create-an-aws-ec2-instance-beginners-guide-to-cloud-hosting-51a0</guid>
      <description>&lt;p&gt;Amazon EC2 (Elastic Compute Cloud) lets you run virtual servers in the cloud. In this beginner-friendly guide, you’ll learn how to launch your first EC2 instance on AWS using Ubuntu and Free Tier resources.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Log In to the AWS Console
&lt;/h2&gt;

&lt;p&gt;Go to the &lt;a href="https://aws.amazon.com/console/" rel="noopener noreferrer"&gt;AWS Console&lt;/a&gt; and log in with your credentials.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx22sjecqo0f0i1seb8qk.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx22sjecqo0f0i1seb8qk.webp" alt="Image 0" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnemkr8oe40x9d3dgox78.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnemkr8oe40x9d3dgox78.webp" alt="Image 1" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Search for EC2 Service
&lt;/h2&gt;

&lt;p&gt;In the search bar at the top, type &lt;code&gt;EC2&lt;/code&gt; and click on the EC2 service.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbdncdhjm9fff3t9n9yv3.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbdncdhjm9fff3t9n9yv3.webp" alt="Image 2" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Launch a New EC2 Instance
&lt;/h2&gt;

&lt;p&gt;Click the &lt;strong&gt;Launch Instances&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiotkjhi79gg9ebliw0jj.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiotkjhi79gg9ebliw0jj.webp" alt="Image 3" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Choose an Amazon Machine Image (AMI)
&lt;/h2&gt;

&lt;p&gt;Choose &lt;strong&gt;Ubuntu&lt;/strong&gt; or a similar Free Tier-eligible AMI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qln358ka8oxktlu1ceo.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qln358ka8oxktlu1ceo.webp" alt="Image 4" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Choose an Instance Type
&lt;/h2&gt;

&lt;p&gt;Select &lt;strong&gt;t2.micro&lt;/strong&gt;, which is eligible for the AWS Free Tier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuyd7zce9tseik43pzscb.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuyd7zce9tseik43pzscb.webp" alt="Image 5" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6: Configure Instance Details
&lt;/h2&gt;

&lt;p&gt;Set the number of instances to &lt;strong&gt;1&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3euvohsmfupre8xbt5c.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3euvohsmfupre8xbt5c.webp" alt="Image 6" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 7: Add Storage
&lt;/h2&gt;

&lt;p&gt;Keep the default of &lt;strong&gt;8 GiB&lt;/strong&gt;, which is sufficient for basic applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwj4s7ufjl1lultypj09g.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwj4s7ufjl1lultypj09g.webp" alt="Image 7" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 8: Create a Key Pair
&lt;/h2&gt;

&lt;p&gt;Create a new key pair to access the server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type: RSA&lt;/li&gt;
&lt;li&gt;Format: &lt;code&gt;.pem&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Download and save the key securely.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffslmblok4myytozg8s1j.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffslmblok4myytozg8s1j.webp" alt="Image 8" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 9: Configure Security Group
&lt;/h2&gt;

&lt;p&gt;Add inbound rules for the following protocols:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSH (port 22)&lt;/li&gt;
&lt;li&gt;HTTP (port 80)&lt;/li&gt;
&lt;li&gt;HTTPS (port 443)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then click &lt;strong&gt;Launch Instances&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fatm9rvw8uyetvsc2dsjx.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fatm9rvw8uyetvsc2dsjx.webp" alt="Image 9" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 10: View Running Instances
&lt;/h2&gt;

&lt;p&gt;Once launched, you will see your EC2 instance listed on the dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsoqn0a1zocotozl1xxub.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsoqn0a1zocotozl1xxub.webp" alt="Image 10" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 11: Connect to Your Instance via SSH
&lt;/h2&gt;

&lt;p&gt;Open your terminal and connect to your instance using the &lt;code&gt;.pem&lt;/code&gt; key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;400 your-key.pem
ssh &lt;span class="nt"&gt;-i&lt;/span&gt; your-key.pem ubuntu@your-ec2-public-ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;your-ec2-public-ip&lt;/code&gt; with the public IPv4 address of your EC2 instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6q6i68v7x6yxgzyoxl1.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6q6i68v7x6yxgzyoxl1.webp" alt="Image 11" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;You’ve successfully launched and connected to an EC2 instance using the AWS Free Tier. From here, you can deploy web apps, run servers, and explore AWS cloud services. Be sure to stop or terminate unused instances to avoid unexpected charges.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
    </item>
    <item>
      <title>How to Set Up PhpStorm for Laravel Development with Pint and Prettier</title>
      <dc:creator>Ferry Dermawan</dc:creator>
      <pubDate>Thu, 26 Jun 2025 10:40:47 +0000</pubDate>
      <link>https://dev.to/aiferrydermawan/how-to-set-up-phpstorm-for-laravel-development-with-pint-and-prettier-19e1</link>
      <guid>https://dev.to/aiferrydermawan/how-to-set-up-phpstorm-for-laravel-development-with-pint-and-prettier-19e1</guid>
      <description>&lt;p&gt;PhpStorm is a powerful IDE for Laravel development. With the right setup, you can automate code formatting using &lt;strong&gt;Laravel Pint&lt;/strong&gt; for PHP and &lt;strong&gt;Prettier&lt;/strong&gt; for frontend files (like JavaScript, CSS, and Blade). This guide walks you through configuring both tools to run automatically on save.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 0: Install and Configure Pint &amp;amp; Prettier
&lt;/h2&gt;

&lt;p&gt;First, install &lt;strong&gt;Laravel Pint&lt;/strong&gt; as a development dependency:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require laravel/pint &lt;span class="nt"&gt;--dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, create a &lt;code&gt;pint.json&lt;/code&gt; file at the root of your project (optional, but recommended for custom rules):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"preset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"laravel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"exclude"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"vendor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"node_modules"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, install &lt;strong&gt;Prettier&lt;/strong&gt; and its plugins for Tailwind CSS and Blade:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; prettier prettier-plugin-tailwindcss @shufo/prettier-plugin-blade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a &lt;code&gt;.prettierrc&lt;/code&gt; file at the root of your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"semi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"singleQuote"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"printWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"plugins"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"prettier-plugin-tailwindcss"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"@shufo/prettier-plugin-blade"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You are now ready to continue with PhpStorm setup.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Open Your Laravel Project in PhpStorm
&lt;/h2&gt;

&lt;p&gt;Ensure that your Laravel project has Pint and Prettier already installed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqv44ht5ubf2c2dwrhewz.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqv44ht5ubf2c2dwrhewz.webp" alt="Image 1" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Open Settings → Actions on Save
&lt;/h2&gt;

&lt;p&gt;Go to &lt;code&gt;Preferences&lt;/code&gt; (or &lt;code&gt;Settings&lt;/code&gt; on Windows/Linux) → &lt;strong&gt;Actions on Save&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0fpjvax1ip6eh16me08.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0fpjvax1ip6eh16me08.webp" alt="Image 2" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Configure Reformat Code (Uncheck PHP)
&lt;/h2&gt;

&lt;p&gt;Enable &lt;strong&gt;Reformat Code&lt;/strong&gt;, but uncheck &lt;strong&gt;PHP&lt;/strong&gt; to avoid conflict with Pint.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpmu8rmedynjuf112qofr.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpmu8rmedynjuf112qofr.webp" alt="Image 3" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Add a Custom File Watcher for Laravel Pint
&lt;/h2&gt;

&lt;p&gt;Go to &lt;code&gt;Settings → Tools → File Watchers&lt;/code&gt;, then click the &lt;strong&gt;+&lt;/strong&gt; icon to add a new watcher.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyn8hq865rutpssi1phap.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyn8hq865rutpssi1phap.webp" alt="Image 4" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use the following configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Name: Pint
File type: PHP
Program: $ProjectFileDir$/vendor/bin/pint
Arguments: $FileRelativePath$
Output paths to refresh: $FileRelativePath$
Working directory: $ProjectFileDir$
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Under &lt;strong&gt;Advanced Options&lt;/strong&gt;, only check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Trigger the watcher on external changes&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1geweqlgl1uss72mzbw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1geweqlgl1uss72mzbw.webp" alt="Image 5" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Enable Prettier Integration
&lt;/h2&gt;

&lt;p&gt;Check the box for &lt;strong&gt;Run Prettier&lt;/strong&gt; and click &lt;strong&gt;Configure&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0gfjwqvsmvhh6d2x8gxp.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0gfjwqvsmvhh6d2x8gxp.webp" alt="Image 6" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enable &lt;strong&gt;Automatic Prettier configuration&lt;/strong&gt;.&lt;br&gt;
Add &lt;code&gt;*.blade.php&lt;/code&gt; to the list of files that Prettier should process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1ewckfu08hhr67m758t.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1ewckfu08hhr67m758t.webp" alt="Image 7" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make sure Prettier appears with its version number under &lt;strong&gt;Actions on Save&lt;/strong&gt; to confirm it’s working.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ry4ieb02yytchbh9d6e.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ry4ieb02yytchbh9d6e.webp" alt="Image 8" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;With Laravel Pint and Prettier configured in PhpStorm, your code stays clean and consistent every time you save. This setup ensures a smooth development workflow, especially when collaborating in a team environment. You can also explore additional automation like PHPStan or ESLint integration for more robust quality checks.&lt;/p&gt;

</description>
      <category>laravel</category>
    </item>
  </channel>
</rss>
