<?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>Forem: Oluwaseyi Asowo</title>
    <description>The latest articles on Forem by Oluwaseyi Asowo (@bluezeus).</description>
    <link>https://forem.com/bluezeus</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%2F1261555%2Fe167bd9d-a6fb-4957-a9b9-d25cb00334c7.png</url>
      <title>Forem: Oluwaseyi Asowo</title>
      <link>https://forem.com/bluezeus</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/bluezeus"/>
    <language>en</language>
    <item>
      <title>Deploy WordPress Locally with Vagrant + LAMP Learn how to spin up a VM, set up Apache, MySQL, PHP, and install WordPress - all from scratch. 📘 Clean, beginner-friendly, and practical. Check it out.</title>
      <dc:creator>Oluwaseyi Asowo</dc:creator>
      <pubDate>Wed, 18 Jun 2025 22:42:57 +0000</pubDate>
      <link>https://forem.com/bluezeus/deploy-wordpress-locally-with-vagrant-lamp-learn-how-to-spin-up-a-vm-set-up-apache-mysql-php-pe</link>
      <guid>https://forem.com/bluezeus/deploy-wordpress-locally-with-vagrant-lamp-learn-how-to-spin-up-a-vm-set-up-apache-mysql-php-pe</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/bluezeus/deploying-a-wordpress-site-on-apache-server-with-vagrant-lamp-stack-5ago" class="crayons-story__hidden-navigation-link"&gt;Deploying a WordPress Site on Apache Server with Vagrant (LAMP Stack)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/bluezeus" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F1261555%2Fe167bd9d-a6fb-4957-a9b9-d25cb00334c7.png" alt="bluezeus profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/bluezeus" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Oluwaseyi Asowo
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Oluwaseyi Asowo
                
              
              &lt;div id="story-author-preview-content-2592540" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/bluezeus" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F1261555%2Fe167bd9d-a6fb-4957-a9b9-d25cb00334c7.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Oluwaseyi Asowo&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/bluezeus/deploying-a-wordpress-site-on-apache-server-with-vagrant-lamp-stack-5ago" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 16 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/bluezeus/deploying-a-wordpress-site-on-apache-server-with-vagrant-lamp-stack-5ago" id="article-link-2592540"&gt;
          Deploying a WordPress Site on Apache Server with Vagrant (LAMP Stack)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/wordpress"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;wordpress&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/vagrant"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;vagrant&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/linux"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;linux&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/bluezeus/deploying-a-wordpress-site-on-apache-server-with-vagrant-lamp-stack-5ago" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;5&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/bluezeus/deploying-a-wordpress-site-on-apache-server-with-vagrant-lamp-stack-5ago#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              2&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>wordpress</category>
      <category>vagrant</category>
      <category>linux</category>
    </item>
    <item>
      <title>Deploying a WordPress Site on Apache Server with Vagrant (LAMP Stack)</title>
      <dc:creator>Oluwaseyi Asowo</dc:creator>
      <pubDate>Mon, 16 Jun 2025 15:49:32 +0000</pubDate>
      <link>https://forem.com/bluezeus/deploying-a-wordpress-site-on-apache-server-with-vagrant-lamp-stack-5ago</link>
      <guid>https://forem.com/bluezeus/deploying-a-wordpress-site-on-apache-server-with-vagrant-lamp-stack-5ago</guid>
      <description>&lt;p&gt;🎉 Hello guys I'm back again and in this guide, we’re spinning up a full WordPress server using &lt;strong&gt;Vagrant&lt;/strong&gt; on an &lt;strong&gt;Ubuntu box&lt;/strong&gt; powered by the mighty &lt;strong&gt;LAMP stack&lt;/strong&gt; (Linux, Apache, MySQL, PHP). Whether you're just getting started or practicing your automation skills, this walk-through is designed to be as fun as it is functional.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧰 Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before you begin make sure you’ve got the following installed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.vagrantup.com/downloads" rel="noopener noreferrer"&gt;✅ Vagrant&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.virtualbox.org/wiki/Downloads" rel="noopener noreferrer"&gt;✅ VirtualBox&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Basic knowledge of Linux terminal (GIT)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔧 Step 1: Spin Up Your Vagrant Box
&lt;/h2&gt;

&lt;p&gt;Open your terminal, let’s create a new project folder and initialize our Ubuntu environment:&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;mkdir &lt;/span&gt;wordpress
&lt;span class="nb"&gt;cd &lt;/span&gt;wordpress
vagrant init ubuntu/focal64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now at this point a vagrant file has been created, lets tweak your &lt;code&gt;Vagrantfile&lt;/code&gt;. First run &lt;code&gt;vim Vagrantfile&lt;/code&gt; and edit your script like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Vagrant&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;box&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ubuntu/focal64"&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;network&lt;/span&gt; &lt;span class="s2"&gt;"private_network"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;ip: &lt;/span&gt;&lt;span class="s2"&gt;"192.168.56.18"&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;network&lt;/span&gt; &lt;span class="s2"&gt;"public_network"&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;boot_timeout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;

  &lt;span class="c1"&gt;#300 seconds =5mins&lt;/span&gt;

 &lt;span class="c1"&gt;#Set RAM to 2gb to the VM&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;provider&lt;/span&gt; &lt;span class="s2"&gt;"virtualbox"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;vb&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="n"&gt;vb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"2048"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Base Image&lt;/em&gt;&lt;/strong&gt;: Ubuntu 20.04 LTS (ubuntu/focal64)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Networking:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Private network with static IP 192.168.56.18 (host-only access)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Public network (bridged mode for LAN access)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Boot Timeout:&lt;/em&gt;&lt;/strong&gt; 5 minutes (300 seconds) to allow for slower VM startups&lt;/p&gt;




&lt;p&gt;Next let's bring up the VM and ssh into it. On your terminal run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Vagrant up &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ssh

&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%2Fl4t5lrbid4rqbvp0f5fp.png" 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%2Fl4t5lrbid4rqbvp0f5fp.png" alt="Vagrant up &amp;amp;&amp;amp; ssh" width="800" height="330"&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%2Feogy7scy2kmkctwrlphd.png" 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%2Feogy7scy2kmkctwrlphd.png" alt="Vagrant up &amp;amp;&amp;amp; ssh" width="588" height="164"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All set? Let’s automate the rest! 💻&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Step 2: Installing LAMP Dependencies
&lt;/h2&gt;

&lt;p&gt;Now switcht to root user &lt;code&gt;sudo -i&lt;/code&gt; and run the following commands to update packages and install everything WordPress needs:&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="c"&gt;# Update packages&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update

&lt;span class="c"&gt;# Install Apache, MySQL, PHP, and required modules&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;apache2 ghostscript libapache2-mod-php mysql-server php php-bcmath php-curl php-imagick php-intl php-json php-mbstring php-mysql php-xml php-zip &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You just brought the entire LAMP stack to life.🔥&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Step 3: Download &amp;amp; Install WordPress
&lt;/h2&gt;

&lt;p&gt;Now let’s grab the latest version of WordPress and put it in the right place:&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 mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /srv/www
&lt;span class="nb"&gt;sudo chown &lt;/span&gt;www-data: /srv/www
curl https://wordpress.org/latest.tar.gz | &lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; www-data &lt;span class="nb"&gt;tar &lt;/span&gt;zx &lt;span class="nt"&gt;-C&lt;/span&gt; /srv/www
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We’re staging WordPress in &lt;code&gt;/srv/www&lt;/code&gt; so it’s ready for Apache to serve.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌐 Step 4: Configure Apache for WordPress
&lt;/h2&gt;

&lt;p&gt;Set up a virtual host for WordPress so it’s properly served from Apache. First open the Apache conf file in vim.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vim /etc/apache2/sites-available/wordpress.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then paste the following content&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight apache"&gt;&lt;code&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nl"&gt;VirtualHost&lt;/span&gt;&lt;span class="sr"&gt; *:80&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="nc"&gt;DocumentRoot&lt;/span&gt; /srv/www/wordpress
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nl"&gt;Directory&lt;/span&gt;&lt;span class="sr"&gt; /srv/www/wordpress&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="nc"&gt;Options&lt;/span&gt; &lt;span class="ss"&gt;FollowSymLinks&lt;/span&gt;
        &lt;span class="nc"&gt;AllowOverride&lt;/span&gt; &lt;span class="ss"&gt;Limit&lt;/span&gt; &lt;span class="ss"&gt;Options&lt;/span&gt; &lt;span class="ss"&gt;FileInfo&lt;/span&gt;
        &lt;span class="nc"&gt;DirectoryIndex&lt;/span&gt; index.php
        &lt;span class="nc"&gt;Require&lt;/span&gt; &lt;span class="ss"&gt;all&lt;/span&gt; granted
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nl"&gt;Directory&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nl"&gt;Directory&lt;/span&gt;&lt;span class="sr"&gt; /srv/www/wordpress/wp-content&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="nc"&gt;Options&lt;/span&gt; &lt;span class="ss"&gt;FollowSymLinks&lt;/span&gt;
        &lt;span class="nc"&gt;Require&lt;/span&gt; &lt;span class="ss"&gt;all&lt;/span&gt; granted
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nl"&gt;Directory&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span class="nl"&gt;VirtualHost&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save and close the file: &lt;code&gt;Esc&lt;/code&gt;&lt;code&gt;:wq&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next enable the site and modules, and reload Apache:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight apache"&gt;&lt;code&gt;&lt;span class="c"&gt;# Enable the new site and modules&lt;/span&gt;
sudo a2ensite wordpress
sudo a2enmod rewrite
sudo a2dissite 000-default

&lt;span class="c"&gt;# Apply changes&lt;/span&gt;
sudo systemctl reload apache2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And yeah, Apache is ready with WordPress! 🌐&lt;/p&gt;




&lt;h2&gt;
  
  
  🛢️ Step 5: Configure MySQL
&lt;/h2&gt;

&lt;p&gt;Let’s set up the database and user that WordPress will use:&lt;/p&gt;

&lt;p&gt;Connect to MySQL:&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;span class="nt"&gt;-u&lt;/span&gt; root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run these commands to create a database and user for WordPress (replace admin123 with your own password):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysql &lt;span class="nt"&gt;-u&lt;/span&gt; root &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'CREATE DATABASE wordpress;'&lt;/span&gt;
mysql &lt;span class="nt"&gt;-u&lt;/span&gt; root &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'CREATE USER wordpress@localhost IDENTIFIED BY "admin123";'&lt;/span&gt;
mysql &lt;span class="nt"&gt;-u&lt;/span&gt; root &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON wordpress.* TO wordpress@localhost;'&lt;/span&gt;
mysql &lt;span class="nt"&gt;-u&lt;/span&gt; root &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'FLUSH PRIVILEGES;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exit MySQL &lt;code&gt;quit;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You’ve just given WordPress its own playground in MySQL. 🎯&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Step 6: Connect WordPress to the Database
&lt;/h2&gt;

&lt;p&gt;Now, let’s wire up the &lt;code&gt;wp-config.php&lt;/code&gt;:&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; &lt;span class="nt"&gt;-u&lt;/span&gt; www-data &lt;span class="nb"&gt;cp&lt;/span&gt; /srv/www/wordpress/wp-config-sample.php /srv/www/wordpress/wp-config.php
&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; www-data &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s/database_name_here/wordpress/'&lt;/span&gt; /srv/www/wordpress/wp-config.php
&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; www-data &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s/username_here/wordpress/'&lt;/span&gt; /srv/www/wordpress/wp-config.php
&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; www-data &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s/password_here/admin123/'&lt;/span&gt; /srv/www/wordpress/wp-config.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔐 &lt;strong&gt;Important:&lt;/strong&gt; Replace the secret keys with real, secure ones from this link:&lt;br&gt;&lt;br&gt;
&lt;a href="https://api.wordpress.org/secret-key/1.1/salt/" rel="noopener noreferrer"&gt;WordPress Secret Keys&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paste them into &lt;code&gt;wp-config.php&lt;/code&gt; to boost your site's security. 🛡️&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; &lt;span class="nt"&gt;-u&lt;/span&gt; www-data vim /srv/www/wordpress/wp-config.php
&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%2Fgu3lx5pqec61j3qhc5a6.png" 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%2Fgu3lx5pqec61j3qhc5a6.png" alt="security key" width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ensure to save and close.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎨 Step 7: Final WordPress Setup (via Browser)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;To set up on the browser we need to get the Ip Address by running &lt;code&gt;ip addr show&lt;/code&gt;&lt;br&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%2Fmgvxu2jummjhn3t43a24.png" 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%2Fmgvxu2jummjhn3t43a24.png" alt="Public" width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We will be using the public Ip to access it on the web. Complete the WordPress installer:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose a site title
&lt;/li&gt;
&lt;li&gt;Create an admin username and password
&lt;/li&gt;
&lt;li&gt;Enter your email
&lt;/li&gt;
&lt;li&gt;And click Install! 🎉&lt;/li&gt;
&lt;/ul&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%2Fpyiam3aw22pmtlaaqc10.png" 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%2Fpyiam3aw22pmtlaaqc10.png" alt="wp" width="800" height="521"&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%2F62u6y9uzgmzt9kuz7js6.png" 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%2F62u6y9uzgmzt9kuz7js6.png" alt="wp2" width="800" height="620"&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%2F395hq7buc2a0e8sfybpn.png" 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%2F395hq7buc2a0e8sfybpn.png" alt="wp3n" width="800" height="427"&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%2Frh2a9gt70shw0k3kbk1p.png" 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%2Frh2a9gt70shw0k3kbk1p.png" alt="wp4" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ That’s a Wrap!
&lt;/h2&gt;

&lt;p&gt;You’ve successfully automated the deployment of a full LAMP-based WordPress site using Vagrant! 🙌&lt;/p&gt;

&lt;p&gt;🛠️ &lt;strong&gt;Skills Gained&lt;/strong&gt;&lt;br&gt;
VM Provisioning with Vagrant: Learned how to spin up and configure a reproducible Ubuntu virtual machine using Vagrant and VirtualBox.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; LAMP Stack Setup: Installed Apache, MySQL, and PHP to run web apps.&lt;/li&gt;
&lt;li&gt; WordPress Deployment: Set up WordPress manually on a local server.&lt;/li&gt;
&lt;li&gt; Apache Virtual Hosts: Configured Apache to point to the correct website folder.&lt;/li&gt;
&lt;li&gt; MySQL Setup: Created a secure database and user for WordPress.&lt;/li&gt;
&lt;li&gt; Security: Secured WordPress with unique keys in the config file.&lt;/li&gt;
&lt;li&gt; Local Environment: Learned how to build and manage local dev setups.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;so yeah keep experimenting, break things, and build again - that’s the DevOps way 💥&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>vagrant</category>
      <category>linux</category>
    </item>
    <item>
      <title>After hosting a static site the traditional way with EC2, I'm moving serverless! Join me as I show you how to host a website easily on Amazon S3 - no servers, no stress. Let's go! #AWS #DevOps</title>
      <dc:creator>Oluwaseyi Asowo</dc:creator>
      <pubDate>Mon, 28 Apr 2025 00:17:51 +0000</pubDate>
      <link>https://forem.com/bluezeus/after-hosting-a-static-site-the-traditional-way-with-ec2-im-moving-serverless-join-me-as-i-show-4k99</link>
      <guid>https://forem.com/bluezeus/after-hosting-a-static-site-the-traditional-way-with-ec2-im-moving-serverless-join-me-as-i-show-4k99</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/bluezeus/hosting-a-static-website-on-aws-s3after-ec2-2pok" class="crayons-story__hidden-navigation-link"&gt;🚀 Hosting a Static Website on AWS S3(After EC2)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/bluezeus" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F1261555%2Fe167bd9d-a6fb-4957-a9b9-d25cb00334c7.png" alt="bluezeus profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/bluezeus" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Oluwaseyi Asowo
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Oluwaseyi Asowo
                
              
              &lt;div id="story-author-preview-content-2439533" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/bluezeus" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F1261555%2Fe167bd9d-a6fb-4957-a9b9-d25cb00334c7.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Oluwaseyi Asowo&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/bluezeus/hosting-a-static-website-on-aws-s3after-ec2-2pok" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 28 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/bluezeus/hosting-a-static-website-on-aws-s3after-ec2-2pok" id="article-link-2439533"&gt;
          🚀 Hosting a Static Website on AWS S3(After EC2)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/s3"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;s3&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/staticwebsite"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;staticwebsite&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cloudcomputing"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cloudcomputing&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/bluezeus/hosting-a-static-website-on-aws-s3after-ec2-2pok" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;8&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/bluezeus/hosting-a-static-website-on-aws-s3after-ec2-2pok#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              5&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>s3</category>
      <category>staticwebsite</category>
      <category>cloudcomputing</category>
      <category>devops</category>
    </item>
    <item>
      <title>🚀 Hosting a Static Website on AWS S3(After EC2)</title>
      <dc:creator>Oluwaseyi Asowo</dc:creator>
      <pubDate>Mon, 28 Apr 2025 00:16:36 +0000</pubDate>
      <link>https://forem.com/bluezeus/hosting-a-static-website-on-aws-s3after-ec2-2pok</link>
      <guid>https://forem.com/bluezeus/hosting-a-static-website-on-aws-s3after-ec2-2pok</guid>
      <description>&lt;h2&gt;
  
  
  🔥 Quick Recap
&lt;/h2&gt;

&lt;p&gt;In my &lt;a href="https://dev.to/bluezeus/hosting-a-static-website-on-aws-ec2-my-first-step-toward-devops-3joj"&gt;previous article&lt;/a&gt; , we spun up an EC2 instance, configured Apache, and hosted a static website the traditional way.&lt;br&gt;&lt;br&gt;
Today, we're taking a &lt;strong&gt;lighter&lt;/strong&gt;, &lt;strong&gt;serverless&lt;/strong&gt; approach, hosting a static website using &lt;strong&gt;Amazon S3&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
No servers to manage. No SSH logins. Just pure, clean static site hosting. Let’s get into it! 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  🧰 What You’ll Need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;An AWS account&lt;/li&gt;
&lt;li&gt;A static website (you can build yours or grab a free one from &lt;a href="https://www.tooplate.com" rel="noopener noreferrer"&gt;Tooplate.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Basic familiarity with the AWS Console&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📖 Walkthrough: Hosting a Static Website on S3
&lt;/h2&gt;




&lt;h3&gt;
  
  
  🛒 Step 1: Create an S3 Bucket
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Head over to the &lt;a href="https://s3.console.aws.amazon.com/s3/home" rel="noopener noreferrer"&gt;AWS S3 Console&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Create Bucket&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Give your bucket a &lt;strong&gt;globally unique name&lt;/strong&gt; in my case "&lt;em&gt;drinkscentral&lt;/em&gt;".&lt;/li&gt;
&lt;li&gt;Notice that &lt;strong&gt;public access is blocked by default&lt;/strong&gt;, but don't worry, we'll come back to fix that. 😉&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Bucket&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%2Fryj3975dit9tr4h396rr.png" 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%2Fryj3975dit9tr4h396rr.png" alt="s3 bucket create" width="800" height="360"&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%2Fvph8ozpz00xvkbq5wij2.png" 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%2Fvph8ozpz00xvkbq5wij2.png" alt="s3 bucket public access" width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  📤 Step 2: Upload Your Website Files
&lt;/h3&gt;

&lt;p&gt;After creating the bucket:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click into your newly created bucket.&lt;/li&gt;
&lt;li&gt;Hit &lt;strong&gt;Upload&lt;/strong&gt; then click &lt;strong&gt;Add Files&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the files you downloaded from Tooplate.com (or your own static site).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Upload&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%2Fdbed92yrdblfjqzq8396.png" 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%2Fdbed92yrdblfjqzq8396.png" alt="Upload files" width="800" height="204"&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%2Fp514uqqqadudtnz89qyw.png" 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%2Fp514uqqqadudtnz89qyw.png" alt="Upload files" width="800" height="263"&gt;&lt;/a&gt;&lt;br&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%2F9ufzu8lka1hs8cqlnvsa.png" 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%2F9ufzu8lka1hs8cqlnvsa.png" alt="Upload files" width="357" height="131"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🔓 Step 3: Set Public Access
&lt;/h3&gt;

&lt;p&gt;Remember earlier when I said public access was blocked? Time to fix that.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;strong&gt;Permissions&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Block Public Access&lt;/strong&gt;, click &lt;strong&gt;Edit&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Untick&lt;/strong&gt; the options that block public access.&lt;/li&gt;
&lt;li&gt;Save changes.&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%2F73ewcvmxleetuy4z68p7.png" 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%2F73ewcvmxleetuy4z68p7.png" alt="Allow Public Access" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🛡️ Step 4: Enable ACLs (Access Control Lists)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why enable ACL?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ACLs let us manually grant permissions to individual objects, like making our uploaded website files publicly readable.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Still in the &lt;strong&gt;Permissions&lt;/strong&gt; tab, scroll to &lt;strong&gt;Object Ownership&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Edit&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;ACLs enabled&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Acknowledge and save changes.&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%2Ftcqriawsan12bl2d4z4m.png" 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%2Ftcqriawsan12bl2d4z4m.png" alt="ACL" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🌍 Step 5: Make Objects Public
&lt;/h3&gt;

&lt;p&gt;Now that ACLs are enabled:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go back to the &lt;strong&gt;Objects&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;all&lt;/strong&gt; uploaded files.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Actions&lt;/strong&gt; then &lt;strong&gt;Make public using ACL&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%2Folrsviwrc69griim0yfi.png" 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%2Folrsviwrc69griim0yfi.png" alt="Obj Public access" width="800" height="250"&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%2Fkyhfl7e512do2ihrqx5z.png" 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%2Fkyhfl7e512do2ihrqx5z.png" alt="Obj Public access" width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚙️ Step 6: Enable Static Website Hosting
&lt;/h3&gt;

&lt;p&gt;Finally, let's tell S3 that this bucket is a website.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;strong&gt;Properties&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Scroll down to &lt;strong&gt;Static website hosting&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Edit&lt;/strong&gt; then &lt;strong&gt;Enable&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Index document:&lt;/strong&gt; &lt;code&gt;index.html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;(Optional) &lt;strong&gt;Error document:&lt;/strong&gt; &lt;code&gt;error.html&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Save changes.&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%2Ftdd3ogwzpvjxqnyb73f8.png" 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%2Ftdd3ogwzpvjxqnyb73f8.png" alt="Enable website hosting" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🌐 Step 7: Access Your Live Website!
&lt;/h3&gt;

&lt;p&gt;You're done! 🎉&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Still in the &lt;strong&gt;Properties&lt;/strong&gt; tab, scroll down to &lt;strong&gt;Static Website Hosting&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Copy the &lt;strong&gt;Bucket Website Endpoint&lt;/strong&gt; link.&lt;/li&gt;
&lt;li&gt;Paste it into your browser.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Boom 💥 your static site is live, hosted on AWS S3!&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%2Fjp16qn4c0d6phb3x9vr6.png" 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%2Fjp16qn4c0d6phb3x9vr6.png" alt="website live" width="800" height="209"&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%2Fhce1yi8i0qujbq4o3jvv.png" 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%2Fhce1yi8i0qujbq4o3jvv.png" alt="website live" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🆚 EC2 vs S3 for Static Websites
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;EC2 Hosting&lt;/th&gt;
&lt;th&gt;S3 Hosting&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Server Management&lt;/td&gt;
&lt;td&gt;Manual (configure OS, Apache, etc)&lt;/td&gt;
&lt;td&gt;Serverless (no management)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Higher (pay per uptime)&lt;/td&gt;
&lt;td&gt;Very low (pay per storage/requests)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Setup Complexity&lt;/td&gt;
&lt;td&gt;Medium to High&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scalability&lt;/td&gt;
&lt;td&gt;Manual scaling&lt;/td&gt;
&lt;td&gt;Auto scales&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Suitable For&lt;/td&gt;
&lt;td&gt;Dynamic + static websites&lt;/td&gt;
&lt;td&gt;Static websites only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🏁 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;In our previous EC2 approach, we had to spin up servers, configure Apache, and manage everything.&lt;br&gt;&lt;br&gt;
Here on S3, it's simply upload → tweak permissions → launch. Easy, scalable, and super cost-effective.&lt;/p&gt;

&lt;p&gt;S3 static hosting is good for portfolios, landing pages, and lightweight projects.  &lt;/p&gt;

&lt;p&gt;Stay tuned as I continue learning, maybe we'll set up &lt;strong&gt;CloudFront&lt;/strong&gt;, &lt;strong&gt;SSL&lt;/strong&gt;, and &lt;strong&gt;custom domains&lt;/strong&gt; next. 👀&lt;/p&gt;

&lt;p&gt;Thanks for following along!&lt;br&gt;&lt;br&gt;
Until next time,&lt;br&gt;&lt;br&gt;
&lt;strong&gt;- Oluwaseyi 😁✌️&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Useful Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html" rel="noopener noreferrer"&gt;Amazon S3 Static Website Hosting Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tooplate.com" rel="noopener noreferrer"&gt;Toolplate - Free Static Site Templates&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>s3</category>
      <category>staticwebsite</category>
      <category>cloudcomputing</category>
      <category>devops</category>
    </item>
    <item>
      <title>Taking my first steps into DevOps and documenting every bit of it. Here’s how I hosted my first static site on EC2. Check it out &amp; follow along!</title>
      <dc:creator>Oluwaseyi Asowo</dc:creator>
      <pubDate>Tue, 22 Apr 2025 23:14:11 +0000</pubDate>
      <link>https://forem.com/bluezeus/taking-my-first-steps-into-devops-and-documenting-every-bit-of-it-heres-how-i-hosted-my-first-5111</link>
      <guid>https://forem.com/bluezeus/taking-my-first-steps-into-devops-and-documenting-every-bit-of-it-heres-how-i-hosted-my-first-5111</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/bluezeus/hosting-a-static-website-on-aws-ec2-my-first-step-toward-devops-3joj" class="crayons-story__hidden-navigation-link"&gt;🚀 Hosting a Static Website on AWS EC2 -My First Step Toward DevOps&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/bluezeus" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F1261555%2Fe167bd9d-a6fb-4957-a9b9-d25cb00334c7.png" alt="bluezeus profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/bluezeus" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Oluwaseyi Asowo
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Oluwaseyi Asowo
                
              
              &lt;div id="story-author-preview-content-2425513" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/bluezeus" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F1261555%2Fe167bd9d-a6fb-4957-a9b9-d25cb00334c7.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Oluwaseyi Asowo&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/bluezeus/hosting-a-static-website-on-aws-ec2-my-first-step-toward-devops-3joj" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 22 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/bluezeus/hosting-a-static-website-on-aws-ec2-my-first-step-toward-devops-3joj" id="article-link-2425513"&gt;
          🚀 Hosting a Static Website on AWS EC2 -My First Step Toward DevOps
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aws"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aws&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cloudcomputing"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cloudcomputing&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webhosting"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webhosting&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/bluezeus/hosting-a-static-website-on-aws-ec2-my-first-step-toward-devops-3joj" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;16&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/bluezeus/hosting-a-static-website-on-aws-ec2-my-first-step-toward-devops-3joj#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              5&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>aws</category>
      <category>cloudcomputing</category>
      <category>devops</category>
      <category>webhosting</category>
    </item>
    <item>
      <title>🚀 Hosting a Static Website on AWS EC2 -My First Step Toward DevOps</title>
      <dc:creator>Oluwaseyi Asowo</dc:creator>
      <pubDate>Tue, 22 Apr 2025 23:06:16 +0000</pubDate>
      <link>https://forem.com/bluezeus/hosting-a-static-website-on-aws-ec2-my-first-step-toward-devops-3joj</link>
      <guid>https://forem.com/bluezeus/hosting-a-static-website-on-aws-ec2-my-first-step-toward-devops-3joj</guid>
      <description>&lt;p&gt;Hey there! I'm Oluwaseyi - a System Administrator who’s passionate about all things cloud. Lately, I've been diving deep into the world of DevOps, and I thought, what better way to document this journey than to share what I’m learning?&lt;/p&gt;

&lt;p&gt;This post is a practical walkthrough of how to host a static website on an AWS EC2 instance. Whether you're trying to understand the basics or just want to throw a simple portfolio online, this one’s for you.&lt;/p&gt;

&lt;p&gt;So… ready to deploy your first site on the cloud? Let’s roll.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧰 What You’ll Need
&lt;/h2&gt;

&lt;p&gt;Here’s what you’ll need to follow along:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An AWS account (Free Tier is fine)&lt;/li&gt;
&lt;li&gt;Terminal (Bash or Git Bash on Windows)&lt;/li&gt;
&lt;li&gt;A static website (you 
can grab one from &lt;a href="https://www.tooplate.com/" rel="noopener noreferrer"&gt;Tooplate&lt;/a&gt; - they’ve got nice free templates, or just use your own creation)&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%2Fh2bp7fesl0sy19o33zbw.png" 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%2Fh2bp7fesl0sy19o33zbw.png" alt="Tooplate" width="800" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⛏️ Prepping Before We Launch the Instance
&lt;/h2&gt;

&lt;p&gt;Before firing up the EC2 instance, there are two things we need to set up:&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ 1. Create a Key Pair
&lt;/h3&gt;

&lt;p&gt;You’ll use this to SSH into the instance. From your AWS EC2 dashboard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to Key Pairs&lt;/li&gt;
&lt;li&gt;Create new&lt;/li&gt;
&lt;li&gt;Download the .pem file and store it safely - you’ll need it soon&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%2Fzxnpzt0210my6xib0eg8.png" 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%2Fzxnpzt0210my6xib0eg8.png" alt="Key Pairs" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ 2. Set Up a Security Group
&lt;/h3&gt;

&lt;p&gt;This controls what kind of traffic can reach your instance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allow SSH (port 22) for connection&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%2Fh69oez37yzxyew5y976q.png" 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%2Fh69oez37yzxyew5y976q.png" alt="Security Groups" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Launch Your EC2 Instance
&lt;/h2&gt;

&lt;p&gt;Now let’s spin up the machine.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose Amazon Linux 2 or Ubuntu (I'll be using &lt;strong&gt;Ubuntu&lt;/strong&gt; for this guide - it doesn’t matter much for static sites)&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;t2.micro&lt;/strong&gt; - Free Tier Eligible&lt;/li&gt;
&lt;li&gt;During setup, make sure to:

&lt;ul&gt;
&lt;li&gt;Select the &lt;strong&gt;security group&lt;/strong&gt; and &lt;strong&gt;key pair&lt;/strong&gt; you just created&lt;/li&gt;
&lt;li&gt;Download the key pair if you haven’t already (you won’t get another chance)&lt;/li&gt;
&lt;/ul&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%2Fxgkz4cdpt6lk6j14ao0v.png" 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%2Fxgkz4cdpt6lk6j14ao0v.png" alt="instance type" width="800" height="377"&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%2Ff2rh6pqnads4su8tpe4r.png" 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%2Ff2rh6pqnads4su8tpe4r.png" alt="Security group" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔌 Connecting to Your EC2 via SSH
&lt;/h2&gt;

&lt;p&gt;Now, open your terminal and navigate to the folder where your .pem key file is saved. Then connect using this format: &lt;em&gt;ssh -i your-key.pem ubuntu@[your-ec2-public-ip]&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"web01.pem"&lt;/span&gt; ubuntu@18.204.197.240

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If this is your first SSH connection, it might ask you to confirm the fingerprint - just type yes.&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%2Fdh5zdz7ybamzsfgu2cgd.png" 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%2Fdh5zdz7ybamzsfgu2cgd.png" alt="terminal showing successful ssh connection" width="748" height="760"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Install Required Packages
&lt;/h2&gt;

&lt;p&gt;Once you're in the EC2 shell, let's install a few packages we need:&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;apache2 wget unzip &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives us a web server (Apache), and tools to download and extract our template.&lt;/p&gt;




&lt;h2&gt;
  
  
  📁 Set Up the Static Website
&lt;/h2&gt;

&lt;p&gt;We’re going to grab a template from Tooplate and deploy it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a temporary directory:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; /tmp/webfiles
&lt;span class="nb"&gt;cd&lt;/span&gt; /tmp/webfiles

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now go to &lt;a href="https://www.tooplate.com/" rel="noopener noreferrer"&gt;Tooplate&lt;/a&gt;, pick any template, and copy the direct download link.&lt;/p&gt;

&lt;p&gt;Back in your EC2 terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://www.tooplate.com/zip-templates/2132_clean_work.zip
unzip 2132_clean_work.zip
&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%2Fjsnke998bhxsg6hip0e8.png" 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%2Fjsnke998bhxsg6hip0e8.png" alt="wget" width="800" height="194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once unzipped, copy the contents to Apache’s web root and restart the service:&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 cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; /var/www/html/
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart apache2

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🌐 Time to Visit the Site!
&lt;/h2&gt;

&lt;p&gt;Open your browser and type:&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%2F9k8kwtxs31rs5egwtyy9.png" 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%2F9k8kwtxs31rs5egwtyy9.png" alt="public ip" width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But wait… page not responding?&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%2F9ql73khdir26jv9h0rbw.png" 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%2F9ql73khdir26jv9h0rbw.png" alt="not responding" width="800" height="686"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yeah, that’s because our security group didn’t initially allow HTTP traffic. So let’s fix that.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Head back to your AWS console&lt;/li&gt;
&lt;li&gt;Go to Security Groups &amp;gt; Inbound rules&lt;/li&gt;
&lt;li&gt;Edit and add HTTP (port 80)&lt;/li&gt;
&lt;li&gt;Save, and refresh the browser&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Boom! Your site should be live.&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%2Fci35qrokfxv0s8xngraj.png" 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%2Fci35qrokfxv0s8xngraj.png" alt="http" width="800" height="266"&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%2Fw8h64k32ztv8xosz9er5.png" 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%2Fw8h64k32ztv8xosz9er5.png" alt="refresh" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Wrap Up
&lt;/h2&gt;

&lt;p&gt;Congrats, you've just deployed a static site to AWS EC2! 🎉&lt;/p&gt;

&lt;p&gt;It’s a small step, but a huge part of understanding how cloud hosting works under the hood. As I continue down this DevOps path, I’ll be sharing more tutorials, real-world use cases, and the bumps along the way.&lt;/p&gt;

&lt;p&gt;Follow along if you want to grow your cloud confidence one project at a time. and oh, by the way don't forget to clean up your instance when you're done😁.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloudcomputing</category>
      <category>devops</category>
      <category>webhosting</category>
    </item>
    <item>
      <title>Using Vagrant to Provision a VM and Multiple VMs</title>
      <dc:creator>Oluwaseyi Asowo</dc:creator>
      <pubDate>Thu, 21 Nov 2024 21:13:24 +0000</pubDate>
      <link>https://forem.com/bluezeus/using-vagrant-to-provision-a-vm-and-multiple-vms-49op</link>
      <guid>https://forem.com/bluezeus/using-vagrant-to-provision-a-vm-and-multiple-vms-49op</guid>
      <description>&lt;p&gt;Let’s face it, managing virtual machines can sometimes feel like juggling flaming swords—complex, intimidating, and prone to mistakes. Enter Vagrant, the ultimate tool that makes provisioning and managing VMs a breeze.&lt;/p&gt;

&lt;p&gt;Vagrant is a powerful command-line utility that lets you create lightweight, reproducible, and portable development environments. Whether you're a developer testing applications across multiple systems or a systems administrator managing infrastructure, Vagrant helps you say goodbye to "it works on my machine" syndrome.&lt;/p&gt;

&lt;p&gt;In this guide, I’ll walk you through how to harness the power of Vagrant to spin up a single virtual machine and even manage multiple VMs. Along the way, I’ll share some tips and examples that make this process simple, scalable, and , dare I say, fun.&lt;/p&gt;

&lt;p&gt;So, buckle up! We’re about to turn virtualization into a smooth, streamlined experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  TABLE OF CONTENT
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Introduction to Vagrant&lt;/li&gt;
&lt;li&gt;Prerequisites&lt;/li&gt;
&lt;li&gt;
Setting Up a single VM with Vagrant

&lt;ul&gt;
&lt;li&gt;Setup 1: Initialize a New Vagrant Project&lt;/li&gt;
&lt;li&gt;Setup 2: Configure the Vagrantfile&lt;/li&gt;
&lt;li&gt;Setup 3: Provision and Access the VM&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Provisioning Multiple VMs with Vagrant

&lt;ul&gt;
&lt;li&gt;Setup 1: Modify the vagrant file for multiple VMs&lt;/li&gt;
&lt;li&gt;Setup 2: Launch and Manage Multiple VMs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tips for smooth sailing&lt;/li&gt;
&lt;li&gt;Conclusion and Next Steps&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Introduction to vagrant &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Imagine a tool that turns the tedious process of configuring development environments into a few simple commands. That’s Vagrant! It’s your one-stop solution for setting up, managing, and sharing VMs. Whether you’re testing software, developing web applications, or experimenting with infrastructure configurations, Vagrant ensures consistency across environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key benefits of Vagrant include:&lt;/strong&gt;&lt;br&gt;
Reproducibility: Share your setup with a single file.&lt;br&gt;
Portability: Take your environment anywhere.&lt;br&gt;
Ease of Use: Spin up and tear down VMs with minimal effort.&lt;/p&gt;
&lt;h3&gt;
  
  
  Prerequisites &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Before we dive in, ensure you have Vagrant, VirtualBox and a terminal let's say GITBASH installed on your machine. If not, here’s how to get started:&lt;/p&gt;

&lt;p&gt;Download Vagrant: Head to &lt;a href="https://developer.hashicorp.com/vagrant/tutorials/getting-started/getting-started-install?product_intent=vagrant" rel="noopener noreferrer"&gt;Vagrant's official site&lt;/a&gt; and download the installer for your operating system.&lt;br&gt;
Download Gitbash: Head over to the git bash site &lt;a href="https://git-scm.com/downloads" rel="noopener noreferrer"&gt;here&lt;/a&gt; &lt;br&gt;
Install VirtualBox: Vagrant works best with VirtualBox as its default provider. Download it &lt;a href="https://www.virtualbox.org/wiki/Downloads" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;br&gt;
Verify Installation: Open your terminal &lt;em&gt;maybe GITBASH&lt;/em&gt; and type&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;If you see the version number, you’re good to go!&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up a single VM with Vagrant&lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Initialize a New Vagrant Project &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Create a new directory for your project. You can create this directly on your desktop or use the bash command, but make sure you are on the preferred directory either Desktop or wherever.&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;mkdir &lt;/span&gt;vagrant_project &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;vagrant_project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above script created a Folder called &lt;em&gt;vagrant_project&lt;/em&gt; and changed our current directory to the created folder&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;initialize the Vagrant project:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;vagrant&lt;/span&gt; &lt;span class="n"&gt;init&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Setup 2: Configure the Vagrantfile &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;After running the init command a file is downloaded to that directory. The &lt;em&gt;Vagrantfile&lt;/em&gt; is the core configuration file. Open it in any text editor and modify it:&lt;br&gt;
Use a specific box (e.g.Ubuntu)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;Vagrant&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;box&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ubuntu/bionic64&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Setup 3: Provision and Access the VM &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Start the VM by running this script&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;When completed, you can access the VM with this script.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Congratulations you have provisioned a Virtual Machine using Vagrant, I know easy right😁. Up next we will be provisioning multiple VMs with Vagrant&lt;/p&gt;

&lt;h2&gt;
  
  
  Provisioning Multiple VMs with Vagrant &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Setup 1: Modify the Vagrantfile for Multiple VMs &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Update your Vagrantfile to define multiple VMs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;Vagrant&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;web&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="n"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;box&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ubuntu/bionic64&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;private_network&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;192.168.56.101&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
  &lt;span class="n"&gt;end&lt;/span&gt;

  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;db&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="n"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;box&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ubuntu/bionic64&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;private_network&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;192.168.56.102&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
  &lt;span class="n"&gt;end&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;app&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="n"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;box&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ubuntu/focal64&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;private_network&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;192.168.56.103&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
  &lt;span class="n"&gt;end&lt;/span&gt;
&lt;span class="n"&gt;end&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Setup 2: Launch and Manage Multiple VMs &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Start all VMs:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;At this point, all the VMs will get provisioned one after the other.&lt;/p&gt;

&lt;p&gt;Start a specific VM: You could also decide to spin up a specific VM, rather than all the VMs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant up web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SSH into a specific VM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant ssh db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lastly, Halt all VMs&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;vagrant&lt;/span&gt; &lt;span class="n"&gt;halt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AND THERE YOU HAVE IT!!! 🥂🍾 Multiple VMs provisioned with one line.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Tips for smooth sailing &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Understand Vagrant’s Commands: Familiarize yourself with vagrant status, vagrant halt, and vagrant destroy.&lt;/li&gt;
&lt;li&gt;Backup Your Vagrantfile: It’s the heart of your configuration.&lt;/li&gt;
&lt;li&gt;Experiment Freely: Vagrant’s disposable environments encourage experimentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Conclusion and Next Steps &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;With Vagrant, you hold the keys to efficient, reproducible virtualization. From provisioning a single VM to managing a fleet, it’s your gateway to seamless development and testing.&lt;/p&gt;

&lt;p&gt;Now that you’ve got the basics, why not explore advanced provisioning with tools like Ansible or Docker integration? The possibilities are endless, and with Vagrant, they’re always a command away.&lt;/p&gt;

&lt;p&gt;ANY QUESTIONS?&lt;/p&gt;

</description>
      <category>virtualization</category>
      <category>infrastructureascode</category>
      <category>vagrant</category>
      <category>techwriting</category>
    </item>
  </channel>
</rss>
