docs: refresh remote server page (#9189)
* clean-up-and-clarify * code-review * correct-dockerfile
This commit is contained in:
parent
d0e4e7d1cc
commit
643a8ccd96
1 changed files with 111 additions and 103 deletions
|
|
@ -6,71 +6,71 @@ slug: /deployment-caddyfile
|
||||||
Learn how to deploy Langflow on your own remote server with secure web access.
|
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/).
|
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
|
## 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
|
## Connect to your remote server with SSH
|
||||||
|
|
||||||
1. Create an SSH key.
|
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.
|
This key allows you to connect to your server remotely.
|
||||||
To copy the key from your terminal, enter the following command:
|
Replace `DANA@EXAMPLE.COM` with the email address you want to associate with the SSH key.
|
||||||
```bash
|
```bash
|
||||||
cat ~/Downloads/host-lf.pub | pbcopy
|
ssh-keygen -t ed25519 -C "DANA@EXAMPLE.COM"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
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.
|
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**.
|
For example, if you are using a Hetzner cloud server, click **Server**, and then select **SSH keys** to add an SSH key.
|
||||||
4. Paste your SSH key into the **SSH key** field, and click **Enter**.
|
4. To connect to your server with SSH, enter the following command.
|
||||||
You can now use the SSH key stored on your local machine to connect to your remote server.
|
```bash
|
||||||
5. To connect to your server with SSH, enter the following command.
|
ssh -i PATH_TO_PRIVATE_KEY/PRIVATE_KEY_NAME root@SERVER_IP_ADDRESS
|
||||||
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
|
Replace the following:
|
||||||
ssh -i PATH_TO_PRIVATE_KEY/PRIVATE_KEY_NAME root@SERVER_IP_ADDRESS
|
* `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
|
||||||
6. When prompted for a key fingerprint, type `yes`.
|
5. When prompted for a key fingerprint, type `yes`.
|
||||||
You are connected to your server.
|
The terminal output indicates if the connection succeeds or fails.
|
||||||
```text
|
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 information as of Mon May 19 04:34:44 PM UTC 2025
|
||||||
|
|
||||||
System load: 0.0 Processes: 129
|
System load: 0.0 Processes: 129
|
||||||
Usage of /: 1.5% of 74.79GB Users logged in: 0
|
Usage of /: 1.5% of 74.79GB Users logged in: 0
|
||||||
Memory usage: 5% IPv4 address for eth0: 5.161.250.132
|
Memory usage: 5% IPv4 address for eth0: 5.161.250.132
|
||||||
Swap usage: 0% IPv6 address for eth0: 2a01:4ff:f0:4de7::1
|
Swap usage: 0% IPv6 address for eth0: 2a01:4ff:f0:4de7::1
|
||||||
```
|
```
|
||||||
|
|
||||||
## Deploy Langflow on your server
|
## 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.
|
1. Install Docker on your server.
|
||||||
Since this example server is an Ubuntu server, you can install snap packages.
|
Since this example server is an Ubuntu server, it can install snap packages.
|
||||||
```bash
|
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.
|
||||||
snap install docker
|
```bash
|
||||||
```
|
snap install docker
|
||||||
2. Create a file called `docker-compose.yml`.
|
```
|
||||||
```bash
|
2. Create a file called `docker-compose.yml`, and then open it in a text editor:
|
||||||
touch docker-compose.yml && nano 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 following example defines the Langflow service from the `langflow:latest` image and a Caddy service to expose Langflow through a reverse proxy.
|
||||||
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.
|
:::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.
|
3. Add the following values to `docker-compose.yml`, and then save the file.
|
||||||
```yml
|
```yml
|
||||||
version: "3.8"
|
version: "3.8"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
langflow:
|
langflow:
|
||||||
image: langflowai/langflow:latest
|
image: langflowai/langflow:latest
|
||||||
ports:
|
ports:
|
||||||
|
|
@ -91,45 +91,53 @@ services:
|
||||||
depends_on:
|
depends_on:
|
||||||
- langflow
|
- langflow
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
caddy_data:
|
caddy_data:
|
||||||
caddy_config:
|
caddy_config:
|
||||||
```
|
```
|
||||||
4. Create a file called `Caddyfile`.
|
4. Create a file called `Caddyfile`.
|
||||||
```bash
|
```bash
|
||||||
touch Caddyfile && nano Caddyfile
|
touch Caddyfile && nano Caddyfile
|
||||||
```
|
```
|
||||||
5. Add the following values to `Caddyfile`, and then save the file.
|
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`.
|
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 {
|
:80 {
|
||||||
reverse_proxy langflow:7860
|
reverse_proxy langflow:7860
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
6. To deploy your server, enter `docker-compose up`.
|
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.
|
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`.
|
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`.
|
||||||
Your address must use `http`, because you haven't enabled HTTPS.
|
This address uses HTTP because HTTPS isn't enabled yet.
|
||||||
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.
|
|
||||||
|
|
||||||
```
|
8. Recommended: Enable HTTPS:
|
||||||
:80, :443 {
|
|
||||||
|
1. 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 # 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
|
reverse_proxy langflow:7860
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
11. Start your server.
|
|
||||||
Caddy recognizes the incoming traffic and routes it to your server.
|
|
||||||
|
|
||||||
To exit your SSH session, type `exit`.
|
4. Start your server.
|
||||||
|
|
||||||
## Step-by-step video guide
|
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).
|
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).
|
||||||
Loading…
Add table
Add a link
Reference in a new issue