update CFW launch with no credential option

This commit is contained in:
timothycarambat 2023-07-14 09:56:04 -07:00
parent 032c9d27b6
commit 0207e147f1
2 changed files with 274 additions and 1 deletions

View File

@ -2,6 +2,16 @@
With an AWS account you can easily deploy a private AnythingLLM instance on AWS. This will create a url that you can access from any browser over HTTP (HTTPS not supported). This single instance will run on your own keys and they will not be exposed - however if you want your instance to be protected it is highly recommend that you set the `AUTH_TOKEN` and `JWT_SECRET` variables in the `docker/` ENV.
**Quick Launch**
2. Log in to your AWS account
3. Open [CloudFormation](https://us-west-1.console.aws.amazon.com/cloudformation/home)
4. Ensure you are deploying in a geographic zone that is nearest to your physical location to reduce latency.
5. Click `Create Stack`
6. Use the file `aws_no_creds.json` as your JSON template.
7. Launch. On first boot fill out your ENV keys and you are fully live.
Done.
**Custom Launch**
[Refer to .env.example](../../docker/HOW_TO_USE_DOCKER.md) for data format.
The output of this cloudformation stack will be:
@ -41,7 +51,7 @@ The output of this cloudformation stack will be:
**Note:**
Your instance will not be available instantly. Depending on the instance size you launched with it can take anywhere from 10-20 minutes to fully boot up.
If you want to check the instances progress, navigate to [your deployed EC2 instances](https://us-west-1.console.aws.amazon.com/ec2/home) and connect to your instance via SSH in browser.
If you want to check the instance's progress, navigate to [your deployed EC2 instances](https://us-west-1.console.aws.amazon.com/ec2/home) and connect to your instance via SSH in browser.
Once connected run `sudo tail -f /var/log/cloud-init-output.log` and wait for the file to conclude deployment of the docker image.
You should see an output like this

View File

@ -0,0 +1,263 @@
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Create a stack that runs AnythingLLM on a single instance",
"Parameters": {
"InstanceType": {
"Description": "EC2 instance type",
"Type": "String",
"Default": "t2.small"
},
"InstanceVolume": {
"Description": "Storage size of disk on Instance in GB",
"Type": "Number",
"Default": 10,
"MinValue": 4
}
},
"Resources": {
"AnythingLLMInstance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"ImageId": {
"Fn::FindInMap": [
"Region2AMI",
{
"Ref": "AWS::Region"
},
"AMI"
]
},
"InstanceType": {
"Ref": "InstanceType"
},
"SecurityGroupIds": [
{
"Ref": "AnythingLLMInstanceSecurityGroup"
}
],
"BlockDeviceMappings": [
{
"DeviceName": {
"Fn::FindInMap": [
"Region2AMI",
{
"Ref": "AWS::Region"
},
"RootDeviceName"
]
},
"Ebs": {
"VolumeSize": {
"Ref": "InstanceVolume"
}
}
}
],
"UserData": {
"Fn::Base64": {
"Fn::Join": [
"",
[
"Content-Type: multipart/mixed; boundary=\"//\"\n",
"MIME-Version: 1.0\n",
"\n",
"--//\n",
"Content-Type: text/cloud-config; charset=\"us-ascii\"\n",
"MIME-Version: 1.0\n",
"Content-Transfer-Encoding: 7bit\n",
"Content-Disposition: attachment; filename=\"cloud-config.txt\"\n",
"\n",
"\n",
"#cloud-config\n",
"cloud_final_modules:\n",
"- [scripts-user, always]\n",
"\n",
"\n",
"--//\n",
"Content-Type: text/x-shellscript; charset=\"us-ascii\"\n",
"MIME-Version: 1.0\n",
"Content-Transfer-Encoding: 7bit\n",
"Content-Disposition: attachment; filename=\"userdata.txt\"\n",
"\n",
"\n",
"#!/bin/bash\n",
"# check output of userdata script with sudo tail -f /var/log/cloud-init-output.log\n",
"sudo yum install docker -y\n",
"sudo usermod -a -G docker ec2-user\n",
"curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose\n",
"sudo chmod +x /usr/local/bin/docker-compose\n",
"sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose\n",
"sudo systemctl enable docker\n",
"sudo systemctl start docker\n",
"sudo yum install git -y\n",
"git clone https://github.com/Mintplex-Labs/anything-llm.git /home/ec2-user/anything-llm\n",
"cd /home/ec2-user/anything-llm/docker\n",
"cat >> .env << \"END\"\n",
"SERVER_PORT=3001\n",
"OPEN_AI_KEY=\n",
"OPEN_MODEL_PREF='gpt-3.5-turbo'\n",
"CACHE_VECTORS=\"true\"\n",
"VECTOR_DB=\"pinecone\"\n",
"PINECONE_ENVIRONMENT=\n",
"PINECONE_API_KEY=\n",
"PINECONE_INDEX=\n",
"STORAGE_DIR=\"./server/storage\"\n",
"GOOGLE_APIS_KEY=\n",
"UID=\"1000\"\n",
"GID=\"1000\"\n",
"END\n",
"cd ../frontend\n",
"rm -rf .env.production\n",
"cat >> .env.production << \"END\"\n",
"GENERATE_SOURCEMAP=true\n",
"VITE_API_BASE=\"/api\"\n",
"END\n",
"sudo docker-compose -f /home/ec2-user/anything-llm/docker/docker-compose.yml up -d\n",
"echo \"Container ID: $(sudo docker ps --latest --quiet)\"\n",
"sudo docker container exec -u 0 -t $(sudo docker ps --latest --quiet) mkdir -p /app/server/storage /app/server/storage/documents /app/server/storage/vector-cache /app/server/storage/lancedb\n",
"echo \"Placeholder folders in storage created.\"\n",
"sudo docker container exec -u 0 -t $(sudo docker ps --latest --quiet) touch /app/server/storage/anythingllm.db\n",
"echo \"SQLite DB placeholder set.\"\n",
"sudo docker container exec -u 0 -t $(sudo docker ps --latest --quiet) chown -R anythingllm:anythingllm /app/collector /app/server\n",
"echo \"File permissions corrected.\"\n",
"export ONLINE=$(curl -Is http://localhost:3001/api/ping | head -n 1|cut -d$' ' -f2)\n",
"echo \"Health check: $ONLINE\"\n",
"if [ \"$ONLINE\" = 200 ] ; then echo \"Running migrations...\" && curl -Is http://localhost:3001/api/migrate | head -n 1|cut -d$' ' -f2; fi\n",
"echo \"Setup complete! AnythingLLM instance is now online!\"\n",
"\n",
"--//--\n"
]
]
}
}
}
},
"AnythingLLMInstanceSecurityGroup": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "AnythingLLm Instance Security Group",
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"FromPort": "22",
"ToPort": "22",
"CidrIp": "0.0.0.0/0"
},
{
"IpProtocol": "tcp",
"FromPort": "3001",
"ToPort": "3001",
"CidrIp": "0.0.0.0/0"
},
{
"IpProtocol": "tcp",
"FromPort": "3001",
"ToPort": "3001",
"CidrIpv6": "::/0"
}
]
}
}
},
"Outputs": {
"ServerIp": {
"Description": "IP address of the AnythingLLM instance",
"Value": {
"Fn::GetAtt": [
"AnythingLLMInstance",
"PublicIp"
]
}
},
"ServerURL": {
"Description": "URL of the AnythingLLM server",
"Value": {
"Fn::Join": [
"",
[
"http://",
{
"Fn::GetAtt": [
"AnythingLLMInstance",
"PublicIp"
]
},
":3001"
]
]
}
}
},
"Mappings": {
"Region2AMI": {
"ap-south-1": {
"AMI": "ami-0e6329e222e662a52",
"RootDeviceName": "/dev/xvda"
},
"eu-north-1": {
"AMI": "ami-08c308b1bb265e927",
"RootDeviceName": "/dev/xvda"
},
"eu-west-3": {
"AMI": "ami-069d1ea6bc64443f0",
"RootDeviceName": "/dev/xvda"
},
"eu-west-2": {
"AMI": "ami-06a566ca43e14780d",
"RootDeviceName": "/dev/xvda"
},
"eu-west-1": {
"AMI": "ami-0a8dc52684ee2fee2",
"RootDeviceName": "/dev/xvda"
},
"ap-northeast-3": {
"AMI": "ami-0c8a89b455fae8513",
"RootDeviceName": "/dev/xvda"
},
"ap-northeast-2": {
"AMI": "ami-0ff56409a6e8ea2a0",
"RootDeviceName": "/dev/xvda"
},
"ap-northeast-1": {
"AMI": "ami-0ab0bbbd329f565e6",
"RootDeviceName": "/dev/xvda"
},
"ca-central-1": {
"AMI": "ami-033c256a10931f206",
"RootDeviceName": "/dev/xvda"
},
"sa-east-1": {
"AMI": "ami-0dabf4dab6b183eef",
"RootDeviceName": "/dev/xvda"
},
"ap-southeast-1": {
"AMI": "ami-0dc5785603ad4ff54",
"RootDeviceName": "/dev/xvda"
},
"ap-southeast-2": {
"AMI": "ami-0c5d61202c3b9c33e",
"RootDeviceName": "/dev/xvda"
},
"eu-central-1": {
"AMI": "ami-004359656ecac6a95",
"RootDeviceName": "/dev/xvda"
},
"us-east-1": {
"AMI": "ami-0cff7528ff583bf9a",
"RootDeviceName": "/dev/xvda"
},
"us-east-2": {
"AMI": "ami-02238ac43d6385ab3",
"RootDeviceName": "/dev/xvda"
},
"us-west-1": {
"AMI": "ami-01163e76c844a2129",
"RootDeviceName": "/dev/xvda"
},
"us-west-2": {
"AMI": "ami-0ceecbb0f30a902a6",
"RootDeviceName": "/dev/xvda"
}
}
}
}