{"id":240,"date":"2025-09-16T23:29:55","date_gmt":"2025-09-16T21:29:55","guid":{"rendered":"https:\/\/www.genexio.net\/blog\/?p=240"},"modified":"2026-01-21T07:49:00","modified_gmt":"2026-01-21T06:49:00","slug":"on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration","status":"publish","type":"post","link":"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/","title":{"rendered":"On-Prem AI in the Company Network: Docker + Portainer + Node-RED on Raspberry Pi, Llama on Mac Studio, and FileMaker (OData) Integration"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p><strong>Goal.<\/strong> Build an end-to-end local pipeline that:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Generates short <strong>English sentences<\/strong> with a chosen <em>topic<\/em> and <em>creativity<\/em> (temperature),<\/li>\n\n\n\n<li>Shows results in a <strong>Node-RED Dashboard<\/strong>,<\/li>\n\n\n\n<li>Optionally saves them to <strong>FileMaker<\/strong> via <strong>OData<\/strong> (on demand).<\/li>\n<\/ol>\n\n\n\n<p>Everything runs <strong>on-prem<\/strong>, with a free local LLM (Llama via <em>Ollama<\/em>), no cloud dependency or API costs.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Architecture<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Raspberry Pi<\/strong> (Debian 12\/Bookworm): Docker host + <strong>Portainer CE<\/strong> + <strong>Node-RED<\/strong>. IP: <code>192.168.1.229<\/code><\/li>\n\n\n\n<li><strong>Mac Studio<\/strong>: <strong>Ollama<\/strong> exposing the Llama model on the LAN. IP: <code>192.168.1.28<\/code>, port <code>11434<\/code><\/li>\n\n\n\n<li><strong>FileMaker Server<\/strong>: OData endpoint over HTTPS. IP: <code>192.168.1.27<\/code>, DB: <code>arduino_connect<\/code>, EntitySet: <code>ai_sentences<\/code><\/li>\n<\/ul>\n\n\n\n<p>Flow: Dashboard \u2192 HTTP to Ollama \u2192 clean\/format \u2192 (optional) on-demand upload to FileMaker via OData.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1) Raspberry Pi: Docker, Portainer, Node-RED<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">1.1 Install Docker Engine<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># update base\nsudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y\n\n# utils\nsudo apt install -y ca-certificates curl gnupg lsb-release\n\n# Docker repository (Debian)\nsudo install -m 0755 -d \/etc\/apt\/keyrings\ncurl -fsSL https:\/\/download.docker.com\/linux\/debian\/gpg | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg\necho \"deb &#91;arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.gpg] \\\nhttps:\/\/download.docker.com\/linux\/debian $(. \/etc\/os-release; echo $VERSION_CODENAME) stable\" \\\n| sudo tee \/etc\/apt\/sources.list.d\/docker.list &amp;gt; \/dev\/null\n\nsudo apt update\nsudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n\n# optional quality of life\nsudo systemctl enable --now docker\nsudo usermod -aG docker $USER\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1.2 Portainer CE (web UI for Docker)<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>docker volume create portainer_data\ndocker run -d \\\n  -p 8000:8000 -p 9443:9443 \\\n  --name portainer \\\n  --restart=always \\\n  -v \/var\/run\/docker.sock:\/var\/run\/docker.sock \\\n  -v portainer_data:\/data \\\n  portainer\/portainer-ce:latest\n<\/code><\/pre>\n\n\n\n<p>Open <code>https:\/\/192.168.1.229:9443<\/code>, create the admin user, then \u201cGet Started\u201d.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1.3 Node-RED in Docker (persistent volume)<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>docker volume create nodered_data\ndocker run -d \\\n  --name nodered \\\n  -p 1880:1880 \\\n  --restart=always \\\n  -v nodered_data:\/data \\\n  nodered\/node-red:latest\n<\/code><\/pre>\n\n\n\n<p>Editor: <code>http:\/\/192.168.1.229:1880<\/code><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1.4 Node-RED Dashboard<\/h4>\n\n\n\n<p>In Node-RED: <em>Menu \u2192 Manage palette \u2192 Install<\/em> \u2192 install <code>node-red-dashboard<\/code>. The UI will be at <code>http:\/\/192.168.1.229:1880\/ui<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2) Mac Studio: Llama via Ollama (LAN)<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 Install Ollama<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># with Homebrew\nbrew install ollama\n# or official script\ncurl -fsSL https:\/\/ollama.com\/install.sh | sh\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 Expose Ollama to the LAN<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>export OLLAMA_HOST=0.0.0.0:11434\nollama serve\n<\/code><\/pre>\n\n\n\n<p>Keep that process running (or create a service\/launchd). Allow inbound 11434 in macOS firewall.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.3 Pull the model<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>ollama pull llama3:latest\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.4 Remote tests from the Pi<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -s http:\/\/192.168.1.28:11434\/api\/tags\ncurl -s http:\/\/192.168.1.28:11434\/api\/generate \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"model\":\"llama3:latest\",\"prompt\":\"Say hello\",\"stream\":false}'\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3) Node-RED Flow Design<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">3.1 Palette used<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>node-red-dashboard<\/code> (ui_button, ui_text, ui_template, ui_slider, \u2026)<\/li>\n\n\n\n<li><code>http request<\/code><\/li>\n\n\n\n<li><code>function<\/code>, <code>change<\/code><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.2 Flow concept<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Inputs<\/strong>: a topic text and a creativity slider (temperature).<\/li>\n\n\n\n<li><strong>Button<\/strong>: \u201cGet sentence\u201d.<\/li>\n\n\n\n<li><strong>HTTP request<\/strong> to Ollama at <code>http:\/\/192.168.1.28:11434\/api\/generate<\/code>.<\/li>\n\n\n\n<li><strong>Cleaning<\/strong>: convert the model output to one clean line.<\/li>\n\n\n\n<li><strong>Dashboard<\/strong>: show the sentence + a Copy button.<\/li>\n\n\n\n<li><strong>History<\/strong>: keep the last 10 sentences in <code>flow.history<\/code>.<\/li>\n\n\n\n<li><strong>On-demand upload<\/strong>: button \u201cUpload last sentence\u201d \u2192 FileMaker OData.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3.3 Function: build request for Ollama<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Build prompt + HTTP request (Ollama)\nconst topic = (flow.get('topic') || '').trim();\nconst temperature = (typeof flow.get('temperature') === 'number') ? flow.get('temperature') : 0.7;\n\nlet prompt;\nif (topic) {\n  prompt = `Write ONE short, natural English sentence about: \"${topic}\". `\n         + `No translation, no bullets. Max 15 words.`;\n} else {\n  prompt = `Write ONE short daily-life English sentence (no translation, no bullets). Max 15 words.`;\n}\n\nmsg.method = 'POST';\nmsg.url = 'http:\/\/192.168.1.28:11434\/api\/generate';    \/\/ Mac Studio IP\nmsg.headers = { 'Content-Type': 'application\/json' };\nmsg.payload = JSON.stringify({\n  model: 'llama3:latest',\n  prompt,\n  options: { temperature },\n  stream: false\n});\nreturn msg;\n<\/code><\/pre>\n\n\n\n<p><strong>Node-RED v4 tip:<\/strong> set the <em>http request<\/em> node to <strong>Method = use<\/strong> and leave URL <strong>empty<\/strong> so it honors <code>msg.method<\/code>\/<code>msg.url<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3.4 Function: clean \u2192 single line<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>const resp = msg.payload &amp;amp;&amp;amp; msg.payload.response ? String(msg.payload.response) : String(msg.payload || '');\nlet s = resp.trim();\ns = s.replace(\/^&#91;-*\\d\\.)\\s]+\/, '');        \/\/ remove bullets\/numbers\ns = s.replace(\/^\"|\"$|^'|'$\/g, '');\ns = s.replace(\/\\s+\/g, ' ').trim();\nmsg.payload = s;\n\n\/\/ remember the last sentence for on-demand upload\nflow.set('lastSentence', s);\nreturn msg;\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3.5 History (last 10)<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>let hist = flow.get('history') || &#91;];\nconst now = new Date().toISOString().replace('T',' ').slice(0,19);\nhist.unshift({ t: now, topic: (flow.get('topic') || ''), s: msg.payload });\nif (hist.length &amp;gt; 10) hist = hist.slice(0,10);\nflow.set('history', hist);\nreturn msg;\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4) FileMaker via OData (on-demand insert)<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">4.1 Prerequisites<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>User with privilege \u201cAccess via OData (fmoda)\u201d (e.g., <code>odata\/odata<\/code>).<\/li>\n\n\n\n<li>Published EntitySet for the table (e.g., <code>ai_sentences<\/code>). <code>curl -k -u odata:odata \"https:\/\/192.168.1.27\/fmi\/odata\/v4\/arduino_connect\/$metadata\" | grep -i EntitySet<\/code><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 Button \u201cUpload last sentence\u201d<\/h4>\n\n\n\n<p><strong>Function<\/strong> (build row):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let s = (flow.get('lastSentence') || '').trim();\nif (!s) { node.warn('No last sentence available'); return null; }\n\nconst row = {\n  text_en: s,\n  topic: (flow.get('topic') || ''),\n  temperature: (flow.get('temperature') ?? null),\n  created_at: new Date().toISOString()\n};\n\nmsg.headers = { 'Content-Type': 'application\/json', 'Accept': 'application\/json' };\nmsg.payload = JSON.stringify(row);\nreturn msg;\n<\/code><\/pre>\n\n\n\n<p><strong>http request<\/strong> node (OData):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Method: <code>POST<\/code><\/li>\n\n\n\n<li>URL: <code>https:\/\/192.168.1.27\/fmi\/odata\/v4\/arduino_connect\/ai_sentences<\/code><\/li>\n\n\n\n<li>Return: <em>a parsed JSON object<\/em><\/li>\n\n\n\n<li>Use authentication: <strong>basic<\/strong> \u2192 <code>odata<\/code>\/<code>odata<\/code><\/li>\n\n\n\n<li>Enable secure (SSL\/TLS): <strong>ON<\/strong> \u2192 TLS config with <em>Allow self-signed<\/em> \u2705 and <em>Verify server certificate<\/em> \u274c<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5) Dashboard UX<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Controls<\/strong>: Preset (topic), Creativity slider, Get sentence, Upload last sentence.<\/li>\n\n\n\n<li><strong>Output<\/strong>: Sentence (bold) + Copy button; History list (last 10); Status text.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">6) Troubleshooting (what actually mattered)<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>HTTPS vs HTTP<\/strong>: Ollama is <em>HTTP<\/em>. Using <code>https:\/\/...<\/code> on port 11434 causes \u201cSSL wrong version number\u201d.<\/li>\n\n\n\n<li><strong>Node-RED v4 override<\/strong>: if the http node has URL\/Method set, <code>msg.url<\/code>\/<code>msg.method<\/code> won\u2019t override. Use <em>Method = use<\/em> + empty URL, or set URL\/Method directly in the node and only build the payload in the function.<\/li>\n\n\n\n<li><strong>OData 401\/403<\/strong>: user\/privileges.<\/li>\n\n\n\n<li><strong>OData 404<\/strong>: wrong EntitySet name (check <code>$metadata<\/code>).<\/li>\n\n\n\n<li><strong>OData 415\/400<\/strong>: missing <code>Content-Type: application\/json<\/code> or field names not matching the published table.<\/li>\n\n\n\n<li><strong>Self-signed cert<\/strong>: allow self-signed and disable \u201cverify\u201d in the http node TLS config.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">7) Why an <em>on-prem<\/em> AI matters (and is free)<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Privacy &amp; compliance<\/strong>: data never leaves the LAN.<\/li>\n\n\n\n<li><strong>Cost control<\/strong>: free models via Ollama; no per-token bills.<\/li>\n\n\n\n<li><strong>Low latency<\/strong>: instant responses for short prompts.<\/li>\n\n\n\n<li><strong>Availability<\/strong>: works even if the Internet is down.<\/li>\n\n\n\n<li><strong>Fast iteration<\/strong>: change model\/prompt\/temperature freely.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">8) Possible extensions<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On-demand Italian translation (second Ollama call).<\/li>\n\n\n\n<li>De-duplication before upload (compare with latest row).<\/li>\n\n\n\n<li>CSV export of today\u2019s sentences.<\/li>\n\n\n\n<li>Extra tone\/tags (e.g., \u201cformal\u201d, \u201cfriendly\u201d, \u201ctechnical\u201d).<\/li>\n\n\n\n<li>Dashboard auth; automatic backup of the <code>nodered_data<\/code> volume.<\/li>\n<\/ul>\n\n\n\n<p><em>Slides and Node-RED flow exports<\/em> are attached in the project repository.<\/p>\n\n\n\n<figure class=\"wp-block-gallery alignwide has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"456\" src=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-1024x456.png\" alt=\"Screenshot 2025 09 16 Alle 23.01.44 2 1024x456\" class=\"wp-image-246\" style=\"width:1170px;height:auto\" title=\"On-Prem AI in the Company Network: Docker + Portainer + Node-RED on Raspberry Pi, Llama on Mac Studio, and FileMaker (OData) Integration\" srcset=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-1024x456.png 1024w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-300x134.png 300w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-768x342.png 768w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-1536x684.png 1536w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-2048x912.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"476\" src=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.02.18-1-1024x476.png\" alt=\"Screenshot 2025 09 16 Alle 23.02.18 1 1024x476\" class=\"wp-image-245\" style=\"width:1170px;height:auto\" title=\"On-Prem AI in the Company Network: Docker + Portainer + Node-RED on Raspberry Pi, Llama on Mac Studio, and FileMaker (OData) Integration\" srcset=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.02.18-1-1024x476.png 1024w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.02.18-1-300x140.png 300w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.02.18-1-768x357.png 768w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.02.18-1-1536x714.png 1536w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.02.18-1-2048x952.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"466\" src=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.02.43-1024x466.png\" alt=\"Screenshot 2025 09 16 Alle 23.02.43 1024x466\" class=\"wp-image-244\" style=\"width:1170px;height:auto\" title=\"On-Prem AI in the Company Network: Docker + Portainer + Node-RED on Raspberry Pi, Llama on Mac Studio, and FileMaker (OData) Integration\" srcset=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.02.43-1024x466.png 1024w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.02.43-300x137.png 300w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.02.43-768x350.png 768w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.02.43-1536x700.png 1536w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.02.43-2048x933.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Goal. Build an end-to-end local pipeline that: Everything runs on-prem, with a free local LLM (Llama via Ollama), no cloud dependency or API costs. Architecture [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,5,15,11],"tags":[],"class_list":["post-240","post","type-post","status-publish","format-standard","hentry","category-ai","category-filemaker","category-node-red","category-raspberry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>On-Prem AI in the Company Network: Docker + Portainer + Node-RED on Raspberry Pi, Llama on Mac Studio, and FileMaker (OData) Integration - My blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"On-Prem AI in the Company Network: Docker + Portainer + Node-RED on Raspberry Pi, Llama on Mac Studio, and FileMaker (OData) Integration - My blog\" \/>\n<meta property=\"og:description\" content=\"Goal. Build an end-to-end local pipeline that: Everything runs on-prem, with a free local LLM (Llama via Ollama), no cloud dependency or API costs. Architecture [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/\" \/>\n<meta property=\"og:site_name\" content=\"My blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-16T21:29:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-21T06:49:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-scaled.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1139\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"genexio\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"genexio\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/\"},\"author\":{\"name\":\"genexio\",\"@id\":\"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a\"},\"headline\":\"On-Prem AI in the Company Network: Docker + Portainer + Node-RED on Raspberry Pi, Llama on Mac Studio, and FileMaker (OData) Integration\",\"datePublished\":\"2025-09-16T21:29:55+00:00\",\"dateModified\":\"2026-01-21T06:49:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/\"},\"wordCount\":541,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a\"},\"image\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-1024x456.png\",\"articleSection\":[\"AI\",\"filemaker\",\"node-red\",\"raspberry\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/\",\"url\":\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/\",\"name\":\"On-Prem AI in the Company Network: Docker + Portainer + Node-RED on Raspberry Pi, Llama on Mac Studio, and FileMaker (OData) Integration - My blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-1024x456.png\",\"datePublished\":\"2025-09-16T21:29:55+00:00\",\"dateModified\":\"2026-01-21T06:49:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#primaryimage\",\"url\":\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-scaled.png\",\"contentUrl\":\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-scaled.png\",\"width\":2560,\"height\":1139},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.genexio.net\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"On-Prem AI in the Company Network: Docker + Portainer + Node-RED on Raspberry Pi, Llama on Mac Studio, and FileMaker (OData) Integration\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.genexio.net\/blog\/#website\",\"url\":\"https:\/\/www.genexio.net\/blog\/\",\"name\":\"My blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.genexio.net\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a\",\"name\":\"genexio\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g\",\"caption\":\"genexio\"},\"logo\":{\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g\"},\"sameAs\":[\"http:\/\/www.genexio.net\/blog\"],\"url\":\"https:\/\/www.genexio.net\/blog\/author\/genexio\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"On-Prem AI in the Company Network: Docker + Portainer + Node-RED on Raspberry Pi, Llama on Mac Studio, and FileMaker (OData) Integration - My blog","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:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/","og_locale":"en_GB","og_type":"article","og_title":"On-Prem AI in the Company Network: Docker + Portainer + Node-RED on Raspberry Pi, Llama on Mac Studio, and FileMaker (OData) Integration - My blog","og_description":"Goal. Build an end-to-end local pipeline that: Everything runs on-prem, with a free local LLM (Llama via Ollama), no cloud dependency or API costs. Architecture [&hellip;]","og_url":"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/","og_site_name":"My blog","article_published_time":"2025-09-16T21:29:55+00:00","article_modified_time":"2026-01-21T06:49:00+00:00","og_image":[{"width":2560,"height":1139,"url":"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-scaled.png","type":"image\/png"}],"author":"genexio","twitter_card":"summary_large_image","twitter_misc":{"Written by":"genexio","Estimated reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#article","isPartOf":{"@id":"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/"},"author":{"name":"genexio","@id":"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a"},"headline":"On-Prem AI in the Company Network: Docker + Portainer + Node-RED on Raspberry Pi, Llama on Mac Studio, and FileMaker (OData) Integration","datePublished":"2025-09-16T21:29:55+00:00","dateModified":"2026-01-21T06:49:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/"},"wordCount":541,"commentCount":0,"publisher":{"@id":"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a"},"image":{"@id":"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#primaryimage"},"thumbnailUrl":"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-1024x456.png","articleSection":["AI","filemaker","node-red","raspberry"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/","url":"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/","name":"On-Prem AI in the Company Network: Docker + Portainer + Node-RED on Raspberry Pi, Llama on Mac Studio, and FileMaker (OData) Integration - My blog","isPartOf":{"@id":"https:\/\/www.genexio.net\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#primaryimage"},"image":{"@id":"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#primaryimage"},"thumbnailUrl":"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-1024x456.png","datePublished":"2025-09-16T21:29:55+00:00","dateModified":"2026-01-21T06:49:00+00:00","breadcrumb":{"@id":"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#primaryimage","url":"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-scaled.png","contentUrl":"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2025\/09\/Screenshot-2025-09-16-alle-23.01.44-2-scaled.png","width":2560,"height":1139},{"@type":"BreadcrumbList","@id":"https:\/\/www.genexio.net\/blog\/2025\/09\/16\/on-prem-ai-in-the-company-network-docker-portainer-node-red-on-raspberry-pi-llama-on-mac-studio-and-filemaker-odata-integration\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.genexio.net\/blog\/"},{"@type":"ListItem","position":2,"name":"On-Prem AI in the Company Network: Docker + Portainer + Node-RED on Raspberry Pi, Llama on Mac Studio, and FileMaker (OData) Integration"}]},{"@type":"WebSite","@id":"https:\/\/www.genexio.net\/blog\/#website","url":"https:\/\/www.genexio.net\/blog\/","name":"My blog","description":"","publisher":{"@id":"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.genexio.net\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a","name":"genexio","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g","caption":"genexio"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g"},"sameAs":["http:\/\/www.genexio.net\/blog"],"url":"https:\/\/www.genexio.net\/blog\/author\/genexio\/"}]}},"_links":{"self":[{"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/posts\/240","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/comments?post=240"}],"version-history":[{"count":1,"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/posts\/240\/revisions"}],"predecessor-version":[{"id":247,"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/posts\/240\/revisions\/247"}],"wp:attachment":[{"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/media?parent=240"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/categories?post=240"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/tags?post=240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}