From 643a8ccd964dfce5f07bdf2120f14b988853da4d Mon Sep 17 00:00:00 2001 From: Mendon Kissling <59585235+mendonk@users.noreply.github.com> Date: Mon, 28 Jul 2025 14:44:59 -0400 Subject: [PATCH] docs: refresh remote server page (#9189) * clean-up-and-clarify * code-review * correct-dockerfile --- docs/docs/Deployment/deployment-caddyfile.mdx | 214 +++++++++--------- 1 file changed, 111 insertions(+), 103 deletions(-) diff --git a/docs/docs/Deployment/deployment-caddyfile.mdx b/docs/docs/Deployment/deployment-caddyfile.mdx index f59d5e24f..2af8bcfe9 100644 --- a/docs/docs/Deployment/deployment-caddyfile.mdx +++ b/docs/docs/Deployment/deployment-caddyfile.mdx @@ -6,130 +6,138 @@ slug: /deployment-caddyfile Learn how to deploy Langflow on your own remote server with secure web access. This guide walks you through setting up Langflow on a remote server using [Docker](https://docs.docker.com/) and configuring secure web access with [Caddy](https://caddyserver.com/docs/). -:::tip -The [host-langflow](https://github.com/datastax/host-langflow) repository offers pre-built copies of this `docker-compose.yml` and `Caddyfile`, if you prefer to fork the repository to your server. -::: - ## Prerequisites -* A server with a dual-core CPU and at least 2 GB of RAM. This example uses [Hetzner cloud](https://www.hetzner.com/) for hosting. Your deployment may vary. +* A server with a dual-core CPU and at least 2 GB of RAM. +This example uses [Hetzner cloud](https://www.hetzner.com/) for hosting. Your deployment may vary. ## Connect to your remote server with SSH 1. Create an SSH key. -Replace `DANA@EXAMPLE.COM` with your email address. -```bash -ssh-keygen -t ed25519 -C "DANA@EXAMPLE.COM" -``` - -2. In your terminal, follow the instructions to create your public key. This key allows you to connect to your server remotely. -To copy the key from your terminal, enter the following command: -```bash -cat ~/Downloads/host-lf.pub | pbcopy -``` -3. In your remote server, add the SSH key you copied in the previous step. -For example, in the Hetzner cloud server, click **Server** > **SSH keys**, and then click **Add SSH key**. -4. Paste your SSH key into the **SSH key** field, and click **Enter**. -You can now use the SSH key stored on your local machine to connect to your remote server. -5. To connect to your server with SSH, enter the following command. -Replace `PATH_TO_PRIVATE_KEY/PRIVATE_KEY_NAME` with the path to your private SSH key. -Replace `SERVER_IP_ADDRESS` with your server's IP address. -```bash -ssh -i PATH_TO_PRIVATE_KEY/PRIVATE_KEY_NAME root@SERVER_IP_ADDRESS -``` -6. When prompted for a key fingerprint, type `yes`. -You are connected to your server. -```text - System information as of Mon May 19 04:34:44 PM UTC 2025 +Replace `DANA@EXAMPLE.COM` with the email address you want to associate with the SSH key. + ```bash + ssh-keygen -t ed25519 -C "DANA@EXAMPLE.COM" + ``` - System load: 0.0 Processes: 129 - Usage of /: 1.5% of 74.79GB Users logged in: 0 - Memory usage: 5% IPv4 address for eth0: 5.161.250.132 - Swap usage: 0% IPv6 address for eth0: 2a01:4ff:f0:4de7::1 -``` +2. In your terminal, follow the instructions to create your SSH key pair. +This creates both a private and public key. +To copy the public key from your terminal, enter the following command: + ```bash + cat ~/Downloads/host-lf.pub | pbcopy + ``` +3. In your remote server, add the SSH key you copied in the previous step. +For example, if you are using a Hetzner cloud server, click **Server**, and then select **SSH keys** to add an SSH key. +4. To connect to your server with SSH, enter the following command. + ```bash + ssh -i PATH_TO_PRIVATE_KEY/PRIVATE_KEY_NAME root@SERVER_IP_ADDRESS + ``` + + Replace the following: + * `PATH_TO_PRIVATE_KEY/PRIVATE_KEY_NAME`: The path to your private SSH key file that matches the public key you added to your server + * `SERVER_IP_ADDRESS`: Your server's IP address +5. When prompted for a key fingerprint, type `yes`. +The terminal output indicates if the connection succeeds or fails. +The following response was returned after connecting to a Hetzner cloud server: + ```text + System information as of Mon May 19 04:34:44 PM UTC 2025 + + System load: 0.0 Processes: 129 + Usage of /: 1.5% of 74.79GB Users logged in: 0 + Memory usage: 5% IPv4 address for eth0: 5.161.250.132 + Swap usage: 0% IPv6 address for eth0: 2a01:4ff:f0:4de7::1 + ``` ## Deploy Langflow on your server -Now that you're connected to your server, install Docker, create a `docker-compose.yml` file, and serve it publicly with Caddy as a reverse proxy. +Now that your local machine is connected to your remote server with SSH, you can install Docker, create a `docker-compose.yml` file, and serve it publicly with a reverse proxy, such as Caddy. 1. Install Docker on your server. -Since this example server is an Ubuntu server, you can install snap packages. -```bash -snap install docker -``` -2. Create a file called `docker-compose.yml`. -```bash -touch docker-compose.yml && nano docker-compose.yml -``` -This file defines the Langflow service from the `langflow:latest` image, and a Caddy service to expose Langflow through a reverse proxy. -:::tip -The [host-langflow](https://github.com/datastax/host-langflow) repository offers pre-built copies of this `docker-compose.yml` and `Caddyfile`, if you prefer to fork the repository to your server. -::: +Since this example server is an Ubuntu server, it can install snap packages. +If you are not using Ubuntu or prefer a different installation method, see the [official Docker installation guide](https://docs.docker.com/get-started/get-docker/) for instructions for your operating system. + ```bash + snap install docker + ``` +2. Create a file called `docker-compose.yml`, and then open it in a text editor: + ```bash + touch docker-compose.yml && nano docker-compose.yml + ``` + The following example defines the Langflow service from the `langflow:latest` image and a Caddy service to expose Langflow through a reverse proxy. + :::tip + The [host-langflow](https://github.com/datastax/host-langflow) repository offers pre-built copies of this `docker-compose.yml` and `Caddyfile`, if you prefer to fork the repository to your server. + ::: 3. Add the following values to `docker-compose.yml`, and then save the file. -```yml -version: "3.8" + ```yml + version: "3.8" -services: - langflow: - image: langflowai/langflow:latest - ports: - - "7860:7860" - environment: - - LANGFLOW_HOST=0.0.0.0 - - LANGFLOW_PORT=7860 + services: + langflow: + image: langflowai/langflow:latest + ports: + - "7860:7860" + environment: + - LANGFLOW_HOST=0.0.0.0 + - LANGFLOW_PORT=7860 + + caddy: + image: caddy:latest + ports: + - "80:80" + - "443:443" + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile + - caddy_data:/data + - caddy_config:/config + depends_on: + - langflow - caddy: - image: caddy:latest - ports: - - "80:80" - - "443:443" volumes: - - ./Caddyfile:/etc/caddy/Caddyfile - - caddy_data:/data - - caddy_config:/config - depends_on: - - langflow - -volumes: - caddy_data: - caddy_config: -``` + caddy_data: + caddy_config: + ``` 4. Create a file called `Caddyfile`. -```bash -touch Caddyfile && nano Caddyfile -``` + ```bash + touch Caddyfile && nano Caddyfile + ``` 5. Add the following values to `Caddyfile`, and then save the file. -The Caddyfile configures Caddy to listen on port `80`, and forward all incoming requests to the Langflow service at port `7860`. -``` -:80 { - reverse_proxy langflow:7860 -} -``` -6. To deploy your server, enter `docker-compose up`. -When the `Welcome to Langflow` message appears, Langflow is running and accessible internally at http://0.0.0.0:7860 inside the Docker network. -7. To open Langflow, navigate to your server's public IP address, such as `http://5.161.250.132`. -Your address must use `http`, because you haven't enabled HTTPS. -8. To enable HTTPS, modify your domain's A record to point to your server's IP address. -For example: -``` -Type: A -Name: langflow -Value: 5.161.250.132 (your server's IP address) -``` -9. Stop your server. -10. Modify your Caddyfile to include port `443` for HTTPS. +The Caddyfile configures Caddy to listen on port 80, and forward all incoming requests to port 80 to the Langflow service at port 7860. + ``` + :80 { + reverse_proxy langflow:7860 + } + ``` +6. To deploy your server, run `docker-compose up`. +When the `Welcome to Langflow` message appears, Langflow is running and accessible internally at `http://0.0.0.0:7860` inside the Docker network. +7. To access your Langflow server over the public internet, navigate to your server's public IP address, such as `http://5.161.250.132`. +This address uses HTTP because HTTPS isn't enabled yet. -``` -:80, :443 { - reverse_proxy langflow:7860 -} -``` -11. Start your server. -Caddy recognizes the incoming traffic and routes it to your server. +8. Recommended: Enable HTTPS: -To exit your SSH session, type `exit`. + 1. Modify your domain's A record to point to your server's IP address. For example: -## Step-by-step video guide + ``` + Type: A + Name: langflow + Value: 5.161.250.132 # Set to your server's IP address + ``` + + 2. Stop your server. + 3. Modify your Caddyfile to include port `443` so Caddy can forward both HTTP (port 80) and HTTPS (port 443) requests to the Langflow service: + + ``` + :80, :443 { + reverse_proxy langflow:7860 + } + ``` + + 4. Start your server. + + When users visit your domain, Caddy recognizes the incoming traffic and automatically routes it to your server with a secure, encrypted connection. + +9. To exit your SSH session, type `exit`. + +## See also + +To package your local flows into a custom Docker image, see [Containerize a Langflow application](/develop-application). For a step-by-step guide to deploying Langflow, including deployments to [fly.io](https://fly.io/) and [Flightcontrol.dev](https://www.flightcontrol.dev/), see [How to Host Langflow Anywhere](https://www.youtube.com/watch?v=q4qt5hSnte4). \ No newline at end of file