{"id":2437,"date":"2026-05-26T16:59:02","date_gmt":"2026-05-26T16:59:02","guid":{"rendered":"https:\/\/ai-box.eu\/?p=2437"},"modified":"2026-05-26T17:30:19","modified_gmt":"2026-05-26T17:30:19","slug":"firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server","status":"publish","type":"post","link":"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/","title":{"rendered":"Firecrawl in Your Own LAN: Sovereign Web Scraping with a Local Ollama Server"},"content":{"rendered":"<p>It has been itching me for quite a while: <strong>Firecrawl<\/strong> self-hosted, in my own LAN, with no cloud dependencies, connected to my local Ollama server. Web scraping is one of the key capabilities a AI agent needs if it is supposed to do serious research and also have access to up-to-date information from the internet. I wanted to run exactly this capability on my own infrastructure for my NemoClaw experiments, and as a side effect get a better understanding of <strong>NVIDIA&#8217;s OpenShell<\/strong>. Today I&#8217;ll show you how I set up Firecrawl on my second A6000 workstation.<\/p>\n<p>The main problem upfront: The popular self-hosting tutorials you find on the web are <strong>no longer up to date<\/strong>. The Firecrawl codebase has evolved significantly in recent months \u2013 with new containers, different environment variables, and a nasty race condition at startup that everyone runs into who simply executes <code>docker compose up -d<\/code>. I&#8217;m collecting exactly these stumbling blocks here and giving you a guide that takes you straight to your goal.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#What_has_changed_compared_to_older_guides\" >What has changed compared to older guides<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#The_target_architecture\" >The target architecture<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Why_Firecrawl_actually_needs_an_LLM_and_an_embedding_model\" >Why Firecrawl actually needs an LLM and an embedding model<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Preparing_the_Ollama_inference_server\" >Preparing the Ollama inference server<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Check_and_pull_the_models_if_necessary\" >Check and pull the models if necessary<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Testing_the_OpenAI-compatible_endpoint\" >Testing the OpenAI-compatible endpoint<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Installing_Docker_on_the_Firecrawl_host\" >Installing Docker on the Firecrawl host<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Cloning_Firecrawl\" >Cloning Firecrawl<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#The_central_configuration_file_env\" >The central configuration file .env<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Creating_the_env\" >Creating the .env<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Generating_a_secure_BULL_AUTH_KEY\" >Generating a secure BULL_AUTH_KEY<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#The_three_most_important_points_about_the_env\" >The three most important points about the .env<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Build_start_of_Firecrawl_%E2%80%93_watch_out_for_the_race_condition\" >Build &amp; start of Firecrawl \u2013 watch out for the race condition!<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Building_the_container_images\" >Building the container images<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#The_staggered_start\" >The staggered start<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Checking_the_status\" >Checking the status<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Functional_test\" >Functional test<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Simple_scrape\" >Simple scrape<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Testing_the_AI_feature\" >Testing the AI feature<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#Queue_admin_UI\" >Queue admin UI<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#My_personal_conclusion\" >My personal conclusion<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"What_has_changed_compared_to_older_guides\"><\/span>What has changed compared to older guides<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Three things that really cost me time on my first attempt:<\/p>\n<ul>\n<li><strong>New containers in the stack:<\/strong> Instead of just <code>api<\/code>, <code>worker<\/code>, <code>playwright-service<\/code> and <code>redis<\/code>, there are now additional containers <code>nuq-postgres<\/code> (for queue persistence) and <code>rabbitmq<\/code> (as a message broker). The separate <code>worker<\/code> container is gone \u2013 its tasks are now embedded inside the <code>api<\/code> container.<\/li>\n<li><strong>Different variable name for the LLM connection:<\/strong> Older guides use <code>OLLAMA_BASE_URL=http:\/\/host:11434\/api<\/code>. The current codebase ignores this variable completely. Instead, you have to set <code>OPENAI_BASE_URL=http:\/\/host:11434\/v1<\/code>, because Firecrawl now speaks Ollama&#8217;s OpenAI-compatible endpoint.<\/li>\n<li><strong>Race condition at startup:<\/strong> The <code>api<\/code> container tries to open a Postgres connection immediately on startup. But Postgres takes 10 to 20 seconds before it accepts connections. The result: The API container crashes and takes all workers down with it. The solution: Start backend services first, wait, and only then bring up the API.<\/li>\n<\/ul>\n<p>This also makes it clear: This guide applies to the state of <strong>May 2026<\/strong>. If you&#8217;re rebuilding this later, it&#8217;s worth taking a quick look at the Firecrawl repo to check whether something has changed again.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"The_target_architecture\"><\/span>The target architecture<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Before I dive in, here is the overall picture:<\/p>\n<ul>\n<li><strong>Ollama host (192.168.2.57):<\/strong> My A6000 server with the local models <code>qwen3.6:27b<\/code> for chat and <code>qwen3-embedding:4b<\/code> for embeddings.<\/li>\n<li><strong>Firecrawl host (192.168.2.119):<\/strong> My A6000Ada workstation, on which the Firecrawl stack runs and exposes port 3002.<\/li>\n<li><strong>Communication:<\/strong> Firecrawl calls Ollama via the OpenAI-compatible endpoint <code>\/v1<\/code>. Completely without cloud, completely inside the LAN.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Why_Firecrawl_actually_needs_an_LLM_and_an_embedding_model\"><\/span>Why Firecrawl actually needs an LLM and an embedding model<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>A legitimate question I asked myself when I first looked at the <code>.env<\/code>: <strong>Why does a web scraper need a language model at all?<\/strong> Let me break this down briefly, because the answer is crucial for the model choice.<\/p>\n<p>Firecrawl can in fact do a lot without AI. <strong>Loading HTML, extracting markdown, following links during a crawl, building a sitemap<\/strong> \u2013 all of that is classic, rule-based software. If you just call a simple <code>scrape<\/code> with <code>formats: [\"markdown\"]<\/code>, no LLM is involved at all.<\/p>\n<p>The LLM only comes into play when you want <strong>structured extraction<\/strong>. For example, when you ask Firecrawl to build a JSON object from a page according to a specific schema (\u201egive me title, main topics and publication date as JSON&#8221;). This semantic translation of plain text into structured data is something a deterministic rule simply cannot do. That is exactly what you need a language model for \u2013 one that understands the content and can rewrite it accordingly.<\/p>\n<p>The <strong>embedding model<\/strong> serves a different purpose. It converts texts into vectors, so that Firecrawl can compare semantically similar content. Firecrawl uses this, for example, when filtering a crawl down to topically relevant pages or when reranking search results.<\/p>\n<p>In practice, this means for my setup: My agent calls Firecrawl most of the time only with the request \u201egive me markdown&#8221; and does the actual analysis itself with its own reasoning model. Even so, I configure both models in the <code>.env<\/code> so that the premium features are available when I need them, or when my OpenClaw or Hermes agent wants to use them. This costs me nothing extra \u2013 the models run on my Ollama server anyway. That is the beautiful thing about local AI: whether Firecrawl uses them or not, it costs me nothing.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Preparing_the_Ollama_inference_server\"><\/span>Preparing the Ollama inference server<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>All the following steps run on the inference server on which I have set up <strong>Ollama<\/strong>. Ollama provides the language models that Firecrawl needs for the AI features described above. I&#8217;m not going to cover here how you set up Ollama and make it available across the network as an inference service for all your machines \u2013 I have described that in earlier articles in detail.<\/p>\n<p>What&#8217;s important for the further Firecrawl configuration is that the models you configure in the <code>.env<\/code> are actually available on the Ollama inference server.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Check_and_pull_the_models_if_necessary\"><\/span>Check and pull the models if necessary<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>I&#8217;m using the <code>qwen3.6:27b<\/code> model for chat and the <code>qwen3-embedding:4b<\/code> model for embeddings. That&#8217;s already everything you need to provide on your Ollama server.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Testing_the_OpenAI-compatible_endpoint\"><\/span>Testing the OpenAI-compatible endpoint<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>As already mentioned, Firecrawl no longer talks to Ollama&#8217;s native <code>\/api\/...<\/code> endpoints, but to the OpenAI-compatible endpoints on <code>\/v1\/...<\/code>. I do the test best from the Firecrawl host, so I also verify network reachability:<\/p>\n<p><strong>Command:<\/strong> <code>curl http:\/\/192.168.2.57:11434\/v1\/models<\/code><\/p>\n<p>Expected output: A JSON list with the locally available models. If you get a 404 there, Ollama is either too old or not reachable.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Installing_Docker_on_the_Firecrawl_host\"><\/span>Installing Docker on the Firecrawl host<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Now we are back on the machine that will become our <strong>Firecrawl host<\/strong>. If you already have Docker and the Compose plugin installed, you can skip this section. With the following command you can check whether everything is in place.<\/p>\n<p><strong>Command:<\/strong> <code>docker --version &amp;&amp; docker compose version<\/code><\/p>\n<p>If not, here is the short version of the official Docker installation for Ubuntu.<\/p>\n<p>First, let&#8217;s remove any old packages:<\/p>\n<pre class=\"wp-block-code\"><code>for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do\r\n  sudo apt-get remove -y $pkg 2&gt;\/dev\/null\r\ndone\r\n<\/code><\/pre>\n<p>Now add the official Docker repository:<\/p>\n<p><strong>Command:<\/strong> <code>sudo apt-get update<\/code><br \/>\n<strong>Command:<\/strong> <code>sudo apt-get install -y ca-certificates curl<\/code><br \/>\n<strong>Command:<\/strong> <code>sudo install -m 0755 -d \/etc\/apt\/keyrings<\/code><br \/>\n<strong>Command:<\/strong> <code>sudo curl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg -o \/etc\/apt\/keyrings\/docker.asc<\/code><br \/>\n<strong>Command:<\/strong> <code>sudo chmod a+r \/etc\/apt\/keyrings\/docker.asc<\/code><br \/>\n<strong>Command:<\/strong> <code>echo \"deb [arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.asc] https:\/\/download.docker.com\/linux\/ubuntu $(. \/etc\/os-release &amp;&amp; echo \"$VERSION_CODENAME\") stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null<\/code><\/p>\n<p>Then run the update command and afterwards install the Docker Engine plus the Compose plugin:<\/p>\n<p><strong>Command:<\/strong> <code>sudo apt-get update<\/code><br \/>\n<strong>Command:<\/strong> <code>sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin<\/code><\/p>\n<p>Now add your own user to the docker group:<\/p>\n<p><strong>Command:<\/strong> <code>sudo usermod -aG docker $USER<\/code><br \/>\n<strong>Command:<\/strong> <code>newgrp docker<\/code><\/p>\n<p>To wrap up, verify once more that everything works:<\/p>\n<p><strong>Command:<\/strong> <code>docker run --rm hello-world<\/code><\/p>\n<p>With that, everything is prepared and we can clone Firecrawl to our host.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Cloning_Firecrawl\"><\/span>Cloning Firecrawl<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>I clone the repository to <code>\/opt\/firecrawl<\/code> and take over the owner rights, so I don&#8217;t have to work with <code>sudo<\/code> all the time later:<\/p>\n<p><strong>Command:<\/strong> <code>cd \/opt<\/code><br \/>\n<strong>Command:<\/strong> <code>sudo git clone https:\/\/github.com\/firecrawl\/firecrawl.git<\/code><br \/>\n<strong>Command:<\/strong> <code>sudo chown -R $USER:$USER \/opt\/firecrawl<\/code><br \/>\n<strong>Command:<\/strong> <code>cd \/opt\/firecrawl<\/code><\/p>\n<h2><span class=\"ez-toc-section\" id=\"The_central_configuration_file_env\"><\/span>The central configuration file .env<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>This is where newcomers make most of the mistakes. The <code>.env<\/code> file determines how Firecrawl talks to Ollama and which models are used. <strong>Pay close attention to the variable names.<\/strong> They have changed compared to older guides and caused me a few headaches.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Creating_the_env\"><\/span>Creating the .env<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>With the following command you open an empty <code>.env<\/code> file to fill it.<\/p>\n<p><strong>Command:<\/strong> <code>nano \/opt\/firecrawl\/.env<\/code><\/p>\n<p>Now insert the following content into the <code>.env<\/code> file. Make sure to adapt the IP address to your Ollama inference server and also the model you want to use.<\/p>\n<pre class=\"wp-block-code\"><code># ===== Mandatory =====\r\nPORT=3002\r\nHOST=0.0.0.0\r\nUSE_DB_AUTHENTICATION=false\r\n\r\n# ===== Ollama via OpenAI-compatible API =====\r\n# IMPORTANT: The variable is now called OPENAI_BASE_URL (no longer OLLAMA_BASE_URL!)\r\n# The path is \/v1 (no longer \/api!)\r\nOPENAI_BASE_URL=http:\/\/192.168.2.57:11434\/v1\r\nOPENAI_API_KEY=ollama\r\nMODEL_NAME=qwen3.6:27b\r\nMODEL_EMBEDDING_NAME=qwen3-embedding:4b\r\n\r\n# ===== Queue admin =====\r\nBULL_AUTH_KEY=CHANGE_ME_TO_A_LONG_RANDOM_STRING\r\n\r\n# ===== Optional: allow local webhooks =====\r\nALLOW_LOCAL_WEBHOOKS=true\r\n<\/code><\/pre>\n<p>You save your changes with <strong>CTRL+X<\/strong>, then <strong>Y<\/strong> and <strong>ENTER<\/strong>.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Generating_a_secure_BULL_AUTH_KEY\"><\/span>Generating a secure BULL_AUTH_KEY<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>I replace the placeholder <code>CHANGE_ME_TO_A_LONG_RANDOM_STRING<\/code> with a real random string:<\/p>\n<p><strong>Command:<\/strong> <code>openssl rand -hex 32<\/code><\/p>\n<p>Paste the output into the <code>.env<\/code>. This key ends up in the admin URL for the queue later, so really make sure it&#8217;s random and long.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"The_three_most_important_points_about_the_env\"><\/span>The three most important points about the .env<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>The <strong>variable name <code>OPENAI_BASE_URL<\/code><\/strong> is new. Older guides use <code>OLLAMA_BASE_URL<\/code>. That variable, however, is <strong>ignored<\/strong> by the current codebase.<\/li>\n<li>The <strong>path <code>\/v1<\/code><\/strong> instead of <code>\/api<\/code> is mandatory. Because Firecrawl speaks Ollama&#8217;s OpenAI-compatible endpoint.<\/li>\n<li>The <strong>OPENAI_API_KEY<\/strong> must be set, but it accepts any arbitrary string. I just use <code>ollama<\/code> as a dummy.<\/li>\n<\/ul>\n<p>By the way, self-hosting does not support Supabase or Fire-engine. The many warnings you will see at startup about missing <code>SUPABASE_*<\/code>, <code>SEARXNG_*<\/code> and <code>SLACK_*<\/code> variables are all expected and harmless.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Build_start_of_Firecrawl_%E2%80%93_watch_out_for_the_race_condition\"><\/span>Build &amp; start of Firecrawl \u2013 watch out for the race condition!<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>This is the phase where most guides simply recommend <code>docker compose up -d<\/code>, and then you sadly have to pull a face because nothing actually runs. That&#8217;s exactly what happened to me. It may be down to my hardware, which is not the fastest \u2013 but more on that in a moment.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Building_the_container_images\"><\/span>Building the container images<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>First, we build the container images with the following command:<\/p>\n<p><strong>Command:<\/strong> <code>cd \/opt\/firecrawl &amp;&amp; docker compose build<\/code><\/p>\n<p>The first build takes 15 to 35 minutes depending on your hardware. On my workstation it was about 25 minutes. Plan for that with plenty of tea or coffee.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"The_staggered_start\"><\/span>The staggered start<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>If you now simply run <code>docker compose up -d<\/code>, here is what most likely happens:<\/p>\n<ol>\n<li>All containers are reported as \u201eStarted&#8221;.<\/li>\n<li>Seconds later, the <code>firecrawl-api-1<\/code> container is gone again.<\/li>\n<li>In the logs of the API container you find <code>ECONNREFUSED 172.19.0.2:5432<\/code>.<\/li>\n<\/ol>\n<p>This is the <strong>race condition<\/strong> with Postgres. The <code>nuq-prefetch-worker<\/code> inside the API container tries to open a Postgres connection immediately on startup and dies if Postgres is not ready yet. This tears down the entire API container along with all worker processes.<\/p>\n<p>My workaround that works reliably for me consists of four steps:<\/p>\n<p><strong>Step 1:<\/strong> Start the backend services and let them warm up.<\/p>\n<p><strong>Command:<\/strong> <code>docker compose up -d nuq-postgres rabbitmq redis playwright-service<\/code><\/p>\n<p><strong>Step 2:<\/strong> Wait 20 seconds until Postgres accepts connections.<\/p>\n<p><strong>Command:<\/strong> <code>sleep 20<\/code><\/p>\n<p><strong>Step 3:<\/strong> Optionally verify that Postgres is ready.<\/p>\n<p><strong>Command:<\/strong> <code>docker compose logs nuq-postgres --tail=5<\/code><\/p>\n<p>What you want to see in the output is the line <code>database system is ready to accept connections<\/code>.<\/p>\n<p><strong>Step 4:<\/strong> Pull up the API container.<\/p>\n<p><strong>Command:<\/strong> <code>docker compose up -d api<\/code><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Checking_the_status\"><\/span>Checking the status<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Now check with the following command that all containers are running and ready.<\/p>\n<p><strong>Command:<\/strong> <code>docker compose ps<\/code><\/p>\n<p>You should now see <strong>five running containers<\/strong>:<\/p>\n<ul>\n<li><code>firecrawl-api-1<\/code> (with embedded workers)<\/li>\n<li><code>firecrawl-nuq-postgres-1<\/code><\/li>\n<li><code>firecrawl-rabbitmq-1<\/code><\/li>\n<li><code>firecrawl-redis-1<\/code><\/li>\n<li><code>firecrawl-playwright-service-1<\/code><\/li>\n<\/ul>\n<p>All with status <code>Up<\/code>. If the API container shows <code>Exited<\/code> or is missing entirely, check the logs:<\/p>\n<p><strong>Command:<\/strong> <code>docker compose logs api --tail=80<\/code><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Functional_test\"><\/span>Functional test<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Now we just need to find out whether Firecrawl really runs on our host. I ran the following command on the host itself in a terminal window:<\/p>\n<p><strong>Command:<\/strong> <code>curl http:\/\/localhost:3002\/<\/code><\/p>\n<p>Expected response:<\/p>\n<pre class=\"wp-block-code\"><code>{\"message\":\"Firecrawl API\",\"documentation_url\":\"https:\/\/docs.firecrawl.dev\"}\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Simple_scrape\"><\/span>Simple scrape<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<pre class=\"wp-block-code\"><code>curl -X POST http:\/\/localhost:3002\/v2\/scrape \\\r\n  -H 'Content-Type: application\/json' \\\r\n  -d '{\r\n    \"url\": \"https:\/\/ai-box.eu\",\r\n    \"formats\": [\"markdown\"]\r\n  }'\r\n<\/code><\/pre>\n<p>Expected response: A JSON object with the field <code>data.markdown<\/code>, in which the scraped page is returned as markdown. That is the moment when I always briefly rub my hands. Now I have my very own web scraper, fully local, in my own network.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Testing_the_AI_feature\"><\/span>Testing the AI feature<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>To verify the Ollama connection, we now run a structured scrape that returns the result in the JSON format we specify:<\/p>\n<p><strong>Command:<\/strong> <code>curl -X POST http:\/\/localhost:3002\/v2\/scrape -H 'Content-Type: application\/json' -d '{<br \/>\n\"url\": \"https:\/\/ai-box.eu\",<br \/>\n\"formats\": [{<br \/>\n\"type\": \"json\",<br \/>\n\"schema\": {<br \/>\n\"type\": \"object\",<br \/>\n\"properties\": {<br \/>\n\"title\": {\"type\": \"string\"},<br \/>\n\"main_topics\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}}<br \/>\n}<br \/>\n}<br \/>\n}]<br \/>\n}'<br \/>\n<\/code><\/p>\n<p>If a clean, structured JSON with title and topics comes back, your Ollama connection works.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Queue_admin_UI\"><\/span>Queue admin UI<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Open in your browser:<\/p>\n<p><strong>URL:<\/strong> <code>http:\/\/&lt;firecrawl-host&gt;:3002\/admin\/&lt;BULL_AUTH_KEY&gt;\/queues<\/code><\/p>\n<p>Here you see running, failed and waiting jobs. Handy for debugging and monitoring during longer crawl sessions.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"My_personal_conclusion\"><\/span>My personal conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Running Firecrawl in my own LAN was the next logical step in the Sovereign AI setup for me: If I already have my Ollama server local and my agent host (NemoClaw) local, then the web research component also belongs in my own server park. With this setup, my agent can now read and browse web pages without a single byte leaving the house. Exactly the mindset that draws me to the whole local AI topic.<\/p>\n<p>What cost me the most nerves during the setup was not the standard Linux tasks, but the <strong>outdated guides<\/strong> on the web. I spent a good two hours trying to understand why my API container kept dying. It took me a while to realise that it was not my setup, but a race condition baked into the current build of the codebase. That&#8217;s exactly why I&#8217;m writing this updated guide: so you save the time I had to invest.<\/p>\n<p>In the next article I&#8217;ll show you how I connected this Firecrawl instance to my <strong>OpenClaw agent inside the NemoClaw sandbox<\/strong> \u2013 including the somewhat tricky OpenShell egress policy I had to configure for it. That is the actually exciting part, where all the building blocks come together.<\/p>\n<p><em>See you in the next part!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>It has been itching me for quite a while: Firecrawl self-hosted, in my own LAN, with no cloud dependencies, connected to my local Ollama server. Web scraping is one of the key capabilities a AI agent needs if it is supposed to do serious research and also have access to up-to-date information from the internet. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2436,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[162,8,50],"tags":[1030,640,353,978,1392,1393,1306,1356,1397,306,1134,1394,1399,1362,1398,1396,1400,1032,1198,1395],"class_list":["post-2437","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-large-language-models-en","category-news","category-top-story-en","tag-ai-agent","tag-ai-box","tag-docker","tag-docker-compose","tag-firecrawl","tag-firecrawl-self-hosted","tag-local-ai-infrastructure","tag-nemoclaw","tag-nuq-postgres","tag-ollama-en","tag-openai-compatible-api","tag-openai_base_url","tag-qwen3-embedding","tag-qwen3-6","tag-rabbitmq","tag-race-condition","tag-self-hosting","tag-sovereign-ai","tag-ubuntu-24-04","tag-web-scraping","et-has-post-format-content","et_post_format-et-post-format-standard"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Firecrawl in Your Own LAN: Sovereign Web Scraping with a Local Ollama Server - Exploring the Future: Inside the AI Box<\/title>\n<meta name=\"description\" content=\"Firecrawl self-hosted with Ollama: updated 2026 guide covering new containers, OPENAI_BASE_URL, and the fix for the startup race condition.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Firecrawl in Your Own LAN: Sovereign Web Scraping with a Local Ollama Server - Exploring the Future: Inside the AI Box\" \/>\n<meta property=\"og:description\" content=\"Firecrawl self-hosted with Ollama: updated 2026 guide covering new containers, OPENAI_BASE_URL, and the fix for the startup race condition.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/\" \/>\n<meta property=\"og:site_name\" content=\"Exploring the Future: Inside the AI Box\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-26T16:59:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-26T17:30:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ai-box.eu\/wp-content\/uploads\/2026\/05\/Local_Firecrawl_service-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1928\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Maker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Ingmar_Stapel\" \/>\n<meta name=\"twitter:site\" content=\"@Ingmar_Stapel\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Maker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/news\\\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\\\/2437\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/news\\\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\\\/2437\\\/\"},\"author\":{\"name\":\"Maker\",\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/#\\\/schema\\\/person\\\/cc91d08618b3feeef6926591b465eab1\"},\"headline\":\"Firecrawl in Your Own LAN: Sovereign Web Scraping with a Local Ollama Server\",\"datePublished\":\"2026-05-26T16:59:02+00:00\",\"dateModified\":\"2026-05-26T17:30:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/news\\\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\\\/2437\\\/\"},\"wordCount\":1911,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/news\\\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\\\/2437\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ai-box.eu\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Local_Firecrawl_service-scaled.jpg\",\"keywords\":[\"AI agent\",\"AI-Box\",\"Docker\",\"Docker Compose\",\"Firecrawl\",\"Firecrawl self-hosted\",\"local AI infrastructure\",\"NemoClaw\",\"nuq-postgres\",\"Ollama\",\"OpenAI compatible API\",\"OPENAI_BASE_URL\",\"qwen3-embedding\",\"qwen3.6\",\"rabbitmq\",\"Race-Condition\",\"Self-Hosting\",\"sovereign AI\",\"Ubuntu 24.04\",\"Web-Scraping\"],\"articleSection\":[\"Large Language Models\",\"News\",\"Top story\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/ai-box.eu\\\/en\\\/news\\\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\\\/2437\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/news\\\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\\\/2437\\\/\",\"url\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/news\\\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\\\/2437\\\/\",\"name\":\"Firecrawl in Your Own LAN: Sovereign Web Scraping with a Local Ollama Server - Exploring the Future: Inside the AI Box\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/news\\\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\\\/2437\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/news\\\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\\\/2437\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ai-box.eu\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Local_Firecrawl_service-scaled.jpg\",\"datePublished\":\"2026-05-26T16:59:02+00:00\",\"dateModified\":\"2026-05-26T17:30:19+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/#\\\/schema\\\/person\\\/cc91d08618b3feeef6926591b465eab1\"},\"description\":\"Firecrawl self-hosted with Ollama: updated 2026 guide covering new containers, OPENAI_BASE_URL, and the fix for the startup race condition.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/news\\\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\\\/2437\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ai-box.eu\\\/en\\\/news\\\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\\\/2437\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/news\\\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\\\/2437\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ai-box.eu\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Local_Firecrawl_service-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/ai-box.eu\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Local_Firecrawl_service-scaled.jpg\",\"width\":2560,\"height\":1928,\"caption\":\"Local Firecrawl service\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/news\\\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\\\/2437\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Start\",\"item\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Firecrawl in Your Own LAN: Sovereign Web Scraping with a Local Ollama Server\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/\",\"name\":\"Exploring the Future: Inside the AI Box\",\"description\":\"Inside the AI Box, we share our experiences and discoveries in the world of artificial intelligence.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/#\\\/schema\\\/person\\\/cc91d08618b3feeef6926591b465eab1\",\"name\":\"Maker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e96b93fc3c7e50c1f21c5c6b1f146dc4867936141360830b328947b32cacf93a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e96b93fc3c7e50c1f21c5c6b1f146dc4867936141360830b328947b32cacf93a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e96b93fc3c7e50c1f21c5c6b1f146dc4867936141360830b328947b32cacf93a?s=96&d=mm&r=g\",\"caption\":\"Maker\"},\"description\":\"I live in Bavaria near Munich. In my head I always have many topics and try out especially in the field of Internet new media much in my spare time. I write on the blog because it makes me fun to report about the things that inspire me. I am happy about every comment, about suggestion and very about questions.\",\"sameAs\":[\"https:\\\/\\\/ai-box.eu\"],\"url\":\"https:\\\/\\\/ai-box.eu\\\/en\\\/author\\\/ingmars\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Firecrawl in Your Own LAN: Sovereign Web Scraping with a Local Ollama Server - Exploring the Future: Inside the AI Box","description":"Firecrawl self-hosted with Ollama: updated 2026 guide covering new containers, OPENAI_BASE_URL, and the fix for the startup race condition.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/","og_locale":"en_US","og_type":"article","og_title":"Firecrawl in Your Own LAN: Sovereign Web Scraping with a Local Ollama Server - Exploring the Future: Inside the AI Box","og_description":"Firecrawl self-hosted with Ollama: updated 2026 guide covering new containers, OPENAI_BASE_URL, and the fix for the startup race condition.","og_url":"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/","og_site_name":"Exploring the Future: Inside the AI Box","article_published_time":"2026-05-26T16:59:02+00:00","article_modified_time":"2026-05-26T17:30:19+00:00","og_image":[{"width":2560,"height":1928,"url":"https:\/\/ai-box.eu\/wp-content\/uploads\/2026\/05\/Local_Firecrawl_service-scaled.jpg","type":"image\/jpeg"}],"author":"Maker","twitter_card":"summary_large_image","twitter_creator":"@Ingmar_Stapel","twitter_site":"@Ingmar_Stapel","twitter_misc":{"Written by":"Maker","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#article","isPartOf":{"@id":"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/"},"author":{"name":"Maker","@id":"https:\/\/ai-box.eu\/en\/#\/schema\/person\/cc91d08618b3feeef6926591b465eab1"},"headline":"Firecrawl in Your Own LAN: Sovereign Web Scraping with a Local Ollama Server","datePublished":"2026-05-26T16:59:02+00:00","dateModified":"2026-05-26T17:30:19+00:00","mainEntityOfPage":{"@id":"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/"},"wordCount":1911,"commentCount":0,"image":{"@id":"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#primaryimage"},"thumbnailUrl":"https:\/\/ai-box.eu\/wp-content\/uploads\/2026\/05\/Local_Firecrawl_service-scaled.jpg","keywords":["AI agent","AI-Box","Docker","Docker Compose","Firecrawl","Firecrawl self-hosted","local AI infrastructure","NemoClaw","nuq-postgres","Ollama","OpenAI compatible API","OPENAI_BASE_URL","qwen3-embedding","qwen3.6","rabbitmq","Race-Condition","Self-Hosting","sovereign AI","Ubuntu 24.04","Web-Scraping"],"articleSection":["Large Language Models","News","Top story"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/","url":"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/","name":"Firecrawl in Your Own LAN: Sovereign Web Scraping with a Local Ollama Server - Exploring the Future: Inside the AI Box","isPartOf":{"@id":"https:\/\/ai-box.eu\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#primaryimage"},"image":{"@id":"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#primaryimage"},"thumbnailUrl":"https:\/\/ai-box.eu\/wp-content\/uploads\/2026\/05\/Local_Firecrawl_service-scaled.jpg","datePublished":"2026-05-26T16:59:02+00:00","dateModified":"2026-05-26T17:30:19+00:00","author":{"@id":"https:\/\/ai-box.eu\/en\/#\/schema\/person\/cc91d08618b3feeef6926591b465eab1"},"description":"Firecrawl self-hosted with Ollama: updated 2026 guide covering new containers, OPENAI_BASE_URL, and the fix for the startup race condition.","breadcrumb":{"@id":"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#primaryimage","url":"https:\/\/ai-box.eu\/wp-content\/uploads\/2026\/05\/Local_Firecrawl_service-scaled.jpg","contentUrl":"https:\/\/ai-box.eu\/wp-content\/uploads\/2026\/05\/Local_Firecrawl_service-scaled.jpg","width":2560,"height":1928,"caption":"Local Firecrawl service"},{"@type":"BreadcrumbList","@id":"https:\/\/ai-box.eu\/en\/news\/firecrawl-in-your-own-lan-sovereign-web-scraping-with-a-local-ollama-server\/2437\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Start","item":"https:\/\/ai-box.eu\/en\/"},{"@type":"ListItem","position":2,"name":"Firecrawl in Your Own LAN: Sovereign Web Scraping with a Local Ollama Server"}]},{"@type":"WebSite","@id":"https:\/\/ai-box.eu\/en\/#website","url":"https:\/\/ai-box.eu\/en\/","name":"Exploring the Future: Inside the AI Box","description":"Inside the AI Box, we share our experiences and discoveries in the world of artificial intelligence.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ai-box.eu\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/ai-box.eu\/en\/#\/schema\/person\/cc91d08618b3feeef6926591b465eab1","name":"Maker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/e96b93fc3c7e50c1f21c5c6b1f146dc4867936141360830b328947b32cacf93a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e96b93fc3c7e50c1f21c5c6b1f146dc4867936141360830b328947b32cacf93a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e96b93fc3c7e50c1f21c5c6b1f146dc4867936141360830b328947b32cacf93a?s=96&d=mm&r=g","caption":"Maker"},"description":"I live in Bavaria near Munich. In my head I always have many topics and try out especially in the field of Internet new media much in my spare time. I write on the blog because it makes me fun to report about the things that inspire me. I am happy about every comment, about suggestion and very about questions.","sameAs":["https:\/\/ai-box.eu"],"url":"https:\/\/ai-box.eu\/en\/author\/ingmars\/"}]}},"_links":{"self":[{"href":"https:\/\/ai-box.eu\/en\/wp-json\/wp\/v2\/posts\/2437","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ai-box.eu\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ai-box.eu\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ai-box.eu\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ai-box.eu\/en\/wp-json\/wp\/v2\/comments?post=2437"}],"version-history":[{"count":1,"href":"https:\/\/ai-box.eu\/en\/wp-json\/wp\/v2\/posts\/2437\/revisions"}],"predecessor-version":[{"id":2438,"href":"https:\/\/ai-box.eu\/en\/wp-json\/wp\/v2\/posts\/2437\/revisions\/2438"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ai-box.eu\/en\/wp-json\/wp\/v2\/media\/2436"}],"wp:attachment":[{"href":"https:\/\/ai-box.eu\/en\/wp-json\/wp\/v2\/media?parent=2437"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ai-box.eu\/en\/wp-json\/wp\/v2\/categories?post=2437"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ai-box.eu\/en\/wp-json\/wp\/v2\/tags?post=2437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}