Skip to main content
LibreChat is joining ClickHouse to power the open-source Agentic Data Stack 🎉 Learn more
LibreChat

Docker (zdalny system Linux)

Te instrukcje są przeznaczone dla osób rozpoczynających od zera instalację Docker na zdalnym serwerze Ubuntu

Aby skorzystać z tego przewodnika, musisz mieć wdrożony zdalny komputer lub maszynę wirtualną (VM). Chociaż możesz użyć tego przewodnika z lokalną instalacją, pamiętaj, że został on pierwotnie napisany z myślą o wdrożeniu w chmurze.

⚠️ Ten przewodnik został pierwotnie zaprojektowany dla Digital Ocean, więc być może będziesz musiał zmodyfikować instrukcje dla innych platform, ale główna idea pozostaje niezmieniona.

Część I: Instalacja Docker i innych zależności:

Istnieje wiele sposobów na konfigurację Docker w systemach Linux. Przeprowadzę Cię przez najlepszą i zalecaną metodę w oparciu o ten przewodnik.

Pamiętaj, że „najlepszy” sposób instalacji Docker na systemie Ubuntu nie oznacza sposobu „najszybszego” ani „najłatwiejszego”. Oznacza on najlepszą metodę instalacji pod kątem długoterminowych korzyści (tj. szybszych aktualizacji, poprawek bezpieczeństwa itp.).

1. Aktualizacja i instalacja zależności Docker

Najpierw zaktualizujmy listę pakietów i zainstalujmy wymagane zależności Docker.

sudo apt update

Następnie użyj poniższego polecenia, aby zainstalować zależności lub wymagane pakiety.

sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release

Uwagi dotyczące instalacji

  • Wpisz "Y" dla wszystkich zapytań terminala [Y/n] (tak/nie) w całym tym przewodniku.
  • Po pierwszym monicie [Y/n] zobaczysz pierwszy z kilku fioletowych ekranów z prośbą o zrestartowanie usług.
    • Za każdym razem, gdy to nastąpi, możesz bezpiecznie nacisnąć ENTER, aby wybrać domyślne, już zaznaczone opcje:

image

  • Jeśli w którymkolwiek momencie konsola droplet zostanie rozłączona, wykonaj poniższe czynności, a następnie kontynuuj od miejsca, w którym przerwano:
    • Uzyskaj ponownie dostęp do konsoli, jak wskazano powyżej
    • Przełącz się na użytkownika, którego utworzyłeś, za pomocą su - <yourusername>

2. Dodaj repozytorium Docker do źródeł APT

Chociaż instalacja Docker Engine z repozytoriów Ubuntu jest łatwiejsza, dodanie oficjalnego repozytorium Docker zapewnia szybsze aktualizacje. Dlatego jest to zalecana metoda.

Najpierw pobierzmy klucz GPG, który jest potrzebny do połączenia się z repozytorium Docker. W tym celu użyj poniższego polecenia.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Następnie dodaj repozytorium do listy źródeł. Chociaż możesz dodać je również ręcznie, poniższe polecenie zrobi to automatycznie za Ciebie.

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Powyższe polecenie automatycznie uzupełni nazwę kodową Twojego wydania (jammy dla 22.04, focal dla 20.04 oraz bionic dla 18.04).

Na koniec ponownie odśwież swoje pakiety.

sudo apt update

Jeśli zapomnisz dodać klucz GPG, powyższy krok zakończy się komunikatem o błędzie. W przeciwnym razie przejdźmy do instalacji Docker na Ubuntu.

3. Zainstaluj Docker

Jaka jest różnica między docker.io a docker-ce?

docker.io to pakiet docker oferowany przez niektóre popularne dystrybucje systemu Linux (np. Ubuntu/Debian). Z kolei docker-ce to pakiet docker z oficjalnego repozytorium Docker. Zazwyczaj docker-ce jest bardziej aktualny i preferowany.

Teraz zainstalujemy docker-ce (a nie pakiet docker.io)

sudo apt install docker-ce

Fioletowy ekran oznacza naciśnięcie ENTER. :)

Zalecane: upewnij się, że utworzony użytkownik został dodany do grupy docker, aby zapewnić bezproblemowe używanie poleceń:

sudo usermod -aG docker $USER

Teraz zrestartujmy system, aby upewnić się, że wszystko jest w porządku.

sudo reboot

Po ponownym uruchomieniu, jeśli używasz konsoli droplet w przeglądarce, możesz kliknąć przeładuj i poczekać na powrót do konsoli.

image

Przypomnienie: Za każdym razem, gdy wykonujesz restart za pomocą sudo reboot, powinieneś przełączyć się na użytkownika, którego skonfigurowałeś wcześniej, używając su - <yourusername>.

4. Zweryfikuj, czy Docker działa na systemie Ubuntu

Istnieje wiele sposobów, aby sprawdzić, czy Docker działa w systemie Ubuntu. Jednym z nich jest użycie następującego polecenia:

sudo systemctl status docker

Powinieneś zobaczyć komunikat active (running) w polu status.

image

Wyjdź z tego logu, naciskając CTRL (lub CMD) + C.

5. Zainstaluj Docker Compose

Ponieważ dodaliśmy już oficjalne repozytorium Docker w kroku 2, instalacja Docker Compose jest prosta przy użyciu oficjalnej wtyczki Compose:

sudo apt install docker-compose-plugin

Zweryfikuj instalację:

docker compose version

Uwaga: Docker Compose v2 używa polecenia docker compose (bez łącznika) zamiast starszego docker-compose. Wszystkie polecenia w tym przewodniku używają nowoczesnej składni.

6. W ramach tego przewodnika zalecam posiadanie zainstalowanych git oraz npm:

Chociaż technicznie nie jest to wymagane, posiadanie git i npm sprawi, że instalacja/aktualizacja będzie bardzo prosta:

sudo apt install git nodejs npm

Włącz linie z Matrixa.

Możesz potwierdzić pomyślną instalację tych pakietów za pomocą następującego polecenia:

git --version
node -v
npm -v

image

Uwaga: może to zainstalować starsze wersje Node.js i npm. Jeśli uruchamiasz LibreChat bezpośrednio na hoście, użyj Node.js v24.16.0 z npm v11.16.0. W przypadku tego przewodnika opartego na Docker, wersja Node.js na hoście nie ma znaczenia, ponieważ LibreChat działa wewnątrz kontenerów.

Ok, teraz, gdy skonfigurowałeś Droplet, przejdziesz do konfiguracji samej aplikacji


Część II: Konfiguracja LibreChat

1. Sklonuj repozytorium

Z wiersza poleceń droplet (jako twój użytkownik, nie root):

# clone down the repository
git clone https://github.com/danny-avila/LibreChat.git

# enter the project directory
cd LibreChat/

2. Utwórz pliki konfiguracyjne i środowiskowe LibreChat

Plik konfiguracyjny (librechat.yaml)

Następnie tworzymy plik konfiguracyjny LibreChat, znany jako librechat.yaml, który umożliwia dostosowanie ustawień aplikacji, a także niestandardowe endpointy.

Niezależnie od tego, czy chcesz dalej dostosowywać aplikację, jest to wymagane dla pliku deploy-compose.yml, którego używamy, więc możemy utworzyć go z minimalną wymaganą wartością, aby rozpocząć:

nano librechat.yaml

Przejdziesz do ekranu edytora, gdzie możesz wkleić poniższą zawartość:

# For more information, see the Configuration Guide:
# https://www.librechat.ai/docs/configuration/librechat_yaml

# Configuration version (required)
version: 1.3.5
# This setting caches the config file for faster loading across app lifecycle
cache: true

Wyjdź z edytora za pomocą CTRL + X, następnie Y, aby zapisać, i ENTER, aby potwierdzić.

Weryfikacja konfiguracji

LibreChat zakończy działanie z błędem (kod wyjścia 1), jeśli Twój plik librechat.yaml zawiera błędy walidacji. To zachowanie typu „fail-fast” zapewnia, że problemy z konfiguracją zostaną wykryte na wczesnym etapie wdrażania.

Przed wdrożeniem sprawdź poprawność swojej konfiguracji za pomocą YAML Validator. Jeśli Twój potok CI/CD uruchamia serwer, przerwie on działanie w przypadku nieprawidłowej konfiguracji, zapobiegając wdrożeniom z błędnymi ustawieniami.

Plik środowiskowy (.env)

Domyślne wartości są wystarczające, aby rozpocząć pracę i uruchomić aplikację, umożliwiając podanie danych uwierzytelniających z poziomu aplikacji internetowej.

# Copies the example file as your global env file
cp .env.example .env

Jednakże wysoce zaleca się zmianę wartości "secret" z ich domyślnych ustawień w celu zwiększenia bezpieczeństwa. Dzienniki uruchamiania API ostrzegą Cię, jeśli tego nie zrobisz.

Dla wygody możesz uruchomić to polecenie, aby wygenerować własne wartości:

https://www.librechat.ai/toolkit/creds_generator

nano .env

# 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

Jeśli chcesz udostępnić jakiekolwiek dane uwierzytelniające wszystkim użytkownikom swojej instancji, powinieneś dodać je, gdy nadal edytujesz ten plik:

OPENAI_API_KEY=sk-yourKey

Tak jak poprzednio, wyjdź z edytora za pomocą CTRL + X, następnie Y, aby zapisać, i ENTER, aby potwierdzić.

To wszystko!

Aby jednak przeprowadzić dokładną konfigurację, należy w razie potrzeby edytować plik .env oraz zapoznać się z komentarzami w tym pliku i poniższymi zasobami.

# if editing the .env file
nano .env

To jedna ze zmiennych środowiskowych, na którą warto zwrócić uwagę. Wyłącza ona możliwość zewnętrznej rejestracji, co jest przydatne, jeśli chcesz ją zablokować po utworzeniu własnego konta.

ALLOW_REGISTRATION=false

Zasoby:

3. Uruchom Docker

# should already be running, but just to be safe
sudo systemctl start docker

# confirm docker is running
docker info

Teraz możemy uruchomić kontener aplikacji. Za pierwszym razem użyjemy pełnego polecenia, a później będziemy mogli korzystać z polecenia skróconego.

sudo docker compose -f ./deploy-compose.yml up -d

image

Możesz bezpiecznie zamknąć terminal, jeśli chcesz -- aplikacja Docker będzie nadal działać.

Uwaga: używany jest tutaj specjalny plik compose zoptymalizowany pod to środowisko wdrożeniowe. Jeśli potrzebujesz tutaj większej konfiguracji, sprawdź pliki deploy-compose.yml oraz Dockerfile.multi, aby zobaczyć, jak są skonfigurowane. Nie budujemy obrazu w tym środowisku, ponieważ ilość pamięci RAM jest niewystarczająca. Zamiast tego pobieramy najnowszy obraz dev-api LibreChat, który jest automatycznie budowany po każdym wypchnięciu zmian do gałęzi main.

Jeśli konfigurujesz domenę do użycia z LibreChat, ten plik compose korzysta z pliku nginx znajdującego się w client/nginx.conf. Instrukcje dotyczące tego znajdują się poniżej w części V.

4. Gdy aplikacja będzie uruchomiona, możesz uzyskać do niej dostęp pod adresem http://yourserverip

Wróć do strony droplet, aby uzyskać adres IP swojego serwera, skopiuj go i wklej do przeglądarki!

image

Zarejestruj się, zaloguj i ciesz się własną, prywatnie hostowaną, zdalną instancją LibreChat :)

image

image

Część III: Aktualizacja LibreChat

Ten krok jest dość prosty, pod warunkiem że wszystko powyżej zostało pomyślnie zainstalowane i nie edytowano historii git.

Uwaga: Jeśli pracujesz na edytowanej gałęzi, z własnymi commitami, na przykład z edycjami w client/nginx.conf, powinieneś sprawdzić config/deployed-update.js, aby ręcznie uruchomić niektóre polecenia według własnego uznania. Zobacz część V, aby uzyskać więcej informacji na ten temat.

Uruchom poniższe polecenie, aby przeprowadzić automatyczną aktualizację

npm run update:deployed

Zatrzymywanie kontenera Docker

npm run stop:deployed

To po prostu uruchamia docker compose -f ./deploy-compose.yml down

Uruchamianie kontenera Docker

npm run start:deployed

To po prostu uruchamia docker compose -f ./deploy-compose.yml up -d

Sprawdź aktywne kontenery Docker

docker ps

Jeśli napotkasz problemy, możesz przeprowadzić aktualizację ręcznie, bez użycia skryptów.

docker compose -f ./deploy-compose.yml down
# Linux/Mac
docker images -a | grep "librechat" | awk '{print $3}' | xargs docker rmi

# Windows (PowerShell)
docker images -a --filter "reference=registry.librechat.ai/danny-avila/librechat*" --format "{{.ID}}" | ForEach-Object { docker rmi $_ }
docker images -a --filter "reference=ghcr.io/danny-avila/librechat*" --format "{{.ID}}" | ForEach-Object { docker rmi $_ }
git pull
docker compose -f ./deploy-compose.yml pull
docker compose -f ./deploy-compose.yml up

Część IV: Edycja pliku NGINX (dla domen niestandardowych i zaawansowanych konfiguracji)

Jeśli z jakiegokolwiek powodu chcesz edytować plik NGINX, na przykład aby skierować swój serwer na własną domenę, użyj poniższego:

npm run stop:deployed
nano client/nginx.conf

Nie będę przeprowadzać Cię przez konfigurację własnej domeny ani żadne inne zmiany w NGINX; możesz zapoznać się z przewodnikiem Cloudflare, przewodnikiem Traefik lub przewodnikiem NGINX, aby rozpocząć pracę z własnymi domenami.

Pokażę jednak, co należy edytować po stronie LibreChat dla domeny niestandardowej przy tej konfiguracji.

Ponieważ NGINX jest domyślnie używany jako proxy pass, edytuję tylko poniższe:

# before
server_name localhost;

# after
server_name custom.domain.com;

Uwaga: działa to, ponieważ plik deploy-compose.yml domyślnie korzysta z NGINX, w przeciwieństwie do głównego pliku docker-compose.yml. Jak zawsze, możesz skonfigurować pliki compose zgodnie ze swoimi potrzebami.

Teraz zatwierdź te zmiany w osobnej gałęzi:

# create a new branch
# example: git checkout -b edit
git checkout -b <branchname>

# stage all file changes
git add .

Aby zatwierdzić zmiany w gałęzi git, musisz się zidentyfikować w git. Mogą to być fikcyjne wartości, ale jeśli chcesz, aby synchronizowały się z GitHubem w przypadku wypchnięcia tej gałęzi do forka repozytorium LibreChat, użyj swojego adresu e-mail z GitHuba.

# these values will work if you don't care what they are
git config --global user.email "[email protected]"
git config --global user.name "Your Name"

# Now you can commit the change
git commit -m "edited nginx.conf"

Aktualizacja na edytowanej gałęzi będzie teraz działać nieco inaczej

npm run rebase:deployed

Wszystko powinno być gotowe!

Ostrzeżenie Doświadczysz konfliktów scalania, jeśli zaczniesz znacząco edytować gałąź, co nie jest zalecane, chyba że wiesz, co robisz.

Pamiętaj, że wszelkie zmiany w kodzie w tym środowisku nie będą widoczne, ponieważ plik compose pobiera obrazy Docker budowane automatycznie przez GitHub.

Część V: Używaj najnowszej stabilnej wersji zamiast najnowszej głównej gałęzi (main branch)

Domyślnie ta konfiguracja pobierze najnowsze aktualizacje głównej gałęzi (main branch) LibreChat. Jeśli wolisz korzystać z najnowszego „stabilnego” wydania, które jest definiowane przez latest tags, musisz edytować plik deploy-compose.yml i zatwierdzić swoje zmiany dokładnie tak, jak opisano powyżej w Części V. Pamiętaj, że w takim przypadku nie będziesz otrzymywać najnowszych funkcji od razu po ich wprowadzeniu.

Edytujmy deploy-compose.yml:

nano deploy-compose.yml

Zmień librechat-dev-api na librechat-api:

image: registry.librechat.ai/danny-avila/librechat-api:latest

Przygotuj (stage) i zatwierdź (commit) zmiany tak, jak w części V, i wszystko gotowe!

Jaka jest ta instrukcja?