This commit is contained in:
Michael B
2025-03-29 15:55:23 +00:00
commit fd1131c35c
7 changed files with 204 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
*.AppImage
data/*
* copy*

60
Dockerfile Normal file
View File

@@ -0,0 +1,60 @@
ARG baseimage=nvidia/cuda:12.8.1-cudnn-devel-ubuntu22.04
FROM ${baseimage} AS baseimage
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
ENV TZ="Etc/UTC"
ARG DEBIAN_FRONTEND=noninteractive
# Build arguments
ARG ARG_UID=1000
ARG ARG_GID=1000
RUN <<eot
set -eux
apt -qy update
apt -qy install --no-install-recommends \
-o APT::Install-Recommends=false \
-o APT::Install-Suggests=false \
console-setup tzdata dbus x11-utils x11-xserver-utils libgl1-mesa-glx
apt -qy update
DEBIAN_FRONTEND=noninteractive apt -qy install --no-install-recommends \
-o APT::Install-Recommends=false \
-o APT::Install-Suggests=false \
libfuse2 kmod fuse libglib2.0-0 libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libgtk-3-0 libgbm1 libasound2 xserver-xorg xvfb x11vnc
mkdir -p /root/.vnc && x11vnc -storepasswd test123 /root/.vnc/passwd
eot
ENV DISPLAY=:99
#########################
FROM baseimage AS final
ADD ./LM-Studio* /data/lms/
ADD ./http-server-config.json /http-server-config.json
RUN <<eot
set -eux
chmod ugo+x /data/lms/*.AppImage
/data/lms/*.AppImage --appimage-extract
eot
ADD ./docker-entrypoint.sh /usr/local/bin/
ADD ./docker-healthcheck.sh /usr/local/bin/
# Ensure the scripts are executable
RUN chmod +x /usr/local/bin/docker-entrypoint.sh && \
chmod +x /usr/local/bin/docker-healthcheck.sh
# Setup the healthcheck
HEALTHCHECK --interval=1m --timeout=10s --start-period=1m \
CMD /bin/bash /usr/local/bin/docker-healthcheck.sh || exit 1
# Run the server
# CMD ["sh", "-c", "tail -f /dev/null"] # For development: keep container open
ENTRYPOINT ["/bin/bash", "/usr/local/bin/docker-entrypoint.sh"]

65
README.md Normal file
View File

@@ -0,0 +1,65 @@
# LMStudio Docker Deployment
This repository contains the necessary files to run [LMStudio](https://lmstudio.ai), an application for language model interaction, within a Docker container. The setup includes configuration files for both the entry point script, health check, Docker Compose file, Dockerfile, and HTTP server configuration.
## Introduction
LMStudio is a tool designed for interacting with language models, providing a seamless experience through a web interface. This setup uses Docker to containerize the application and deployment tools like Docker Compose for easy management of multiple containers.
## Prerequisites
Before you begin, ensure that your system meets the following requirements:
- [Docker](https://docs.docker.com/get-docker/) installed on your machine.
- Docker Compose (usually included with Docker Engine).
- A suitable environment to run the LMStudio container (e.g., a Linux server or local machine capable of running Docker containers).
## Getting Started
1. Clone this repository to your local machine:
```bash
git clone https://github.com/n0mer1/lmstudio-docker.git LMStudio
cd LMStudio
```
2. Review the `docker-compose.yml` file to ensure it meets your requirements. Adjust any environment variables or paths as necessary.
3. Download the LMStudio installer:
```bash
wget https://installers.lmstudio.ai/linux/x64/0.3.14-5/LM-Studio-0.3.14-5-x64.AppImage
```
4. Build and run the Docker containers using:
```bash
docker-compose up -d --build
```
## Configuration
Configuration settings are managed via environment variables and configuration files as follows:
- **Environment Variables**: Set these in the Docker Compose file or directly in the `.env` file if used.
- `CONTEXT_LENGTH`: Defines the context length for model interactions.
- `MODEL_PATH`: Path to the specific language model to be loaded.
- `MODEL_IDENTIFIER`: Identifier for the loaded model.
## Running the Services
To start the services defined in `docker-compose.yml`, use the following command from the project directory:
```bash
docker-compose up -d
```
This command will run the containers in detached mode, allowing you to continue using your terminal without interruption.
To stop the services, use:
```bash
docker-compose down
```
## Troubleshooting
If you encounter issues during setup or usage:
1. Check the logs for errors:
```bash
docker-compose logs -f lmstudio
```
2. Ensure all required environment variables are set correctly in the Docker Compose file or `.env` file.
3. Verify that the container is running:
```bash
docker ps
```
## Contributing
Contributions to this project are welcome. Please open an issue for bugs or feature requests and submit a pull request with proposed changes. For major changes, please discuss them in advance.

33
docker-compose.yml Normal file
View File

@@ -0,0 +1,33 @@
networks:
homelab_homelabnet:
external: true
services:
lmstudio:
image: lmstudio:latest
container_name: lmstudio
restart: unless-stopped
build:
context: "$HOME/Development/LMStudio"
ports:
- "1234:1234"
volumes:
- "$HOME/Development/LMStudio/data:/root/.cache/lm-studio/models"
environment:
- CONTEXT_LENGTH=${CONTEXT_LENGTH:-131072}
- MODEL_PATH=${MODEL_PATH:-Qwen/Qwen2.5-Coder-14B-Instruct-GGUF}
- MODEL_IDENTIFIER=${MODEL_IDENTIFIER:-qwen2.5-coder-14b-instruct}
# deploy:
# resources:
# reservations:
# devices:
# - capabilities: [gpu]
command: ["/start_services.sh"]
networks:
- homelab_homelabnet
labels:
- "traefik.enable=true"
- "traefik.http.routers.lmstudio.entrypoints=http"
- "traefik.http.routers.lmstudio.rule=Host(`lmstudio.${DOMAIN}`)"
- "traefik.http.services.lmstudio.loadbalancer.server.port=1234"

22
docker-entrypoint.sh Normal file
View File

@@ -0,0 +1,22 @@
#!/bin/bash
rm /tmp/.X99-lock
Xvfb :99 -screen 0 1920x1080x16 &
sleep 2
# -----------------------------------
echo 'alias lms="~/.cache/lm-studio/bin/lms"' > ~/.bashrc
/squashfs-root/lm-studio --no-sandbox &
sleep 30
~/.cache/lm-studio/bin/lms server start --cors &
sleep 5
# ~/.cache/lm-studio/bin/lms get ${MODEL_PATH}
~/.cache/lm-studio/bin/lms load --gpu 0.3 --ttl 3600 --context-length ${CONTEXT_LENGTH:-16384} ${MODEL_IDENTIFIER} &
sleep 20
cp -f /http-server-config.json /root/.cache/lm-studio/.internal/http-server-config.json
x11vnc -display :99 -forever -rfbauth /root/.vnc/passwd -quiet -listen 0.0.0.0 -xkb
/bin/bash

13
docker-healthcheck.sh Normal file
View File

@@ -0,0 +1,13 @@
#!/bin/bash
# Send a request to the specified URL
response=$(curl --write-out '%{http_code}' --silent --output /dev/null http://localhost:1234/v1)
# If the HTTP response code is 200 (OK), the server is up
if [ "$response" -eq 200 ]; then
echo "Server is up"
exit 0
else
echo "Server is down"
exit 1
fi

8
http-server-config.json Normal file
View File

@@ -0,0 +1,8 @@
{
"port": 1234,
"cors": true,
"logSensitiveData": true,
"verbose": false,
"logLinesLimit": 500,
"networkInterface": "0.0.0.0"
}