<?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: Adam Miedema</title>
    <description>The latest articles on Forem by Adam Miedema (@armiedema).</description>
    <link>https://forem.com/armiedema</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%2F321687%2F96fb8f4e-bd5d-425f-a688-c7495634c1b6.jpg</url>
      <title>Forem: Adam Miedema</title>
      <link>https://forem.com/armiedema</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/armiedema"/>
    <language>en</language>
    <item>
      <title>Unleashing Local AI - Transform Your Coding Experience with Msty</title>
      <dc:creator>Adam Miedema</dc:creator>
      <pubDate>Thu, 15 May 2025 20:41:39 +0000</pubDate>
      <link>https://forem.com/armiedema/unleashing-local-ai-transform-your-coding-experience-with-msty-1an5</link>
      <guid>https://forem.com/armiedema/unleashing-local-ai-transform-your-coding-experience-with-msty-1an5</guid>
      <description>&lt;p&gt;In today’s fast-paced software development world, having a trusty coding assistant can make all the difference. Local AI models are gaining traction because they provide quick, offline support while keeping your data secure. Enter Msty, your go-to tool for seamlessly integrating local AI models into your coding workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with Local AI Models
&lt;/h2&gt;

&lt;p&gt;Msty makes it easy to leverage powerful local models like DeepSeek, Mistral, and Gemma. Here’s how to get started:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install Msty:&lt;/strong&gt; Download &lt;a href="https://msty.app" rel="noopener noreferrer"&gt;Msty App&lt;/a&gt; and set it up on your machine or use &lt;a href="https://msty.studio" rel="noopener noreferrer"&gt;Msty Studio&lt;/a&gt; for a web-based experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrate with VS Code:&lt;/strong&gt; Choose between using Copilot or the Roo Code extension, both are available in Visual Studio Code.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Using Copilot with Local Models
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/hQ8BcdpQwlw"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;GitHub Copilot is like having a coding partner right by your side. To connect it to your local models:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Open Settings in VS Code:&lt;/strong&gt; Click the gear icon in the bottom left corner and select "Settings."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set Up Your API Provider:&lt;/strong&gt; Find "Bring Your Own Key" in settings for Ollama and enter the local model endpoint from Msty.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose Your Model:&lt;/strong&gt; Go to "Manage Models," select your desired local model, and you’re ready to go!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With Copilot, you can ask questions directly in your code editor, making your coding life much easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exploring Roo Code for Tailored Assistance
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/lwigyQ2whY0"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Looking for more customization? Try Roo Code, an open-source extension that allows for advanced model fine-tuning. Here’s how to set it up:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install Roo Code:&lt;/strong&gt; Search for "Roo" in the VS Code extensions tab and install it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a Profile:&lt;/strong&gt; Open Roo Code, click the plus icon, and name setup a new profile (like "Msty").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect Your Models:&lt;/strong&gt; Use the endpoint from Msty, select Ollama as the API provider, and then enter the local model endpoint from Msty to link up your local models.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Roo Code offers customizable settings that let you tailor your coding assistant to fit your needs.&lt;/p&gt;

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

&lt;p&gt;Using local AI models is a game-changer for developers. With Msty simplifying the process, you can easily integrate tools like GitHub Copilot and Roo Code into your workflow. Dive in, explore these options, and elevate your coding experience with local AI assistance!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>development</category>
    </item>
    <item>
      <title>How to Set Up Azure OpenAI in Msty Studio - A Step-by-Step Guide</title>
      <dc:creator>Adam Miedema</dc:creator>
      <pubDate>Thu, 08 May 2025 03:39:56 +0000</pubDate>
      <link>https://forem.com/armiedema/how-to-set-up-azure-openai-in-msty-studio-a-step-by-step-guide-4iip</link>
      <guid>https://forem.com/armiedema/how-to-set-up-azure-openai-in-msty-studio-a-step-by-step-guide-4iip</guid>
      <description>&lt;p&gt;If you're looking to combine the power of OpenAI’s large language models (LLMs) with the security and scalability of Microsoft’s cloud infrastructure, &lt;strong&gt;Azure OpenAI&lt;/strong&gt; is the way to go. With this service, you can access state-of-the-art models like GPT in a way that's enterprise-ready. Meaning, you get all the cutting-edge AI capabilities, plus the security, compliance, and integration tools your organization needs.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll walk through how to set up Azure OpenAI and connect it to &lt;a href="https://msty.ai" rel="noopener noreferrer"&gt;Msty Studio&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started with Azure OpenAI
&lt;/h2&gt;

&lt;p&gt;Before diving in, make sure you have an &lt;strong&gt;Azure account&lt;/strong&gt; and access to the &lt;strong&gt;Azure OpenAI service&lt;/strong&gt;. Once that’s ready, follow these steps to deploy your first model.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Set Up Azure OpenAI
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Head to the &lt;a href="https://portal.azure.com/" rel="noopener noreferrer"&gt;Azure Portal&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Use the top search bar to look for &lt;strong&gt;Azure OpenAI&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If you don’t already have a resource, click &lt;strong&gt;Create Azure OpenAI&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Follow the prompts to configure and create your new resource.&lt;/li&gt;
&lt;li&gt;Once it's created, select the resource from your list.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At the top of the resource page, click &lt;strong&gt;Go to Azure AI Foundry Portal&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the Foundry portal, click &lt;strong&gt;Deployments&lt;/strong&gt; from the left-hand menu.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the &lt;strong&gt;Deploy Model&lt;/strong&gt; button in the top menu. Choose between a base or fine-tuned model.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the popup, select the model you want, then hit &lt;strong&gt;Confirm&lt;/strong&gt; and &lt;strong&gt;Confirm and Continue&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After deployment, you’ll see the &lt;strong&gt;Target URI&lt;/strong&gt;. Copy it—you’ll need it later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Just below the URI, you’ll find the &lt;strong&gt;Key&lt;/strong&gt;. Copy that too.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your &lt;strong&gt;Target URI&lt;/strong&gt; will look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://&amp;lt;your-resource-name&amp;gt;.cognitiveservices.azure.com/openai/deployments/&amp;lt;model-name&amp;gt;?api-version=&amp;lt;api-version&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From that, make note of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;your-resource-name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;model-name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;api-version&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ll need all three for the next part.&lt;/p&gt;




&lt;h2&gt;
  
  
  Connecting Azure OpenAI to Msty Studio
&lt;/h2&gt;

&lt;p&gt;Now that you’ve deployed your model, it’s time to plug everything into &lt;strong&gt;Msty Studio&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔧 Msty Studio Setup
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://msty.studio" rel="noopener noreferrer"&gt;Msty Studio&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Model Hub&lt;/strong&gt; in the left-hand menu.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Add Provider&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Azure OpenAI&lt;/strong&gt; from the list.&lt;/li&gt;
&lt;li&gt;Paste your &lt;strong&gt;Key&lt;/strong&gt; into the &lt;strong&gt;API Key&lt;/strong&gt; field.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Base URL&lt;/strong&gt; field, paste the first part of your Target URI:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   https://&amp;lt;your-resource-name&amp;gt;.cognitiveservices.azure.com/openai/deployments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Alternatively, you can just enter your &lt;strong&gt;Resource Name&lt;/strong&gt; instead.)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter your &lt;strong&gt;API Version&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the model(s) you've deployed. All available models will appear, but you can only use the ones tied to your Azure resource.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Add Provider&lt;/strong&gt; to finish.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🎉 Start Chatting with Your Model
&lt;/h2&gt;

&lt;p&gt;That’s it! Head over to the chat interface in Msty Studio and strike up a conversation with your Azure OpenAI model.&lt;/p&gt;




&lt;p&gt;Setting up Azure OpenAI might feel technical at first, but once it’s connected to Msty Studio, working with advanced AI becomes intuitive and even fun. Whether you're building enterprise tools or experimenting with creative prompts, this setup gives you a solid foundation to explore what's possible.&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>The AI Settings Dictionary</title>
      <dc:creator>Adam Miedema</dc:creator>
      <pubDate>Sat, 03 May 2025 21:39:57 +0000</pubDate>
      <link>https://forem.com/armiedema/the-ai-settings-dictionary-nah</link>
      <guid>https://forem.com/armiedema/the-ai-settings-dictionary-nah</guid>
      <description>&lt;p&gt;You may have noticed some LLMs allow you the ability to control certain settings - typically paired with a brief explanation that still leaves you wondering exactly what they do. &lt;/p&gt;

&lt;p&gt;Fear not! This is the living dictionary of AI settings. We will keep this up to date as we learn more about how these settings work and what they do.&lt;/p&gt;




&lt;h2&gt;
  
  
  Context Message Limit
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it is
&lt;/h3&gt;

&lt;p&gt;How many past messages in a conversation the AI can "remember."  &lt;/p&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Imagine texting someone with short-term memory. If the limit is 10 messages, the AI forgets anything before that.
&lt;/li&gt;
&lt;li&gt;Important in long chats, like customer support or storytelling, where the AI needs to follow along.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to change it
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Increase it for better conversation memory.
&lt;/li&gt;
&lt;li&gt;Decrease it if you're seeing errors, or to save memory.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Context Window Size
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it is
&lt;/h3&gt;

&lt;p&gt;The total number of &lt;strong&gt;tokens&lt;/strong&gt; (pieces of words) the AI can consider at once — both your message &lt;strong&gt;and&lt;/strong&gt; its reply.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Think of it like a whiteboard. A bigger whiteboard = more info the AI can “see” at once.
&lt;/li&gt;
&lt;li&gt;If your input is too long (e.g., an entire book), it might cut off earlier parts if they don’t fit.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to change it
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use large windows for long documents, coding projects, or full email threads.
&lt;/li&gt;
&lt;li&gt;Not something you usually adjust, but good to know when picking a model (e.g., GPT-4-Turbo can handle 128k tokens).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Frequency Penalty
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it is
&lt;/h3&gt;

&lt;p&gt;Tells the AI: "Don’t keep using the same words over and over."  &lt;/p&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Without it, the AI might write: “This is very very very good.”
&lt;/li&gt;
&lt;li&gt;Makes writing sound more natural and less robotic.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Range
&lt;/h3&gt;

&lt;p&gt;0 to 2  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Low (0)&lt;/strong&gt; - repetition allowed.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High (1–2)&lt;/strong&gt; - more variety, less echo.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Typical value
&lt;/h3&gt;

&lt;p&gt;0.5  &lt;/p&gt;

&lt;h3&gt;
  
  
  When to change it
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Raise it if the AI is looping or repeating itself.
&lt;/li&gt;
&lt;li&gt;Lower it for tasks like summarizing where repetition might be okay.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  GPU Layers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it is
&lt;/h3&gt;

&lt;p&gt;A performance setting for people running AI locally. It decides how much of the model runs on a &lt;strong&gt;GPU&lt;/strong&gt; (fast) versus CPU (slow).  &lt;/p&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;More GPU layers = faster responses (if your graphics card can handle it).
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to change it
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Only in local installations (like using models on your own computer).
&lt;/li&gt;
&lt;li&gt;You’ll need some technical know-how and a decent GPU.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Max Output Tokens
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it is
&lt;/h3&gt;

&lt;p&gt;This sets how long the AI’s reply can be — in &lt;strong&gt;tokens&lt;/strong&gt;, which are like chunks of words.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Prevents the AI from writing an essay when you just want a sentence.
&lt;/li&gt;
&lt;li&gt;Saves on cost or time if you're paying per token.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Range
&lt;/h3&gt;

&lt;p&gt;1 to thousands (depending on the model)  &lt;/p&gt;

&lt;h3&gt;
  
  
  Typical value
&lt;/h3&gt;

&lt;p&gt;256–512 tokens (about 100–300 words)  &lt;/p&gt;

&lt;h3&gt;
  
  
  When to change it
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Increase it for long answers (e.g., stories, detailed code).
&lt;/li&gt;
&lt;li&gt;Decrease it for quick replies or summaries.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Presence Penalty
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it is
&lt;/h3&gt;

&lt;p&gt;Encourages the AI to &lt;strong&gt;introduce new topics&lt;/strong&gt; instead of sticking to what it already said.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Great for brainstorming, exploring ideas, or avoiding repetition.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Range
&lt;/h3&gt;

&lt;p&gt;0 to 2  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Low (0)&lt;/strong&gt; - stick to what's already been said.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High (1–2)&lt;/strong&gt; - add new ideas, mix things up.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Typical value
&lt;/h3&gt;

&lt;p&gt;0.5–1.0  &lt;/p&gt;

&lt;h3&gt;
  
  
  When to change it
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Raise it when you want variety (like idea generation).
&lt;/li&gt;
&lt;li&gt;Lower it if you want the AI to stay focused on a specific topic.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Temperature
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it is
&lt;/h3&gt;

&lt;p&gt;Controls how &lt;strong&gt;creative or random&lt;/strong&gt; the AI is when generating responses.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Think of it like a dial between "robot mode" and "creative mode."
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Range
&lt;/h3&gt;

&lt;p&gt;0 to 1  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Low (0–0.3)&lt;/strong&gt; very focused, factual, safe.

&lt;ul&gt;
&lt;li&gt;Example: Good for math, summaries, or coding.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;High (0.7–1:&lt;/strong&gt; - more playful, unpredictable, and surprising.

&lt;ul&gt;
&lt;li&gt;Example: Useful for stories, jokes, or coming up with weird ideas.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Typical value
&lt;/h3&gt;

&lt;p&gt;0.7  &lt;/p&gt;

&lt;h3&gt;
  
  
  When to change it
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lower for accurate info or professional tone.
&lt;/li&gt;
&lt;li&gt;Raise for fun, brainstorming, or “think outside the box” tasks.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Top K
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it is
&lt;/h3&gt;

&lt;p&gt;The AI predicts many possible next words — &lt;strong&gt;Top K&lt;/strong&gt; limits its choices to just the K most likely ones.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;low K&lt;/strong&gt; is like giving the AI a strict script: “Pick from just the top 5 words.”
&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;high K&lt;/strong&gt; gives it more freedom: “Pick from the top 50 or even 100!”
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Range
&lt;/h3&gt;

&lt;p&gt;1 to 100+  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Low (1–10)&lt;/strong&gt; - safe, predictable — might repeat phrases.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High (50–100)&lt;/strong&gt; - more creative, but risks weird or off-topic replies.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Typical value
&lt;/h3&gt;

&lt;p&gt;40–50  &lt;/p&gt;

&lt;h3&gt;
  
  
  When to change it
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Raise it to make the AI more surprising or fun.
&lt;/li&gt;
&lt;li&gt;Lower it if you want tighter, more professional responses.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Top P (Nucleus Sampling)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it is
&lt;/h3&gt;

&lt;p&gt;Instead of limiting the number of word options (like Top K), it limits the &lt;strong&gt;total probability&lt;/strong&gt;.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Imagine a pie chart of likely next words. Top P tells the AI, “Only pick from the smallest slice that makes up, say, 90% of the pie.”
&lt;/li&gt;
&lt;li&gt;This allows more flexibility than Top K, especially when probability shifts a lot.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Range
&lt;/h3&gt;

&lt;p&gt;0 to 1  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Low (0.1–0.3)&lt;/strong&gt; - very focused and repetitive.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High (0.9–1.0)&lt;/strong&gt; - much more varied and playful.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Typical value
&lt;/h3&gt;

&lt;p&gt;0.9  &lt;/p&gt;

&lt;h3&gt;
  
  
  When to change it
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lower for more technical, rule-following output.
&lt;/li&gt;
&lt;li&gt;Raise for more imagination, idea generation, or fun conversations.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>Setup your own safe search engine using SearXNG</title>
      <dc:creator>Adam Miedema</dc:creator>
      <pubDate>Thu, 01 May 2025 14:42:29 +0000</pubDate>
      <link>https://forem.com/armiedema/setup-your-own-safe-search-engine-using-searxng-3428</link>
      <guid>https://forem.com/armiedema/setup-your-own-safe-search-engine-using-searxng-3428</guid>
      <description>&lt;p&gt;In this tutorial, we'll walk through how to set up and configure &lt;strong&gt;SearXNG&lt;/strong&gt;, an open-source metasearch engine, for use in your own custom applications - and for use with &lt;a href="https://msty.ai" rel="noopener noreferrer"&gt;Msty Studio&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SearXNG&lt;/strong&gt; is a powerful, privacy-respecting search engine that aggregates results from multiple sources without tracking users.&lt;/p&gt;

&lt;p&gt;You can host it yourself to have full control over the behavior, sources, and appearance.&lt;/p&gt;




&lt;h2&gt;
  
  
  Installation Steps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Environment Setup
&lt;/h3&gt;

&lt;p&gt;Before installing SearXNG, first provision a server and setup dependencies.&lt;/p&gt;

&lt;p&gt;There are many VPS hosting providers you can choose from - Vultr, Digital Ocean, Hetzner, etc...&lt;/p&gt;

&lt;p&gt;For a quick setup, we'll use &lt;a href="https://cleavr.io" rel="noopener noreferrer"&gt;Cleavr.io&lt;/a&gt; to provision a server on our preferred hosting provider and ensure we have a few dependencies installed - which you can check from the Server &amp;gt; Services section in Cleavr:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Nginx&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In Cleavr, you can use their SSH key management to add your SSH key to the server. Also, add a new &lt;strong&gt;Generic Port App&lt;/strong&gt; site to the server you provisioned and ensure the port is set to &lt;code&gt;8080&lt;/code&gt; when setting up the new site.&lt;/p&gt;

&lt;p&gt;Of course, you can use a different server management tool or setup the dependencies manually via the server's terminal - whichever means you prefer to setup the environment.&lt;/p&gt;

&lt;p&gt;Once you have your environment setup and ready-to-go, move on to the next steps to install and configure SearXNG.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Open Server Terminal
&lt;/h3&gt;

&lt;p&gt;Access your server's terminal via SSH or thru your hosting provider's server console interface.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Add Docker User
&lt;/h3&gt;

&lt;p&gt;In this setup, we are using Docker - so let's first create a docker user.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo usermod -a -G docker $USER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You don't have to use the docker installation method. However, at the time of this article, the 'Installation Script' method that SearXNG docs have instructions for had an issue with Redis installation failing. If you'd like to avoid Docker, we'd recommend first attempting the installation script method.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Pull Docker
&lt;/h3&gt;

&lt;p&gt;Next, run the below command. Swap &lt;code&gt;my-instance&lt;/code&gt; to a directory name of your choosing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir my-instance
cd my-instance
export PORT=8080
docker pull searxng/searxng
docker run --rm \
 -d -p ${PORT}:8080 \
             -v "${PWD}/searxng:/etc/searxng" \
 -e "BASE_URL=http://localhost:$PORT/" \
 -e "INSTANCE_NAME=my-instance" \
 searxng/searxng
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  5. Verify SearXNG Docker container is running
&lt;/h3&gt;

&lt;p&gt;Run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker container ls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see a &lt;code&gt;searxng/searxng&lt;/code&gt; image running on a container.&lt;/p&gt;




&lt;h3&gt;
  
  
  6. Edit SearXNG settings
&lt;/h3&gt;

&lt;p&gt;After project has been pulled down, a new &lt;code&gt;searxng&lt;/code&gt; directory will be created which contains a &lt;code&gt;settings.yml&lt;/code&gt; file. Edit this file using vim or similar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vim searxng/settings.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Locate the &lt;code&gt;search:&lt;/code&gt; section and add &lt;code&gt;- json&lt;/code&gt;. This is needed because SearXNG disables json responses by default, which is what we'll need for our integration with Msty.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;search:
//
formats: - html - json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, locate the &lt;code&gt;server:&lt;/code&gt; block and then the &lt;code&gt;default_http_headers&lt;/code&gt; section. We'll need to add a few access controls to headers so that we do not get CORS errors.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server:
//
default_http_headers:
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Robots-Tag: noindex, nofollow
Referrer-Policy: no-referrer
Access-Control-Allow-Origin: https://msty.studio &amp;lt;-- add this line
Access-Control-Allow-Methods: POST, OPTIONS &amp;lt;-- add this line
Access-Control-Allow-Headers: Content-Type, X-Requested-With &amp;lt;-- add this line
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the settings file.&lt;/p&gt;




&lt;h3&gt;
  
  
  7. Restart container
&lt;/h3&gt;

&lt;p&gt;Get the container ID by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;search:
docker container ls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Grab the container ID and use it in the following command to restart the container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker container restart {container id}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  8. Verify JSON format is being returned
&lt;/h3&gt;

&lt;p&gt;Before leaving the terminal, let's ensure that JSON is being returned when querying SearXNG.&lt;/p&gt;

&lt;p&gt;To do this, you can run the following in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -v "http://127.0.0.1:8080/search?q=tacos&amp;amp;format=json"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you see json being returned, then you are all ready to go! If you see a &lt;code&gt;403 Forbidden&lt;/code&gt; error, then you likely did not set json format correctly in settings or you did not restart the container.&lt;/p&gt;




&lt;h3&gt;
  
  
  9. Configure in Msty Studio Real-Time-Data
&lt;/h3&gt;

&lt;p&gt;Back in &lt;strong&gt;Msty Studio&lt;/strong&gt;, click on the globe icon for Real-Time Data (RTD), select the &lt;strong&gt;SearXNG&lt;/strong&gt; tab, and then enter the endpoint for SearXNG. The endpoint is going to be the domain you setup in Cleavr, or the ip address and port &lt;code&gt;https://your.public.ip.address:8080&lt;/code&gt;, or however you may have setup your server in the first step.&lt;/p&gt;

&lt;p&gt;If you are using &lt;strong&gt;Msty Studio&lt;/strong&gt; to connect to SearXNG:&lt;/p&gt;

&lt;p&gt;Enable RTD and verify that you received real-time data results in the response from the model you are conversing with.&lt;/p&gt;




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

&lt;p&gt;Setting up &lt;strong&gt;SearXNG&lt;/strong&gt; provides a highly customizable and privacy-focused search experience.&lt;br&gt;&lt;br&gt;
Whether you're utilizing it with &lt;strong&gt;Msty Studio&lt;/strong&gt; or running a standalone search portal, SearXNG will help you rest-assured that your searches are private.&lt;/p&gt;




&lt;h2&gt;
  
  
  Additional Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.searxng.org/" rel="noopener noreferrer"&gt;SearXNG Official Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/searxng/searxng" rel="noopener noreferrer"&gt;SearXNG GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=FFDSy3TX3YI" rel="noopener noreferrer"&gt;YouTube Video Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>privacy</category>
      <category>ai</category>
    </item>
    <item>
      <title>Exploring the Laravel Quick Commands in Cleavr</title>
      <dc:creator>Adam Miedema</dc:creator>
      <pubDate>Tue, 20 Jun 2023 18:52:40 +0000</pubDate>
      <link>https://forem.com/armiedema/exploring-the-laravel-quick-commands-in-cleavr-55l2</link>
      <guid>https://forem.com/armiedema/exploring-the-laravel-quick-commands-in-cleavr-55l2</guid>
      <description>&lt;p&gt;&lt;a href="https://cleavr.io"&gt;Cleavr.io&lt;/a&gt; comes pre-loaded with Laravel focused Quick Commands that can be ran for your production Laravel projects.&lt;/p&gt;

&lt;p&gt;But...&lt;/p&gt;

&lt;p&gt;Have you ever wondered what they are all for?&lt;/p&gt;

&lt;p&gt;Many of the commands are pretty straightforward. Though, there may be some that you aren't exactly clear what the purpose is...&lt;/p&gt;

&lt;p&gt;In this blog post, we'll simply go through the different commands and their purpose. Please feel free to use this as your cheat sheet!&lt;/p&gt;

&lt;h2&gt;
  
  
  Cache commands
&lt;/h2&gt;

&lt;p&gt;Caching is a great way to make your web applications run faster and smoother. With these cache commands, you can easily manage the cache of your production site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Artisan config cache
&lt;/h3&gt;

&lt;p&gt;Caching your configuration files into a single file can help your application run faster. To do this, use the &lt;code&gt;php artisan config:cache command&lt;/code&gt;. This will combine all of your configuration options into one file which will be quickly loaded by the framework. It's a great idea to run the php artisan config:cache command as part of your production deployment process for optimal performance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan config:cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Artisan cache clear
&lt;/h3&gt;

&lt;p&gt;The cache clear command will clear out all items from the cache, no matter which cache driver you are using.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan cache:clear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you'd like to target a particular store, you can use a quick command with a flag to do so. For example, &lt;code&gt;php artisan cache:clear --store redis&lt;/code&gt; will clear the redis cache store only.&lt;/p&gt;

&lt;p&gt;Furthermore, if you need to clear specific items, you can use the tags flag, like this: &lt;code&gt;php artisan cache:clear --tags=tag1,tag2&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Artisan event clear
&lt;/h3&gt;

&lt;p&gt;If you're using Events in your Laravel application, it's a good idea to cache them for improved performance. The &lt;code&gt;event:clear&lt;/code&gt; command can be used to delete your cached Events and rebuild the cache. This is a great way to keep your application running smoothly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan event:clear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Remove route cache
&lt;/h3&gt;

&lt;p&gt;Caching your routes is a great way to speed up your application's route registration process. If you've added a new route and want to make sure it's registered, you can clear the route cache on the server by running the &lt;code&gt;php artisan route:clear&lt;/code&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan route:clear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Remove the cached bootstrap files
&lt;/h3&gt;

&lt;p&gt;Laravel makes it easy for you to reset all the caches we've discussed by using a single Artisan command. This is a great way to quickly clear all the caches in your application, without having to run multiple commands.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan optimize:clear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Queue commands
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Artisan queue clear
&lt;/h3&gt;

&lt;p&gt;If you're looking to remove all jobs from the default queue and connection, you can easily do so using the &lt;code&gt;queue:clear&lt;/code&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan queue:clear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also create a new quick command and target a specific queue and connection, such as with the following which will target the email queue in redis - &lt;code&gt;php artisan queue:clear redis --queue=emails&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Artisan queue failed
&lt;/h3&gt;

&lt;p&gt;If you're looking to see which jobs have failed, running the &lt;code&gt;queue:failed&lt;/code&gt; command will show you the job ID, connection, queue, failure time and other details about the failed jobs that appear in the &lt;code&gt;failed_jobs&lt;/code&gt; database table.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan queue:failed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Flush failed queue jobs
&lt;/h3&gt;

&lt;p&gt;Running &lt;code&gt;queue:flush&lt;/code&gt; command removes all of the failed jobs from the &lt;code&gt;failed_jobs&lt;/code&gt; table.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan queue:flush
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Laravel Horizon commands
&lt;/h2&gt;

&lt;p&gt;If you are using Laravel Horizon for your project, which is a Redis-centric dashboard, then you can use the following commands to help manage Horizon.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pause Horizon
&lt;/h3&gt;

&lt;p&gt;If you need to pause the Horizon process, run the &lt;code&gt;horizon:pause&lt;/code&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan horizon:pause
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Continue Horizon
&lt;/h3&gt;

&lt;p&gt;When you're ready to continue processing jobs, run the &lt;code&gt;horizon:continue&lt;/code&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan horizon:continue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Check Horizon status
&lt;/h3&gt;

&lt;p&gt;If you'd like to know the current status of Horizon, run &lt;code&gt;horizon:status&lt;/code&gt; to check.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan horizon:status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Clear Horizon status
&lt;/h3&gt;

&lt;p&gt;If you would like to clear all jobs from your application's default queue, run the &lt;code&gt;horizon:clear&lt;/code&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan horizon:clear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Miscellaneous commands
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Artisan view clear
&lt;/h3&gt;

&lt;p&gt;It's a good idea to clear the compiled view files of your Laravel application every now and then. To do this, run the &lt;code&gt;view:clear&lt;/code&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan view:clear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Artisan clear compiled
&lt;/h3&gt;

&lt;p&gt;This command is used to remove the compiled class files from the framework, which are stored in the &lt;code&gt;bootstrap/cache/&lt;/code&gt; directory. By running this command, &lt;code&gt;compiled.php&lt;/code&gt; and &lt;code&gt;services.php&lt;/code&gt; will both be removed from the directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan clear-compiled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Artisan env
&lt;/h3&gt;

&lt;p&gt;Running this command will display what environment-mode the Laravel application is running in; ie: development, staging, production.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



</description>
      <category>cleavr</category>
      <category>laravel</category>
    </item>
    <item>
      <title>How to setup Meilisearch and Laravel Scout</title>
      <dc:creator>Adam Miedema</dc:creator>
      <pubDate>Thu, 09 Mar 2023 21:46:57 +0000</pubDate>
      <link>https://forem.com/armiedema/how-to-setup-meilisearch-and-laravel-scout-d98</link>
      <guid>https://forem.com/armiedema/how-to-setup-meilisearch-and-laravel-scout-d98</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/1SExF824u_E"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function toSearchableArray()
{
  $array = $this-&amp;gt;toArray();

  return [
'id' =&amp;gt; $array['id'],
'title' =&amp;gt; $array['title'],
'body'=&amp;gt; $array['body']
   ];
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Import existing database records to search indexes
&lt;/h2&gt;

&lt;p&gt;Laravel Scout is like a magical genie, providing us with a simple way to import records. With just one artisan command, you can quickly and easily import data into your database. Let's take a look at an example to see just how easy it is!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❯ php artisan scout:import "App\Models\Post"
Imported [App\Models\Post] models up to ID: 10
All [App\Models\Post] records have been imported.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Test out search
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; App\Models\Post::search('Lorem')-&amp;gt;get();
=&amp;gt; Illuminate\Database\Eloquent\Collection {#4219
     all: [
       App\Models\User {#4230
         id: 5,
         title: "Lorem ipsum dolor sit amet, consectetur",
         body: "...Sed ut perspiciatis unde omnis iste natus …",
       },
     ],
   }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Install Meilisearch on your server
&lt;/h2&gt;

&lt;p&gt;Install Meilisearch on your server following the official documentation. Use the Quick Script feature in Cleavr to add the following script and then run it on the target server to install Meilisearch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Add Meilisearch package
echo "deb [trusted=yes] https://apt.fury.io/meilisearch/ /" | sudo tee /etc/apt/sources.list.d/fury.list

# Update APT and install Meilisearch
sudo apt update &amp;amp;&amp;amp; sudo apt install meilisearch

# Launch Meilisearch
meilisearch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6: Add a process monitor for Meilisearch
&lt;/h2&gt;

&lt;p&gt;Now, let's add a process monitor in the Server &amp;gt; Process Monitors section. With a process monitor, you can start Meilisearch and keep it running smoothly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fr8gvvd5n058a9anc3hph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fr8gvvd5n058a9anc3hph.png" alt="add a new process monitor for meilisearch"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Update the master key &lt;code&gt;test123@@&lt;/code&gt; with the master key you'd like to use. Keep note of your master key as you'll need to add it in the next section to your environment file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Update your project's environment file
&lt;/h2&gt;

&lt;p&gt;Ready, set, update! It's time to make sure your project environment variables are up to date.&lt;/p&gt;

&lt;p&gt;Head over to Deployment &amp;gt; Workflow &amp;gt; Environment and get to work. Don't forget to add the following variables and you'll be good to go.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SCOUT_DRIVER=meilisearch
MEILISEARCH_HOST=http://127.0.0.1:7700
SCOUT_QUEUE=true
MEILISEARCH_KEY=test123@@
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Voila! You now have Meilisearch set up and ready to serve up relevant search results in no time. Now you can impress your friends and family with your lightning-fast search capabilities!&lt;/p&gt;

&lt;p&gt;Check out &lt;a href="https://docs.meilisearch.com/learn/getting_started/filtering_and_sorting.html#settings" rel="noopener noreferrer"&gt;Meilisearch documentaion&lt;/a&gt; for more info on how to use Meilisearch with your project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/kiran-mandal-82bb97122/" rel="noopener noreferrer"&gt;Kiran Mandal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Opening up port 80 and 443 for Oracle Cloud servers</title>
      <dc:creator>Adam Miedema</dc:creator>
      <pubDate>Tue, 04 Oct 2022 21:08:01 +0000</pubDate>
      <link>https://forem.com/armiedema/opening-up-port-80-and-443-for-oracle-cloud-servers-j35</link>
      <guid>https://forem.com/armiedema/opening-up-port-80-and-443-for-oracle-cloud-servers-j35</guid>
      <description>&lt;p&gt;Are you working on setting up your Oracle Cloud server and are facing issues with sites rendering as expected? Such as, getting time out issues when navigating to the site's url?&lt;/p&gt;

&lt;p&gt;This very well can be due to ports 80 and 443 not being fully opened.&lt;/p&gt;

&lt;p&gt;With &lt;a href="https://cleavr.io" rel="noopener noreferrer"&gt;Cleavr.io&lt;/a&gt;, you can connect to your Oracle account and provision some of Oracle's free server options. Cleavr.io as part of the provision process will run some updates to ensure ports 80 and 443 are open.&lt;/p&gt;

&lt;p&gt;However, if you are connecting to an Oracle server via the Custom Server option, then you'll need to manually perform some of these steps that Cleavr's Oracle intregration option does automatically.&lt;/p&gt;

&lt;p&gt;Before we get into the steps of making port 80 and 443 work properly on an Oracle server, you may be wondering why Cleavr only integrates with some of the free server options and does not provide paid tier options. In short, we wanted to provide users with a free server option and Oracle in one of the few providers that offers a decent free server option. However, the experience to connect with Oracle accounts is very rough around the edges plus these oddities around port connections have led us to delay integrating with Oracle further until their experiences improve.&lt;/p&gt;

&lt;p&gt;But, let's get back to the main issue. When you provision a server via Oracle's cloud interface, ports 80 and 443 won't be fully opened until you make the following updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Add ingress rules
&lt;/h2&gt;

&lt;p&gt;For this first step, you'll need to access your Oracle Cloud account.&lt;/p&gt;

&lt;p&gt;Port 80 and 443 will be closed by default. Assuming you plan to add websites to the server, open port 80 and 443 by clicking on &lt;strong&gt;Virtual Cloud Network&lt;/strong&gt; from the server instance details screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fmx4ofci051lkdz42iy0i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fmx4ofci051lkdz42iy0i.png" alt="setting up ports"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Security List&lt;/strong&gt; on the left menu.&lt;/p&gt;

&lt;p&gt;![setting up ports]((&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/43y5fy5paah81vle9bh8.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/43y5fy5paah81vle9bh8.png&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Click on the security list&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fnhatopiuq9v738xkcufb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fnhatopiuq9v738xkcufb.png" alt="setting up ports"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Add Ingress Rules&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fl5xwcjnuzhgmpr27t1bv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fl5xwcjnuzhgmpr27t1bv.png" alt="setting up ports"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the following source and port -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fsj0e2jznnt3ym7ogasey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fsj0e2jznnt3ym7ogasey.png" alt="setting up ports"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the ingress rule for port 80. Do the same process for port 443.&lt;/p&gt;

&lt;p&gt;At this juncture, you may be led to believe that ports 80 and 443 are opened. Afterall, you just set the ingress rule that opens up the ports.&lt;/p&gt;

&lt;p&gt;Not so fast!&lt;/p&gt;

&lt;p&gt;It'd be best and most expediant to scan the server ports to make sure that these ports are actually opened to the outside world.&lt;/p&gt;

&lt;p&gt;We'll use &lt;a href="https://doneo.io" rel="noopener noreferrer"&gt;Doneo.io's&lt;/a&gt; server port scanning tool to scan the server after making the above updates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fozs73p4yrp85nxviw1vm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fozs73p4yrp85nxviw1vm.png" alt="doneo port scan shows 443 is still closed"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the above, we can see that we still have some work to do to open up port 443.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Modify iptables
&lt;/h2&gt;

&lt;p&gt;For this step, we'll need to SSH into the server so we can run some terminal commands.&lt;/p&gt;

&lt;p&gt;Run the following commands:&lt;/p&gt;

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

iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
netfilter-persistent save


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

&lt;/div&gt;

&lt;p&gt;This will update the iptables to allow port 443. If port 80 was blocked after performing a port scan, then also run the above but swap out &lt;code&gt;443&lt;/code&gt; with &lt;code&gt;80&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;Now, run another server port scan to see if 443 is open.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fhxvgg6xtk0odu3izzm73.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fhxvgg6xtk0odu3izzm73.png" alt="doneo port scan shows 443 is open"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see from the screenshot above from the &lt;a href="https://doneo.io" rel="noopener noreferrer"&gt;Doneo.io&lt;/a&gt; port scan that 443 is now open.&lt;/p&gt;

&lt;p&gt;Your http and https sites should now be accessible to the public.&lt;/p&gt;

&lt;p&gt;Hopefully, this article saves you some time and stress as this can be a frustrating issue to resolve.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to skip NGINX cache server wide</title>
      <dc:creator>Adam Miedema</dc:creator>
      <pubDate>Fri, 23 Sep 2022 15:39:02 +0000</pubDate>
      <link>https://forem.com/armiedema/how-to-skip-nginx-cache-server-wide-3kml</link>
      <guid>https://forem.com/armiedema/how-to-skip-nginx-cache-server-wide-3kml</guid>
      <description>&lt;p&gt;In &lt;a href="https://cleavr.io"&gt;Cleavr.io&lt;/a&gt;, you can enable NGINX cache or FastCGI (for PHP-apps) for any site as well as configure cache settings for each site.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SfJjNAcp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pheqp90y68cjpvvow899.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SfJjNAcp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pheqp90y68cjpvvow899.png" alt="configure site nginx cache" width="708" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The great thing about caching your sites is that your server can serve a page, or elements within a page, directly from a saved cache store as opposed to having to re-generate the whole page, or element, every time a request is made to view it.&lt;/p&gt;

&lt;p&gt;This greatly increases the performance of your sites for your visitors since the server is able serve content quicker. However, you don't necessarily want everything to be cached and served to visitors directly from the cache store. This is especially true for more dynamic content, personalized content, and cookies.&lt;/p&gt;

&lt;p&gt;If you find yourself adding the same cache settings for all of your sites, then you may consider configuring cache settings server-wide to avoid repetitive work and maintenance.&lt;/p&gt;

&lt;p&gt;Here is how you can make that happen!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: SSH into your server
&lt;/h2&gt;

&lt;p&gt;Cleavr.io doesn't have a server-wide NGINX Cache config section currently. But, Cleavr.io offers the tools to help get this done easily and securely.&lt;/p&gt;

&lt;p&gt;The first step is to SSH into your server. If you have never SSH'd into your server before, &lt;a href="https://docs.cleavr.io/guides/ssh-server"&gt;then check out this guide to learn how to SSH into your Cleavr-managed servers.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you have SSH'd into your server, using the terminal, navigate to the NGINX &lt;code&gt;conf.d&lt;/code&gt; directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd /etc/nginx/conf.d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Add cache config files
&lt;/h2&gt;

&lt;p&gt;NGINX will automatically pick up and files in the &lt;code&gt;conf.d&lt;/code&gt; directory that end with &lt;code&gt;.conf&lt;/code&gt;. So, all we need to do is add a new file using the &lt;code&gt;.conf&lt;/code&gt; extension.&lt;/p&gt;

&lt;p&gt;You can add multiple config files and give them a descriptive name so you know what the config file is for. In fact, doing it this way may help you keep things more organized.&lt;/p&gt;

&lt;p&gt;Let's add a couple of examples.&lt;/p&gt;

&lt;p&gt;First, let's add a new file to exclude a path from being cached.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vim exclude-path-name-from-cache.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will create a new file and then allow you to edit the file via vim. New to vim? &lt;a href="https://opensource.com/article/19/3/getting-started-vim"&gt;Check out this guide on how to get started using vim&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For the contents of the configuration file, add the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if ($request_uri ~* "(/enter-path-here/)") {
    set $skip_cache 1;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Swap &lt;code&gt;enter-path-here&lt;/code&gt; with the path that you wish to exclude caching for.&lt;/p&gt;

&lt;p&gt;Save the file.&lt;/p&gt;

&lt;p&gt;Second, let's see how we can skip a cookie from being cached.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vim exclude-cookie-from-cache.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, we can add something like the following to the new file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if ($http_cookie ~* "enter-cookie-name") {
    set $skip_cache 1;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Swap &lt;code&gt;enter-cookie-name&lt;/code&gt; with the name of the cookie you wish to exlude from cache.&lt;/p&gt;

&lt;p&gt;Save the file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Restart NGINX
&lt;/h2&gt;

&lt;p&gt;We're done with the terminal, so we can close that and go back to &lt;a href="https://app.cleavr.io"&gt;Cleavr.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Locate the server that the cache configs were created on, go to the Services section, and then restart NGINX.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uR8kdHei--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bde5ildrgm4h1hbfzcdr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uR8kdHei--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bde5ildrgm4h1hbfzcdr.png" alt="restart nginx in cleavr" width="800" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it! NGINX will see the config files and will now refer to the new cache configs for all server caching operations.&lt;/p&gt;




&lt;p&gt;I hope you find this guide useful! Please check out our other guides and blog posts in the &lt;a href="https://cleavr.io/cleavr-slice"&gt;Cleavr Slice&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to get rid of unwanted access log entries</title>
      <dc:creator>Adam Miedema</dc:creator>
      <pubDate>Wed, 21 Sep 2022 00:18:46 +0000</pubDate>
      <link>https://forem.com/armiedema/how-to-get-rid-of-unwanted-access-log-entries-4poo</link>
      <guid>https://forem.com/armiedema/how-to-get-rid-of-unwanted-access-log-entries-4poo</guid>
      <description>&lt;p&gt;The NGINX access logs contains quite a lot of valuable information that helps provide insights into what content visitors are trying to access, how NGINX responds to the requests, and provides metadata about the visitor requesting the information.&lt;/p&gt;

&lt;p&gt;This information is super valuable when it comes to managing your websites, keeping your users happy, and providing insights on how your setup can be fortified.&lt;/p&gt;

&lt;p&gt;However, the logs can also easily get out of hand and get filled up with useless and undesirable information that makes it more difficult to scan logs for things that you're actually interested in. Some users even report Fail2Ban locking some of their site visitors out for misinterpreting harmless activity...&lt;/p&gt;

&lt;p&gt;To filter out undesireable logs, we can leverage NGINX variables and apply an &lt;code&gt;if&lt;/code&gt; statement to our logging directive.&lt;/p&gt;

&lt;p&gt;We'll provide a couple of examples. One at the user agent level and another at the directory / file extension level.&lt;/p&gt;

&lt;p&gt;In Cleavr, go to your Site &amp;gt; Site NGINX Config.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
# Map user agent and filter out logs from known clients, such as WP Rocket or an uptime monitor

map $http_user_agent $loggable {
    "WP Rocket" 0;
    default     1;
}

# Map a request URI, check for extensions to ignore

map $request_uri $loggable {
    ~*\.(ico)$  0;
    default     1;
}

# Then, add the if statement to the logging directive
server {
    access_log /var/log/nginx/example.com-access.log    combined if=$loggable;
    access_log /var/log/nginx/access.log                combined if=$loggable;
}

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

&lt;/div&gt;



&lt;p&gt;In the above, we are defining a variable &lt;code&gt;loggable&lt;/code&gt;. You can use whatever variable name you'd prefer. We're also assigning a &lt;code&gt;0&lt;/code&gt; to criteria in which we do not wish to log, such as requests from 'WP Rocket' as well as requests being made for &lt;code&gt;.ico&lt;/code&gt; extensions.&lt;/p&gt;

&lt;p&gt;We hope this helps you get your access logs nice and tidy so that you can get the most use out of them without being distracted.&lt;/p&gt;

</description>
      <category>nginx</category>
    </item>
    <item>
      <title>How to fix Laravel mixed-content errors</title>
      <dc:creator>Adam Miedema</dc:creator>
      <pubDate>Tue, 16 Aug 2022 21:27:00 +0000</pubDate>
      <link>https://forem.com/armiedema/how-to-fix-laravel-mixed-content-errors-3i87</link>
      <guid>https://forem.com/armiedema/how-to-fix-laravel-mixed-content-errors-3i87</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/27hQoxpU5Xg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Did you deploy out your Laravel app behind a load balancer, and were expecting to see this?&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--i9vD3TU9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wmuwn1qzi2th9tr1jut3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i9vD3TU9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wmuwn1qzi2th9tr1jut3.png" alt="laravel blog with no mixed content errors" width="880" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But... you see this?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cGqWa7PB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u2a33ngbc7xwzzpasejq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cGqWa7PB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u2a33ngbc7xwzzpasejq.png" alt="laravel blog with mixed content error" width="369" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You've come to the right place!&lt;/p&gt;
&lt;h2&gt;
  
  
  Why is it happening?
&lt;/h2&gt;

&lt;p&gt;Before we get into solutions, let's first quickly describe what's going on.&lt;/p&gt;

&lt;p&gt;When you set up your load balancing solution, you'll have one server dedicated to directing traffic for incoming requests to other servers.&lt;/p&gt;

&lt;p&gt;The SSL cert is applied to the load balancer server, but not to the target servers.&lt;/p&gt;

&lt;p&gt;When the request for the site is being made, the request hits the load balancer and is encrypted with SSL at the load balance server. Internally, the load balancer is making another request to a target server. However, this request is being made over port 80, which terminates SSL. The target server then returns the request via &lt;code&gt;http&lt;/code&gt; as &lt;code&gt;https&lt;/code&gt; was terminated during internal communication.&lt;/p&gt;

&lt;p&gt;So, that's basically it!&lt;/p&gt;

&lt;p&gt;The target server just doesn't know that it needs to return the info using &lt;code&gt;https&lt;/code&gt;. Because of this, mixed-content will be flagged and the site won't render correctly as assets are being provided over &lt;code&gt;http&lt;/code&gt; instead of &lt;code&gt;https&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is also why you may be very confused if you first deployed out your Laravel app on a regular server and not behind a load balancer, where everything rendered how you'd expect.&lt;/p&gt;

&lt;p&gt;Now, let's discuss a couple of ways to solve this issue.&lt;/p&gt;
&lt;h2&gt;
  
  
  Solution 1 - force URLs to 'https'
&lt;/h2&gt;

&lt;p&gt;The first method is to simply tell your app that it needs to use https for URL creation when running in production mode.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;AppServiceProvider.php&lt;/code&gt;, we'll add some code to &lt;code&gt;public function boot()&lt;/code&gt; to force URLs to &lt;code&gt;https&lt;/code&gt; when the app is running in production mode.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// add this to the top of the file
use Illuminate\Support\Facades\URL;


// add this statement to public function boot()
if($this-&amp;gt;app-&amp;gt;environment('production')) {
    URL::forceScheme('https');
};

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

&lt;/div&gt;



&lt;p&gt;After making the above updates, deploy your app and then the mixed-content issue will be no more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solution 2 - Add load balancer IP to list of trusted proxies
&lt;/h2&gt;

&lt;p&gt;The second solution is moreso the recommended solution per Laravel documentation, which is to add trusted proxy external IPs to a list of approved proxies.&lt;/p&gt;

&lt;p&gt;To do this, we'll update the middleware via &lt;code&gt;TrustProxies.php&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Locate the line &lt;code&gt;protected $proxies;&lt;/code&gt; and update is as follow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;protected $proxies = [
        '1.2.3.4'  //replace with load balancer's public IP
    ];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After making the above updates, deploy your app and boom! No more mixed-content errors!&lt;/p&gt;




&lt;p&gt;We hope this guide helps you if you're running into this, or a similar issue!&lt;/p&gt;

&lt;p&gt;Want to learn more or have an idea for another guide? &lt;a href="https://forum.cleavr.io/"&gt;Chat with us on the forum&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For this example, we used a random Laravel example we found on &lt;a href="https://github.com/chetans9/simple-laravel-blog"&gt;GitHub by Chetans9&lt;/a&gt; and forked it.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to deploy a monorepo with Cleavr</title>
      <dc:creator>Adam Miedema</dc:creator>
      <pubDate>Wed, 06 Jul 2022 00:16:55 +0000</pubDate>
      <link>https://forem.com/armiedema/how-to-deploy-a-monorepo-with-cleavr-15mi</link>
      <guid>https://forem.com/armiedema/how-to-deploy-a-monorepo-with-cleavr-15mi</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/DKoW5lGykko"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Let's deploy a monorepo project with &lt;a href="https://cleavr.io"&gt;Cleavr.io&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;In this guide, we'll use Strapi's demo application, &lt;a href="https://foodadvisor.strapi.io/"&gt;Food Advisor&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This demo application has the following setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Front-end: React.js&lt;/li&gt;
&lt;li&gt;Back-end: Strapi v4&lt;/li&gt;
&lt;li&gt;Node version: v16&lt;/li&gt;
&lt;li&gt;Database: SQLite - we won't need to setup a db server in this example&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this demo, I forked the Strapi repo &lt;a href="https://github.com/strapi/foodadvisor"&gt;strapi/foodadvisor&lt;/a&gt;; however, you should be ok to deploy directly from this public repo instead of forking to your account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Provision a server
&lt;/h2&gt;

&lt;p&gt;In &lt;a href="https://cleavr.io"&gt;Cleavr.io&lt;/a&gt;, provision a new server. Since Strapi requires a little more juice to build apps during deployment, deploy a server with a couple of cores.&lt;/p&gt;

&lt;p&gt;You may be able to get away with a 1-core server, but if during deployment you see 'JavaScript Heap Out Of Memory', then you'll either need to enable GitHub Actions or provision a more beefy server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Add Strapi backend site
&lt;/h2&gt;

&lt;p&gt;Once you server is provisioned, add a new &lt;strong&gt;Strapi 4&lt;/strong&gt; site.&lt;/p&gt;

&lt;p&gt;Make sure to set node version to 16 if Node has not already been installed on the server.&lt;/p&gt;

&lt;p&gt;Also, make sure to set the port number to &lt;strong&gt;1337&lt;/strong&gt;. The app has this port hard coded, so we'll need to explicitly set it to 1337. Or, you can update the code to refer to the port assigned to the site.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3Wf3RBfO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h7pk9t6845j328c1jt7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3Wf3RBfO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h7pk9t6845j328c1jt7a.png" alt="add a new strapi v4 app to server" width="880" height="1330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Add&lt;/strong&gt; to add the backend Strapi site to the server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Add NodeJS SSR frontend site
&lt;/h2&gt;

&lt;p&gt;After the backend site completes installation, add the frontend site.&lt;/p&gt;

&lt;p&gt;Since the frontend uses React.js / Next.js, we'll set the new site to &lt;strong&gt;NodeJS SSR&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Make sure to set the following configurations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Entry Point: &lt;code&gt;npm&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Arguments: &lt;code&gt;start&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Artifact Path: &lt;code&gt;.next&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vk_rIUvk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/60nkqwp2009z0hmty1cs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vk_rIUvk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/60nkqwp2009z0hmty1cs.png" alt="add a new next.js app to server" width="880" height="1361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Add&lt;/strong&gt; to add the frontend Next.js site to the server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Configure Strapi web app and deploy
&lt;/h2&gt;

&lt;p&gt;Now that we have the frontend and backend sites on our server, we'll head to the Web Apps section to further configure the web apps and then deploy them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configure repository
&lt;/h3&gt;

&lt;p&gt;In the web app section, click on the backend site and go to the settings &amp;gt; repo tab.&lt;/p&gt;

&lt;p&gt;Select a GitHub version control provider and the set the following configs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repository: &lt;code&gt;strapi/foodadvisor&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Branch to deploy: &lt;code&gt;master&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;App Folder: &lt;code&gt;api&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click &lt;strong&gt;Update&lt;/strong&gt; to save settings.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configure env variables
&lt;/h3&gt;

&lt;p&gt;Next, head over to the &lt;strong&gt;Environment&lt;/strong&gt; tab and add the following variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HOST=0.0.0.0
PORT=1337
STRAPI_ADMIN_CLIENT_URL=http://your.backendurl.here
STRAPI_ADMIN_CLIENT_PREVIEW_SECRET=ARNFCb9zrC9ZHm5hZzCigWivD40icS4s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;br&gt;
Leave url as 'http', using 'https' will break it.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Sync&lt;/strong&gt; to save.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add seed db deployment hook
&lt;/h3&gt;

&lt;p&gt;Next, in the deployment hook section, add a new deployment hook that will seed the db.&lt;/p&gt;

&lt;p&gt;Create a new hook, add a title, and then fill in with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd {{ releasePath }}/api
yarn seed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Place the hook directly after the build hook.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deploy
&lt;/h3&gt;

&lt;p&gt;Time to deply!&lt;/p&gt;

&lt;p&gt;Go to the deployment tab and deploy out the backend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Configure NodeJS SSR web app and deploy
&lt;/h2&gt;

&lt;p&gt;Let's now configure the frontend web app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configure repository
&lt;/h3&gt;

&lt;p&gt;In the web app section, click on the frontend site and go to the settings &amp;gt; repo tab.&lt;/p&gt;

&lt;p&gt;Select a GitHub version control provider and the set the following configs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repository: &lt;code&gt;strapi/foodadvisor&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Branch to deploy: &lt;code&gt;master&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;App Folder: &lt;code&gt;client&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click &lt;strong&gt;Update&lt;/strong&gt; to save settings.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configure env variables
&lt;/h3&gt;

&lt;p&gt;Next, head over to the &lt;strong&gt;Environment&lt;/strong&gt; tab and add the following variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NEXT_PUBLIC_API_URL=http://your.backendurl.here
PREVIEW_SECRET=ARNFCb9zrC9ZHm5hZzCigWivD40icS4s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;br&gt;
Leave url as 'http', using 'https' will break it.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Sync&lt;/strong&gt; to save.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deploy
&lt;/h3&gt;

&lt;p&gt;Time to deply!&lt;/p&gt;

&lt;p&gt;Go to the deployment tab and deploy out the frontend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Check out the Food Advisor site!
&lt;/h2&gt;

&lt;p&gt;Now that the backend and frontend have been deployed, visit the frontend URL and you should see the Food Advisor website! 🎉&lt;/p&gt;

</description>
      <category>cleavr</category>
    </item>
    <item>
      <title>Getting started with Nuxt3 or Content2? Start here!</title>
      <dc:creator>Adam Miedema</dc:creator>
      <pubDate>Wed, 01 Jun 2022 02:48:29 +0000</pubDate>
      <link>https://forem.com/armiedema/getting-started-with-nuxt3-or-content2-start-here-4gl7</link>
      <guid>https://forem.com/armiedema/getting-started-with-nuxt3-or-content2-start-here-4gl7</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/sryBaFQ-msg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Nuxt v3 is getting more and more mature every week. Though Nuxt3 is still technically in Beta, you've probably been itching to migrate over or start new projects from scratch using Nuxt3, especially to take advantage of Vue3 and even Tailwind v3 if you're a Tailwind-buff. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://v3.nuxtjs.org/community/roadmap"&gt;Check out the Nuxt3 road map to see what they're working on next!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the &lt;a href="https://cleavr.io"&gt;Cleavr.io&lt;/a&gt; side, we've increasingly seen more users deploy out Nuxt3 apps. AND... We've also been receiving some support around Nuxt3 deployments. &lt;/p&gt;

&lt;p&gt;Because of the increasing popularity amongst our users, as well as because we've been working on a sister project for Cleavr, &lt;a href="https://feedmas.com"&gt;Feedmas.com&lt;/a&gt;, We decided to utilize Nuxt3 for Feedmas's marketing site. We were also thrilled to see that Nuxt/Content v2 also recently was released, and is compatible with Nuxt3, so of course had to get rolling on that new goodness as well!&lt;/p&gt;

&lt;p&gt;After working with the new candy 🍬 from Nuxt and Content, as well as with common Nuxt3 deployment issues we've fielded at Cleavr, we wanted to provide a couple tips to get your started with your own Nuxt3 and Content2 projects!&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started quickly with a Nuxt3 starter
&lt;/h2&gt;

&lt;p&gt;One of the first places you'll go to get started with Nuxt3 is likely their &lt;a href="https://v3.nuxtjs.org/getting-started/quick-start"&gt;Quick Start Guide&lt;/a&gt;. We definitely recommend reviewing this guide, especially as it is sure to be updated often in the coming days. &lt;/p&gt;

&lt;p&gt;Though, the install wizard output may leave you wondering exactly what to do next. If you know what stack you want to start with, we recommend searching Github for some &lt;a href="https://github.com/search?q=nuxt3+starter"&gt;Nuxt3 starter templates&lt;/a&gt;. This is just to get you up and running a little bit quicker. However, don't just fork any-ol project. Be sure to review the repo to see what exactly it is you'd be installing and avoid anything suspicious. &lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Nuxt/Content 2
&lt;/h2&gt;

&lt;p&gt;Installation is easy and pretty straightforward in the Nuxt/Content &lt;a href="https://content.nuxtjs.org/get-started"&gt;Get Started Guide&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Assuming you've started with an existing project, all you have to do is (using yarn, npm and pnpm are also available):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add --dev @nuxt/content
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then add the module to your &lt;code&gt;nuxt.config.ts&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { defineNuxtConfig } from 'nuxt'
export default defineNuxtConfig({
  modules: [
    '@nuxt/content'
  ],
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We didn't run across any issues with this part of process. It was all as smooth as butter. 🧈&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Nuxt/Content2 basic tips
&lt;/h2&gt;

&lt;p&gt;These are probably very painfully obvious tips: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://content.nuxtjs.org/guide/writing/content-directory"&gt;Read the guide&lt;/a&gt; it is sure to change and is full of helpful guidance&lt;/li&gt;
&lt;li&gt;The catch all slug is &lt;code&gt;pages/[...slug].vue&lt;/code&gt; - be sure to name your page this if using the &lt;code&gt;&amp;lt;ContentDoc&amp;gt;&lt;/code&gt; component. We missed this initially and took a couple rounds of looking at the docs before realizing the mistake. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;ContentDoc&amp;gt;&lt;/code&gt; is pretty awesome. Like seriously awesome. This will automatically locate the &lt;code&gt;/content/doc-name.md&lt;/code&gt; file based off the slug (page URI) - no need to have a fetch script! 🎉 Though, we did run across some URI case sensitivy issues. So, you can explicilty call a markdown page by adding the path. For example: &lt;code&gt;&amp;lt;ContentDoc path="/guide"&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tailwind Typography
&lt;/h2&gt;

&lt;p&gt;We also added &lt;a href="https://tailwindcss.com/docs/typography-plugin"&gt;Tailwind Typograpgy&lt;/a&gt; to our project. If you're using Nuxt/Content, we highly recommend installing Tailwind and the Typography plugin to style your converted markdown. &lt;/p&gt;

&lt;p&gt;One of the cooler things we just wanted to point out with Typography, is that now you can easily define styles inline for prose. &lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://tailwindcss.com/docs/typography-plugin#element-modifiers"&gt;list of modifiers here&lt;/a&gt; and be relieved. 😅&lt;/p&gt;

&lt;h2&gt;
  
  
  Nuxt3 deployment tips
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cleavr.io"&gt;Cleavr&lt;/a&gt; recently released some enhancements, including improved support for Nuxt3 and NodeJS 16 deployments. &lt;a href="https://cleavr.io/cleavr-slice/nodejs-improvements"&gt;You can read more about the goodies here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;However, there are some issues that we've experienced while deploying &lt;a href="https://feedmas.com"&gt;Feedmas.com&lt;/a&gt; that we've also seen some of our users come across during their own deployments of Nuxt 3. &lt;/p&gt;

&lt;p&gt;The symptoms are typically memory leaks and high-utilization of the server's processors. We've also see some build and activation failures. &lt;/p&gt;

&lt;p&gt;The main tips that we have for deployments that seem to have resolved the majorirty of Nuxt3 deployment issues are: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make sure all of your dependecies are up-to-date&lt;/li&gt;
&lt;li&gt;If you are using one of the various Tailwind modules, add them to the build &amp;gt; transpile list in &lt;code&gt;nuxt.configs.ts&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;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;build: {
        transpile: ['@heroicons/vue', '@headlessui/vue', '@tailwindcss/typography'],
    },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;We hope that you find these tips helpful if you are using Nuxt3, Nuxt/Content2 and have ran into similar issues. &lt;/p&gt;

</description>
      <category>nuxt</category>
      <category>content</category>
      <category>nuxt3</category>
    </item>
  </channel>
</rss>
