Merge branch 'aws-cdk' into aws-cdk-dev2

This commit is contained in:
kazuki306 2023-12-09 10:53:44 +09:00 • committed by GitHub
commit fb817dd09e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 52 deletions

View file

@ -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#/).
![make-cloud9](./img/langflow-cloud9-en.png) ![make-cloud9](./img/langflow-cloud9-en.png)
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`.
![signin-langflow](./img/langflow-signin.png) ![signin-langflow](./img/langflow-signin.png)
# 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.
![delete-cfn](./img/langflow-cfn.png) ![delete-cfn](./img/langflow-cfn.png)

View file

@ -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]

View file

@ -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

View file

@ -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
): ):

View file

@ -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 `${