John S W Hawkes

Experienced IT Professional

johnswhawkes@gmail.com

Site Progress

Part 1:Create a Professional Resume Website with ChatGPT's Assistance

  • Initial Setup:
    • Provided an overview of my background and skills for the resume website.
  • HTML Structure:
    • Created the basic HTML structure for the resume website, including sections for the header, sidebar, main content, and footer.
  • Header Customization:
    • Adjusted the header layout to include a menu button on the left and my name, title, and email on the right.
    • Centered the "John S W Hawkes" title within the header.
  • CSS Styling:
    • Applied general styling for the body, header, sidebar, main content, and footer.
    • Customized colors, fonts, and layout using CSS.
    • Ensured the header and footer have a similar style with gradient backgrounds.
  • Flexbox Adjustments:
    • Used Flexbox to align elements within the header and position them appropriately.
    • Centered the main title in the header and aligned other elements to the right and left as needed.
  • Content Addition:
    • Added sections for about me, experience, certifications, and skills.
    • Included details for each section based on your professional background.
  • Responsive Design:
    • Implemented media queries for responsive design, ensuring the website looks good on various screen sizes.
  • Final Touches:
    • Fixed any CSS issues and ensured the final layout matched your requirements.

Part 2: Deploy a Website Using Azure Services

  • Created a Storage Account:
    • Created a new Storage Account in Azure portal.
    • Configured it for "Blob storage" and selected "Hot" as the performance tier.
  • Enabled Static Website Hosting:
    • Enabled static website hosting in the Storage Account settings.
    • Obtained the Primary endpoint URL for accessing the website.
  • Uploaded Website Files:
    • Uploaded website files (HTML, CSS, JavaScript, etc.) to the `$web` container within the Storage Account using Azure Storage Explorer or Azure portal.
  • Configured Azure Front Door:
    • Created an Azure Front Door instance in Azure portal.
    • Added a frontend host (`www.jswhawkes.co.uk`) for the custom domain.
    • Created a backend pool with the Storage Account's Primary endpoint URL.
    • Configured routing rules to direct traffic from the custom domain to the backend pool.
  • Configured HTTPS with Azure Front Door:
    • Enabled HTTPS for the custom domain using Azure-managed certificates.
    • Selected the minimum TLS version required (e.g., TLS 1.2).
  • Validated Domain Ownership:
    • Completed DNS verification as prompted by Azure Front Door for `www.jswhawkes.co.uk`.
    • Waited for domain validation status to change from pending to verified.
  • Tested and Verified:
    • Tested access to the website using `https://www.jswhawkes.co.uk` to ensure proper functionality and secure HTTPS connection.

Part 3: Exploring Azure Front Door Costs and Moving to Azure CDN

  • Reviewed Azure Front Door costs using Azure Cost Management: Took a close look at what it was costing to use Azure Front Door.
  • Checked billing details and cost trends: Examined the fine print on bills and how costs were changing over time.
  • Considered Azure CDN as a cheaper option for delivering content: Looked into Azure CDN to see if it could save some money
  • Set up a new Azure CDN profile: Started a new Azure CDN profile to prepare for the switch.
  • Connected CDN endpoints to Azure Storage: Replaced the azure front door with the new Azure CDN by linking the CDN endpoint with Azure Storage.
  • Adjusted caching rules to make content delivery more efficient: Fine-tuned caching settings to speed up how content got to users and make the server work less.
  • Watched spending after moving to Azure CDN: Used Azure Cost Management to keep an eye on how much was being spent once the switch was made.
  • Compared costs before and after switching: Now I am spending sufficiently less.

Part 4: Setting Up CI/CD using GitHub Actions for jswhawkes.co.uk

  • Created Github Repo: Creaated a Github Repo for jswhawkes-frontend
  • Created a service principal: Generated a service principal with the necessary permissions for Azure resource management.
  • Assigned CDN Endpoint Contributor role: Allocated the CDN Endpoint Contributor role to the service principal to enable management of Azure CDN endpoints.
  • Added Azure credentials to GitHub Secrets: Safely stored Azure credentials within GitHub Secrets for secure access during the CI/CD workflow.
  • Established .github/workflows directory: Created a dedicated directory (`/.github/workflows`) within the GitHub repository for housing GitHub Actions workflows.
  • Created deploy.yml: Developed a YAML file (`deploy.yml`) within the workflows directory to define the GitHub Actions workflow for deployment.
  • Configured GitHub Actions workflow: Detailed configuration included:
    • Cleared the runner temp directory.
    • Checked out the latest code from the repository.
    • Set up Azure CLI environment.
    • Logged in to Azure using the service principal credentials.
    • Uploaded updated website files to Azure Storage.
    • Purged the Azure CDN endpoint to ensure content freshness.
  • Adjusted permissions and roles: Made necessary adjustments to permissions and roles to resolve any authorization issues encountered during setup.

Part 5: Creating a Budget for jswhawkes Website in Azure

  • Created Budget: Set up sa new budget with an amount of 30 for the jswhawkes website.
  • Configured Alerts:
    • Set 25% threshold at 7.5.
    • Set 50% threshold at 15.
    • Set 100% threshold at 30.
  • Added Email Notifications: Added email addresses to receive alerts.
  • Verified Setup: Checked that the budget and alert settings were correctly applied.

Part 6: Adding a Visitor Counter to My Website

  • Created Azure Function: Set up an HTTP-triggered Azure Function to track and return visitor counts.
  • Connected to Cosmos DB: Configured Cosmos DB to store daily visitor counts with auto-increment logic.
  • Deployed Function: Deployed the function to Azure and verified the API endpoint.
  • Integrated Frontend: Added a `` to display the counter and used JavaScript to fetch and display the count.
  • Configured CORS: Allowed requests only from `https://www.jswhawkes.co.uk` for security.
  • Tested and Debugged: Fixed response format and verified the counter updated correctly on the site.