{"id":6175,"date":"2026-04-17T11:58:02","date_gmt":"2026-04-17T08:58:02","guid":{"rendered":"https:\/\/upcloud.com\/global\/?post_type=tutorial&#038;p=6175"},"modified":"2026-04-28T11:40:44","modified_gmt":"2026-04-28T10:40:44","slug":"getting-started-openclaw-ubuntu-cloud-server","status":"publish","type":"tutorial","link":"https:\/\/upcloud.com\/global\/resources\/tutorials\/getting-started-openclaw-ubuntu-cloud-server\/","title":{"rendered":"Getting started with OpenClaw on Ubuntu Cloud Server"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">OpenClaw took the world by storm at the beginning of 2026. Everyone talks about it, many engineers use it, but what is it? And how to run OpenClaw for ourselves? This tutorial answers these questions and helps to install and manage OpenClaw in your own environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OpenClaw is an autonomous AI agent, designed as a personal assistant, which integrates with collaboration services like WhatsApp, Slack, Telegram, email tools like Gmail, or calendars. And that is only a fraction of options. It can be managed through commands provided on Slack for example.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The beauty of the tool is that we can run it as a simple and single service that can run on your laptop, a physical server, or a cloud server anywhere in the world.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">OpenClaw vs ChatGPT<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before we go to the technical aspects, we need to understand the difference between OpenClaw and ChatGPT, or more broadly, the difference between OpenClaw and LLM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are 4 main elements we have to keep in mind:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OpenClaw can live on your own infrastructure, where you control exactly what runs and what access it has.<\/li>\n\n\n\n<li>OpenClaw has cron jobs and heartbeat; you can schedule tasks to work on its own without any human interaction.<\/li>\n\n\n\n<li>OpenClaw has a memory of what you say to it and what it does, so as time goes on, it becomes more useful and gets to know you better.<\/li>\n\n\n\n<li>OpenClaw\u2019s tools and skills, using which it can connect to external services, such as Mail, Calendar, a search engine, and virtually anything that can run on a computer.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Another important aspect of OpenClaw is its gateway. OpenClaw is an AI agent, which means it is a tool that can connect to different &#8220;channels,&#8221; which are used to communicate with humans. These channels can include WhatsApp, Telegram, Slack, and many more. Therefore, we can easily communicate with OpenClaw, using various methods.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Key to the LLM<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Before installing OpenClaw, we need an API key with access to a Large Language Model (LLM). This LLM can be any you prefer: OpenAI\u2019s ChatGPT, Claude, Gemini, Nvidia&#8217;s Kimi, or even Ollama or Mistral, models, which you can run locally and ensure full isolation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each of these services has its pros and cons. One of the main differentiator is the cost of using the model.. The best models are the most expensive; these models are faster and more &#8220;intelligent,&#8221; making them much easier to use. The better the model is, the better its problem-solving abilities. A cheaper model might struggle to solve some more complex problems. The key is finding a balance between a model that can handle your everyday tasks without costing a fortune. The reason here is simple. The reasoning, size of context window, parameters of the model. All of these have significant impact on the quality of the model\u2019s response.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For this guide, we&#8217;ll be using Gemini. You can use Gemini in free trial mode simply by having a Google account. How to start with Gemini? Check this <a href=\"https:\/\/docs.openclaw.ai\/providers\/google\" target=\"_blank\" rel=\"noopener\">Official OpenClaw Guide<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To create a Gemini key, you can go to <a href=\"https:\/\/aistudio.google.com\/api-keys\" target=\"_blank\" rel=\"noopener\">Google AI Studio<\/a> and create an API key<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/1-creating-api-keys.png\" alt=\"-\" class=\"wp-image-79522\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Once we create the key, we&#8217;ll save it as a secret. We&#8217;ll use it later to configure OpenClaw.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Telegram bot<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For this guide, we&#8217;ll create a Telegram bot that will allow us to communicate with our agent through Telegram. If you prefer to use another method, such as <a href=\"https:\/\/docs.openclaw.ai\/channels\/whatsapp\" target=\"_blank\" rel=\"noopener\">WhatsApp<\/a> or <a href=\"https:\/\/docs.openclaw.ai\/channels\/discord\" target=\"_blank\" rel=\"noopener\">Discord<\/a>, follow the official guidelines.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creating a Telegram bot is super simple (<a href=\"https:\/\/docs.openclaw.ai\/channels\/telegram\" target=\"_blank\" rel=\"noopener\">official guide<\/a>)<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open Telegram and chat with <code>@BotFather<\/code> (this is a Telegram Bot that will be responsible for creating Bots)<\/li>\n\n\n\n<li>Type <code>\/newbot<\/code> in that thread, the bot will ask you for your bot&#8217;s name; you can choose any name you like. You will use this bot to chat with your agent.<\/li>\n\n\n\n<li><code>@BotFather<\/code>will respond with a token; save this token because we will use it to authenticate with Telegram later.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Server Deployment<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To install OpenClaw, we&#8217;re going to do it on an Upcloud server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For this we need to go to our Upcloud Dashboard and deploy a new server.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/2-upcloud-hub-cloud-dashboard.png\" alt=\"-\" class=\"wp-image-79523\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We select the region where we&#8217;re going to deploy it; try to find the region close to your actual location to reduce latency, but this isn&#8217;t really that important for this tutorial.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/3-upcloud-deploy-server.png\" alt=\"-\" class=\"wp-image-79525\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Here we&#8217;ll select the instance size. I recommend a server with at least 2GB of RAM to avoid problems; 4GB of RAM seems ideal for an initial setup. You can change this later if you need more power.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/4-upcloud-server-plans.png\" alt=\"-\" class=\"wp-image-79528\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Remember to enable backups. All OpenClaw settings, memory, and working files should be backed up in case of any failure of the server or application. Whenever you have a problem, you can easily restore a backup and return to a previous point.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/5-upcloud-automated-backups.png\" alt=\"-\" class=\"wp-image-79529\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">For this guide we will use Ubuntu as the operating system. OpenClaw can be installed on many different operating systems, but considering the popularity of Ubuntu, this is the way for this tutorial.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/6-upcloud-cloud-server-os.png\" alt=\"-\" class=\"wp-image-79531\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We select our SSH key, give the server a name, and deploy.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/7-upcloud-cloud-server-login-method.png\" alt=\"-\" class=\"wp-image-79533\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/8-upcloud-cloud-server-name.png\" alt=\"-\" class=\"wp-image-79536\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Once the server is running, we&#8217;ll copy the server&#8217;s IP address and use a terminal to connect via SSH. If you used an SSH key in the previous step, you must use that same key to connect.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/upcloud.com\/media\/9-upcloud-cloud-server-status.png\" alt=\"-\" class=\"wp-image-79538\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\"># Replace this IP with your server's IP address\nssh root@209.94.60.201<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Once inside the server, we are ready to install OpenClaw!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">OpenClaw Installation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Our OpenClaw server is now ready. It&#8217;s time to install the OpenClaw software. It&#8217;s really easy and only requires one simple line of code:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">curl -fsSL https:\/\/openclaw.ai\/install.sh | bash<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This command will install all OpenClaw dependencies and software at once; we don&#8217;t need to install anything before running it, as our fresh Ubuntu installation has all the necessary tools.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">root@my-openclaw:~# curl -fsSL https:\/\/openclaw.ai\/install.sh | bash\n\n  \ud83e\udd9e OpenClaw Installer\n  End-to-end encrypted, Zuck-to-Zuck excluded.\n\n\u2713 Detected: linux\n\nInstall plan\nOS: Linux\nInstall method: npm\nRequested version: latest\n\n[1\/3] Preparing environment\n\u00b7 Node.js not found, installing it now\n\u00b7 Installing Node.js via NodeSource\n\u00b7 Installing Linux build tools (make\/g++\/cmake\/python3)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This step may take a couple of minutes depending on your internet speed and the number of dependencies required; it should be fairly quick!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once the dependencies are installed, the installer will proceed to install the latest available version of OpenClaw and begin the initial configuration process.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">[1\/3] Preparing environment\n\u00b7 Node.js not found, installing it now\n\u00b7 Installing Node.js via NodeSource\n\u00b7 Installing Linux build tools (make\/g++\/cmake\/python3)\n\u2713 Build tools installed\n\u2713 Node.js v22 installed\n\u00b7 Active Node.js: v22.22.1 (\/usr\/bin\/node)\n\u00b7 Active npm: 10.9.4 (\/usr\/bin\/npm)\n\n[2\/3] Installing OpenClaw\n\u2713 Git already installed\n\u00b7 Installing OpenClaw v2026.3.23-2\n\u2713 OpenClaw npm package installed\n\u2713 OpenClaw installed\n\n[3\/3] Finalizing setup\n\n\ud83e\udd9e OpenClaw installed successfully (OpenClaw 2026.3.23-2 (7ffe7e4))!\nThe lobster has landed. Your terminal will never be the same.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ll see a short disclaimer explaining that OpenClaw is a powerful tool that can cause a lot of damage; we&#8217;ll accept this by switching to Yes and pressing Enter.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\ud83e\udd9e OpenClaw 2026.3.23-2 (7ffe7e4) \u2014 I keep secrets like a vault... unless you print them in debug logs again.\n\n\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\n\u2588\u2588\u2591\u2584\u2584\u2584\u2591\u2588\u2588\u2591\u2584\u2584\u2591\u2588\u2588\u2591\u2584\u2584\u2584\u2588\u2588\u2591\u2580\u2588\u2588\u2591\u2588\u2588\u2591\u2584\u2584\u2580\u2588\u2588\u2591\u2588\u2588\u2588\u2588\u2591\u2584\u2584\u2580\u2588\u2588\u2591\u2588\u2588\u2588\u2591\u2588\u2588\n\u2588\u2588\u2591\u2588\u2588\u2588\u2591\u2588\u2588\u2591\u2580\u2580\u2591\u2588\u2588\u2591\u2584\u2584\u2584\u2588\u2588\u2591\u2588\u2591\u2588\u2591\u2588\u2588\u2591\u2588\u2588\u2588\u2588\u2588\u2591\u2588\u2588\u2588\u2588\u2591\u2580\u2580\u2591\u2588\u2588\u2591\u2588\u2591\u2588\u2591\u2588\u2588\n\u2588\u2588\u2591\u2580\u2580\u2580\u2591\u2588\u2588\u2591\u2588\u2588\u2588\u2588\u2588\u2591\u2580\u2580\u2580\u2588\u2588\u2591\u2588\u2588\u2584\u2591\u2588\u2588\u2591\u2580\u2580\u2584\u2588\u2588\u2591\u2580\u2580\u2591\u2588\u2591\u2588\u2588\u2591\u2588\u2588\u2584\u2580\u2584\u2580\u2584\u2588\u2588\n\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\n                  \ud83e\udd9e OPENCLAW \ud83e\udd9e\n\n\u250c  OpenClaw setup\n\u2502\n\u25c7  Security \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502                                                                                            \u2502\n\u2502  Security warning \u2014 please read.                                                           \u2502\n\u2502                                                                                            \u2502\n\u2502  OpenClaw is a hobby project and still in beta. Expect sharp edges.                        \u2502\n\u2502  By default, OpenClaw is a personal agent: one trusted operator boundary.                  \u2502\n\u2502  This bot can read files and run actions if tools are enabled.                             \u2502\n\u2502  A bad prompt can trick it into doing unsafe things.                                       \u2502\n\u2502                                                                                            \u2502\n\u2502  OpenClaw is not a hostile multi-tenant boundary by default.                               \u2502\n\u2502  If multiple users can message one tool-enabled agent, they share that delegated tool      \u2502\n\u2502  authority.                                                                                \u2502\n\u2502                                                                                            \u2502\n\u2502  If you\u2019re not comfortable with security hardening and access control, don\u2019t run           \u2502\n\u2502  OpenClaw.                                                                                 \u2502\n\u2502  Ask someone experienced to help before enabling tools or exposing it to the internet.     \u2502\n\u2502                                                                                            \u2502\n\u2502  Recommended baseline:                                                                     \u2502\n\u2502  - Pairing\/allowlists + mention gating.                                                    \u2502\n\u2502  - Multi-user\/shared inbox: split trust boundaries (separate gateway\/credentials, ideally  \u2502\n\u2502    separate OS users\/hosts).                                                               \u2502\n\u2502  - Sandbox + least-privilege tools.                                                        \u2502\n\u2502  - Shared inboxes: isolate DM sessions (`session.dmScope: per-channel-peer`) and keep      \u2502\n\u2502    tool access minimal.                                                                    \u2502\n\u2502  - Keep secrets out of the agent\u2019s reachable filesystem.                                   \u2502\n\u2502  - Use the strongest available model for any bot with tools or untrusted inboxes.          \u2502\n\u2502                                                                                            \u2502\n\u2502  Run regularly:                                                                            \u2502\n\u2502  openclaw security audit --deep                                                            \u2502\n\u2502  openclaw security audit --fix                                                             \u2502\n\u2502                                                                                            \u2502\n\u2502  Must read: https:\/\/docs.openclaw.ai\/gateway\/security                                      \u2502\n\u2502                                                                                            \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u2502\n\u25c6  I understand this is personal-by-default and shared\/multi-user use requires lock-down. Continue?\n\u2502  \u25cf Yes \/ \u25cb No\n\u2514<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">We select the &#8220;Quickstart&#8221; mode<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\u25c6  Setup mode\n\u2502  \u25cf QuickStart (Configure details later via openclaw configure.)\n\u2502  \u25cb Manual\n\u2514<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In this mode, we begin by configuring the most important part of OpenClaw, its \u201cbrain\u201d: the LLM we&#8217;ll be using. This is where we&#8217;ll use our Gemini key. If you have a different key, you can select your provider.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\u25c7  QuickStart \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502                                      \u2502\n\u2502  Gateway port: 18789                 \u2502\n\u2502  Gateway bind: Loopback (127.0.0.1)  \u2502\n\u2502  Gateway auth: Token (default)       \u2502\n\u2502  Tailscale exposure: Off             \u2502\n\u2502  Direct to chat channels.            \u2502\n\u2502                                      \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u2502\n\u25c6  Model\/auth provider\n\u2502  \u25cb Anthropic\n\u2502  \u25cb BytePlus\n\u2502 \u25cb Falls\n\u2502  \u25cb Cloudflare AI Gateway\n\u2502  \u25cb Copilot\n\u2502  \u25cb Custom Provider\n\u2502  \u25cb DeepSeek\n\u2502  \u25cf Google (Gemini API key + OAuth)\n\u2502  \u25cb Hugging Face\n\u2502  \u25cb Kilo Gateway\n\u2502  \u25cb LiteLLM\n\u2502  \u25cb Microsoft Foundry\n\u2502  \u25cb MiniMax\n\u2502 \u25cb Mistral AI\n\u2502  \u25cb Moonshot AI (Kimi K2.5)\n\u2502 \u25cb To be\nOpenAI\n\u2502 \u25cb OpenCode\n\u2502  \u25cb OpenRouter\n\u2502 \u25cb Qianfan\n\u2502  \u25cb Qwen (Alibaba Cloud Model Studio)\n\u2502 \u25cb English\n\u2502  \u25cb Synthetic\n\u2502  \u25cb Together AI\n\u2502 \u25cb Venice AI\n\u2502 \u25cb Vercel AI Gateway\n\u2502 \u25cb vLLM\n\u2502  \u25cb Volcano Engine\n\u2502 \u25cb xAI (Grok)\n\u2502  \u25cb Xiaomi\n\u2502  \u25cb Z.AI\n\u2502  \u25cb Skip for now<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here we select the key instead of CLI OAuth:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\u25c6  Google auth method\n\u2502  \u25cb Gemini CLI OAuth\n\u2502  \u25cf Google Gemini API key\n\u2502  \u25cb Back\n\u2514<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">We enter our key:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\u25c7  Google auth method\n\u2502  Google Gemini API key\n\u2502\n\u25c6  Enter Gemini API key\n\u2502 AIza...xxxx..IY6c\n\u2514<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">And then we select the model. This step is quite important since the model we choose will define the &#8220;intelligence&#8221; of our agent and its cost. The &#8220;smarter&#8221; models are the most expensive; that is, the value per token is higher.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this guide we&#8217;re going to choose the best model to date:<code>google\/gemini-3.1-pro-preview.<\/code> My recommendation is that you try out the models and check the cost, and if you&#8217;re okay with paying that, then if it seems too expensive, you can go for a cheaper one, like <code>google\/gemini-flash-latest<\/code>the<code>google\/gemini-flash-lite-latest<\/code> The models <code>flash-lite<\/code> are extremely cheap and work very well for simple tasks.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\u25c7  Model configured \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502                                                      \u2502\n\u2502  Default model set to google\/gemini-3.1-pro-preview  \u2502\n\u2502                                                      \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n12:09:21+00:00 [agents\/model-providers] [xai-auth] bootstrap config fallback: no config-backed key found\n\u2502\n\u25c6  Default model\n\u2502  \u25cf Keep current (google\/gemini-3.1-pro-preview)\n\u2502  \u25cb Enter model manually\n\u2502  \u25cb google\/gemini-1.5-flash\n\u2502  \u25cb google\/gemini-1.5-flash-8b\n\u2502  \u25cb google\/gemini-1.5-pro\n\u2502  \u25cb google\/gemini-2.0-flash\n\u2502  \u25cb google\/gemini-2.0-flash-lite\n\u2502  \u25cb google\/gemini-2.5-flash\n\u2502  \u25cb google\/gemini-2.5-flash-lite\n\u2502  \u25cb google\/gemini-2.5-flash-lite-preview-06-17\n\u2502  \u25cb google\/gemini-2.5-flash-lite-preview-09-2025\n\u2502  \u25cb google\/gemini-2.5-flash-preview-04-17\n\u2502  \u25cb google\/gemini-2.5-flash-preview-05-20\n\u2502  \u25cb google\/gemini-2.5-flash-preview-09-2025\n\u2502  \u25cb google\/gemini-2.5-pro\n\u2502  \u25cb google\/gemini-2.5-pro-preview-05-06\n\u2502  \u25cb google\/gemini-2.5-pro-preview-06-05\n\u2502  \u25cb google\/gemini-3-flash-preview\n\u2502  \u25cb google\/gemini-3-pro-preview\n\u2502  \u25cb google\/gemini-3.1-flash-lite-preview\n\u2502  \u25cb google\/gemini-3.1-pro-preview\n\u2502  \u25cb google\/gemini-3.1-pro-preview-customtools\n\u2502  \u25cb google\/gemini-flash-latest\n\u2502  \u25cb google\/gemini-flash-lite-latest\n\u2502  \u25cb google\/gemini-live-2.5-flash\n\u2502  \u25cb google\/gemini-live-2.5-flash-preview-native-audio<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now we&#8217;re going to choose the channel. The channel is the way we communicate with our bot, apart from the web interface. The most popular options are Telegram, WhatsApp, and Discord. But we have many more to choose from.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this step, we will use the Telegram key for the bot that we created in the prerequisites section.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;re going to choose Telegram and enter our key<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\u25c6  Select channel (QuickStart)\n\u2502  \u25cf Telegram (Bot API) (recommended \u00b7 newcomer-friendly)\n\u2502  \u25cb WhatsApp (QR link)\n\u2502 \u25cb Discord (Bot API)\n\u2502  \u25cb IRC (Server + Nick)\n\u2502  \u25cb Google Chat (Chat API)\n\u2502  \u25cb Slack (Socket Mode)\n\u2502  \u25cb Signal (signal-cli)\n\u2502  \u25cb iMessage (imsg)\n\u2502  \u25cb LINE (Messaging API)\n\u2502  \u25cb Mattermost (plugin)\n\u2502  \u25cb Nextcloud Talk (self-hosted)\n\u2502 \u25cb Feishu\/Lark (\u98de\u4e66)\n\u2502  \u25cb BlueBubbles (macOS app)\n\u2502 \u25cb Zalo (Bot API)\n\u2502  \u25cb Synology Chat (Webhook)\n\u2502  \u25cb Nostr (NIP-04 DMs)\n\u2502  \u25cb Microsoft Teams (Teams SDK)\n\u2502  \u25cb Matrix (plugin)\n\u2502  \u25cb Zalo (Personal Account)\n\u2502 \u25cb Tlon (City)\n\u2502  \u25cb Twitch (Chat)\n\u2502  \u25cb Skip for now<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\u25c7  Select channel (QuickStart)\n\u2502 Telegram (Bot API)\n\u2502\n\u25c7  Telegram bot token \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502                                                                                        \u2502\n\u2502  1) Open Telegram and chat with @BotFather                                             \u2502\n\u2502  2) Run \/newbot (or \/mybots)                                                           \u2502\n\u2502  3) Copy the token (looks like 123456:ABC...)                                          \u2502\n\u2502  Tip: you can also set TELEGRAM_BOT_TOKEN in your env.                                 \u2502\n\u2502  Docs: https:\/\/docs.openclaw.ai\/telegram  \u2502\n\u2502  Website: https:\/\/openclaw.ai                                                          \u2502\n\u2502                                                                                        \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u2502\n\u25c6  How do you want to provide this Telegram bot token?\n\u2502  \u25cf Enter Telegram bot token (Stores the credential directly in OpenClaw config)\n\u2502  \u25cb Use external secret provider<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Okay! Finally, let&#8217;s choose a Search Provider. This allows OpenClaw to perform internet searches. We can use the default one, <strong>DuckDuckGo Search<\/strong> which is free and requires no setup.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\u25c7  Web search \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502                                                                              \u2502\n\u2502  Web search lets your agent look things up online.                           \u2502\n\u2502  Choose a provider. Some providers need an API key, and some work key-free.  \u2502\n\u2502  Docs: https:\/\/docs.openclaw.ai\/tools\/web                                    \u2502\n\u2502                                                                              \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u2502\n\u25c6  Search provider\n\u2502  \u25cb Brave Search\n\u2502  \u25cf DuckDuckGo Search (experimental) (Free web search fallback with no API key required \u00b7 key-free)\n\u2502  \u25cb Exa Search\n\u2502  \u25cb Firecrawl Search\n\u2502  \u25cb Gemini (Google Search)\n\u2502 \u25cb Grok (xAI)\n\u2502  \u25cb Kimi (Moonshot)\n\u2502  \u25cb Perplexity Search\n\u2502  \u25cb Tavily Search\n\u2502  \u25cb Skip for now<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Skills are integrations to connect with external tools. My recommendation is not to install any skills for now, and to get to know OpenClaw to see what access we will be giving it.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\u2502\n\u25c7  Skills status \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502                             \u2502\n\u2502  Eligible: 4                \u2502\n\u2502  Missing requirements: 39   \u2502\n\u2502  Unsupported on this OS: 7  \u2502\n\u2502  Blocked by allowlist: 0    \u2502\n\u2502                             \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u2502\n\u25c7  Configure skills now? (recommended)\n\u2502  No\n\u2502<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hooks are automations performed using commands with a slash (like <code>\/command).<\/code> For now, we&#8217;re not going to configure any of these since they&#8217;re a bit more advanced.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\u25c7  Hooks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502                                                                          \u2502\n\u2502  Hooks let you automate actions when agent commands are issued.          \u2502\n\u2502  Example: Save session context to memory when you issue \/new or \/reset.  \u2502\n\u2502                                                                          \u2502\n\u2502  Learn more: https:\/\/docs.openclaw.ai\/automation\/hooks                   \u2502\n\u2502                                                                          \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u2502\n\u25c6  Enable hooks?\n\u2502  \u25fb Skip for now\n\u2502  \u25fb \ud83d\ude80 boot-md\n\u2502  \u25fb \ud83d\udcce bootstrap-extra-files\n\u2502  \u25fb \ud83d\udcdd command-logger\n\u2502  \u25fb \ud83d\udcbe session-memory<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Done! We now have OpenClaw running and initially configured.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now we can access our web interface, using the link that appears in this box.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\u25c7 UI Control \u2500\n\u2502                                                                                            \u2502\n\u2502 Web UI: http:\/\/127.0.0.1:18789\/ \u2502\n\u2502  Web UI (with token):                                                                      \u2502\n\u2502  http:\/\/127.0.0.1:18789\/#token=b255663316c7babcd07cc5b4d4de5a5ffd3a0e252d4fb69f            \u2502\n\u2502  Gateway WS: ws:\/\/127.0.0.1:18789                                                          \u2502\n\u2502  Gateway: not detected (gateway closed (1006 abnormal closure (no close frame)): no close  \u2502\n\u2502  reason)                                                                                   \u2502\n\u2502  Docs: https:\/\/docs.openclaw.ai\/web\/control-ui                                             \u2502\n\u2502                                                                                            \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">One very important thing to note is that this link is only valid for localhost, so we cannot access it externally using our server&#8217;s IP address. Instead, the most common way of connecting to the OpenClaw\u2019s GUI is to create the SSH tunnel to the server and then run the browser using \u2018localhost\u2019 in the url.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We mentioned security, so it is a good place to make you aware of the security risks of OpenClaw. These risks are not connected with OpenClaw directly, but more with the tool\u2019s privileges we give. OpenClaw can send an email. Respond to messages. Make operations in your operating system. In short, we give quite huge power to the tool, which is powered by LLM. And there are a lot of options to \u201cabuse\u201d LLM. We have to remember about it and be careful with the tool. For example, do not allow every user on Discord to interact with your OpenClaw, which is connected to your mailbox. At least, if you don\u2019t want to be surprised quickly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s come back to our tutorial now.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ll need to open a second terminal to enable this tunnel (or we can close our current session and reopen it):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">ssh -L18789:localhost:18789 root@209.94.60.201<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Once we connect via SSH with these options, we will be able to access port 18789 of the server by pointing it to the same port on our laptop.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If we need a new link, we can run <code>openclaw dashboard --no-open<\/code> where it will show us the link to log in again:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">openclaw dashboard --no-open\n\nDashboard URL: http:\/\/127.0.0.1:18789\/#token=b255663316c7babcd07cc5b4d4de5a5ffd3a0e252d4fb69f<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Have fun using OpenClaw \ud83e\udd9e on Upcloud!<\/p>\n","protected":false},"author":100,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","community-category":[244,256,223],"class_list":["post-6175","tutorial","type-tutorial","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/tutorial\/6175","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/tutorial"}],"about":[{"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/types\/tutorial"}],"author":[{"embeddable":true,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/users\/100"}],"replies":[{"embeddable":true,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/comments?post=6175"}],"version-history":[{"count":4,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/tutorial\/6175\/revisions"}],"predecessor-version":[{"id":6571,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/tutorial\/6175\/revisions\/6571"}],"wp:attachment":[{"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/media?parent=6175"}],"wp:term":[{"taxonomy":"community-category","embeddable":true,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/community-category?post=6175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}