Skip to content

Commit

Permalink
⚠️ docs: Default Value Warnings & Docker Docs Update (#2343)
Browse files Browse the repository at this point in the history
* feat(AppService): default secret value warnings

* docs: update docker/ubuntu related guides
  • Loading branch information
danny-avila authored Apr 6, 2024
1 parent 0b16526 commit caabab4
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 13 deletions.
27 changes: 27 additions & 0 deletions api/server/services/AppService.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@ const { loadAndFormatTools } = require('./ToolService');
const paths = require('~/config/paths');
const { logger } = require('~/config');

const secretDefaults = {
CREDS_KEY: 'f34be427ebb29de8d88c107a71546019685ed8b241d8f2ed00c3df97ad2566f0',
CREDS_IV: 'e2341419ec3dd3d19b13a1a87fafcbfb',
JWT_SECRET: '16f8c0ef4a5d391b26034086c628469d3f9f497f08163ab9b40137092f2909ef',
JWT_REFRESH_SECRET: 'eaa5191f2914e30b9387fd84e254e4ba6fc51b4654968a9b0803b456a54b8418',
};

/**
*
* Loads custom config and initializes app-wide variables.
Expand Down Expand Up @@ -176,6 +183,26 @@ const AppService = async (app) => {
paths,
...endpointLocals,
};

let hasDefaultSecrets = false;
for (const [key, value] of Object.entries(secretDefaults)) {
if (process.env[key] === value) {
logger.warn(`Default value for ${key} is being used.`);
!hasDefaultSecrets && (hasDefaultSecrets = true);
}
}

if (hasDefaultSecrets) {
logger.info(
`Please replace any default secret values.
For your conveninence, fork & run this replit to generate your own secret values:
https://replit.com/@daavila/crypto#index.js
`,
);
}
};

module.exports = AppService;
93 changes: 82 additions & 11 deletions docs/deployment/docker_ubuntu_deploy.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ In order to use this guide you need a remote computer or VM deployed. While you

> ⚠️ This guide was originally designed for [Digital Ocean](./digitalocean.md), so you may have to modify the instruction for other platforms, but the main idea remains unchanged.
### Part I: Installing Docker and Other Dependencies:
## Part I: Installing Docker and Other Dependencies:

There are many ways to setup Docker on Debian systems. I'll walk you through the best and the recommended way [based on this guide](https://www.smarthomebeginner.com/install-docker-on-ubuntu-22-04/).

Expand All @@ -30,7 +30,7 @@ Then, use the following command to install the dependencies or pre-requisite pac
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
```

### **Notes:**
#### **Installation Notes**

- Input "Y" for all [Y/n] (yes/no) terminal prompts throughout this entire guide.
- After the first [Y/n] prompt, you will get the first of a few **purple screens** asking to restart services.
Expand Down Expand Up @@ -118,14 +118,14 @@ Exit this log by pressing CTRL (or CMD) + C.

The version of docker-compose packaged with the Linux distribution is probably old and will not work for us.

Checking the releases on the [Docker Compose GitHub](https://github.com/docker/compose/releases), the last release is v2.20.2 (as of 8/9/23).
Checking the releases on the [Docker Compose GitHub](https://github.com/docker/compose/releases), the last release is v2.26.1 (as of 4/6/24).

You will have to manually download and install it. But fear not, it is quite easy.

First, download the latest version of Docker Compose using the following command:

```bash
sudo curl -L https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/v2.26.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
```

Next, make it executable using the following command:
Expand All @@ -143,6 +143,10 @@ docker-compose -v

If you get a permission denied error, like I did, reboot/switch to your created user again, and run `sudo chmod +x /usr/local/bin/docker-compose` again

#### Note on Docker Compose Commands

As of Docker Compose v2, `docker-compose` is now `docker compose`. This guide will use the old commands for now, but you should be aware of this change and that `docker compose` is often preferred.

### **6. As part of this guide, I will recommend you have git and npm installed:**

Though not technically required, having git and npm will make installing/updating very simple:
Expand Down Expand Up @@ -183,7 +187,33 @@ git clone https://github.com/danny-avila/LibreChat.git
cd LibreChat/
```

### **2. Create a global environment file.**
### **2. Create LibreChat Config and Environment files**

#### Config (librechat.yaml) File

Next, we create the [LibreChat Config file](../install/configuration/custom_config.md), AKA `librechat.yaml`, allowing for customization of the app's settings as well as [custom endpoints](../install/configuration/ai_endpoints.md).

Whether or not you want to customize the app further, it's required for the `deploy-compose.yml` file we are using, so we can create one with the bare-minimum value to start:

```bash
nano librechat.yaml
```

You will enter the editor screen, and you can paste the following:

```yaml
# For more information, see the Configuration Guide:
# https://docs.librechat.ai/install/configuration/custom_config.html

# Configuration version (required)
version: 1.0.5
# This setting caches the config file for faster loading across app lifecycle
cache: true
```
Exit the editor with `CTRL + X`, then `Y` to save, and `ENTER` to confirm.

#### Environment (.env) File

The default values are enough to get you started and running the app, allowing you to provide your credentials from the web app.

Expand All @@ -192,15 +222,36 @@ The default values are enough to get you started and running the app, allowing y
cp .env.example .env
```

However, if you'd like to provide any credentials for all users of your instance to consume, you can add them to the .env file as follows:
However, it's **highly recommended** you adjust the "secret" values from their default values for added security. The API startup logs will warn you if you don't.

For conveninence, you can fork & run this replit to generate your own values:

[https://replit.com/@daavila/crypto#index.js](https://replit.com/@daavila/crypto#index.js)

```bash
nano .env
# then, add your credentials
# FIND THESE VARIABLES AND REPLACE THEIR DEFAULT VALUES!
# Must be a 16-byte IV (32 characters in hex)
CREDS_IV=e2341419ec3dd3d19b13a1a87fafcbfb
# Must be 32-byte keys (64 characters in hex)
CREDS_KEY=f34be427ebb29de8d88c107a71546019685ed8b241d8f2ed00c3df97ad2566f0
JWT_SECRET=16f8c0ef4a5d391b26034086c628469d3f9f497f08163ab9b40137092f2909ef
JWT_REFRESH_SECRET=eaa5191f2914e30b9387fd84e254e4ba6fc51b4654968a9b0803b456a54b8418
```

If you'd like to provide any credentials for all users of your instance to consume, you should add them while you're still editing this file:

```bash
OPENAI_API_KEY=sk-yourKey
```

As before, exit the editor with `CTRL + X`, then `Y` to save, and `ENTER` to confirm.

**That's it!**

For thorough configuration, however, you should edit your .env file as needed, and do read the comments in the file and the resources below.
Expand All @@ -221,7 +272,7 @@ ALLOW_REGISTRATION=false
- [Tokens/Apis/etc](../install/configuration/ai_setup.md)
- [User/Auth System](../install/configuration/user_auth_system.md)

### **3. Start docker, and then run the installation/update script**
### **3. Start docker**

```bash
# should already be running, but just to be safe
Expand All @@ -247,11 +298,11 @@ It's safe to close the terminal if you wish -- the docker app will continue to r

### **4. Once the app is running, you can access it at `http://yourserverip`**

### Go back to the droplet page to get your server ip, copy it, and paste it into your browser!
#### Go back to the droplet page to get your server ip, copy it, and paste it into your browser!

![image](https://github.com/danny-avila/LibreChat/assets/110412045/d8bbad29-6015-46ec-88ce-a72a43d8a313)

### Sign up, log in, and enjoy your own privately hosted, remote LibreChat :)
#### Sign up, log in, and enjoy your own privately hosted, remote LibreChat :)

![image](https://github.com/danny-avila/LibreChat/assets/110412045/85070a54-eb57-479f-8011-f63c14116ee3)

Expand Down Expand Up @@ -291,6 +342,24 @@ npm run start:deployed
docker ps
```

You can update manually without the scripts if you encounter issues, refer to the [Docker Compose Guide](../install/installation/docker_compose_install.md)

The commands are the same, except you append the `-f ./deploy-compose.yml` flag to the docker compose commands.

```bash
# Stop the running container(s)
docker compose -f ./deploy-compose.yml down
# Pull latest project changes
git pull
# Pull the latest LibreChat image (default setup)
docker compose -f ./deploy-compose.yml pull
# Start LibreChat
docker compose -f ./deploy-compose.yml up
```

## Part IV: Editing the NGINX file (for custom domains and advanced configs)

In case you would like to edit the NGINX file for whatever reason, such as pointing your server to a custom domain, use the following:
Expand Down Expand Up @@ -375,4 +444,6 @@ Stage and commit as in Part V, and you're all set!

---

### Note: If you're still having trouble, before creating a new issue, please search for similar ones on our [#issues thread on our discord](https://discord.librechat.ai) or our [troubleshooting discussion](https://github.com/danny-avila/LibreChat/discussions/categories/troubleshooting) on our Discussions page. If you don't find a relevant issue, feel free to create a new one and provide as much detail as possible.
## Final Notes

If you're still having trouble, before creating a new issue, please search for similar ones on our [#issues thread on our discord](https://discord.librechat.ai) or our [troubleshooting discussion](https://github.com/danny-avila/LibreChat/discussions/categories/troubleshooting) on our Discussions page. If you don't find a relevant issue, feel free to create a new one and provide as much detail as possible.
11 changes: 9 additions & 2 deletions docs/install/installation/linux_install.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,19 @@ In this video, you will learn how to install and run LibreChat, using Docker on
- Build the Docker image: `docker compose build`
- Start LibreChat: `docker compose up -d`

Note: If you run the command on the same computer and want to access it, navigate to `localhost:3080`. You should see a login page where you can create or sign in to your account. Then you can choose an AI model and start chatting.
#### Notes

- As of Docker Compose v2, `docker-compose` is now `docker compose`
- Your linux distribution may not have the latest version of Docker Compose, so you may need to use `docker-compose` instead of `docker compose`
- You can also see our guide on installing the latest versions of Docker & Docker Compose here: [Docker Ubuntu Deployment Guide](../../deployment/docker_ubuntu_deploy.md#part-i-installing-docker-and-other-dependencies)
- The guide is specific to Ubuntu but may be applicable to other Linux distributions as well

- If you run the command on the same computer and want to access it, navigate to `localhost:3080`. You should see a login page where you can create or sign in to your account. Then you can choose an AI model and start chatting.

- [Manage Your MongoDB Database (optional)](../../features/manage_your_database.md)
Safely access and manage your MongoDB database using Mongo Express

Have fun!
#### Have fun!

> Note: See the [Docker Compose Install Guide](./docker_compose_install.md) for more details
- 👆 Docker Compose installation is recommended for most use cases. It's the easiest, simplest, and most reliable method to get started.
Expand Down

0 comments on commit caabab4

Please sign in to comment.