Merge branch 'aws-cdk' into aws-cdk-dev2
This commit is contained in:
commit
fb817dd09e
5 changed files with 50 additions and 52 deletions
|
|
@ -1,8 +1,9 @@
|
||||||
# Deploy Langflow on AWS
|
# Deploy Langflow on AWS
|
||||||
|
|
||||||
**Duraration**: 30 minutes
|
**Duration**: 30 minutes
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
In this tutorial, you will learn how to deploy langflow on AWS using [AWS Cloud Development Kit](https://aws.amazon.com/cdk/?nc2=type_a) (CDK).
|
In this tutorial, you will learn how to deploy langflow on AWS using [AWS Cloud Development Kit](https://aws.amazon.com/cdk/?nc2=type_a) (CDK).
|
||||||
This tutorial assumes you have an AWS account and basic knowledge of AWS.
|
This tutorial assumes you have an AWS account and basic knowledge of AWS.
|
||||||
|
|
||||||
|
|
@ -15,15 +16,16 @@ The Fargate task is divided into a frontend and a backend, which communicate thr
|
||||||
If you just want to deploy resources, you do not need in-depth knowledge of each of the above services.
|
If you just want to deploy resources, you do not need in-depth knowledge of each of the above services.
|
||||||
|
|
||||||
# How to set up your environment and deploy langflow
|
# How to set up your environment and deploy langflow
|
||||||
|
|
||||||
1. Open [AWS CloudShell](https://us-east-1.console.aws.amazon.com/cloudshell/home?region=us-east-1).
|
1. Open [AWS CloudShell](https://us-east-1.console.aws.amazon.com/cloudshell/home?region=us-east-1).
|
||||||
1. Run the following commands in Cloudshell:
|
1. Run the following commands in Cloudshell:
|
||||||
```shell
|
```shell
|
||||||
git clone https://github.com/aws-samples/cloud9-setup-for-prototyping
|
git clone https://github.com/aws-samples/cloud9-setup-for-prototyping
|
||||||
cd cloud9-setup-for-prototyping
|
cd cloud9-setup-for-prototyping
|
||||||
./bin/bootstrap
|
./bin/bootstrap
|
||||||
```
|
```
|
||||||
1. When you see `Done!` in Cloudshell, open `cloud9-for-prototyping` from [AWS Cloud9](https://us-east-1.console.aws.amazon.com/cloud9control/home?region=us-east-1#/).
|
1. When you see `Done!` in Cloudshell, open `cloud9-for-prototyping` from [AWS Cloud9](https://us-east-1.console.aws.amazon.com/cloud9control/home?region=us-east-1#/).
|
||||||

|

|
||||||
1. Run the following command in the Cloud9 terminal.
|
1. Run the following command in the Cloud9 terminal.
|
||||||
```shell
|
```shell
|
||||||
git clone -b aws-cdk https://github.com/logspace-ai/langflow.git
|
git clone -b aws-cdk https://github.com/logspace-ai/langflow.git
|
||||||
|
|
@ -34,17 +36,18 @@ If you just want to deploy resources, you do not need in-depth knowledge of each
|
||||||
cdk deploy
|
cdk deploy
|
||||||
```
|
```
|
||||||
1. Access the URL displayed.
|
1. Access the URL displayed.
|
||||||
```shell
|
```shell
|
||||||
Outputs:
|
Outputs:
|
||||||
LangflowAppStack.NetworkURLXXXXXX = http://alb-XXXXXXXXXXX.elb.amazonaws.com
|
LangflowAppStack.NetworkURLXXXXXX = http://alb-XXXXXXXXXXX.elb.amazonaws.com
|
||||||
```
|
```
|
||||||
1. Enter your user name and password to sign in. If you have not set a user name and password in your `.env` file, the user name will be set to `admin` and the password to `123456`.
|
1. Enter your user name and password to sign in. If you have not set a user name and password in your `.env` file, the user name will be set to `admin` and the password to `123456`.
|
||||||

|

|
||||||
|
|
||||||
# Cleanup
|
# Cleanup
|
||||||
|
|
||||||
1. Run the following command in the Cloud9 terminal.
|
1. Run the following command in the Cloud9 terminal.
|
||||||
```shell
|
```shell
|
||||||
bash delete-resources.sh
|
bash delete-resources.sh
|
||||||
```
|
```
|
||||||
1. Open [AWS CloudFormation](https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/getting-started), select `aws-cloud9-cloud9-for-prototyping-XXXX` and delete it.
|
1. Open [AWS CloudFormation](https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/getting-started), select `aws-cloud9-cloud9-for-prototyping-XXXX` and delete it.
|
||||||

|

|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ version_path_separator = os # Use os.pathsep. Default configuration used for ne
|
||||||
# This is the path to the db in the root of the project.
|
# This is the path to the db in the root of the project.
|
||||||
# When the user runs the Langflow the database url will
|
# When the user runs the Langflow the database url will
|
||||||
# be set dinamically.
|
# be set dinamically.
|
||||||
# sqlalchemy.url = sqlite:///../../../langflow.db
|
sqlalchemy.url = sqlite:///../../../langflow.db
|
||||||
|
|
||||||
|
|
||||||
[post_write_hooks]
|
[post_write_hooks]
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
import contextlib
|
import contextlib
|
||||||
import json
|
import json
|
||||||
import orjson
|
|
||||||
import os
|
import os
|
||||||
from shutil import copy2
|
|
||||||
from typing import Optional, List
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from shutil import copy2
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
|
import orjson
|
||||||
import yaml
|
import yaml
|
||||||
|
from loguru import logger
|
||||||
from pydantic import field_validator, validator
|
from pydantic import field_validator, validator
|
||||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||||
from loguru import logger
|
|
||||||
|
|
||||||
# BASE_COMPONENTS_PATH = str(Path(__file__).parent / "components")
|
# BASE_COMPONENTS_PATH = str(Path(__file__).parent / "components")
|
||||||
BASE_COMPONENTS_PATH = str(Path(__file__).parent.parent.parent / "components")
|
BASE_COMPONENTS_PATH = str(Path(__file__).parent.parent.parent / "components")
|
||||||
|
|
@ -86,31 +86,29 @@ class Settings(BaseSettings):
|
||||||
value = langflow_database_url
|
value = langflow_database_url
|
||||||
logger.debug("Using LANGFLOW_DATABASE_URL env variable.")
|
logger.debug("Using LANGFLOW_DATABASE_URL env variable.")
|
||||||
else:
|
else:
|
||||||
# logger.debug("No DATABASE_URL env variable, using sqlite database")
|
logger.debug("No DATABASE_URL env variable, using sqlite database")
|
||||||
logger.debug("No DATABASE_URL env variable, using custom database from secrets of {}".format(os.environ["host"]))
|
|
||||||
# Originally, we used sqlite:///./langflow.db
|
# Originally, we used sqlite:///./langflow.db
|
||||||
# so we need to migrate to the new format
|
# so we need to migrate to the new format
|
||||||
# if there is a database in that location
|
# if there is a database in that location
|
||||||
# if not values["CONFIG_DIR"]:
|
if not values["CONFIG_DIR"]:
|
||||||
# raise ValueError(
|
raise ValueError(
|
||||||
# "CONFIG_DIR not set, please set it or provide a DATABASE_URL"
|
"CONFIG_DIR not set, please set it or provide a DATABASE_URL"
|
||||||
# )
|
)
|
||||||
|
|
||||||
# new_path = f"{values['CONFIG_DIR']}/langflow.db"
|
new_path = f"{values['CONFIG_DIR']}/langflow.db"
|
||||||
# if Path("./langflow.db").exists():
|
if Path("./langflow.db").exists():
|
||||||
# if Path(new_path).exists():
|
if Path(new_path).exists():
|
||||||
# logger.debug(f"Database already exists at {new_path}, using it")
|
logger.debug(f"Database already exists at {new_path}, using it")
|
||||||
# else:
|
else:
|
||||||
# try:
|
try:
|
||||||
# logger.debug("Copying existing database to new location")
|
logger.debug("Copying existing database to new location")
|
||||||
# copy2("./langflow.db", new_path)
|
copy2("./langflow.db", new_path)
|
||||||
# logger.debug(f"Copied existing database to {new_path}")
|
logger.debug(f"Copied existing database to {new_path}")
|
||||||
# except Exception:
|
except Exception:
|
||||||
# logger.error("Failed to copy database, using default path")
|
logger.error("Failed to copy database, using default path")
|
||||||
# new_path = "./langflow.db"
|
new_path = "./langflow.db"
|
||||||
|
|
||||||
# value = f"sqlite:///{new_path}"
|
value = f"sqlite:///{new_path}"
|
||||||
value = "mysql+pymysql://{}:{}@{}:3306/{}".format(os.environ["username"],os.environ["password"],os.environ["host"],os.environ["dbname"])
|
|
||||||
|
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
import contextlib
|
import contextlib
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
from typing import Optional, List
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
from pydantic import validator, model_validator
|
|
||||||
from pydantic_settings import BaseSettings
|
|
||||||
from langflow.utils.logger import logger
|
from langflow.utils.logger import logger
|
||||||
|
from pydantic import model_validator, validator
|
||||||
|
from pydantic_settings import BaseSettings
|
||||||
|
|
||||||
BASE_COMPONENTS_PATH = str(Path(__file__).parent / "components")
|
BASE_COMPONENTS_PATH = str(Path(__file__).parent / "components")
|
||||||
|
|
||||||
|
|
@ -46,11 +46,8 @@ class Settings(BaseSettings):
|
||||||
value = langflow_database_url
|
value = langflow_database_url
|
||||||
logger.debug("Using LANGFLOW_DATABASE_URL env variable.")
|
logger.debug("Using LANGFLOW_DATABASE_URL env variable.")
|
||||||
else:
|
else:
|
||||||
# logger.debug("No DATABASE_URL env variable, using sqlite database")
|
logger.debug("No DATABASE_URL env variable, using sqlite database")
|
||||||
logger.debug("No DATABASE_URL env variable, using custom database from secrets of {}".format(os.environ["host"]))
|
value = "sqlite:///./langflow.db"
|
||||||
# value = "sqlite:///./langflow.db"
|
|
||||||
value = "mysql+pymysql://{}:{}@{}:3306/{}".format(os.environ["username"],os.environ["password"],os.environ["host"],os.environ["dbname"])
|
|
||||||
|
|
||||||
return value
|
return value
|
||||||
|
|
||||||
@validator("COMPONENTS_PATH", pre=True)
|
@validator("COMPONENTS_PATH", pre=True)
|
||||||
|
|
@ -58,7 +55,7 @@ class Settings(BaseSettings):
|
||||||
if os.getenv("LANGFLOW_COMPONENTS_PATH"):
|
if os.getenv("LANGFLOW_COMPONENTS_PATH"):
|
||||||
logger.debug("Adding LANGFLOW_COMPONENTS_PATH to components_path")
|
logger.debug("Adding LANGFLOW_COMPONENTS_PATH to components_path")
|
||||||
langflow_component_path = os.getenv("LANGFLOW_COMPONENTS_PATH")
|
langflow_component_path = os.getenv("LANGFLOW_COMPONENTS_PATH")
|
||||||
if (
|
if langflow_component_path and (
|
||||||
Path(langflow_component_path).exists()
|
Path(langflow_component_path).exists()
|
||||||
and langflow_component_path not in value
|
and langflow_component_path not in value
|
||||||
):
|
):
|
||||||
|
|
|
||||||
|
|
@ -197,8 +197,8 @@ export default function FormModal({
|
||||||
const isSecureProtocol =
|
const isSecureProtocol =
|
||||||
window.location.protocol === "https:" || window.location.port === "443";
|
window.location.protocol === "https:" || window.location.port === "443";
|
||||||
const webSocketProtocol = isSecureProtocol ? "wss" : "ws";
|
const webSocketProtocol = isSecureProtocol ? "wss" : "ws";
|
||||||
// const host = isDevelopment ? "localhost:7860" : window.location.host;
|
const host = isDevelopment ? "localhost:7860" : window.location.host;
|
||||||
const host = window.location.host;
|
|
||||||
const chatEndpoint = `/api/v1/chat/${chatId}`;
|
const chatEndpoint = `/api/v1/chat/${chatId}`;
|
||||||
|
|
||||||
return `${
|
return `${
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue