mirror of
https://github.com/casjaysdevdocker/ollama
synced 2026-06-23 20:01:01 -04:00
🦈🏠🐜❗ Initial Commit ❗🐜🦈🏠
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
# Files to ignore
|
||||
# Tell docker to ignore .gitkeep
|
||||
.gitkeep
|
||||
# Tell docker to ignore .gitignore
|
||||
.gitignore
|
||||
# Tell docker to ignore node_modules/**
|
||||
node_modules/**
|
||||
# Tell docker to ignore .node_modules/**
|
||||
.node_modules/**
|
||||
# Tell docker to ignore **/.gitkeep
|
||||
**/.gitkeep
|
||||
# Tell docker to ignore **/.gitignore
|
||||
**/.gitignore
|
||||
# Tell docker to ignore **/node_modules/**
|
||||
**/node_modules/**
|
||||
# Tell docker to ignore **/.node_modules/**
|
||||
**/.node_modules/**
|
||||
@@ -0,0 +1,82 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202601302002-git
|
||||
# @@Author : CasjaysDev
|
||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||
# @@License : MIT
|
||||
# @@Copyright : Copyright 2026 CasjaysDev
|
||||
# @@Created : Fri Jan 30 08:02:09 PM EST 2026
|
||||
# @@File : .env.scripts
|
||||
# @@Description : Variables for gen-dockerfile and buildx scripts
|
||||
# @@Changelog : newScript
|
||||
# @@TODO : Refactor code
|
||||
# @@Other : N/A
|
||||
# @@Resource : N/A
|
||||
# @@Terminal App : yes
|
||||
# @@sudo/root : yes
|
||||
# @@Template : templates/dockerfiles/dotenv.template
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# entrypoint Settings
|
||||
DOCKER_ENTYPOINT_PORTS_WEB="${DOCKER_ENTYPOINT_PORTS_WEB}"
|
||||
DOCKER_ENTYPOINT_PORTS_SRV="${DOCKER_ENTYPOINT_PORTS_SRV}"
|
||||
DOCKER_ENTYPOINT_HEALTH_APPS="$DOCKER_ENTYPOINT_HEALTH_APPS"
|
||||
DOCKER_ENTYPOINT_HEALTH_ENDPOINTS="$DOCKER_ENTYPOINT_HEALTH_ENDPOINTS"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Dockerfile info
|
||||
ENV_DOCKERFILE="Dockerfile"
|
||||
ENV_IMAGE_NAME="ollama"
|
||||
ENV_USE_TEMPLATE="debian"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Maintainer info
|
||||
ENV_ORG_NAME="casjaysdevdocker"
|
||||
ENV_VENDOR="CasjaysDev"
|
||||
ENV_AUTHOR="CasjaysDev"
|
||||
ENV_MAINTAINER="CasjaysDev <docker-admin@casjaysdev.pro>"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Repository URLs (Full URLs)
|
||||
# ENV_GIT_REPO_URL: Complete Git repository URL for source code
|
||||
ENV_GIT_REPO_URL="https://github.com/casjaysdevdocker/ollama"
|
||||
# ENV_REGISTRY_URL: Complete registry URL for reference (NOT used for pushing)
|
||||
ENV_REGISTRY_URL="https://hub.docker.com/casjaysdevdocker/ollama"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Push Configuration
|
||||
# ENV_IMAGE_PUSH: Complete push destination (this IS used for pushing)
|
||||
ENV_IMAGE_PUSH="casjaysdevdocker/ollama"
|
||||
# ENV_IMAGE_TAG: Default tag for the image
|
||||
ENV_IMAGE_TAG="latest"
|
||||
# ENV_ADD_TAGS: Additional tags, comma-separated (USE_DATE = auto date tag)
|
||||
ENV_ADD_TAGS=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Additional push destinations (if needed)
|
||||
ENV_ADD_IMAGE_PUSH=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Pull Configuration
|
||||
# ENV_PULL_URL: Source image to pull from (base image)
|
||||
ENV_PULL_URL="debian"
|
||||
# ENV_DISTRO_TAG: Tag for the pull source image
|
||||
ENV_DISTRO_TAG="bookworm"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Env
|
||||
SERVICE_PORT="11434"
|
||||
EXPOSE_PORTS="11434 80"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# IF using a lanuage such as go, php, rust, ruby, etc set the version here.
|
||||
LANG_VERSION=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Versions
|
||||
PHP_VERSION="system"
|
||||
NODE_VERSION="system"
|
||||
NODE_MANAGER="system"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Default directories
|
||||
WWW_ROOT_DIR="/usr/local/share/httpd/default"
|
||||
DEFAULT_FILE_DIR="/usr/local/share/template-files"
|
||||
DEFAULT_DATA_DIR="/usr/local/share/template-files/data"
|
||||
DEFAULT_CONF_DIR="/usr/local/share/template-files/config"
|
||||
DEFAULT_TEMPLATE_DIR="/usr/local/share/template-files/defaults"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
ENV_PACKAGES=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# ex: ts=2 sw=2 et filetype=sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,86 @@
|
||||
# Template generated on Sat Nov 29 11:57:12 AM EST 2025 from https://github.com/alexkaratarakis/gitattributes"
|
||||
# Common settings that generally should always be used with your language specific settings
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
# The above will handle all files NOT found below
|
||||
# Documents
|
||||
*.bibtex text diff=bibtex
|
||||
*.doc diff=astextplain
|
||||
*.DOC diff=astextplain
|
||||
*.docx diff=astextplain
|
||||
*.DOCX diff=astextplain
|
||||
*.dot diff=astextplain
|
||||
*.DOT diff=astextplain
|
||||
*.pdf diff=astextplain
|
||||
*.PDF diff=astextplain
|
||||
*.rtf diff=astextplain
|
||||
*.RTF diff=astextplain
|
||||
*.md text diff=markdown
|
||||
*.mdx text diff=markdown
|
||||
*.tex text diff=tex
|
||||
*.adoc text
|
||||
*.textile text
|
||||
*.mustache text
|
||||
*.csv text eol=crlf
|
||||
*.tab text
|
||||
*.tsv text
|
||||
*.txt text
|
||||
*.sql text
|
||||
*.epub diff=astextplain
|
||||
# Graphics
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
*.gif binary
|
||||
*.tif binary
|
||||
*.tiff binary
|
||||
*.ico binary
|
||||
# SVG treated as text by default.
|
||||
*.svg text
|
||||
# If you want to treat it as binary,
|
||||
# use the following line instead.
|
||||
# *.svg binary
|
||||
*.eps binary
|
||||
# Scripts
|
||||
*.bash text eol=lf
|
||||
*.fish text eol=lf
|
||||
*.ksh text eol=lf
|
||||
*.sh text eol=lf
|
||||
*.zsh text eol=lf
|
||||
# These are explicitly windows files and should use crlf
|
||||
*.bat text eol=crlf
|
||||
*.cmd text eol=crlf
|
||||
*.ps1 text eol=crlf
|
||||
# Serialisation
|
||||
*.json text
|
||||
*.toml text
|
||||
*.xml text
|
||||
*.yaml text
|
||||
*.yml text
|
||||
# Archives
|
||||
*.7z binary
|
||||
*.bz binary
|
||||
*.bz2 binary
|
||||
*.bzip2 binary
|
||||
*.gz binary
|
||||
*.lz binary
|
||||
*.lzma binary
|
||||
*.rar binary
|
||||
*.tar binary
|
||||
*.taz binary
|
||||
*.tbz binary
|
||||
*.tbz2 binary
|
||||
*.tgz binary
|
||||
*.tlz binary
|
||||
*.txz binary
|
||||
*.xz binary
|
||||
*.Z binary
|
||||
*.zip binary
|
||||
*.zst binary
|
||||
# Text files where line endings should be preserved
|
||||
*.patch -text
|
||||
# Exclude files from exporting
|
||||
.gitattributes export-ignore
|
||||
.gitignore export-ignore
|
||||
.gitkeep export-ignore
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
name: ollama
|
||||
|
||||
on: push
|
||||
|
||||
jobs:
|
||||
release-ollama:
|
||||
runs-on: act_runner
|
||||
container:
|
||||
image: catthehacker/ubuntu:act-latest
|
||||
env:
|
||||
RUNNER_TOOL_CACHE: /toolcache
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
- name: Get Meta
|
||||
id: meta
|
||||
run: |
|
||||
echo DATE_TAG=$(date +'%y%m') >> $GITHUB_OUTPUT
|
||||
echo REPO_VERSION=$(git describe --tags --always | sed 's/^v//') >> $GITHUB_OUTPUT
|
||||
echo DOCKER_ORG=$(echo ${GITHUB_REPOSITORY} | awk -F"/" '{print $1}') >> $GITHUB_OUTPUT
|
||||
echo DOCKER_TAG=$([ -n "$DOCKER_TAG" ] && echo ${DOCKER_TAG} || echo "latest") >> $GITHUB_OUTPUT
|
||||
echo DOCKER_HUB=$([ -n "$DOCKER_HUB" ] && echo ${DOCKER_HUB} || echo "docker.io") >> $GITHUB_OUTPUT
|
||||
echo REPO_NAME=$(echo ${GITHUB_REPOSITORY} | awk -F"/" '{print $2}' | sed 's|^docker-||g') >> $GITHUB_OUTPUT
|
||||
echo "$DOCKER_HUB/$DOCKER_ORG/$REPO_NAME:$DOCKER_TAG"
|
||||
|
||||
- name: Set up Docker BuildX
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
password: ${{ secrets.DOCKER_TOKEN }}
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
registry: ${{ steps.meta.outputs.DOCKER_HUB }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
file: ./Dockerfile
|
||||
platforms: |
|
||||
linux/amd64
|
||||
linux/arm64
|
||||
push: true
|
||||
build-args: |
|
||||
IMAGE_NAME=${{ steps.meta.outputs.REPO_NAME }}
|
||||
BUILD_DATE=$(date -u +'%Y%m%d%H%M')
|
||||
BUILD_VERSION=$(date -u +'%Y%m%d%H%M')
|
||||
GIT_COMMIT=${{ github.sha }}
|
||||
TIMEZONE=America/New_York
|
||||
LANGUAGE=en_US.UTF-8
|
||||
LICENSE=WTFPL
|
||||
TZ=America/New_York
|
||||
tags: |
|
||||
${{ steps.meta.outputs.DOCKER_HUB }}/${{ steps.meta.outputs.DOCKER_ORG }}/${{ steps.meta.outputs.REPO_NAME }}:${{ steps.meta.outputs.DATE_TAG }}
|
||||
${{ steps.meta.outputs.DOCKER_HUB }}/${{ steps.meta.outputs.DOCKER_ORG }}/${{ steps.meta.outputs.REPO_NAME }}:${{ steps.meta.outputs.DOCKER_TAG }}
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
# gitignore created on 01/28/26 at 23:19
|
||||
# Disable reminder in prompt
|
||||
ignoredirmessage
|
||||
|
||||
# ignore .build_failed files
|
||||
**/.build_failed*
|
||||
|
||||
# OS generated files
|
||||
### Linux ###
|
||||
*~
|
||||
|
||||
# temporary files which can be created if a process still has a handle open of a deleted file
|
||||
.fuse_hidden*
|
||||
|
||||
# KDE directory preferences
|
||||
.directory
|
||||
|
||||
# Linux trash folder which might appear on any partition or disk
|
||||
.Trash-*
|
||||
|
||||
# .nfs files are created when an open file is removed but is still being accessed
|
||||
.nfs*
|
||||
|
||||
### macOS ###
|
||||
# General
|
||||
.DS_Store?
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
### macOS Patch ###
|
||||
# iCloud generated files
|
||||
*.icloud
|
||||
|
||||
### Windows ###
|
||||
# Windows thumbnail cache files
|
||||
Thumbs.db
|
||||
Thumbs.db:encryptable
|
||||
ehthumbs.db
|
||||
ehthumbs_vista.db
|
||||
|
||||
# Dump file
|
||||
*.stackdump
|
||||
|
||||
# Folder config file
|
||||
[Dd]esktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Windows Installer files
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# misc
|
||||
!*/README*
|
||||
!inc/main.bash
|
||||
|
||||
# Windows shortcuts
|
||||
*.lnk
|
||||
|
||||
# ignore commit message
|
||||
**/.gitcommit
|
||||
|
||||
# ignore .build_failed files
|
||||
**/.build_failed*
|
||||
|
||||
# ignore .bak files
|
||||
**/*.bak
|
||||
|
||||
# ignore .no_push files
|
||||
**/.no_push
|
||||
|
||||
# ignore .no_git files
|
||||
**/.no_git
|
||||
|
||||
# ignore .installed files
|
||||
**/.installed
|
||||
|
||||
# ignore work in progress files
|
||||
**/*.rewrite.sh
|
||||
**/*.refactor.sh
|
||||
|
||||
+261
@@ -0,0 +1,261 @@
|
||||
# Docker image for ollama using the debian template
|
||||
ARG IMAGE_NAME="ollama"
|
||||
ARG PHP_SERVER="ollama"
|
||||
ARG BUILD_DATE="202601291418"
|
||||
ARG LANGUAGE="en_US.UTF-8"
|
||||
ARG TIMEZONE="America/New_York"
|
||||
ARG WWW_ROOT_DIR="/usr/local/share/httpd/default"
|
||||
ARG DEFAULT_FILE_DIR="/usr/local/share/template-files"
|
||||
ARG DEFAULT_DATA_DIR="/usr/local/share/template-files/data"
|
||||
ARG DEFAULT_CONF_DIR="/usr/local/share/template-files/config"
|
||||
ARG DEFAULT_TEMPLATE_DIR="/usr/local/share/template-files/defaults"
|
||||
ARG PATH="/usr/local/etc/docker/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||
|
||||
ARG USER="root"
|
||||
ARG SHELL_OPTS="set -e -o pipefail"
|
||||
|
||||
ARG SERVICE_PORT="11434"
|
||||
ARG EXPOSE_PORTS="80"
|
||||
ARG PHP_VERSION="system"
|
||||
ARG NODE_VERSION="system"
|
||||
ARG NODE_MANAGER="system"
|
||||
|
||||
ARG IMAGE_REPO="casjaysdevdocker/ollama"
|
||||
ARG IMAGE_VERSION="latest"
|
||||
ARG CONTAINER_VERSION=""
|
||||
|
||||
ARG PULL_URL="debian"
|
||||
ARG DISTRO_VERSION="bookworm"
|
||||
ARG BUILD_VERSION="${BUILD_DATE}"
|
||||
|
||||
FROM tianon/gosu:latest AS gosu
|
||||
FROM ${PULL_URL}:${DISTRO_VERSION} AS build
|
||||
ARG TZ
|
||||
ARG PATH
|
||||
ARG USER
|
||||
ARG LICENSE
|
||||
ARG TIMEZONE
|
||||
ARG LANGUAGE
|
||||
ARG IMAGE_NAME
|
||||
ARG BUILD_DATE
|
||||
ARG SERVICE_PORT
|
||||
ARG EXPOSE_PORTS
|
||||
ARG BUILD_VERSION
|
||||
ARG IMAGE_VERSION
|
||||
ARG WWW_ROOT_DIR
|
||||
ARG DEFAULT_FILE_DIR
|
||||
ARG DEFAULT_DATA_DIR
|
||||
ARG DEFAULT_CONF_DIR
|
||||
ARG DEFAULT_TEMPLATE_DIR
|
||||
ARG DISTRO_VERSION
|
||||
ARG NODE_VERSION
|
||||
ARG NODE_MANAGER
|
||||
ARG PHP_VERSION
|
||||
ARG PHP_SERVER
|
||||
ARG SHELL_OPTS
|
||||
ARG DEBIAN_FRONTEND
|
||||
|
||||
ARG PACK_LIST="curl ca-certificates gnupg tini procps libopenblas0 libgomp1 zstd wget software-properties-common gnupg2 gpg"
|
||||
|
||||
ENV ENV=~/.profile
|
||||
ENV SHELL="/bin/sh"
|
||||
ENV PATH="${PATH}"
|
||||
ENV TZ="${TIMEZONE}"
|
||||
ENV TIMEZONE="${TZ}"
|
||||
ENV LANG="${LANGUAGE}"
|
||||
ENV LC_ALL="${LANGUAGE}"
|
||||
ENV TERM="xterm-256color"
|
||||
ENV HOSTNAME="casjaysdevdocker-ollama"
|
||||
ENV DEBIAN_FRONTEND="${DEBIAN_FRONTEND}"
|
||||
|
||||
USER ${USER}
|
||||
WORKDIR /root
|
||||
|
||||
COPY ./rootfs/. /
|
||||
|
||||
RUN set -e; \
|
||||
echo "Updating the system and ensuring bash is installed"; \
|
||||
pkmgr update;pkmgr install bash
|
||||
|
||||
RUN set -e; \
|
||||
echo "Setting up prerequisites"; \
|
||||
true
|
||||
|
||||
ENV SHELL="/bin/bash"
|
||||
SHELL [ "/bin/bash", "-c" ]
|
||||
|
||||
COPY --from=gosu /usr/local/bin/gosu /usr/local/bin/gosu
|
||||
|
||||
RUN echo "Initializing the system"; \
|
||||
$SHELL_OPTS; \
|
||||
mkdir -p "${DEFAULT_DATA_DIR}" "${DEFAULT_CONF_DIR}" "${DEFAULT_TEMPLATE_DIR}" "/root/docker/setup" "/etc/profile.d"; \
|
||||
if [ -f "/root/docker/setup/00-init.sh" ];then echo "Running the init script";/root/docker/setup/00-init.sh||{ echo "Failed to execute /root/docker/setup/00-init.sh" >&2 && exit 10; };echo "Done running the init script";fi; \
|
||||
echo ""
|
||||
|
||||
RUN echo "Creating and editing system files "; \
|
||||
$SHELL_OPTS; \
|
||||
[ -f "/root/.profile" ] || touch "/root/.profile"; \
|
||||
if [ -f "/root/docker/setup/01-system.sh" ];then echo "Running the system script";/root/docker/setup/01-system.sh||{ echo "Failed to execute /root/docker/setup/01-system.sh" >&2 && exit 10; };echo "Done running the system script";fi; \
|
||||
echo ""
|
||||
|
||||
RUN echo "Running pre-package commands"; \
|
||||
$SHELL_OPTS; \
|
||||
echo ""
|
||||
|
||||
RUN echo "Setting up and installing packages"; \
|
||||
$SHELL_OPTS; \
|
||||
if [ -n "${PACK_LIST}" ];then echo "Installing packages: $PACK_LIST";echo "${PACK_LIST}" >/root/docker/setup/packages.txt;pkmgr install ${PACK_LIST};fi; \
|
||||
echo ""
|
||||
|
||||
RUN echo "Initializing packages before copying files to image"; \
|
||||
$SHELL_OPTS; \
|
||||
if [ -f "/root/docker/setup/02-packages.sh" ];then echo "Running the packages script";/root/docker/setup/02-packages.sh||{ echo "Failed to execute /root/docker/setup/02-packages.sh" >&2 && exit 10; };echo "Done running the packages script";fi; \
|
||||
echo ""
|
||||
|
||||
COPY ./Dockerfile /root/docker/Dockerfile
|
||||
|
||||
RUN echo "Updating system files "; \
|
||||
$SHELL_OPTS; \
|
||||
echo "$TIMEZONE" >"/etc/timezone"; \
|
||||
touch "/etc/profile" "/root/.profile"; \
|
||||
echo 'hosts: files dns' >"/etc/nsswitch.conf"; \
|
||||
[ "$PHP_VERSION" = "system" ] && PHP_VERSION="php" || true; \
|
||||
PHP_BIN="$(command -v ${PHP_VERSION} 2>/dev/null || true)"; \
|
||||
PHP_FPM="$(ls /usr/*bin/php*fpm* 2>/dev/null || true)"; \
|
||||
pip_bin="$(command -v python3 2>/dev/null || command -v python2 2>/dev/null || command -v python 2>/dev/null || true)"; \
|
||||
py_version="$(command $pip_bin --version | sed 's|[pP]ython ||g' | awk -F '.' '{print $1$2}' | grep '[0-9]' || true)"; \
|
||||
[ "$py_version" -gt "310" ] && pip_opts="--break-system-packages " || pip_opts=""; \
|
||||
[ -f "/usr/share/zoneinfo/${TZ}" ] && ln -sf "/usr/share/zoneinfo/${TZ}" "/etc/localtime" || true; \
|
||||
[ -n "$PHP_BIN" ] && [ -z "$(command -v php 2>/dev/null)" ] && ln -sf "$PHP_BIN" "/usr/bin/php" 2>/dev/null || true; \
|
||||
[ -n "$PHP_FPM" ] && [ -z "$(command -v php-fpm 2>/dev/null)" ] && ln -sf "$PHP_FPM" "/usr/bin/php-fpm" 2>/dev/null || true; \
|
||||
if [ -f "/etc/profile.d/color_prompt.sh.disabled" ]; then mv -f "/etc/profile.d/color_prompt.sh.disabled" "/etc/profile.d/color_prompt.sh";fi ; \
|
||||
{ [ -f "/etc/bash/bashrc" ] && cp -Rf "/etc/bash/bashrc" "/root/.bashrc"; } || { [ -f "/etc/bashrc" ] && cp -Rf "/etc/bashrc" "/root/.bashrc"; } || { [ -f "/etc/bash.bashrc" ] && cp -Rf "/etc/bash.bashrc" "/root/.bashrc"; } || true; \
|
||||
if [ -z "$(command -v "apt-get" 2>/dev/null)" ];then grep -sh -q 'alias quit' "/root/.bashrc" || printf '# Profile\n\n%s\n%s\n%s\n' '. /etc/profile' '. /root/.profile' "alias quit='exit 0 2>/dev/null'" >>"/root/.bashrc"; fi; \
|
||||
if [ "$PHP_VERSION" != "system" ] && [ -e "/etc/php" ] && [ -d "/etc/${PHP_VERSION}" ];then rm -Rf "/etc/php";fi; \
|
||||
if [ "$PHP_VERSION" != "system" ] && [ -n "${PHP_VERSION}" ] && [ -d "/etc/${PHP_VERSION}" ];then ln -sf "/etc/${PHP_VERSION}" "/etc/php";fi; \
|
||||
if [ -f "/root/docker/setup/03-files.sh" ];then echo "Running the files script";/root/docker/setup/03-files.sh||{ echo "Failed to execute /root/docker/setup/03-files.sh" >&2 && exit 10; };echo "Done running the files script";fi; \
|
||||
echo ""
|
||||
|
||||
RUN echo "Custom Settings"; \
|
||||
$SHELL_OPTS; \
|
||||
echo ""
|
||||
|
||||
RUN echo "Setting up users and scripts "; \
|
||||
$SHELL_OPTS; \
|
||||
if [ -f "/root/docker/setup/04-users.sh" ];then echo "Running the users script";/root/docker/setup/04-users.sh||{ echo "Failed to execute /root/docker/setup/04-users.sh" >&2 && exit 10; };echo "Done running the users script";fi; \
|
||||
echo ""
|
||||
|
||||
RUN echo "Running the user init commands"; \
|
||||
$SHELL_OPTS; \
|
||||
echo ""
|
||||
|
||||
RUN echo "Setting OS Settings "; \
|
||||
$SHELL_OPTS; \
|
||||
echo ""
|
||||
|
||||
RUN echo "Custom Applications"; \
|
||||
$SHELL_OPTS; \
|
||||
echo ""
|
||||
|
||||
RUN echo "Running custom commands"; \
|
||||
if [ -f "/root/docker/setup/05-custom.sh" ];then echo "Running the custom script";/root/docker/setup/05-custom.sh||{ echo "Failed to execute /root/docker/setup/05-custom.sh" && exit 10; };echo "Done running the custom script";fi; \
|
||||
echo ""
|
||||
|
||||
RUN echo "Running final commands before cleanup"; \
|
||||
$SHELL_OPTS; \
|
||||
if [ -f "/root/docker/setup/06-post.sh" ];then echo "Running the post script";/root/docker/setup/06-post.sh||{ echo "Failed to execute /root/docker/setup/06-post.sh" >&2 && exit 10; };echo "Done running the post script";fi; \
|
||||
echo ""
|
||||
|
||||
RUN echo "Deleting unneeded files"; \
|
||||
$SHELL_OPTS; \
|
||||
pkmgr clean; \
|
||||
rm -Rf "/config" "/data" || true; \
|
||||
rm -rf /etc/systemd/system/*.wants/* || true; \
|
||||
rm -rf /lib/systemd/system/systemd-update-utmp* || true; \
|
||||
rm -rf /lib/systemd/system/anaconda.target.wants/* || true; \
|
||||
rm -rf /lib/systemd/system/local-fs.target.wants/* || true; \
|
||||
rm -rf /lib/systemd/system/multi-user.target.wants/* || true; \
|
||||
rm -rf /lib/systemd/system/sockets.target.wants/*udev* || true; \
|
||||
rm -rf /lib/systemd/system/sockets.target.wants/*initctl* || true; \
|
||||
rm -Rf /usr/share/doc/* /var/tmp/* /var/cache/*/* /root/.cache/* /usr/share/info/* /tmp/* || true; \
|
||||
if [ -d "/lib/systemd/system/sysinit.target.wants" ];then cd "/lib/systemd/system/sysinit.target.wants" && rm -f $(ls | grep -v systemd-tmpfiles-setup);fi; \
|
||||
if [ -f "/root/docker/setup/07-cleanup.sh" ];then echo "Running the cleanup script";/root/docker/setup/07-cleanup.sh||{ echo "Failed to execute /root/docker/setup/07-cleanup.sh" >&2 && exit 10; };echo "Done running the cleanup script";fi; \
|
||||
echo ""
|
||||
|
||||
RUN echo "Init done"
|
||||
FROM scratch
|
||||
ARG TZ
|
||||
ARG PATH
|
||||
ARG USER
|
||||
ARG TIMEZONE
|
||||
ARG LANGUAGE
|
||||
ARG IMAGE_NAME
|
||||
ARG BUILD_DATE
|
||||
ARG SERVICE_PORT
|
||||
ARG EXPOSE_PORTS
|
||||
ARG BUILD_VERSION
|
||||
ARG IMAGE_VERSION
|
||||
ARG GIT_COMMIT
|
||||
ARG WWW_ROOT_DIR
|
||||
ARG DEFAULT_FILE_DIR
|
||||
ARG DEFAULT_DATA_DIR
|
||||
ARG DEFAULT_CONF_DIR
|
||||
ARG DEFAULT_TEMPLATE_DIR
|
||||
ARG DISTRO_VERSION
|
||||
ARG NODE_VERSION
|
||||
ARG NODE_MANAGER
|
||||
ARG PHP_VERSION
|
||||
ARG PHP_SERVER
|
||||
ARG LICENSE="WTFPL"
|
||||
ARG ENV_PORTS="${EXPOSE_PORTS}"
|
||||
|
||||
USER ${USER}
|
||||
WORKDIR /root
|
||||
|
||||
LABEL maintainer="CasjaysDev <docker-admin@casjaysdev.pro>"
|
||||
LABEL org.opencontainers.image.vendor="CasjaysDev"
|
||||
LABEL org.opencontainers.image.authors="CasjaysDev"
|
||||
LABEL org.opencontainers.image.description="Containerized version of ${IMAGE_NAME}"
|
||||
LABEL org.opencontainers.image.title="${IMAGE_NAME}"
|
||||
LABEL org.opencontainers.image.base.name="${IMAGE_NAME}"
|
||||
LABEL org.opencontainers.image.authors="${LICENSE}"
|
||||
LABEL org.opencontainers.image.created="${BUILD_DATE}"
|
||||
LABEL org.opencontainers.image.version="${BUILD_VERSION}"
|
||||
LABEL org.opencontainers.image.schema-version="${BUILD_VERSION}"
|
||||
LABEL org.opencontainers.image.url="https://hub.docker.com/casjaysdevdocker/ollama"
|
||||
LABEL org.opencontainers.image.source="https://hub.docker.com/casjaysdevdocker/ollama"
|
||||
LABEL org.opencontainers.image.vcs-type="Git"
|
||||
LABEL org.opencontainers.image.revision="${GIT_COMMIT}"
|
||||
LABEL org.opencontainers.image.source="https://github.com/casjaysdevdocker/ollama"
|
||||
LABEL org.opencontainers.image.documentation="https://github.com/casjaysdevdocker/ollama"
|
||||
LABEL com.github.containers.toolbox="false"
|
||||
|
||||
ENV ENV=~/.bashrc
|
||||
ENV USER="${USER}"
|
||||
ENV PATH="${PATH}"
|
||||
ENV TZ="${TIMEZONE}"
|
||||
ENV SHELL="/bin/bash"
|
||||
ENV TIMEZONE="${TZ}"
|
||||
ENV LANG="${LANGUAGE}"
|
||||
ENV TERM="xterm-256color"
|
||||
ENV PORT="${SERVICE_PORT}"
|
||||
ENV ENV_PORTS="${ENV_PORTS}"
|
||||
ENV CONTAINER_NAME="${IMAGE_NAME}"
|
||||
ENV HOSTNAME="casjaysdev-${IMAGE_NAME}"
|
||||
ENV PHP_SERVER="${PHP_SERVER}"
|
||||
ENV NODE_VERSION="${NODE_VERSION}"
|
||||
ENV NODE_MANAGER="${NODE_MANAGER}"
|
||||
ENV PHP_VERSION="${PHP_VERSION}"
|
||||
ENV DISTRO_VERSION="${IMAGE_VERSION}"
|
||||
ENV WWW_ROOT_DIR="${WWW_ROOT_DIR}"
|
||||
|
||||
COPY --from=build /. /
|
||||
|
||||
VOLUME [ "/config","/data" ]
|
||||
|
||||
EXPOSE ${SERVICE_PORT} ${ENV_PORTS}
|
||||
|
||||
STOPSIGNAL SIGRTMIN+3
|
||||
|
||||
ENTRYPOINT [ "tini", "-p", "SIGTERM","--", "/usr/local/bin/entrypoint.sh" ]
|
||||
HEALTHCHECK --start-period=10m --interval=5m --timeout=15s CMD [ "/usr/local/bin/entrypoint.sh", "healthcheck" ]
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
Version 2, December 2004
|
||||
|
||||
Copyright (C) 2026 casjay <git-admin@casjaysdev.pro>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified
|
||||
copies of this license document, and changing it is allowed as long
|
||||
as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
1. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
@@ -0,0 +1,685 @@
|
||||
## 👋 Welcome to ollama 🚀
|
||||
|
||||
ollama README
|
||||
|
||||
This Docker container provides **Ollama** with a built-in **Open WebUI** for easy interaction with Large Language Models (LLMs).
|
||||
|
||||
**Features:**
|
||||
- 🤖 Ollama server for running LLMs locally
|
||||
- 🌐 Open WebUI - Full-featured web interface with authentication
|
||||
- 📦 Auto-pull models on startup via MODELS environment variable
|
||||
- 🐳 **Docker Model Runner (DMR) Compatible** - Works alongside Docker's built-in AI service
|
||||
- ⚡ **CPU Optimized** - OpenBLAS for 3-5x faster CPU inference (8-12 tok/sec for 7B models)
|
||||
- 🎮 **GPU Support** - NVIDIA (CUDA), AMD (ROCm), automatic detection and fallback
|
||||
- 💻 **Smart Hardware Detection** - Automatically uses GPU if available, falls back to optimized CPU
|
||||
- 💾 Persistent data storage for models and configurations
|
||||
- 🔐 Automatic SSL/TLS support
|
||||
- 📊 Health monitoring and logging
|
||||
- 🏗️ Multi-architecture support (amd64, arm64)
|
||||
|
||||
**Ports:**
|
||||
- `11434` - Ollama API server (DMR uses port 12434)
|
||||
- `64080:80` - Open WebUI interface (host:container)
|
||||
|
||||
**Environment Variables:**
|
||||
|
||||
**Container/Models:**
|
||||
- `MODELS` - Comma or space-separated list of models to auto-pull on startup
|
||||
- **Default**: If not set, automatically pulls `qwen2.5-coder:3b` (optimal for CPU coding)
|
||||
- Examples:
|
||||
- `MODELS="llama3.2,mistral"`
|
||||
- `MODELS="llama3.2 mistral phi"`
|
||||
- `MODELS="llama3.2,mistral phi"` (mixed delimiters supported)
|
||||
- The first model in the list will be set as the default
|
||||
- Models are pulled from Ollama's registry (registry.ollama.ai)
|
||||
- **Note**: Docker Model Registry (DMR) is not yet natively supported by Ollama
|
||||
|
||||
**Ollama Configuration:**
|
||||
- `OLLAMA_HOST` - IP address and port for Ollama (default: `0.0.0.0:11434`)
|
||||
- `OLLAMA_MODELS` - Path to models directory (default: `/data/ollama/models`)
|
||||
- `OLLAMA_KEEP_ALIVE` - Duration models stay loaded in memory (default: `5m`)
|
||||
- `OLLAMA_MAX_LOADED_MODELS` - Maximum loaded models per GPU (default: `0` = unlimited)
|
||||
- `OLLAMA_NUM_PARALLEL` - Maximum parallel requests (default: `1`)
|
||||
- `OLLAMA_MAX_QUEUE` - Maximum queued requests (default: `512`)
|
||||
- `OLLAMA_CONTEXT_LENGTH` - Default context length (default: `4096`)
|
||||
- `OLLAMA_DEBUG` - Enable debug logging (set to `1` to enable)
|
||||
- `OLLAMA_ORIGINS` - Allowed CORS origins (default: `*`)
|
||||
- `OLLAMA_FLASH_ATTENTION` - Enable flash attention (set to `1`)
|
||||
- `OLLAMA_GPU_OVERHEAD` - Reserve VRAM per GPU in bytes
|
||||
|
||||
**Open WebUI Configuration:**
|
||||
- `WEBUI_URL` - URL where Open WebUI is accessible (default: `http://localhost:64080`)
|
||||
- `WEBUI_NAME` - Custom name for the WebUI (default: `Open WebUI`)
|
||||
- `WEBUI_SECRET_KEY` - Secret key for sessions (auto-generated if not set)
|
||||
- `ENABLE_SIGNUP` - Allow new user registrations (default: `true`)
|
||||
- `DEFAULT_USER_ROLE` - Role for new users: `pending`, `user`, or `admin` (default: `pending`)
|
||||
- `DEFAULT_MODELS` - Comma-separated default model IDs
|
||||
- `OLLAMA_BASE_URL` - Ollama API URL (default: `http://127.0.0.1:11434`)
|
||||
- `ENABLE_ADMIN_EXPORT` - Allow admins to export data (default: `true`)
|
||||
|
||||
**GPU-Specific:**
|
||||
- `CUDA_VISIBLE_DEVICES` - Which NVIDIA GPUs to use
|
||||
- `HIP_VISIBLE_DEVICES` - Which AMD GPUs to use (numeric ID)
|
||||
- `ROCR_VISIBLE_DEVICES` - Which AMD GPUs to use (UUID or ID)
|
||||
- `HSA_OVERRIDE_GFX_VERSION` - Override AMD GPU GFX version
|
||||
|
||||
**CPU Optimization:**
|
||||
- `OLLAMA_NUM_THREADS` - CPU cores for inference (default: auto-detect, uses all cores)
|
||||
- `OPENBLAS_NUM_THREADS` - Override OpenBLAS threads (default: matches OLLAMA_NUM_THREADS)
|
||||
- `OMP_NUM_THREADS` - Override OpenMP threads (default: matches OLLAMA_NUM_THREADS)
|
||||
|
||||
**Performance Tuning:**
|
||||
Recommended settings for different hardware:
|
||||
|
||||
**CPU-only (4-core/16GB):**
|
||||
```bash
|
||||
-e OLLAMA_NUM_PARALLEL=2 \
|
||||
-e OLLAMA_MAX_LOADED_MODELS=1 \
|
||||
-e MODELS="qwen2.5-coder:3b" # Expected: 10-20 tok/sec
|
||||
```
|
||||
|
||||
**CPU-only (8-core/32GB):**
|
||||
```bash
|
||||
-e OLLAMA_NUM_PARALLEL=4 \
|
||||
-e OLLAMA_MAX_LOADED_MODELS=1 \
|
||||
-e MODELS="qwen2.5:7b" # Expected: 8-12 tok/sec with OpenBLAS
|
||||
```
|
||||
|
||||
**GPU (any size):**
|
||||
```bash
|
||||
--gpus all \
|
||||
-e OLLAMA_NUM_PARALLEL=4 \
|
||||
-e OLLAMA_MAX_LOADED_MODELS=0 \
|
||||
-e MODELS="llama3.2:70b" # Expected: 50-150+ tok/sec
|
||||
```
|
||||
|
||||
**Hardware Acceleration:**
|
||||
|
||||
This container includes **automatic hardware detection** and optimization:
|
||||
|
||||
**✅ CPU Optimizations (Built-in):**
|
||||
- **OpenBLAS**: Optimized BLAS library for 3-5x faster matrix operations
|
||||
- **Multi-threading**: Automatically configures for available CPU cores
|
||||
- **Expected Performance**:
|
||||
- 7B models (qwen2.5:7b): 8-12 tokens/sec on 8-core CPU
|
||||
- 3B models (qwen2.5-coder:3b): 10-20 tokens/sec on 4-core CPU
|
||||
- 1.5B models: 20-40 tokens/sec on 4-core CPU
|
||||
|
||||
**🎮 GPU Support (Automatic Detection):**
|
||||
- **NVIDIA GPUs**: ✅ Full CUDA support (production ready)
|
||||
- Performance: 50-150+ tokens/sec (7B models)
|
||||
- Requirement: nvidia-container-toolkit on host
|
||||
- Flag: `--gpus all`
|
||||
|
||||
- **AMD GPUs**: ✅ Full ROCm support (production ready)
|
||||
- Performance: 40-120+ tokens/sec (7B models)
|
||||
- Requirement: ROCm 5.x+ drivers on host
|
||||
- Flags: `--device=/dev/kfd --device=/dev/dri`
|
||||
|
||||
- **Intel GPUs**: ⚠️ Experimental/Limited support
|
||||
- Performance: Variable (10-60 tokens/sec, often slower than CPU)
|
||||
- Works: Arc GPUs (experimental), iGPUs (limited)
|
||||
- Flag: `--device=/dev/dri`
|
||||
- Note: CPU mode often faster for integrated GPUs
|
||||
|
||||
- **Automatic Fallback**: Uses optimized CPU when no GPU detected
|
||||
|
||||
**Container automatically:**
|
||||
- ✅ Detects available GPU at startup
|
||||
- ✅ Uses GPU if available (100+ tok/sec for 7B models)
|
||||
- ✅ Falls back to optimized CPU if no GPU (8-12 tok/sec for 7B models)
|
||||
- ✅ Configures threads based on available CPU cores
|
||||
- ✅ Sets optimal BLAS library parameters
|
||||
|
||||
**To enable GPU access:**
|
||||
|
||||
```bash
|
||||
# NVIDIA GPU (requires nvidia-container-toolkit on host)
|
||||
# ✅ RECOMMENDED - Best performance
|
||||
docker run -d --gpus all -p 11434:11434 -p 64080:80 casjaysdevdocker/ollama
|
||||
|
||||
# AMD GPU (requires ROCm 5.x+ drivers)
|
||||
# ✅ RECOMMENDED - Good performance
|
||||
docker run -d --device=/dev/kfd --device=/dev/dri -p 11434:11434 -p 64080:80 casjaysdevdocker/ollama
|
||||
|
||||
# Intel GPU (Arc or integrated)
|
||||
# ⚠️ EXPERIMENTAL - May not work, CPU often faster
|
||||
docker run -d --device=/dev/dri -p 11434:11434 -p 64080:80 casjaysdevdocker/ollama
|
||||
|
||||
# CPU-only (no flags needed - automatically optimized)
|
||||
# ✅ RECOMMENDED - Reliable 8-12 tok/sec with OpenBLAS
|
||||
docker run -d -p 11434:11434 -p 64080:80 casjaysdevdocker/ollama
|
||||
```
|
||||
|
||||
**GPU Performance Expectations:**
|
||||
- **NVIDIA**: 50-150+ tok/sec (7B), 30-60 tok/sec (13B), 10-30 tok/sec (70B)
|
||||
- **AMD**: 40-120+ tok/sec (7B), 25-50 tok/sec (13B), 8-25 tok/sec (70B)
|
||||
- **Intel**: 10-60 tok/sec (highly variable, experimental)
|
||||
- **CPU (Optimized)**: 8-12 tok/sec (7B), 5-8 tok/sec (13B)
|
||||
|
||||
**Note**: No GPU drivers/libraries are installed in the container. GPU access works via runtime device passthrough from the host system. This keeps the image lightweight (10.2GB) while supporting NVIDIA and AMD GPUs. Intel GPU support is experimental and not officially supported by Ollama.
|
||||
|
||||
|
||||
## Install my system scripts
|
||||
|
||||
```shell
|
||||
sudo bash -c "$(curl -q -LSsf "https://github.com/systemmgr/installer/raw/main/install.sh")"
|
||||
sudo systemmgr --config && sudo systemmgr install scripts
|
||||
```
|
||||
|
||||
## Automatic install/update
|
||||
|
||||
```shell
|
||||
dockermgr update ollama
|
||||
```
|
||||
|
||||
## Install and run container
|
||||
|
||||
```shell
|
||||
dockerHome="/var/lib/srv/$USER/docker/casjaysdevdocker/ollama/ollama/latest/rootfs"
|
||||
mkdir -p "/var/lib/srv/$USER/docker/ollama/rootfs"
|
||||
git clone "https://github.com/dockermgr/ollama" "$HOME/.local/share/CasjaysDev/dockermgr/ollama"
|
||||
cp -Rfva "$HOME/.local/share/CasjaysDev/dockermgr/ollama/rootfs/." "$dockerHome/"
|
||||
|
||||
# Simple start - uses default model (qwen2.5-coder:3b, optimal for CPU)
|
||||
docker run -d \
|
||||
--restart always \
|
||||
--privileged \
|
||||
--name casjaysdevdocker-ollama-latest \
|
||||
--hostname ollama \
|
||||
-e TZ=${TIMEZONE:-America/New_York} \
|
||||
-v "$dockerHome/data:/data:z" \
|
||||
-v "$dockerHome/config:/config:z" \
|
||||
-p 11434:11434 \
|
||||
-p 64080:80 \
|
||||
casjaysdevdocker/ollama:latest
|
||||
|
||||
# For CPU-only with custom models
|
||||
docker run -d \
|
||||
--restart always \
|
||||
--privileged \
|
||||
--name casjaysdevdocker-ollama-latest \
|
||||
--hostname ollama \
|
||||
-e TZ=${TIMEZONE:-America/New_York} \
|
||||
-e MODELS="llama3.2,mistral" \
|
||||
-v "$dockerHome/data:/data:z" \
|
||||
-v "$dockerHome/config:/config:z" \
|
||||
-p 11434:11434 \
|
||||
-p 64080:80 \
|
||||
casjaysdevdocker/ollama:latest
|
||||
|
||||
# For NVIDIA GPU with auto-pull models
|
||||
docker run -d \
|
||||
--restart always \
|
||||
--privileged \
|
||||
--gpus all \
|
||||
--name casjaysdevdocker-ollama-latest \
|
||||
--hostname ollama \
|
||||
-e TZ=${TIMEZONE:-America/New_York} \
|
||||
-e MODELS="llama3.2 mistral phi" \
|
||||
-v "$dockerHome/data:/data:z" \
|
||||
-v "$dockerHome/config:/config:z" \
|
||||
-p 11434:11434 \
|
||||
-p 64080:80 \
|
||||
casjaysdevdocker/ollama:latest
|
||||
|
||||
# For AMD GPU
|
||||
docker run -d \
|
||||
--restart always \
|
||||
--privileged \
|
||||
--device=/dev/kfd \
|
||||
--device=/dev/dri \
|
||||
--name casjaysdevdocker-ollama-latest \
|
||||
--hostname ollama \
|
||||
-e TZ=${TIMEZONE:-America/New_York} \
|
||||
-e MODELS="llama3.2,mistral,phi" \
|
||||
-v "$dockerHome/data:/data:z" \
|
||||
-v "$dockerHome/config:/config:z" \
|
||||
-p 11434:11434 \
|
||||
-p 64080:80 \
|
||||
casjaysdevdocker/ollama:latest
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔌 IDE & Client Integration
|
||||
|
||||
Once the container is running, you can connect various IDEs, editors, and applications to use Ollama's API.
|
||||
|
||||
### 📝 VSCode Extensions
|
||||
|
||||
#### **Continue.dev** - AI Code Assistant
|
||||
1. Install the [Continue extension](https://marketplace.visualstudio.com/items?itemName=Continue.continue)
|
||||
2. Open VSCode Settings (Ctrl/Cmd+Shift+P → "Continue: Open config.json")
|
||||
3. Add configuration:
|
||||
```json
|
||||
{
|
||||
"models": [
|
||||
{
|
||||
"title": "Ollama Llama3.2",
|
||||
"provider": "ollama",
|
||||
"model": "llama3.2",
|
||||
"apiBase": "http://localhost:11434"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### **Cody** - AI Code Assistant by Sourcegraph
|
||||
1. Install [Cody extension](https://marketplace.visualstudio.com/items?itemName=sourcegraph.cody-ai)
|
||||
2. Open Settings → Extensions → Cody
|
||||
3. Configure:
|
||||
```json
|
||||
{
|
||||
"cody.experimental.ollamaModels": ["llama3.2", "mistral"],
|
||||
"cody.experimental.ollamaEndpoint": "http://localhost:11434"
|
||||
}
|
||||
```
|
||||
|
||||
#### **Ollama Autocoder**
|
||||
1. Install [Ollama Autocoder](https://marketplace.visualstudio.com/items?itemName=Ollama.ollama-autocoder)
|
||||
2. Settings → Extensions → Ollama Autocoder
|
||||
3. Set API URL: `http://localhost:11434`
|
||||
|
||||
#### **Twinny** - AI Code Assistant
|
||||
1. Install [Twinny extension](https://marketplace.visualstudio.com/items?itemName=rjmacarthy.twinny)
|
||||
2. Configure in settings:
|
||||
```json
|
||||
{
|
||||
"twinny.ollamaApiUrl": "http://localhost:11434",
|
||||
"twinny.ollamaModel": "llama3.2"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🖥️ IDE Applications
|
||||
|
||||
#### **Cursor** - AI-First Code Editor
|
||||
1. Open Cursor → Settings → Models
|
||||
2. Select "OpenAI Compatible"
|
||||
3. Configure:
|
||||
- **Base URL**: `http://localhost:11434/v1`
|
||||
- **API Key**: `ollama` (or leave empty)
|
||||
- **Model**: `llama3.2`
|
||||
|
||||
#### **Claude Code / Windsurf**
|
||||
1. Open Settings → AI Provider
|
||||
2. Select "Custom OpenAI Compatible"
|
||||
3. Configure:
|
||||
- **Endpoint**: `http://localhost:11434/v1/chat/completions`
|
||||
- **Model**: `llama3.2`
|
||||
- **API Key**: Not required
|
||||
|
||||
#### **JetBrains IDEs** (IntelliJ, PyCharm, etc.)
|
||||
1. Install [Ollama plugin](https://plugins.jetbrains.com/plugin/22433-ollama)
|
||||
2. Settings → Tools → Ollama
|
||||
3. Set Server URL: `http://localhost:11434`
|
||||
|
||||
---
|
||||
|
||||
### 🌐 Desktop Applications
|
||||
|
||||
#### **Open WebUI** (Built-in)
|
||||
- **URL**: `http://localhost:64080`
|
||||
- Full-featured web interface with authentication
|
||||
- Supports chat, model management, RAG, and more
|
||||
|
||||
#### **Ollama Desktop Client**
|
||||
- Connect to: `http://localhost:11434`
|
||||
- Native desktop experience for model management
|
||||
|
||||
#### **Jan** - ChatGPT Alternative
|
||||
1. Download [Jan](https://jan.ai/)
|
||||
2. Settings → Advanced → OpenAI Compatible
|
||||
3. Set Base URL: `http://localhost:11434/v1`
|
||||
|
||||
#### **Enchanted** (macOS/iOS)
|
||||
1. Download from App Store
|
||||
2. Settings → Ollama Server
|
||||
3. Set URL: `http://localhost:11434`
|
||||
|
||||
---
|
||||
|
||||
### 🔧 API Integration
|
||||
|
||||
#### **OpenAI-Compatible Endpoints**
|
||||
Ollama provides OpenAI-compatible API endpoints:
|
||||
|
||||
```bash
|
||||
# Chat Completions (OpenAI compatible)
|
||||
curl http://localhost:11434/v1/chat/completions \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"model": "llama3.2",
|
||||
"messages": [{"role": "user", "content": "Hello!"}]
|
||||
}'
|
||||
|
||||
# Completions
|
||||
curl http://localhost:11434/v1/completions \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"model": "llama3.2",
|
||||
"prompt": "Tell me a joke"
|
||||
}'
|
||||
|
||||
# List Models
|
||||
curl http://localhost:11434/v1/models
|
||||
```
|
||||
|
||||
#### **Native Ollama API**
|
||||
```bash
|
||||
# Generate
|
||||
curl http://localhost:11434/api/generate -d '{
|
||||
"model": "llama3.2",
|
||||
"prompt": "Why is the sky blue?",
|
||||
"stream": false
|
||||
}'
|
||||
|
||||
# Chat
|
||||
curl http://localhost:11434/api/chat -d '{
|
||||
"model": "llama3.2",
|
||||
"messages": [{"role": "user", "content": "Hello!"}],
|
||||
"stream": false
|
||||
}'
|
||||
|
||||
# List Models
|
||||
curl http://localhost:11434/api/tags
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🐍 Python Integration
|
||||
|
||||
```python
|
||||
# Using OpenAI Python SDK
|
||||
from openai import OpenAI
|
||||
|
||||
client = OpenAI(
|
||||
base_url="http://localhost:11434/v1",
|
||||
api_key="ollama" # Not required but SDK needs something
|
||||
)
|
||||
|
||||
response = client.chat.completions.create(
|
||||
model="llama3.2",
|
||||
messages=[{"role": "user", "content": "Hello!"}]
|
||||
)
|
||||
print(response.choices[0].message.content)
|
||||
```
|
||||
|
||||
```python
|
||||
# Using Ollama Python Library
|
||||
import ollama
|
||||
|
||||
response = ollama.chat(
|
||||
model='llama3.2',
|
||||
messages=[{'role': 'user', 'content': 'Hello!'}]
|
||||
)
|
||||
print(response['message']['content'])
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🦀 Rust Integration
|
||||
|
||||
```toml
|
||||
# Cargo.toml
|
||||
[dependencies]
|
||||
ollama-rs = "0.2"
|
||||
```
|
||||
|
||||
```rust
|
||||
use ollama_rs::Ollama;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
let ollama = Ollama::new("http://localhost".to_string(), 11434);
|
||||
|
||||
let response = ollama.generate("llama3.2", "Why is the sky blue?").await;
|
||||
println!("{}", response.unwrap());
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🟦 JavaScript/TypeScript Integration
|
||||
|
||||
```bash
|
||||
npm install ollama
|
||||
```
|
||||
|
||||
```javascript
|
||||
import { Ollama } from 'ollama'
|
||||
|
||||
const ollama = new Ollama({ host: 'http://localhost:11434' })
|
||||
|
||||
const response = await ollama.chat({
|
||||
model: 'llama3.2',
|
||||
messages: [{ role: 'user', content: 'Hello!' }],
|
||||
})
|
||||
|
||||
console.log(response.message.content)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🔐 CORS Configuration
|
||||
|
||||
The container is configured with `OLLAMA_ORIGINS="*"` by default, allowing all origins. To restrict access:
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
-e OLLAMA_ORIGINS="http://localhost:3000,https://myapp.com" \
|
||||
-p 11434:11434 -p 64080:80 \
|
||||
casjaysdevdocker/ollama:latest
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🚀 Quick Test
|
||||
|
||||
Verify the API is working:
|
||||
|
||||
```bash
|
||||
# Check version
|
||||
curl http://localhost:11434/api/version
|
||||
|
||||
# Test chat (requires a model pulled first)
|
||||
curl http://localhost:11434/api/chat -d '{
|
||||
"model": "llama3.2",
|
||||
"messages": [{"role": "user", "content": "Hello"}],
|
||||
"stream": false
|
||||
}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📦 Docker Model Runner (DMR) Integration
|
||||
|
||||
### ✅ Compatible with Docker Model Runner
|
||||
|
||||
Docker Model Runner is Docker's built-in AI service that runs models directly within Docker Desktop/Engine. It provides **Ollama-compatible APIs** on port **12434**.
|
||||
|
||||
**This container (port 11434) and DMR (port 12434) can work side-by-side:**
|
||||
|
||||
```bash
|
||||
# DMR runs on port 12434 (Docker's built-in)
|
||||
curl http://localhost:12434/api/tags
|
||||
|
||||
# This Ollama container runs on port 11434
|
||||
curl http://localhost:11434/api/tags
|
||||
```
|
||||
|
||||
### When to Use Each
|
||||
|
||||
| Feature | This Container (Ollama) | Docker Model Runner (DMR) |
|
||||
|---------|------------------------|---------------------------|
|
||||
| **Port** | 11434 | 12434 |
|
||||
| **Built-in WebUI** | ✅ Open WebUI on 64080 | ❌ (use external tools) |
|
||||
| **Auto-pull models** | ✅ Via MODELS env var | ✅ Via docker model pull |
|
||||
| **Model storage** | /data/ollama/models | Docker-managed |
|
||||
| **GPU support** | ✅ NVIDIA/AMD/Intel | ✅ NVIDIA (vLLM/Diffusers) |
|
||||
| **Inference engines** | Ollama default | llama.cpp, vLLM, Diffusers |
|
||||
| **Requires** | Docker container | Docker Desktop 4.40+ |
|
||||
| **API compatibility** | Ollama, OpenAI (v1) | Ollama, OpenAI, Anthropic |
|
||||
|
||||
### Using Both Together
|
||||
|
||||
**Scenario 1: DMR for quick testing, Container for production**
|
||||
```bash
|
||||
# Quick test with DMR (no container needed)
|
||||
docker model pull ai/llama3.2
|
||||
curl http://localhost:12434/api/chat -d '{...}'
|
||||
|
||||
# Production with full WebUI and auto-pull
|
||||
docker run -d -e MODELS="llama3.2" -p 11434:11434 -p 64080:80 casjaysdevdocker/ollama
|
||||
```
|
||||
|
||||
**Scenario 2: IDE points to container, DMR for experiments**
|
||||
```json
|
||||
// VSCode Continue extension → this container
|
||||
{
|
||||
"models": [{
|
||||
"apiBase": "http://localhost:11434"
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
**Scenario 3: Open WebUI connects to DMR instead**
|
||||
```bash
|
||||
# Run this container but point WebUI to DMR
|
||||
docker run -d \
|
||||
-e OLLAMA_BASE_URL="http://172.17.0.1:12434" \
|
||||
-p 64080:80 \
|
||||
casjaysdevdocker/ollama
|
||||
```
|
||||
|
||||
### Docker Model Runner Commands
|
||||
|
||||
```bash
|
||||
# Enable DMR in Docker Desktop
|
||||
docker desktop enable model-runner --tcp 12434
|
||||
|
||||
# Pull models via DMR
|
||||
docker model pull ai/llama3.2
|
||||
docker model pull ai/mistral
|
||||
|
||||
# List DMR models
|
||||
docker model ls
|
||||
|
||||
# Chat with DMR (Ollama-compatible API)
|
||||
curl http://localhost:12434/api/chat -d '{
|
||||
"model": "ai/llama3.2",
|
||||
"messages": [{"role": "user", "content": "Hello"}]
|
||||
}'
|
||||
|
||||
# Use OpenAI-compatible endpoint
|
||||
curl http://localhost:12434/engines/v1/chat/completions -d '{
|
||||
"model": "ai/llama3.2",
|
||||
"messages": [{"role": "user", "content": "Hello"}]
|
||||
}'
|
||||
```
|
||||
|
||||
### IDE Configuration for DMR
|
||||
|
||||
**Continue.dev with DMR:**
|
||||
```json
|
||||
{
|
||||
"models": [{
|
||||
"title": "DMR Llama3.2",
|
||||
"provider": "ollama",
|
||||
"model": "ai/llama3.2",
|
||||
"apiBase": "http://localhost:12434"
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
**Cursor with DMR:**
|
||||
- Base URL: `http://localhost:12434/engines/v1`
|
||||
- Model: `ai/llama3.2`
|
||||
|
||||
### Model Registry Differences
|
||||
|
||||
**Ollama Registry (This Container):**
|
||||
- Models from: `registry.ollama.ai`
|
||||
- Format: `llama3.2`, `mistral`, `phi`
|
||||
- Pull via: `ollama pull` or MODELS env var
|
||||
|
||||
**Docker Model Runner (DMR):**
|
||||
- Models from: Docker Hub (`hub.docker.com/u/ai`)
|
||||
- Format: `ai/llama3.2`, `ai/mistral`, `ai/qwen2.5-coder`
|
||||
- Pull via: `docker model pull`
|
||||
- Supports OCI artifacts
|
||||
|
||||
### Benefits of Using Both
|
||||
|
||||
1. **DMR**: Quick model testing without container overhead
|
||||
2. **This Container**: Full-featured deployment with WebUI, authentication, auto-pull
|
||||
3. **Flexibility**: Switch between them via port configuration
|
||||
4. **Integration**: Use DMR for CI/CD, container for production apps
|
||||
|
||||
### Requirements
|
||||
|
||||
**Docker Model Runner:**
|
||||
- Docker Desktop 4.40+ (macOS) or 4.41+ (Windows)
|
||||
- Docker Engine with DMR plugin
|
||||
- Enable via: Settings → Features → Enable Docker Model Runner
|
||||
|
||||
**This Container:**
|
||||
- Standard Docker (no version requirements)
|
||||
- Works anywhere Docker runs
|
||||
|
||||
---
|
||||
|
||||
## via docker-compose
|
||||
|
||||
```yaml
|
||||
version: "2"
|
||||
services:
|
||||
ollama:
|
||||
image: casjaysdevdocker/ollama
|
||||
container_name: casjaysdevdocker-ollama
|
||||
environment:
|
||||
- TZ=America/New_York
|
||||
- HOSTNAME=ollama
|
||||
- MODELS=llama3.2,mistral,phi
|
||||
volumes:
|
||||
- "/var/lib/srv/$USER/docker/casjaysdevdocker/ollama/ollama/latest/rootfs/data:/data:z"
|
||||
- "/var/lib/srv/$USER/docker/casjaysdevdocker/ollama/ollama/latest/rootfs/config:/config:z"
|
||||
ports:
|
||||
- 11434:11434
|
||||
- 64080:80
|
||||
restart: always
|
||||
# For NVIDIA GPU, uncomment:
|
||||
# deploy:
|
||||
# resources:
|
||||
# reservations:
|
||||
# devices:
|
||||
# - driver: nvidia
|
||||
# count: all
|
||||
# capabilities: [gpu]
|
||||
```
|
||||
|
||||
## Get source files
|
||||
|
||||
```shell
|
||||
dockermgr download src casjaysdevdocker/ollama
|
||||
```
|
||||
|
||||
OR
|
||||
|
||||
```shell
|
||||
git clone "https://github.com/casjaysdevdocker/ollama" "$HOME/Projects/github/casjaysdevdocker/ollama"
|
||||
```
|
||||
|
||||
## Build container
|
||||
|
||||
```shell
|
||||
cd "$HOME/Projects/github/casjaysdevdocker/ollama"
|
||||
buildx
|
||||
```
|
||||
|
||||
## Authors
|
||||
|
||||
🤖 casjay: [Github](https://github.com/casjay) 🤖
|
||||
⛵ casjaysdevdocker: [Github](https://github.com/casjaysdevdocker) [Docker](https://hub.docker.com/u/casjaysdevdocker) ⛵
|
||||
Executable
+44
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202601282319-git
|
||||
# @@Author : CasjaysDev
|
||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||
# @@License : MIT
|
||||
# @@Copyright : Copyright 2026 CasjaysDev
|
||||
# @@Created : Wed Jan 28 11:19:51 PM EST 2026
|
||||
# @@File : 00-init.sh
|
||||
# @@Description : script to run init
|
||||
# @@Changelog : newScript
|
||||
# @@TODO : Refactor code
|
||||
# @@Other : N/A
|
||||
# @@Resource : N/A
|
||||
# @@Terminal App : yes
|
||||
# @@sudo/root : yes
|
||||
# @@Template : templates/dockerfiles/init_scripts/00-init.sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set bash options
|
||||
set -o pipefail
|
||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set env variables
|
||||
exitCode=0
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Predefined actions
|
||||
if [ -d "/usr/local/share/template-files/data" ]; then rm -Rf "/usr/local/share/template-files/data"/*; fi
|
||||
if [ -d "/usr/local/share/template-files/config" ]; then rm -Rf "/usr/local/share/template-files/config"/*; fi
|
||||
if [ -d "/usr/local/share/template-files/defaults" ]; then rm -Rf "/usr/local/share/template-files/defaults"/*; fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Main script
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set the exit code
|
||||
#exitCode=$?
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
exit $exitCode
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# ex: ts=2 sw=2 et filetype=sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202601282319-git
|
||||
# @@Author : CasjaysDev
|
||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||
# @@License : MIT
|
||||
# @@Copyright : Copyright 2026 CasjaysDev
|
||||
# @@Created : Wed Jan 28 11:19:51 PM EST 2026
|
||||
# @@File : 01-system.sh
|
||||
# @@Description : script to run system
|
||||
# @@Changelog : newScript
|
||||
# @@TODO : Refactor code
|
||||
# @@Other : N/A
|
||||
# @@Resource : N/A
|
||||
# @@Terminal App : yes
|
||||
# @@sudo/root : yes
|
||||
# @@Template : templates/dockerfiles/init_scripts/01-system.sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set bash options
|
||||
set -o pipefail
|
||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set env variables
|
||||
exitCode=0
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Predefined actions
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Main script
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set the exit code
|
||||
#exitCode=$?
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
exit $exitCode
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# ex: ts=2 sw=2 et filetype=sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Executable
+45
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202601282319-git
|
||||
# @@Author : CasjaysDev
|
||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||
# @@License : MIT
|
||||
# @@Copyright : Copyright 2026 CasjaysDev
|
||||
# @@Created : Wed Jan 28 11:19:51 PM EST 2026
|
||||
# @@File : 02-packages.sh
|
||||
# @@Description : script to run packages
|
||||
# @@Changelog : newScript
|
||||
# @@TODO : Refactor code
|
||||
# @@Other : N/A
|
||||
# @@Resource : N/A
|
||||
# @@Terminal App : yes
|
||||
# @@sudo/root : yes
|
||||
# @@Template : templates/dockerfiles/init_scripts/02-packages.sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set bash options
|
||||
set -o pipefail
|
||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set env variables
|
||||
exitCode=0
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Predefined actions
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Main script
|
||||
|
||||
# All standard packages are installed via PACK_LIST in Dockerfile
|
||||
# This script is for custom package installation only
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set the exit code
|
||||
#exitCode=$?
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
exit $exitCode
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# ex: ts=2 sw=2 et filetype=sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Executable
+93
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202601282319-git
|
||||
# @@Author : CasjaysDev
|
||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||
# @@License : MIT
|
||||
# @@Copyright : Copyright 2026 CasjaysDev
|
||||
# @@Created : Wed Jan 28 11:19:52 PM EST 2026
|
||||
# @@File : 03-files.sh
|
||||
# @@Description : script to run files
|
||||
# @@Changelog : newScript
|
||||
# @@TODO : Refactor code
|
||||
# @@Other : N/A
|
||||
# @@Resource : N/A
|
||||
# @@Terminal App : yes
|
||||
# @@sudo/root : yes
|
||||
# @@Template : templates/dockerfiles/init_scripts/03-files.sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set bash options
|
||||
set -o pipefail
|
||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set env variables
|
||||
exitCode=0
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Predefined actions
|
||||
if [ -d "/tmp/bin" ]; then
|
||||
mkdir -p "/usr/local/bin"
|
||||
for bin in "/tmp/bin"/*; do
|
||||
name="$(basename -- "$bin")"
|
||||
echo "Installing $name to /usr/local/bin/$name"
|
||||
copy "$bin" "/usr/local/bin/$name"
|
||||
chmod -f +x "/usr/local/bin/$name"
|
||||
done
|
||||
fi
|
||||
unset bin
|
||||
if [ -d "/tmp/var" ]; then
|
||||
for var in "/tmp/var"/*; do
|
||||
name="$(basename -- "$var")"
|
||||
echo "Installing $var to /var/$name"
|
||||
if [ -d "$var" ]; then
|
||||
mkdir -p "/var/$name"
|
||||
copy "$var/." "/var/$name/"
|
||||
else
|
||||
copy "$var" "/var/$name"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
unset var
|
||||
if [ -d "/tmp/etc" ]; then
|
||||
for config in "/tmp/etc"/*; do
|
||||
name="$(basename -- "$config")"
|
||||
echo "Installing $config to /etc/$name"
|
||||
if [ -d "$config" ]; then
|
||||
mkdir -p "/etc/$name"
|
||||
copy "$config/." "/etc/$name/"
|
||||
mkdir -p "/usr/local/share/template-files/config/$name"
|
||||
copy "$config/." "/usr/local/share/template-files/config/$name/"
|
||||
else
|
||||
copy "$config" "/etc/$name"
|
||||
copy "$config" "/usr/local/share/template-files/config/$name"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
unset config
|
||||
if [ -d "/tmp/data" ]; then
|
||||
for data in "/tmp/data"/*; do
|
||||
name="$(basename -- "$data")"
|
||||
echo "Installing $data to /usr/local/share/template-files/data"
|
||||
if [ -d "$data" ]; then
|
||||
mkdir -p "/usr/local/share/template-files/data/$name"
|
||||
copy "$data/." "/usr/local/share/template-files/data/$name/"
|
||||
else
|
||||
copy "$data" "/usr/local/share/template-files/data/$name"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
unset data
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Main script
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set the exit code
|
||||
#exitCode=$?
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
exit $exitCode
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# ex: ts=2 sw=2 et filetype=sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202601282319-git
|
||||
# @@Author : CasjaysDev
|
||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||
# @@License : MIT
|
||||
# @@Copyright : Copyright 2026 CasjaysDev
|
||||
# @@Created : Wed Jan 28 11:19:52 PM EST 2026
|
||||
# @@File : 04-users.sh
|
||||
# @@Description : script to run users
|
||||
# @@Changelog : newScript
|
||||
# @@TODO : Refactor code
|
||||
# @@Other : N/A
|
||||
# @@Resource : N/A
|
||||
# @@Terminal App : yes
|
||||
# @@sudo/root : yes
|
||||
# @@Template : templates/dockerfiles/init_scripts/04-users.sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set bash options
|
||||
set -o pipefail
|
||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set env variables
|
||||
exitCode=0
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Predefined actions
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Main script
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set the exit code
|
||||
#exitCode=$?
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
exit $exitCode
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# ex: ts=2 sw=2 et filetype=sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Executable
+107
@@ -0,0 +1,107 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202601282319-git
|
||||
# @@Author : CasjaysDev
|
||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||
# @@License : MIT
|
||||
# @@Copyright : Copyright 2026 CasjaysDev
|
||||
# @@Created : Wed Jan 28 11:19:52 PM EST 2026
|
||||
# @@File : 05-custom.sh
|
||||
# @@Description : script to run custom
|
||||
# @@Changelog : newScript
|
||||
# @@TODO : Refactor code
|
||||
# @@Other : N/A
|
||||
# @@Resource : N/A
|
||||
# @@Terminal App : yes
|
||||
# @@sudo/root : yes
|
||||
# @@Template : templates/dockerfiles/init_scripts/05-custom.sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set bash options
|
||||
set -o pipefail
|
||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set env variables
|
||||
exitCode=0
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Predefined actions
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Main script
|
||||
|
||||
# All standard packages are installed via PACK_LIST in Dockerfile
|
||||
|
||||
# Determine architecture
|
||||
ARCH="$(uname -m)"
|
||||
case "$ARCH" in
|
||||
x86_64) ARCH="amd64" ;;
|
||||
aarch64|arm64) ARCH="arm64" ;;
|
||||
*) echo "Unsupported architecture: $ARCH" && exit 1 ;;
|
||||
esac
|
||||
|
||||
# Install Ollama binary
|
||||
echo "Installing Ollama for $ARCH..."
|
||||
OLLAMA_URL="https://github.com/ollama/ollama/releases/latest/download/ollama-linux-${ARCH}.tar.zst"
|
||||
|
||||
curl -fsSL "$OLLAMA_URL" | zstd -d | tar -x -C /usr/local/bin --strip-components=1 bin/ollama
|
||||
chmod +x /usr/local/bin/ollama
|
||||
|
||||
# Verify installation
|
||||
if [ -x "/usr/local/bin/ollama" ]; then
|
||||
echo "✓ Ollama installed successfully to /usr/local/bin/ollama"
|
||||
/usr/local/bin/ollama --version 2>/dev/null || echo "Ollama binary ready"
|
||||
else
|
||||
echo "Failed to install Ollama" && exit 1
|
||||
fi
|
||||
|
||||
# ============================================
|
||||
# CPU & GPU OPTIMIZATION LIBRARIES
|
||||
# ============================================
|
||||
echo "Installing CPU optimization libraries..."
|
||||
echo " • OpenBLAS: Optimized linear algebra (3-5x faster CPU inference)"
|
||||
echo " • libgomp: OpenMP multi-threading support"
|
||||
echo ""
|
||||
echo "Note: Hardware detection happens at runtime on user's machine"
|
||||
echo " GPU support via runtime device passthrough (no GPU libs in image)"
|
||||
|
||||
# ============================================
|
||||
# PYTHON INSTALLATION FOR OPEN WEBUI
|
||||
# ============================================
|
||||
echo "Installing Python dependencies for Open WebUI..."
|
||||
# Debian 12 (Bookworm) comes with Python 3.11 which is perfect for Open WebUI
|
||||
pkmgr install python3 python3-pip python3-venv python3-dev
|
||||
|
||||
# Verify Python version
|
||||
python3 --version
|
||||
|
||||
# ============================================
|
||||
# OPEN WEBUI INSTALLATION
|
||||
# ============================================
|
||||
echo "Installing Open WebUI..."
|
||||
|
||||
# Install Open WebUI using system Python (requires --break-system-packages in Docker)
|
||||
python3 -m pip install --break-system-packages --upgrade pip
|
||||
python3 -m pip install --break-system-packages open-webui
|
||||
|
||||
# Verify Open WebUI installation
|
||||
if python3 -m open_webui --help >/dev/null 2>&1; then
|
||||
echo "✓ Open WebUI installed successfully with Python $(python3 --version)"
|
||||
elif command -v open-webui >/dev/null 2>&1; then
|
||||
echo "✓ Open WebUI installed successfully"
|
||||
else
|
||||
echo "⚠ Warning: Open WebUI may not be in PATH, but should be installed"
|
||||
fi
|
||||
|
||||
echo "✓ Ollama and Open WebUI installation complete"
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set the exit code
|
||||
#exitCode=$?
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
exit $exitCode
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# ex: ts=2 sw=2 et filetype=sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202601282319-git
|
||||
# @@Author : CasjaysDev
|
||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||
# @@License : MIT
|
||||
# @@Copyright : Copyright 2026 CasjaysDev
|
||||
# @@Created : Wed Jan 28 11:19:52 PM EST 2026
|
||||
# @@File : 06-post.sh
|
||||
# @@Description : script to run post
|
||||
# @@Changelog : newScript
|
||||
# @@TODO : Refactor code
|
||||
# @@Other : N/A
|
||||
# @@Resource : N/A
|
||||
# @@Terminal App : yes
|
||||
# @@sudo/root : yes
|
||||
# @@Template : templates/dockerfiles/init_scripts/06-post.sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set bash options
|
||||
set -o pipefail
|
||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set env variables
|
||||
exitCode=0
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Predefined actions
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Main script
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set the exit code
|
||||
#exitCode=$?
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
exit $exitCode
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# ex: ts=2 sw=2 et filetype=sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202601282319-git
|
||||
# @@Author : CasjaysDev
|
||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||
# @@License : MIT
|
||||
# @@Copyright : Copyright 2026 CasjaysDev
|
||||
# @@Created : Wed Jan 28 11:19:52 PM EST 2026
|
||||
# @@File : 07-cleanup.sh
|
||||
# @@Description : script to run cleanup
|
||||
# @@Changelog : newScript
|
||||
# @@TODO : Refactor code
|
||||
# @@Other : N/A
|
||||
# @@Resource : N/A
|
||||
# @@Terminal App : yes
|
||||
# @@sudo/root : yes
|
||||
# @@Template : templates/dockerfiles/init_scripts/07-cleanup.sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set bash options
|
||||
set -o pipefail
|
||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Load functions
|
||||
__find_and_remove() { [ -z "$1" ] || find "${2:-/etc}" -iname "$1" -exec rm -Rf {} \; 2>/dev/null; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set env variables
|
||||
exitCode=0
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Predefined actions
|
||||
if [ -d "/tmp" ]; then rm -Rf "/tmp"/*; fi
|
||||
if [ -d "$HOME/.cache" ]; then rm -Rf "$HOME/.cache"; fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Main script
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set the exit code
|
||||
#exitCode=$?
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
exit $exitCode
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# ex: ts=2 sw=2 et filetype=sh
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Executable
+741
@@ -0,0 +1,741 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202512161441-git
|
||||
# @@Author : Jason Hempstead
|
||||
# @@Contact : jason@casjaysdev.pro
|
||||
# @@License : WTFPL
|
||||
# @@ReadME : entrypoint.sh --help
|
||||
# @@Copyright : Copyright: (c) 2026 Jason Hempstead, Casjays Developments
|
||||
# @@Created : Wednesday, Jan 28, 2026 23:19 EST
|
||||
# @@File : entrypoint.sh
|
||||
# @@Description : Entrypoint file for ollama
|
||||
# @@Changelog : New script
|
||||
# @@TODO : Better documentation
|
||||
# @@Other :
|
||||
# @@Resource :
|
||||
# @@Terminal App : no
|
||||
# @@sudo/root : no
|
||||
# @@Template : other/docker-entrypoint
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# run trap command on exit
|
||||
trap '__trap_exit_handler' EXIT
|
||||
trap '__trap_signal_handler' INT TERM PWR
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
__trap_exit_handler() {
|
||||
local retVal=$?
|
||||
if [ "$SERVICE_IS_RUNNING" != "yes" ] && [ -f "$SERVICE_PID_FILE" ]; then
|
||||
rm -Rf "$SERVICE_PID_FILE" 2>/dev/null || true
|
||||
fi
|
||||
exit $retVal
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
__trap_signal_handler() {
|
||||
local retVal=$?
|
||||
echo "Container received shutdown signal"
|
||||
if [ "$SERVICE_IS_RUNNING" != "yes" ] && [ -f "$SERVICE_PID_FILE" ]; then
|
||||
rm -Rf "$SERVICE_PID_FILE" 2>/dev/null || true
|
||||
fi
|
||||
exit $retVal
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# setup debugging - https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
|
||||
if [ -f "/config/.debug" ] && [ -z "$DEBUGGER_OPTIONS" ]; then
|
||||
export DEBUGGER_OPTIONS="$(<"/config/.debug")"
|
||||
else
|
||||
DEBUGGER_OPTIONS="${DEBUGGER_OPTIONS:-}"
|
||||
fi
|
||||
if [ "$DEBUGGER" = "on" ] || [ -f "/config/.debug" ]; then
|
||||
echo "Enabling debugging"
|
||||
set -o pipefail -x$DEBUGGER_OPTIONS
|
||||
export DEBUGGER="on"
|
||||
else
|
||||
set -o pipefail
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set bash options
|
||||
SCRIPT_FILE="$0"
|
||||
CONTAINER_NAME="ollama"
|
||||
SCRIPT_NAME="$(basename -- "$SCRIPT_FILE" 2>/dev/null)"
|
||||
CONTAINER_NAME="${ENV_CONTAINER_NAME:-$CONTAINER_NAME}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# remove whitespaces from beginning argument
|
||||
while :; do
|
||||
if [ "$1" = " " ]; then
|
||||
shift 1
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
[ "$1" = "$SCRIPT_FILE" ] && shift 1
|
||||
[ "$1" = "$SCRIPT_NAME" ] && shift 1
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import the functions file
|
||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
|
||||
. "/usr/local/etc/docker/functions/entrypoint.sh"
|
||||
else
|
||||
echo "Can not load functions from /usr/local/etc/docker/functions/entrypoint.sh"
|
||||
exit 1
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
case "$1" in
|
||||
# Help message
|
||||
-h | --help)
|
||||
shift 1
|
||||
echo 'Docker container for '$CONTAINER_NAME''
|
||||
echo "Usage: $CONTAINER_NAME [help tail cron exec start init shell certbot ssl procs ports healthcheck backup command]"
|
||||
echo ""
|
||||
exit 0
|
||||
;;
|
||||
-*)
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Create the default env files
|
||||
__create_env_file "/config/env/default.sh" "/root/env.sh" &>/dev/null
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import variables from files
|
||||
for set_env in "/root/env.sh" "/usr/local/etc/docker/env"/*.sh "/config/env"/*.sh; do
|
||||
[ -f "$set_env" ] && . "$set_env"
|
||||
done
|
||||
unset set_env
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# User to use to launch service - IE: postgres
|
||||
# normally root
|
||||
RUNAS_USER="root"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set user and group from env
|
||||
SERVICE_USER="${PUID:-$SERVICE_USER}"
|
||||
SERVICE_GROUP="${PGID:-$SERVICE_GROUP}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set user and group ID
|
||||
# set the user id
|
||||
SERVICE_UID="${SERVICE_UID:-0}"
|
||||
# set the group id
|
||||
SERVICE_GID="${SERVICE_GID:-0}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# User and group in which the service switches to - IE: nginx,apache,mysql,postgres
|
||||
#SERVICE_USER="${SERVICE_USER:-ollama}" # execute command as another user
|
||||
#SERVICE_GROUP="${SERVICE_GROUP:-ollama}" # Set the service group
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Secondary ports
|
||||
# specifiy other ports
|
||||
SERVER_PORTS=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Primary server port- will be added to server ports
|
||||
# port : 80,443
|
||||
WEB_SERVER_PORT=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Healthcheck variables
|
||||
# enable healthcheck [yes/no]
|
||||
HEALTH_ENABLED="yes"
|
||||
# comma separated list of processes for the healthcheck
|
||||
SERVICES_LIST="tini"
|
||||
# url endpoints: [http://localhost/health,http://localhost/test]
|
||||
HEALTH_ENDPOINTS=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Update path var
|
||||
export PATH RUNAS_USER SERVICE_USER SERVICE_GROUP SERVICE_UID SERVICE_GID WWW_ROOT_DIR DATABASE_DIR
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Custom variables
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# show message
|
||||
__run_message() {
|
||||
|
||||
return
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
################## END OF CONFIGURATION #####################
|
||||
# Lets get containers ip address
|
||||
IP4_ADDRESS="$(__get_ip4)"
|
||||
IP6_ADDRESS="$(__get_ip6)"
|
||||
CONTAINER_IP4_ADDRESS="${CONTAINER_IP4_ADDRESS:-$IP4_ADDRESS}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Startup variables
|
||||
export INIT_DATE="${INIT_DATE:-$(date)}"
|
||||
export CONTAINER_INIT="${CONTAINER_INIT:-no}"
|
||||
export START_SERVICES="${START_SERVICES:-no}"
|
||||
export ENTRYPOINT_MESSAGE="${ENTRYPOINT_MESSAGE:-yes}"
|
||||
export ENTRYPOINT_FIRST_RUN="${ENTRYPOINT_FIRST_RUN:-yes}"
|
||||
export DATA_DIR_INITIALIZED="${DATA_DIR_INITIALIZED:-no}"
|
||||
export CONFIG_DIR_INITIALIZED="${CONFIG_DIR_INITIALIZED:-no}"
|
||||
export CONTAINER_NAME="${ENV_CONTAINER_NAME:-$CONTAINER_NAME}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# System
|
||||
export LANG="${LANG:-C.UTF-8}"
|
||||
export LC_ALL="${LANG:-C.UTF-8}"
|
||||
export TZ="${TZ:-${TIMEZONE:-America/New_York}}"
|
||||
export HOSTNAME="$(hostname -s)"
|
||||
export DOMAINNAME="$(hostname -d)"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Default directories
|
||||
export SSL_DIR="${SSL_DIR:-/config/ssl}"
|
||||
export SSL_CA="${SSL_CERT:-/config/ssl/ca.crt}"
|
||||
export SSL_KEY="${SSL_KEY:-/config/ssl/localhost.pem}"
|
||||
export SSL_CERT="${SSL_CERT:-/config/ssl/localhost.crt}"
|
||||
export LOCAL_BIN_DIR="${LOCAL_BIN_DIR:-/usr/local/bin}"
|
||||
export DEFAULT_DATA_DIR="${DEFAULT_DATA_DIR:-/usr/local/share/template-files/data}"
|
||||
export DEFAULT_CONF_DIR="${DEFAULT_CONF_DIR:-/usr/local/share/template-files/config}"
|
||||
export DEFAULT_TEMPLATE_DIR="${DEFAULT_TEMPLATE_DIR:-/usr/local/share/template-files/defaults}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Backup settings
|
||||
export BACKUP_MAX_DAYS="${BACKUP_MAX_DAYS:-}"
|
||||
export BACKUP_RUN_CRON="${BACKUP_RUN_CRON:-}"
|
||||
export BACKUP_DIR="${BACKUP_DIR:-/data/backups}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Additional
|
||||
export PHP_INI_DIR="${PHP_INI_DIR:-$(__find_php_ini)}"
|
||||
export PHP_BIN_DIR="${PHP_BIN_DIR:-$(__find_php_bin)}"
|
||||
export HTTPD_CONFIG_FILE="${HTTPD_CONFIG_FILE:-$(__find_httpd_conf)}"
|
||||
export NGINX_CONFIG_FILE="${NGINX_CONFIG_FILE:-$(__find_nginx_conf)}"
|
||||
export MYSQL_CONFIG_FILE="${MYSQL_CONFIG_FILE:-$(__find_mysql_conf)}"
|
||||
export PGSQL_CONFIG_FILE="${PGSQL_CONFIG_FILE:-$(__find_pgsql_conf)}"
|
||||
export MONGODB_CONFIG_FILE="${MONGODB_CONFIG_FILE:-$(__find_mongodb_conf)}"
|
||||
export ENTRYPOINT_PID_FILE="${ENTRYPOINT_PID_FILE:-$ENTRYPOINT_PID_FILE}"
|
||||
export ENTRYPOINT_INIT_FILE="${ENTRYPOINT_INIT_FILE:-/config/.entrypoint.done}"
|
||||
export ENTRYPOINT_DATA_INIT_FILE="${ENTRYPOINT_DATA_INIT_FILE:-/data/.docker_has_run}"
|
||||
export ENTRYPOINT_CONFIG_INIT_FILE="${ENTRYPOINT_CONFIG_INIT_FILE:-/config/.docker_has_run}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ -n "$CONTAINER_WEB_SERVER_WWW_REPO" ]; then
|
||||
www_temp_dir="/tmp/git/$(basename -- "$CONTAINER_WEB_SERVER_WWW_REPO")"
|
||||
rm -Rf "${WWW_ROOT_DIR:?}"/* "${www_temp_dir:?}"/* 2>/dev/null || true
|
||||
mkdir -p "$WWW_ROOT_DIR" "$www_temp_dir" 2>/dev/null || true
|
||||
git clone -q "$CONTAINER_WEB_SERVER_WWW_REPO" "$www_temp_dir" 2>/dev/null || true
|
||||
rm -Rf "$www_temp_dir/.git" "$www_temp_dir"/.git* 2>/dev/null || true
|
||||
rsync -ra "$www_temp_dir/" "$WWW_ROOT_DIR" --delete 2>/dev/null || true
|
||||
rm -Rf "$www_temp_dir" 2>/dev/null || true
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# variables based on env/files
|
||||
if [ -f "/config/enable/ssl" ]; then SSL_ENABLED="yes"; fi
|
||||
if [ -f "/config/enable/ssh" ]; then SSH_ENABLED="yes"; fi
|
||||
if [ "$WEB_SERVER_PORT" = "443" ]; then SSL_ENABLED="yes"; fi
|
||||
if [ "$CONTAINER_WEB_SERVER_PROTOCOL" = "https" ]; then SSL_ENABLED="yes"; fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# export variables
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# is already Initialized
|
||||
if [ -f "$ENTRYPOINT_DATA_INIT_FILE" ]; then
|
||||
DATA_DIR_INITIALIZED="yes"
|
||||
else
|
||||
DATA_DIR_INITIALIZED="no"
|
||||
fi
|
||||
if [ -f "$ENTRYPOINT_CONFIG_INIT_FILE" ]; then
|
||||
CONFIG_DIR_INITIALIZED="yes"
|
||||
else
|
||||
CONFIG_DIR_INITIALIZED="no"
|
||||
fi
|
||||
if [ -f "$ENTRYPOINT_PID_FILE" ] || [ -f "$ENTRYPOINT_INIT_FILE" ]; then
|
||||
ENTRYPOINT_FIRST_RUN="no"
|
||||
else
|
||||
ENTRYPOINT_FIRST_RUN="yes"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# clean ENV_PORTS variables
|
||||
ENV_PORTS="${ENV_PORTS//,/ }" #
|
||||
ENV_PORTS="${ENV_PORTS//\/*/}" #
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# clean SERVER_PORTS variables
|
||||
SERVER_PORTS="${SERVER_PORTS//,/ }" #
|
||||
SERVER_PORTS="${SERVER_PORTS//\/*/}" #
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# clean WEB_SERVER_PORTS variables
|
||||
WEB_SERVER_PORTS="${WEB_SERVER_PORT//\/*/}" #
|
||||
WEB_SERVER_PORTS="${WEB_SERVER_PORTS//\/*/}" #
|
||||
WEB_SERVER_PORTS="${WEB_SERVER_PORT//,/ } ${ENV_WEB_SERVER_PORTS//,/ }" #
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# rewrite and merge variables
|
||||
ENV_PORTS="$(__format_variables "$ENV_PORTS" || false)"
|
||||
WEB_SERVER_PORTS="$(__format_variables "$WEB_SERVER_PORTS" || false)"
|
||||
ENV_PORTS="$(__format_variables "$SERVER_PORTS" "$WEB_SERVER_PORTS" "$ENV_PORTS" "$SERVER_PORTS" || false)"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Remove the commas from env
|
||||
HEALTH_ENDPOINTS="${HEALTH_ENDPOINTS//,/ }"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# create required directories
|
||||
mkdir -p "/run" 2>/dev/null || true
|
||||
mkdir -p "/tmp" 2>/dev/null || true
|
||||
mkdir -p "/root" 2>/dev/null || true
|
||||
mkdir -p "/var/run" 2>/dev/null || true
|
||||
mkdir -p "/var/tmp" 2>/dev/null || true
|
||||
mkdir -p "/run/cron" 2>/dev/null || true
|
||||
mkdir -p "/data/logs" 2>/dev/null || true
|
||||
mkdir -p "/run/init.d" 2>/dev/null || true
|
||||
mkdir -p "/config/enable" 2>/dev/null || true
|
||||
mkdir -p "/config/secure" 2>/dev/null || true
|
||||
mkdir -p "/usr/local/etc/docker/exec" 2>/dev/null || true
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# create required files
|
||||
touch "/data/logs/start.log" 2>/dev/null || true
|
||||
touch "/data/logs/entrypoint.log" 2>/dev/null || true
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# fix permissions
|
||||
chmod -f 777 "/run" 2>/dev/null || true
|
||||
chmod -f 777 "/tmp" 2>/dev/null || true
|
||||
chmod -f 700 "/root" 2>/dev/null || true
|
||||
chmod -f 777 "/var/run" 2>/dev/null || true
|
||||
chmod -f 777 "/var/tmp" 2>/dev/null || true
|
||||
chmod -f 777 "/run/cron" 2>/dev/null || true
|
||||
chmod -f 777 "/data/logs" 2>/dev/null || true
|
||||
chmod -f 777 "/run/init.d" 2>/dev/null || true
|
||||
chmod -f 777 "/config/enable" 2>/dev/null || true
|
||||
chmod -f 777 "/config/secure" 2>/dev/null || true
|
||||
chmod -f 777 "/data/logs/entrypoint.log" 2>/dev/null || true
|
||||
chmod -f 777 "/usr/local/etc/docker/exec" 2>/dev/null || true
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# lets ensure everyone can write to std*
|
||||
if [ -f "/dev/stdin" ]; then
|
||||
chmod -f 777 "/dev/stdin" 2>/dev/null || true
|
||||
fi
|
||||
if [ -f "/dev/stderr" ]; then
|
||||
chmod -f 777 "/dev/stderr" 2>/dev/null || true
|
||||
fi
|
||||
if [ -f "/dev/stdout" ]; then
|
||||
chmod -f 777 "/dev/stdout" 2>/dev/null || true
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
cat <<EOF 2>/dev/null | tee /etc/profile.d/locales.shadow /etc/profile.d/locales.sh >/dev/null 2>&1 || true
|
||||
export LANG="\${LANG:-C.UTF-8}"
|
||||
export LC_ALL="\${LANG:-C.UTF-8}"
|
||||
export TZ="\${TZ:-\${TIMEZONE:-America/New_York}}"
|
||||
EOF
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Create the backup dir
|
||||
if [ -n "$BACKUP_DIR" ]; then
|
||||
if [ ! -d "$BACKUP_DIR" ]; then
|
||||
mkdir -p "$BACKUP_DIR" 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ -f "$ENTRYPOINT_INIT_FILE" ]; then
|
||||
ENTRYPOINT_MESSAGE="no" ENTRYPOINT_FIRST_RUN="no"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ "$ENTRYPOINT_FIRST_RUN" != "no" ]; then
|
||||
if [ "$CONFIG_DIR_INITIALIZED" = "no" ] || [ "$DATA_DIR_INITIALIZED" = "no" ]; then
|
||||
if [ "$ENTRYPOINT_MESSAGE" = "yes" ]; then
|
||||
echo "Executing entrypoint script for ollama"
|
||||
fi
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set reusable variables
|
||||
if [ -w "/etc" ] && [ ! -f "/etc/hosts" ]; then
|
||||
UPDATE_FILE_HOSTS="yes"
|
||||
touch "/etc/hosts"
|
||||
elif [ -w "/etc/hosts" ]; then
|
||||
UPDATE_FILE_HOSTS="yes"
|
||||
touch "/etc/hosts"
|
||||
fi
|
||||
if [ -w "/etc" ] && [ ! -f "/etc/timezone" ]; then
|
||||
UPDATE_FILE_TZ="yes"
|
||||
touch "/etc/timezone"
|
||||
elif [ -w "/etc/timezone" ]; then
|
||||
UPDATE_FILE_TZ="yes"
|
||||
touch "/etc/timezone"
|
||||
fi
|
||||
if [ -w "/etc" ] && [ ! -f "/etc/resolv.conf" ]; then
|
||||
UPDATE_FILE_RESOLV="yes"
|
||||
touch "/etc/resolv.conf"
|
||||
elif [ -w "/etc/resolv.conf" ]; then
|
||||
UPDATE_FILE_RESOLV="yes"
|
||||
touch "/etc/resolv.conf"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set timezone
|
||||
if [ -n "$TZ" ] && [ "$UPDATE_FILE_TZ" = "yes" ]; then
|
||||
echo "$TZ" >"/etc/timezone" 2>/dev/null || true
|
||||
fi
|
||||
if [ -f "/usr/share/zoneinfo/$TZ" ] && [ "$UPDATE_FILE_TZ" = "yes" ]; then
|
||||
ln -sf "/usr/share/zoneinfo/$TZ" "/etc/localtime" 2>/dev/null || true
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# if ipv6 add it to /etc/hosts
|
||||
if [ "$UPDATE_FILE_HOSTS" = "yes" ]; then
|
||||
echo "# known hostname mappings" >"/etc/hosts" 2>/dev/null || true
|
||||
if [ -n "$(ip a 2>/dev/null | grep 'inet6.*::' || ifconfig 2>/dev/null | grep 'inet6.*::')" ]; then
|
||||
__printf_space "40" "::1" "localhost" >>"/etc/hosts" 2>/dev/null || true
|
||||
__printf_space "40" "127.0.0.1" "localhost" >>"/etc/hosts" 2>/dev/null || true
|
||||
else
|
||||
__printf_space "40" "127.0.0.1" "localhost" >>"/etc/hosts" 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# add .internal domain
|
||||
if [ "$UPDATE_FILE_HOSTS" = "yes" ] && [ -n "$HOSTNAME" ]; then
|
||||
if ! __grep_test " $HOSTNAME" "/etc/hosts"; then
|
||||
__printf_space "40" "${CONTAINER_IP4_ADDRESS:-127.0.0.1}" "$HOSTNAME" >>"/etc/hosts" 2>/dev/null || true
|
||||
fi
|
||||
if ! __grep_test " ${HOSTNAME%%.*}.internal" "/etc/hosts"; then
|
||||
__printf_space "40" "${CONTAINER_IP4_ADDRESS:-127.0.0.1}" "${HOSTNAME%%.*}.internal" >>"/etc/hosts" 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# add domainname
|
||||
if [ "$UPDATE_FILE_HOSTS" = "yes" ] && [ "$DOMAINNAME" != "internal" ] && [ -n "$DOMAINNAME" ] && [ "$HOSTNAME.$DOMAINNAME" != "$DOMAINNAME" ]; then
|
||||
if ! __grep_test " ${HOSTNAME%%.*}.$DOMAINNAME" "/etc/hosts"; then
|
||||
__printf_space "40" "${CONTAINER_IP4_ADDRESS:-127.0.0.1}" "${HOSTNAME%%.*}.$DOMAINNAME" >>"/etc/hosts" 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set containers hostname
|
||||
if [ -n "$HOSTNAME" ] && [ "$UPDATE_FILE_HOSTS" = "yes" ]; then
|
||||
echo "$HOSTNAME" >"/etc/hostname" 2>/dev/null || true
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ -f "/etc/hostname" ]; then
|
||||
if [ -n "$(type -P hostname 2>/dev/null)" ]; then
|
||||
hostname -F "/etc/hostname" 2>/dev/null || true
|
||||
else
|
||||
HOSTNAME="$(<"/etc/hostname")" 2>/dev/null || true
|
||||
fi
|
||||
export HOSTNAME
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import hosts file into container
|
||||
if [ -f "/usr/local/etc/hosts" ] && [ "$UPDATE_FILE_HOSTS" = "yes" ]; then
|
||||
cat "/usr/local/etc/hosts" 2>/dev/null | grep -vF "$HOSTNAME" >>"/etc/hosts" 2>/dev/null || true
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import resolv.conf file into container
|
||||
if [ "$CUSTOM_DNS" != "yes" ] && [ -f "/usr/local/etc/resolv.conf" ] && [ "$UPDATE_FILE_RESOLV" = "yes" ]; then
|
||||
cat "/usr/local/etc/resolv.conf" >"/etc/resolv.conf" 2>/dev/null || true
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ -n "$HOME" ] && [ -d "/usr/local/etc/skel" ]; then
|
||||
if [ -d "$HOME" ]; then
|
||||
cp -Rf "/usr/local/etc/skel/." "$HOME/" 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Delete any .gitkeep files
|
||||
if [ -d "/data" ]; then
|
||||
rm -Rf "/data/.gitkeep" "/data"/*/*.gitkeep 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "/config" ]; then
|
||||
rm -Rf "/config/.gitkeep" "/config"/*/*.gitkeep 2>/dev/null || true
|
||||
fi
|
||||
if [ -f "/usr/local/bin/.gitkeep" ]; then
|
||||
rm -Rf "/usr/local/bin/.gitkeep" 2>/dev/null || true
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Only run initialization on first run or when directories are not initialized
|
||||
if [ "$ENTRYPOINT_FIRST_RUN" != "no" ] || [ "$CONFIG_DIR_INITIALIZED" = "no" ] || [ "$DATA_DIR_INITIALIZED" = "no" ]; then
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Setup bin directory - /config/bin > /usr/local/bin
|
||||
__initialize_custom_bin_dir
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Copy default system configs - /usr/local/share/template-files/defaults > /config/
|
||||
if [ "$CONFIG_DIR_INITIALIZED" = "no" ]; then
|
||||
__initialize_default_templates
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Copy custom config files - /usr/local/share/template-files/config > /config/
|
||||
if [ "$CONFIG_DIR_INITIALIZED" = "no" ]; then
|
||||
__initialize_config_dir
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Copy custom data files - /usr/local/share/template-files/data > /data/
|
||||
if [ "$DATA_DIR_INITIALIZED" = "no" ]; then
|
||||
__initialize_data_dir
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Initialize SSL certificates
|
||||
__initialize_ssl_certs
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Mark directories as initialized (only write if not already initialized)
|
||||
if [ -d "/config" ] && [ "$CONFIG_DIR_INITIALIZED" = "no" ]; then
|
||||
echo "Initialized on: $INIT_DATE" >"$ENTRYPOINT_CONFIG_INIT_FILE" 2>/dev/null || true
|
||||
CONFIG_DIR_INITIALIZED="yes"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ -d "/data" ] && [ "$DATA_DIR_INITIALIZED" = "no" ]; then
|
||||
echo "Initialized on: $INIT_DATE" >"$ENTRYPOINT_DATA_INIT_FILE" 2>/dev/null || true
|
||||
DATA_DIR_INITIALIZED="yes"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ -d "/config" ] && [ ! -f "$ENTRYPOINT_INIT_FILE" ]; then
|
||||
echo "Initialized on: $INIT_DATE" >"$ENTRYPOINT_INIT_FILE" 2>/dev/null || true
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# setup the smtp server
|
||||
__setup_mta
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
ENTRYPOINT_FIRST_RUN="no"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# if no pid assume container restart - clean stale files on restart
|
||||
if [ -f "$ENTRYPOINT_PID_FILE" ]; then
|
||||
START_SERVICES="no"
|
||||
touch "$ENTRYPOINT_PID_FILE"
|
||||
else
|
||||
START_SERVICES=yes
|
||||
# Clean any stale PID files on first run
|
||||
rm -f /run/__start_init_scripts.pid /run/init.d/*.pid /run/*.pid 2>/dev/null || true
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ "$ENTRYPOINT_MESSAGE" = "yes" ]; then
|
||||
__printf_space "40" "The containers ip address is:" "$CONTAINER_IP4_ADDRESS"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Show configured listing processes
|
||||
if [ "$ENTRYPOINT_MESSAGE" = "yes" ] && [ -n "$ENV_PORTS" ]; then
|
||||
show_port=""
|
||||
for port in $ENV_PORTS; do
|
||||
if [ -n "$port" ]; then
|
||||
show_port+="$(printf '%s ' "${port// /}") "
|
||||
fi
|
||||
done
|
||||
__printf_space "40" "The following ports are open:" "$show_port"
|
||||
unset port show_port
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# execute init script
|
||||
if [ -f "/tmp/init" ]; then sh "/tmp/init"; fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# create user if needed
|
||||
__create_service_user "$SERVICE_USER" "$SERVICE_GROUP" "${WORK_DIR:-/home/$SERVICE_USER}" "${SERVICE_UID:-}" "${SERVICE_GID:-}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Modify user if needed
|
||||
__set_user_group_id $SERVICE_USER ${SERVICE_UID:-} ${SERVICE_GID:-}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Show message
|
||||
__run_message
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Just start services
|
||||
START_SERVICES="${START_SERVICES:-SYSTEM_INIT}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Determine if we should start services based on command
|
||||
# Only skip service start for the 'init' command
|
||||
SKIP_SERVICE_START="no"
|
||||
[ "$1" = "init" ] && SKIP_SERVICE_START="yes" && CONTAINER_INIT="yes"
|
||||
[ "$2" = "init" ] && SKIP_SERVICE_START="yes" && CONTAINER_INIT="yes"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Start all services if no pidfile and not skipping
|
||||
if [ "$START_SERVICES" = "yes" ] || [ -z "$1" ]; then
|
||||
if [ "$SKIP_SERVICE_START" = "no" ]; then
|
||||
[ "$1" = "start" ] && shift 1
|
||||
[ "$1" = "all" ] && shift 1
|
||||
rm -Rf "/run"/*/*pid 2>/dev/null || true
|
||||
echo "$$" >"$ENTRYPOINT_PID_FILE"
|
||||
__start_init_scripts "/usr/local/etc/docker/init.d"
|
||||
CONTAINER_INIT="${CONTAINER_INIT:-no}"
|
||||
fi
|
||||
START_SERVICES="no"
|
||||
fi
|
||||
export START_SERVICES CONTAINER_INIT ENTRYPOINT_PID_FILE
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Begin options
|
||||
case "$1" in
|
||||
init)
|
||||
shift 1
|
||||
echo "Container has been Initialized"
|
||||
exit 0
|
||||
;;
|
||||
tail)
|
||||
shift 1
|
||||
case "$1" in
|
||||
null)
|
||||
shift $#
|
||||
tail -F "/dev/null"
|
||||
;;
|
||||
app)
|
||||
shift $#
|
||||
tail -F /data/logs/*/*.log
|
||||
;;
|
||||
-*)
|
||||
tail "$@"
|
||||
;;
|
||||
*)
|
||||
tail -F "${@:-/dev/null}"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
logs)
|
||||
shift 1
|
||||
case "$1" in
|
||||
follow)
|
||||
tail -Fq /data/logs/*/*
|
||||
;;
|
||||
clean)
|
||||
log_files="$(find "/data/logs" -type f)"
|
||||
for log in "${log_files[@]}"; do
|
||||
echo "clearing $log"
|
||||
printf '' >$log
|
||||
done
|
||||
;;
|
||||
*)
|
||||
echo "Usage: logs [follow,clean]"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
cron)
|
||||
shift 1
|
||||
__cron "$@" &
|
||||
echo "cron script is running with pid: $!"
|
||||
exit
|
||||
;;
|
||||
# backup data and config dirs
|
||||
backup)
|
||||
shift 1
|
||||
__backup $BACKUP_MAX_DAYS $1
|
||||
exit $?
|
||||
;;
|
||||
# Docker healthcheck
|
||||
healthcheck)
|
||||
shift 1
|
||||
case "$1" in
|
||||
init | test)
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
arguments="$*"
|
||||
healthStatus=0
|
||||
healthEnabled="${HEALTH_ENABLED:-}"
|
||||
healthPorts="${WEB_SERVER_PORTS:-}"
|
||||
healthEndPoints="${HEALTH_ENDPOINTS:-}"
|
||||
SERVICES_LIST="${arguments:-$SERVICES_LIST}"
|
||||
services="$(echo "${SERVICES_LIST//,/ }")"
|
||||
healthMessage="Everything seems to be running"
|
||||
[ "$healthEnabled" = "yes" ] || exit 0
|
||||
if [ -d "/run/healthcheck" ] && [ "$(ls -A "/run/healthcheck" | wc -l)" -ne 0 ]; then
|
||||
for service in /run/healthcheck/*; do
|
||||
name=$(basename -- $service)
|
||||
services+="$name "
|
||||
done
|
||||
fi
|
||||
services="$(echo "$services" | tr ' ' '\n' | sort -u | grep -v '^$')"
|
||||
for proc in $services; do
|
||||
if [ -n "$proc" ]; then
|
||||
if ! __pgrep "$proc"; then
|
||||
echo "$proc is not running" >&2
|
||||
healthStatus=$((healthStatus + 1))
|
||||
fi
|
||||
fi
|
||||
done
|
||||
for port in $ports; do
|
||||
if [ -n "$(type -P netstat)" ] && [ -n "$port" ]; then
|
||||
if ! netstat -taupln | grep -q ":$port "; then
|
||||
echo "$port isn't open" >&2
|
||||
healthStatus=$((healthStatus + 1))
|
||||
fi
|
||||
fi
|
||||
done
|
||||
for endpoint in $healthEndPoints; do
|
||||
if [ -n "$endpoint" ]; then
|
||||
if ! __curl "$endpoint"; then
|
||||
echo "Can not connect to $endpoint" >&2
|
||||
healthStatus=$((healthStatus + 1))
|
||||
fi
|
||||
fi
|
||||
done
|
||||
[ "$healthStatus" -eq 0 ] || healthMessage="Errors reported see: docker logs --follow $CONTAINER_NAME"
|
||||
[ -n "$healthMessage" ] && echo "$healthMessage"
|
||||
exit $healthStatus
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
# show open ports
|
||||
ports)
|
||||
shift 1
|
||||
ports="$(__netstat -taupln | awk -F ' ' '{print $4}' | awk -F ':' '{print $2}' | sort --unique --version-sort | grep -v '^$' | grep '^' || echo '')"
|
||||
[ -n "$ports" ] && printf '%s\n%s\n' "The following are servers:" "$ports" | tr '\n' ' '
|
||||
exit $?
|
||||
;;
|
||||
# show running processes
|
||||
procs)
|
||||
shift 1
|
||||
ps="$(__ps axco command | grep -vE 'COMMAND|grep|ps' | sort -u || grep '^' || echo '')"
|
||||
[ -n "$ps" ] && printf '%s\n%s\n' "Found the following processes" "$ps" | tr '\n' ' '
|
||||
exit $?
|
||||
;;
|
||||
# setup ssl
|
||||
ssl)
|
||||
shift 1
|
||||
__create_ssl_cert
|
||||
exit $?
|
||||
;;
|
||||
# manage ssl certificate
|
||||
certbot)
|
||||
shift 1
|
||||
CERT_BOT_ENABLED="yes"
|
||||
if [ "$1" = "create" ]; then
|
||||
shift 1
|
||||
__certbot "create"
|
||||
elif [ "$1" = "renew" ]; then
|
||||
shift 1
|
||||
__certbot "renew certonly --force-renew"
|
||||
else
|
||||
__exec_command "certbot" "$@"
|
||||
fi
|
||||
exit $?
|
||||
;;
|
||||
# Launch shell
|
||||
*/bin/sh | */bin/bash | bash | sh | shell)
|
||||
shift 1
|
||||
__exec_command "${@:-/bin/bash -l}"
|
||||
exit $?
|
||||
;;
|
||||
# execute commands
|
||||
exec)
|
||||
shift 1
|
||||
__exec_command "${@:-echo "No commands given"}"
|
||||
exit $?
|
||||
;;
|
||||
# show/start init scripts
|
||||
start)
|
||||
shift 1
|
||||
export PATH="/usr/local/etc/docker/init.d:$PATH"
|
||||
if [ $# -eq 0 ]; then
|
||||
scripts="$(ls -A "/usr/local/etc/docker/init.d")"
|
||||
if [ -n "$scripts" ]; then
|
||||
echo "$scripts"
|
||||
else
|
||||
echo "No scripts found in: /usr/local/etc/docker/init.d"
|
||||
fi
|
||||
exit
|
||||
elif [ "$1" = "all" ]; then
|
||||
shift $#
|
||||
if [ "$START_SERVICES" = "yes" ]; then
|
||||
echo "$$" >"$ENTRYPOINT_PID_FILE"
|
||||
__start_init_scripts "/usr/local/etc/docker/init.d"
|
||||
__no_exit
|
||||
elif [ -f "/usr/local/etc/docker/init.d/$1" ]; then
|
||||
eval "/usr/local/etc/docker/init.d/$1" &
|
||||
__no_exit
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
# Execute primary command
|
||||
*)
|
||||
if [ $# -eq 0 ]; then
|
||||
if [ ! -f "$ENTRYPOINT_PID_FILE" ]; then
|
||||
echo "$$" >"$ENTRYPOINT_PID_FILE"
|
||||
if [ "$START_SERVICES" = "no" ] && [ "$CONTAINER_INIT" = "yes" ]; then
|
||||
:
|
||||
else
|
||||
__start_init_scripts "/usr/local/etc/docker/init.d"
|
||||
fi
|
||||
fi
|
||||
__no_exit
|
||||
else
|
||||
__exec_command "$@"
|
||||
fi
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# end of entrypoint
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
# ex: ts=2 sw=2 et filetype=sh
|
||||
Executable
+142
@@ -0,0 +1,142 @@
|
||||
#!/usr/bin/env sh
|
||||
# shellcheck shell=sh
|
||||
# shellcheck disable=SC2016
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
USER_UID="$(id -u)"
|
||||
USER_GID="$(id -g)"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ -x "$(command -v apt 2>/dev/null)" ]; then
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
pkmgr_cmd="apt"
|
||||
pkmgr_clean_cmd="$pkmgr_cmd clean"
|
||||
pkmgr_mkcache_cmd="$pkmgr_cmd update"
|
||||
pkmgr_update_cmd="$pkmgr_cmd upgrade -yy"
|
||||
pkmgr_install_cmd="$pkmgr_cmd install -yy $PKMGR_OPTS"
|
||||
pkmgr_install_post="$pkmgr_cmd --fix-broken install"
|
||||
elif [ -x "$(command -v apt-get 2>/dev/null)" ]; then
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
pkmgr_cmd="apt-get"
|
||||
pkmgr_clean_cmd="$pkmgr_cmd clean"
|
||||
pkmgr_mkcache_cmd="$pkmgr_cmd update"
|
||||
pkmgr_update_cmd="$pkmgr_cmd upgrade -yy"
|
||||
pkmgr_install_cmd="$pkmgr_cmd install -yy $PKMGR_OPTS"
|
||||
pkmgr_install_post="$pkmgr_cmd --fix-broken install"
|
||||
elif [ -x "$(command -v dnf 2>/dev/null)" ]; then
|
||||
pkmgr_cmd="dnf"
|
||||
pkmgr_clean_cmd="$pkmgr_cmd clean all"
|
||||
pkmgr_mkcache_cmd="$pkmgr_cmd makecache"
|
||||
pkmgr_update_cmd="$pkmgr_cmd update -y --skip-broken $PKMGR_OPTS"
|
||||
pkmgr_install_cmd="$pkmgr_cmd install -y --skip-broken $PKMGR_OPTS"
|
||||
elif [ -x "$(command -v yum 2>/dev/null)" ]; then
|
||||
pkmgr_cmd="yum"
|
||||
pkmgr_clean_cmd="$pkmgr_cmd clean all"
|
||||
pkmgr_mkcache_cmd="$pkmgr_cmd makecache"
|
||||
pkmgr_update_cmd="$pkmgr_cmd update -y --skip-broken $PKMGR_OPTS"
|
||||
pkmgr_install_cmd="$pkmgr_cmd install -y --skip-broken $PKMGR_OPTS"
|
||||
elif [ -n "$(command -v pacman 2>/dev/null)" ]; then
|
||||
pkmgr_cmd="pacman"
|
||||
pkmgr_mkcache_cmd="true"
|
||||
pkmgr_clean_cmd="$pkmgr_cmd -Scc --noconfirm"
|
||||
pkmgr_update_cmd="$pkmgr_cmd -Syyu --noconfirm $PKMGR_OPTS"
|
||||
pkmgr_install_cmd="$pkmgr_cmd -Syy --noconfirm $PKMGR_OPTS"
|
||||
elif [ -x "$(command -v apk 2>/dev/null)" ]; then
|
||||
pkmgr_cmd="apk"
|
||||
pkmgr_mkcache_cmd="true"
|
||||
pkmgr_clean_cmd="$pkmgr_cmd cache clean"
|
||||
pkmgr_update_cmd="$pkmgr_cmd -U upgrade --no-cache $PKMGR_OPTS"
|
||||
pkmgr_install_cmd="$pkmgr_cmd add --no-cache $PKMGR_OPTS"
|
||||
elif [ -x "$(command -v zypper 2>/dev/null)" ]; then
|
||||
pkmgr_cmd="zypper"
|
||||
pkmgr_mkcache_cmd="true"
|
||||
pkmgr_clean_cmd="$pkmgr_cmd clean --all"
|
||||
pkmgr_update_cmd="$pkmgr_cmd update -y $PKMGR_OPTS"
|
||||
pkmgr_install_cmd="$pkmgr_cmd install -y $PKMGR_OPTS"
|
||||
else
|
||||
pkmgr_cmd="true"
|
||||
pkmgr_mkcache_cmd="$pkmgr_cmd"
|
||||
pkmgr_clean_cmd="$pkmgr_cmd"
|
||||
pkmgr_update_cmd="$pkmgr_cmd"
|
||||
pkmgr_install_cmd="$pkmgr_cmd"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ -f "/config/pkmgr/settings.conf" ]; then
|
||||
. "/config/pkmgr/settings.conf"
|
||||
elif [ -f "/etc/pkmgr/settings.conf" ]; then
|
||||
. "/etc/pkmgr/settings.conf"
|
||||
else
|
||||
mkdir -p "/config/pkmgr"
|
||||
cat <<EEOF >"/config/pkmgr/settings.conf"
|
||||
pkmgr_cmd="$pkmgr_cmd"
|
||||
pkmgr_clean_cmd="$pkmgr_clean_cmd"
|
||||
pkmgr_update_cmd="$pkmgr_update_cmd"
|
||||
pkmgr_install_cmd="$pkmgr_install_cmd"
|
||||
pkmgr_mkcache_cmd="$pkmgr_mkcache_cmd"
|
||||
EEOF
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
[ -n "$pkmgr_cmd" ] || { echo "Can not determine the package manager" && exit 1; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
case "$1" in
|
||||
pip)
|
||||
shift 1
|
||||
pip_bin="$(command -v python3 2>/dev/null || command -v python2 2>/dev/null || command -v python 2>/dev/null || echo "")"
|
||||
py_version="$($pip_bin --version | sed 's|[pP]ython ||g' | awk -F '.' '{print $1$2}' | grep '[0-9]' || echo "0")"
|
||||
[ "$py_version" -gt "310" ] && pip_opts="--break-system-packages " || pip_opts=""
|
||||
case "$1" in
|
||||
install)
|
||||
shift 1
|
||||
pkg_list="$*"
|
||||
for pkg in $pkg_list; do
|
||||
$pip_bin -m pip $pip_opts "$pkg"
|
||||
done
|
||||
;;
|
||||
*)
|
||||
for pkg in "$@"; do
|
||||
$pip_bin -m pip "$pkg"
|
||||
done
|
||||
;;
|
||||
esac
|
||||
exit
|
||||
;;
|
||||
install)
|
||||
shift 1
|
||||
[ -n "$1" ] || exit 0
|
||||
[ "$USER_UID" -eq 0 ] || [ "$USER" = "root" ] || pkmgr_install_cmd="sudo $pkmgr_install_cmd"
|
||||
if [ -f "$1" ]; then
|
||||
install_list="$(cat "$1")"
|
||||
else
|
||||
install_list="$*"
|
||||
fi
|
||||
for pkg in $install_list;do
|
||||
echo "installing packages command: $pkmgr_install_cmd $pkg"
|
||||
$pkmgr_install_cmd $pkg
|
||||
if [ -n "$pkmgr_install_post" ]; then eval $pkmgr_install_post; fi
|
||||
done
|
||||
exit
|
||||
;;
|
||||
update | upgrade)
|
||||
shift $#
|
||||
[ "$USER_UID" -eq 0 ] || [ "$USER" = "root" ] || pkmgr_update_cmd="sudo $pkmgr_install_cmd"
|
||||
echo "Updating packages command: $pkmgr_update_cmd"
|
||||
$pkmgr_mkcache_cmd
|
||||
$pkmgr_update_cmd
|
||||
exit $?
|
||||
;;
|
||||
clean)
|
||||
shift $#
|
||||
[ -n "$1" ] || exit 0
|
||||
[ "$USER_UID" -eq 0 ] || [ "$USER" = "root" ] || pkmgr_clean_cmd="sudo $pkmgr_clean_cmd"
|
||||
echo "Cleaning package cache: $pkmgr_clean_cmd"
|
||||
$pkmgr_clean_cmd
|
||||
exit $?
|
||||
;;
|
||||
*)
|
||||
[ -n "$1" ] || exit 0
|
||||
[ "$USER_UID" -eq 0 ] || [ "$USER" = "root" ] || pkmgr_cmd="sudo $pkmgr_cmd"
|
||||
echo "executing packages command: $pkmgr_cmd $*"
|
||||
$pkmgr_cmd "$@"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# end
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+168
@@ -0,0 +1,168 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202601290438-git
|
||||
# @@Author : Jason Hempstead
|
||||
# @@Contact : jason@casjaysdev.pro
|
||||
# @@License : WTFPL
|
||||
# @@ReadME : 02-webui.sh --help
|
||||
# @@Copyright : Copyright: (c) 2026 Jason Hempstead, Casjays Developments
|
||||
# @@Created : Wednesday, Jan 29, 2026 04:38 UTC
|
||||
# @@File : 02-webui.sh
|
||||
# @@Description : Start Open WebUI for Ollama
|
||||
# @@Changelog : New script
|
||||
# @@TODO : Better documentation
|
||||
# @@Other :
|
||||
# @@Resource :
|
||||
# @@Terminal App : no
|
||||
# @@sudo/root : no
|
||||
# @@Template : other/start-service
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
set -e
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# run trap command on exit
|
||||
trap '__trap_err_handler' ERR
|
||||
trap 'retVal=$?;if [ "$SERVICE_IS_RUNNING" != "yes" ] && [ -f "$SERVICE_PID_FILE" ]; then rm -Rf "$SERVICE_PID_FILE"; fi;exit $retVal' SIGINT SIGTERM SIGPWR
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# ERR trap handler
|
||||
__trap_err_handler() {
|
||||
local retVal=$?
|
||||
local command="$BASH_COMMAND"
|
||||
[ $retVal -eq 130 ] || [ $retVal -eq 141 ] && return $retVal
|
||||
if [[ "$command" =~ (mkdir|touch|chmod|chown|chgrp|ln|cp|mv|rm|echo|printf|cat|tee|sed|awk|grep|find|sort|uniq|adduser|addgroup|usermod|groupmod|id|getent) ]]; then
|
||||
return 0
|
||||
fi
|
||||
if [[ "$command" =~ (test|\[|\[\[|kill -0|pgrep|pidof|ps) ]]; then
|
||||
return 0
|
||||
fi
|
||||
if [ "$SERVICE_IS_RUNNING" != "yes" ]; then
|
||||
echo "❌ Critical error (exit $retVal): $command" >&2
|
||||
kill -TERM 1 2>/dev/null || exit $retVal
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
SCRIPT_FILE="$0"
|
||||
SERVICE_NAME="webui"
|
||||
SCRIPT_NAME="$(basename -- "$SCRIPT_FILE" 2>/dev/null)"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
__script_exit() {
|
||||
local exit_code="${1:-0}"
|
||||
if [ "${BASH_SOURCE[0]}" != "${0}" ]; then
|
||||
return "$exit_code"
|
||||
else
|
||||
exit "$exit_code"
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Exit if service is disabled
|
||||
if [ -n "$WEBUI_ENABLED" ]; then
|
||||
if [ "$WEBUI_ENABLED" != "yes" ]; then
|
||||
export SERVICE_DISABLED="$SERVICE_NAME"
|
||||
__script_exit 0
|
||||
fi
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ "$DEBUGGER" = "on" ] || [ -f "/config/.debug" ]; then
|
||||
echo "Enabling debugging"
|
||||
set -xo pipefail
|
||||
export DEBUGGER="on"
|
||||
else
|
||||
set -o pipefail
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import the functions file
|
||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
|
||||
. "/usr/local/etc/docker/functions/entrypoint.sh"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import variables
|
||||
for set_env in "/root/env.sh" "/usr/local/etc/docker/env"/*.sh "/config/env"/*.sh; do
|
||||
if [ -f "$set_env" ]; then
|
||||
. "$set_env"
|
||||
fi
|
||||
done
|
||||
unset set_env
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set service state
|
||||
SERVICE_IS_RUNNING="no"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set service paths
|
||||
DATA_DIR="/data/webui"
|
||||
CONF_DIR="/config/webui"
|
||||
LOG_DIR="/data/logs/webui"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
SERVICE_PORT="${WEBUI_PORT:-80}"
|
||||
RUNAS_USER="root"
|
||||
SERVICE_UID="0"
|
||||
SERVICE_GID="0"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Execute command - Use open-webui command directly
|
||||
EXEC_CMD_BIN='open-webui'
|
||||
EXEC_CMD_ARGS="serve --host ${WEBUI_HOST:-0.0.0.0} --port ${WEBUI_PORT:-80}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Environment variables for Open WebUI
|
||||
# If MODELS env var is set but DEFAULT_MODELS is not, use MODELS as DEFAULT_MODELS
|
||||
# Derive OLLAMA_BASE_URL from OLLAMA_HOST if not explicitly set
|
||||
OLLAMA_PORT_NUM="${OLLAMA_PORT:-11434}"
|
||||
OLLAMA_BASE_URL_DEFAULT="http://127.0.0.1:${OLLAMA_PORT_NUM}"
|
||||
CMD_ENV="OLLAMA_BASE_URL=\"${OLLAMA_BASE_URL:-${OLLAMA_BASE_URL_DEFAULT}}\",WEBUI_SECRET_KEY=\"${WEBUI_SECRET_KEY:-$(openssl rand -hex 32 2>/dev/null || echo 'changeme')}\",DATA_DIR=\"${DATA_DIR:-/data/webui}\",PORT=\"${WEBUI_PORT:-80}\",HOST=\"${WEBUI_HOST:-0.0.0.0}\",WEBUI_URL=\"${WEBUI_URL:-http://localhost:${WEBUI_PORT:-80}}\",ENABLE_SIGNUP=\"${ENABLE_SIGNUP:-true}\",DEFAULT_MODELS=\"${DEFAULT_MODELS:-${MODELS}}\",DEFAULT_USER_ROLE=\"${DEFAULT_USER_ROLE:-pending}\",ENABLE_ADMIN_EXPORT=\"${ENABLE_ADMIN_EXPORT:-true}\",WEBUI_NAME=\"${WEBUI_NAME:-Open WebUI}\",ENABLE_OAUTH_SIGNUP=\"${ENABLE_OAUTH_SIGNUP:-}\",OAUTH_MERGE_ACCOUNTS_BY_EMAIL=\"${OAUTH_MERGE_ACCOUNTS_BY_EMAIL:-}\""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
IS_WEB_SERVER="yes"
|
||||
IS_DATABASE_SERVICE="no"
|
||||
USES_DATABASE_SERVICE="no"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
APPLICATION_DIRS="$CONF_DIR $DATA_DIR $LOG_DIR"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Wait for Ollama to be ready
|
||||
OLLAMA_PORT_NUM="${OLLAMA_PORT:-11434}"
|
||||
echo "Waiting for Ollama to be ready on port ${OLLAMA_PORT_NUM}..."
|
||||
timeout=60
|
||||
counter=0
|
||||
while [ $counter -lt $timeout ]; do
|
||||
if curl -s http://127.0.0.1:${OLLAMA_PORT_NUM}/api/version >/dev/null 2>&1; then
|
||||
echo "✓ Ollama is ready"
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
counter=$((counter + 1))
|
||||
done
|
||||
|
||||
if [ $counter -eq $timeout ]; then
|
||||
echo "⚠ Warning: Ollama not responding after ${timeout}s, starting Web UI anyway"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Create required directories
|
||||
mkdir -p "$DATA_DIR" "$CONF_DIR" "$LOG_DIR" 2>/dev/null || true
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Check if command exists
|
||||
if [ ! -x "$(command -v $EXEC_CMD_BIN 2>/dev/null)" ]; then
|
||||
echo "❌ $EXEC_CMD_BIN is not installed or not executable"
|
||||
__script_exit 1
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Start service
|
||||
echo "Starting Open WebUI on port $SERVICE_PORT..."
|
||||
|
||||
# Export environment variables
|
||||
export OLLAMA_BASE_URL="http://127.0.0.1:11434"
|
||||
export WEBUI_SECRET_KEY="${WEBUI_SECRET_KEY:-$(openssl rand -hex 32 2>/dev/null || echo 'changeme')}"
|
||||
export DATA_DIR="/data/webui"
|
||||
export PORT="80"
|
||||
|
||||
# Execute the command
|
||||
exec $EXEC_CMD_BIN $EXEC_CMD_ARGS 2>&1 | tee -a "$LOG_DIR/webui.log" &
|
||||
SERVICE_PID=$!
|
||||
|
||||
# Store PID
|
||||
echo "$SERVICE_PID" > "/run/init.d/$SERVICE_NAME.pid"
|
||||
SERVICE_IS_RUNNING="yes"
|
||||
|
||||
echo "✓ Open WebUI started with PID $SERVICE_PID"
|
||||
echo "✓ Web UI available at http://localhost:$SERVICE_PORT"
|
||||
|
||||
__script_exit 0
|
||||
@@ -0,0 +1,135 @@
|
||||
#!/usr/bin/env bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set bash options
|
||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import the functions file
|
||||
[ -f "/usr/local/etc/docker/functions/entrypoint.sh" ] && . "/usr/local/etc/docker/functions/entrypoint.sh"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# GLOBAL enviroment variables
|
||||
#USER="${USER:-root}"
|
||||
#LANG="${LANG:-C.UTF-8}"
|
||||
#TZ="${TZ:-America/New_York}"
|
||||
#SERVICE_USER="${SERVICE_USER:-root}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# directory settings
|
||||
#BACKUP_DIR="${BACKUP_DIR:-/data/backups}"
|
||||
#WWW_ROOT_DIR="${WWW_ROOT_DIR:-/usr/local/share/httpd/default}"
|
||||
#LOCAL_BIN_DIR="${LOCAL_BIN_DIR:-/usr/local/bin}"
|
||||
#DATABASE_BASE_DIR="${DATABASE_BASE_DIR:-/data/db}"
|
||||
#DEFAULT_DATA_DIR="${DEFAULT_DATA_DIR:-/usr/local/share/template-files/data}"
|
||||
#DEFAULT_CONF_DIR="${DEFAULT_CONF_DIR:-/usr/local/share/template-files/config}"
|
||||
#DEFAULT_TEMPLATE_DIR="${DEFAULT_TEMPLATE_DIR:-/usr/local/share/template-files/defaults}"
|
||||
#DBTYPE="sqlite"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# healthcheck
|
||||
#HEALTH_ENABLED="${HEALTH_ENABLED:-$ENV_HEALTH_ENABLED}"
|
||||
#HEALTH_URL="${HEALTH_URL:-}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# php settings
|
||||
#PHP_VERSION="${PHP_VERSION//php/}"
|
||||
#PHP_INI_DIR="${PHP_INI_DIR:-$(__find_php_ini)}"
|
||||
#PHP_BIN_DIR="${PHP_BIN_DIR:-$(__find_php_bin)}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# services/ports
|
||||
#ENV_PORTS="${ENV_PORTS:-}"
|
||||
#SERVICE_PORT="${SERVICE_PORT:-$PORT}"
|
||||
#WEB_SERVER_PORTS="${WEB_SERVER_PORTS:-$ENV_WEB_SERVER_PORTS}"
|
||||
#SERVICES_LIST="${PROCS_LIST:-$SERVICES_LIST} "
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# networing info
|
||||
DOMAINNAME="${DOMAINNAME:-}"
|
||||
HOSTNAME="${HOSTNAME:-casjaysdev-GEN_SCRIPT_REPLACE_APPNAME}"
|
||||
FULL_DOMAIN_NAME="${FULL_DOMAIN_NAME:-${DOMAINNAME:-$HOSTNAME}}"
|
||||
SERVER_ADMIN="${SERVER_ADMIN:-root@${EMAIL_DOMAIN:-${DOMAINNAME:-$FULL_DOMAIN_NAME}}}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
EMAIL_RELAY="${EMAIL_RELAY:-}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# get ip addresses
|
||||
CONTAINER_IP4_ADDRESS="${CONTAINER_IP4_ADDRESS:-$(__get_ip4)}"
|
||||
CONTAINER_IP6_ADDRESS="${CONTAINER_IP6_ADDRESS:-$(__get_ip6)}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# cerbot
|
||||
#CERT_BOT_MAIL="${CERT_BOT_MAIL:-}"
|
||||
#CERTBOT_DOMAINS="${CERTBOT_DOMAINS:-}"
|
||||
#CERT_BOT_ENABLED="${CERT_BOT_ENABLED:-false}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# ssl server settings
|
||||
#SSL_ENABLED="${SSL_ENABLED:-false}"
|
||||
#SSL_DIR="${SSL_DIR:-/config/ssl}"
|
||||
#SSL_CA="${SSL_CA:-$SSL_DIR/ca.crt}"
|
||||
#SSL_KEY="${SSL_KEY:-$SSL_DIR/server.key}"
|
||||
#SSL_CERT="${SSL_CERT:-$SSL_DIR/server.crt}"
|
||||
#SSL_CONTAINER_DIR="${SSL_CONTAINER_DIR:-/etc/ssl/CA}"
|
||||
#COUNTRY="${COUNTRY:-US}"
|
||||
#STATE="${STATE:-NY}"
|
||||
#CITY="${CITY:-Albany}"
|
||||
#UNIT="${UNIT:-CasjaysDev}"
|
||||
#ORG="${ORG:-"Casjays Developments"}"
|
||||
#DAYS_VALID="${DAYS_VALID:-3650}"
|
||||
#RSA="${RSA:-4096}"
|
||||
#CN="${CN:-$FULL_DOMAIN_NAME}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# web server configs
|
||||
HTTPD_CONFIG_FILE="${HTTPD_CONFIG_FILE:-$(__find_httpd_conf)}"
|
||||
NGINX_CONFIG_FILE="${NGINX_CONFIG_FILE:-$(__find_nginx_conf)}"
|
||||
LIGHTTPD_CONFIG_FILE="${LIGHTTPD_CONFIG_FILE:-$(__find_lighttpd_conf)}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# redis env
|
||||
DATABASE_DIR_REDIS="${DATABASE_DIR_REDIS:-$DATABASE_BASE_DIR/redis}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# postgresql env
|
||||
DATABASE_DIR_PGSQL="${DATABASE_DIR_PGSQL:-$PGDATA}"
|
||||
PGDATA="${DATABASE_DIR_PGSQL:-$DATABASE_BASE_DIR/postgres}"
|
||||
POSTGRES_USER="${DATABASE_USER_ROOT:-$POSTGRES_USER}"
|
||||
POSTGRES_PASSWORD="${DATABASE_PASS_ROOT:-$POSTGRES_PASSWORD}"
|
||||
POSTGRES_CONFIG_FILE="${POSTGRES_CONFIG_FILE:-$(__find_pgsql_conf)}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# mariadb env
|
||||
MARIADB_ROOT_HOST="${MARIADB_ROOT_HOST:-%}"
|
||||
MARIADB_AUTO_UPGRADE="${MARIADB_AUTO_UPGRADE:-yes}"
|
||||
MARIADB_DATABASE="${DATABASE_CREATE:-$MARIADB_DATABASE}"
|
||||
MARIADB_USER="${DATABASE_USER_NORMAL:-$MARIADB_USER}"
|
||||
MARIADB_PASSWORD="${DATABASE_PASS_NORMAL:-$MARIADB_PASSWORD}"
|
||||
DATABASE_DIR_MARIADB="${DATABASE_DIR_MARIADB:-$DATABASE_BASE_DIR/mysql}"
|
||||
MARIADB_ROOT_PASSWORD="${DATABASE_PASS_ROOT:-$MARIADB_ROOT_PASSWORD}"
|
||||
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD="${MARIADB_ALLOW_EMPTY_ROOT_PASSWORD:-}"
|
||||
MARIADB_INITDB_SKIP_TZINFO="${MARIADB_INITDB_SKIP_TZINFO}:-"
|
||||
MARIADB_RANDOM_ROOT_PASSWORD="${MARIADB_RANDOM_ROOT_PASSWORD:-}"
|
||||
MARIADB_CONFIG_FILE="${MARIADB_CONFIG_FILE:-$(__find_mysql_conf)}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# mongodb env
|
||||
INITDB_ROOT_USERNAME="${DATABASE_USER_ROOT:-$INITDB_ROOT_USERNAME}"
|
||||
DATABASE_DIR_MONGODB="${DATABASE_DIR_MONGODB:-$DATABASE_BASE_DIR/mongodb}"
|
||||
MONGO_INITDB_ROOT_PASSWORD="${DATABASE_PASS_ROOT:-$MONGO_INITDB_ROOT_PASSWORD}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# couchdb env
|
||||
NODENAME="${NODENAME:-}"
|
||||
COUCHDB_USER="${DATABASE_USER_ROOT:-$COUCHDB_USER}"
|
||||
COUCHDB_PASSWORD="${DATABASE_PASS_ROOT:-$COUCHDB_PASSWORD}"
|
||||
DATABASE_DIR_COUCHDB="${DATABASE_DIR_COUCHDB:-$DATABASE_BASE_DIR/couchdb}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Supabase
|
||||
DATABASE_DIR_SUPABASE="${DATABASE_DIR_SUPABASE:-$DATABASE_BASE_DIR/supabase}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# docker env
|
||||
DOCKER_HOST="unix://var/run/docker.sock"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# File locations
|
||||
ENTRYPOINT_PID_FILE="${ENTRYPOINT_PID_FILE:-/run/init.d/entrypoint.pid}"
|
||||
ENTRYPOINT_INIT_FILE="${ENTRYPOINT_INIT_FILE:-/config/.entrypoint.done}"
|
||||
ENTRYPOINT_DATA_INIT_FILE="${ENTRYPOINT_DATA_INIT_FILE:-/data/.docker_has_run}"
|
||||
ENTRYPOINT_CONFIG_INIT_FILE="${ENTRYPOINT_CONFIG_INIT_FILE:-/config/.docker_has_run}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Startup variables
|
||||
INIT_DATE="${INIT_DATE:-$(date)}"
|
||||
START_SERVICES="${START_SERVICES:-yes}"
|
||||
ENTRYPOINT_MESSAGE="${ENTRYPOINT_MESSAGE:-yes}"
|
||||
ENTRYPOINT_FIRST_RUN="${ENTRYPOINT_FIRST_RUN:-yes}"
|
||||
DATA_DIR_INITIALIZED="${DATA_DIR_INITIALIZED:-false}"
|
||||
CONFIG_DIR_INITIALIZED="${CONFIG_DIR_INITIALIZED:-false}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ -f "$ENTRYPOINT_PID_FILE" ] || [ -f "$ENTRYPOINT_INIT_FILE" ]; then
|
||||
START_SERVICES="no" ENTRYPOINT_MESSAGE="no" ENTRYPOINT_FIRST_RUN="no"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,10 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# directory settings
|
||||
WWW_ROOT_DIR="${ENV_WWW_ROOT_DIR:-${WWW_ROOT_DIR}}"
|
||||
BACKUP_DIR="${ENV_BACKUP_DIR:-${BACKUP_DIR:-/data/backups}}"
|
||||
LOCAL_BIN_DIR="${ENV_LOCAL_BIN_DIR:-${LOCAL_BIN_DIR:-/usr/local/bin}}"
|
||||
DATABASE_BASE_DIR="${ENV_DATABASE_BASE_DIR:-${DATABASE_BASE_DIR:-/data/db}}"
|
||||
DEFAULT_DATA_DIR="${ENV_DEFAULT_DATA_DIR:-${DEFAULT_DATA_DIR:-/usr/local/share/template-files/data}}"
|
||||
DEFAULT_CONF_DIR="${ENV_DEFAULT_CONF_DIR:-${DEFAULT_CONF_DIR:-/usr/local/share/template-files/config}}"
|
||||
DEFAULT_TEMPLATE_DIR="${ENV_DEFAULT_TEMPLATE_DIR:-${EDEFAULT_TEMPLATE_DIR:-/usr/local/share/template-files/defaults}}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,5 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# get ip addresses
|
||||
CONTAINER_IP4_ADDRESS="${CONTAINER_IP4_ADDRESS:-$(__get_ip4)}"
|
||||
CONTAINER_IP6_ADDRESS="${CONTAINER_IP6_ADDRESS:-$(__get_ip6)}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,6 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# cerbot
|
||||
CERT_BOT_MAIL="${ENV_CERT_BOT_MAIL:-$CERT_BOT_MAIL}"
|
||||
CERTBOT_DOMAINS="${ENV_CERTBOT_DOMAINS:-$CERTBOT_DOMAINS}"
|
||||
CERT_BOT_ENABLED="${ENV_CERT_BOT_ENABLED:-${CERT_BOT_ENABLED:-false}}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,7 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# couchdb env
|
||||
COUCHDB_NODENAME="${ENV_COUCHDB_NODENAME:-${COUCHDB_NODENAME:-$NODENAME}}"
|
||||
COUCHDB_USER="${ENV_COUCHDB_USER:-${COUCHDB_USER:-$DATABASE_USER_ROOT}}"
|
||||
COUCHDB_PASSWORD="${ENV_COUCHDB_PASSWORD:-${COUCHDB_PASSWORD:-$DATABASE_PASS_ROOT}}"
|
||||
DATABASE_DIR_COUCHDB="${ENV_DATABASE_DIR_COUCHDB:-${DATABASE_DIR_COUCHDB:-/data/db/couchdb}}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,4 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# docker env
|
||||
DOCKER_HOST="${DOCKER_HOST:-unix://var/run/docker.sock}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,13 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# GLOBAL enviroment variables
|
||||
USER="${USER:-root}"
|
||||
LANG="${LANG:-C.UTF-8}"
|
||||
TZ="${TZ:-America/New_York}"
|
||||
ENV_PORTS="${ENV_PORTS//\/*/}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# How to set permissions
|
||||
SERVICE_USER="${SERVICE_USER:-}"
|
||||
SERVICE_GROUP="${SERVICE_GROUP:-}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
SERVICE_UID="${SERVICE_UID:-}" # set the user id
|
||||
SERVICE_GID="${SERVICE_GID:-}" # set the group id
|
||||
@@ -0,0 +1,5 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# healthcheck
|
||||
HEALTH_ENABLED="${HEALTH_ENABLED:-}"
|
||||
HEALTH_URL="${HEALTH_URL:-}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,14 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# mariadb env
|
||||
MARIADB_ROOT_HOST="${MARIADB_ROOT_HOST:-%}"
|
||||
MARIADB_AUTO_UPGRADE="${MARIADB_AUTO_UPGRADE:-yes}"
|
||||
MARIADB_DATABASE="${MARIADB_DATABASE:-$DATABASE_CREATE}"
|
||||
MARIADB_USER="${MARIADB_USER:-$DATABASE_USER_NORMAL}"
|
||||
MARIADB_PASSWORD="${MARIADB_PASSWORD:-$DATABASE_PASS_NORMAL}"
|
||||
DATABASE_DIR_MARIADB="${DATABASE_DIR_MARIADB:-/data/db/mariadb}"
|
||||
MARIADB_ROOT_PASSWORD="${MARIADB_ROOT_PASSWORD:-$DATABASE_PASS_ROOT}"
|
||||
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD="${MARIADB_ALLOW_EMPTY_ROOT_PASSWORD:-}"
|
||||
MARIADB_INITDB_SKIP_TZINFO="${MARIADB_INITDB_SKIP_TZINFO}:-"
|
||||
MARIADB_RANDOM_ROOT_PASSWORD="${MARIADB_RANDOM_ROOT_PASSWORD:-}"
|
||||
MARIADB_CONFIG_FILE="${MARIADB_CONFIG_FILE:-$(__find_mysql_conf)}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,20 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# mongodb env
|
||||
DATABASE_DIR_MONGODB="${DATABASE_DIR_MONGODB:-/data/db/mongodb}"
|
||||
INITDB_ROOT_USERNAME="${DATABASE_USER_ROOT:-$INITDB_ROOT_USERNAME}"
|
||||
MONGO_INITDB_ROOT_PASSWORD="${DATABASE_PASS_ROOT:-$MONGO_INITDB_ROOT_PASSWORD}"
|
||||
ME_CONFIG_EDITORTHEME="${ME_CONFIG_EDITORTHEME:-dracula}"
|
||||
ME_CONFIG_MONGODB_URL="${ME_CONFIG_MONGODB_URL:-mongodb://127.0.0.1:27017}"
|
||||
ME_CONFIG_MONGODB_ENABLE_ADMIN="${ME_CONFIG_MONGODB_ENABLE_ADMIN:-true}"
|
||||
ME_CONFIG_BASICAUTH_USERNAME="${ME_CONFIG_BASICAUTH_USERNAME:-}"
|
||||
ME_CONFIG_BASICAUTH_PASSWORD="${ME_CONFIG_BASICAUTH_PASSWORD:-}"
|
||||
ME_CONFIG_BASICAUTH_USERNAME_FILE="${ME_CONFIG_BASICAUTH_USERNAME_FILE:-}"
|
||||
ME_CONFIG_BASICAUTH_PASSWORD_FILE="${ME_CONFIG_BASICAUTH_PASSWORD_FILE:-}"
|
||||
ME_CONFIG_MONGODB_ADMINUSERNAME_FILE="${ME_CONFIG_MONGODB_ADMINUSERNAME_FILE:-}"
|
||||
ME_CONFIG_MONGODB_ADMINPASSWORD_FILE="${ME_CONFIG_MONGODB_ADMINPASSWORD_FILE:-}"
|
||||
ME_CONFIG_MONGODB_AUTH_USERNAME_FILE="${ME_CONFIG_MONGODB_AUTH_USERNAME_FILE:-}"
|
||||
ME_CONFIG_MONGODB_AUTH_PASSWORD_FILE="${ME_CONFIG_MONGODB_AUTH_PASSWORD_FILE:-}"
|
||||
ME_CONFIG_MONGODB_CA_FILE="${ME_CONFIG_MONGODB_CA_FILE:-}"
|
||||
VCAP_APP_HOST="${VCAP_APP_HOST:-0.0.0.0}"
|
||||
VCAP_APP_PORT="${VCAP_APP_PORT:-19054}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,9 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# networing info
|
||||
DOMAINNAME="${DOMAINNAME:-}"
|
||||
EMAIL_RELAY="${EMAIL_RELAY:-}"
|
||||
HOSTNAME="${HOSTNAME:-casjaysdev-GEN_SCRIPT_REPLACE_APPNAME}"
|
||||
EMAIL_DOMAIN="${EMAIL_DOMAIN:-${DOMAINNAME:-$HOSTNAME}}"
|
||||
FULL_DOMAIN_NAME="${FULL_DOMAIN_NAME:-${DOMAINNAME:-$HOSTNAME}}"
|
||||
SERVER_ADMIN="${SERVER_ADMIN:-root@${EMAIL_DOMAIN:-$FULL_DOMAIN_NAME}}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,4 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# other
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,6 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# php settings
|
||||
PHP_VERSION="${PHP_VERSION//php/}"
|
||||
PHP_INI_DIR="${PHP_INI_DIR:-$(__find_php_ini)}"
|
||||
PHP_BIN_DIR="${PHP_BIN_DIR:-$(__find_php_bin)}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,8 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# postgresql env
|
||||
PGDATA="${DATABASE_DIR_PGSQL:-$PGDATA}"
|
||||
DATABASE_DIR_PGSQL="${DATABASE_DIR_PGSQL:-/data/db/postgres}"
|
||||
POSTGRES_USER="${DATABASE_USER_ROOT:-$POSTGRES_USER}"
|
||||
POSTGRES_PASSWORD="${DATABASE_PASS_ROOT:-$POSTGRES_PASSWORD}"
|
||||
POSTGRES_CONFIG_FILE="${POSTGRES_CONFIG_FILE:-$(__find_pgsql_conf)}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,4 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# redis env
|
||||
DATABASE_DIR_REDIS="${DATABASE_DIR_REDIS:-/data/db/redis}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,7 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# services/ports
|
||||
ENV_PORTS="${ENV_PORTS:-}"
|
||||
SERVICE_PORT="${SERVICE_PORT:-$PORT}"
|
||||
WEB_SERVER_PORTS="${WEB_SERVER_PORTS:-}"
|
||||
SERVICES_LIST="${PROCS_LIST:-$SERVICES_LIST} "
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,19 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# ssl server settings
|
||||
SSL_ENABLED="${SSL_ENABLED:-false}"
|
||||
SSL_DIR="${SSL_CONTAINER_DIR:-/config/ssl}"
|
||||
SSL_DIR="${SSL_DIR:-$SSL_DIR}"
|
||||
SSL_CA="${SSL_CA:-$SSL_DIR/ca.crt}"
|
||||
SSL_KEY="${SSL_KEY:-$SSL_DIR/server.key}"
|
||||
SSL_CERT="${SSL_CERT:-$SSL_DIR/server.crt}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# certificate settings
|
||||
RSA="${RSA:-4096}"
|
||||
STATE="${STATE:-NY}"
|
||||
CITY="${CITY:-Albany}"
|
||||
COUNTRY="${COUNTRY:-US}"
|
||||
UNIT="${UNIT:-CasjaysDev}"
|
||||
ORG="${ORG:-"Casjays Developments"}"
|
||||
DAYS_VALID="${DAYS_VALID:-3650}"
|
||||
CN="${CN:-${FULL_DOMAIN_NAME:-$HOSTNAME}}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,4 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Supabase
|
||||
DATABASE_DIR_SUPABASE="${DATABASE_DIR_SUPABASE:-/data/db/supabase}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,8 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# web server configs
|
||||
HTTPD_CONFIG_FILE="${HTTPD_CONFIG_FILE:-$(__find_httpd_conf)}"
|
||||
NGINX_CONFIG_FILE="${NGINX_CONFIG_FILE:-$(__find_nginx_conf)}"
|
||||
CADDY_CONFIG_FILE="${CHEROKEE_CONFIG_FILE:-$(__find_caddy_conf)}"
|
||||
LIGHTTPD_CONFIG_FILE="${LIGHTTPD_CONFIG_FILE:-$(__find_lighttpd_conf)}"
|
||||
CHEROKEE_CONFIG_FILE="${CHEROKEE_CONFIG_FILE:-$(__find_cherokee_conf)}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@@ -0,0 +1,21 @@
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# File locations
|
||||
ENTRYPOINT_PID_FILE="${ENTRYPOINT_PID_FILE:-/run/init.d/entrypoint.pid}"
|
||||
ENTRYPOINT_INIT_FILE="${ENTRYPOINT_INIT_FILE:-/config/.entrypoint.done}"
|
||||
ENTRYPOINT_DATA_INIT_FILE="${ENTRYPOINT_DATA_INIT_FILE:-/data/.docker_has_run}"
|
||||
ENTRYPOINT_CONFIG_INIT_FILE="${ENTRYPOINT_CONFIG_INIT_FILE:-/config/.docker_has_run}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Startup variables
|
||||
INIT_DATE="${INIT_DATE:-$(date)}"
|
||||
START_SERVICES="${START_SERVICES:-yes}"
|
||||
ENTRYPOINT_MESSAGE="${ENTRYPOINT_MESSAGE:-yes}"
|
||||
ENTRYPOINT_FIRST_RUN="${ENTRYPOINT_FIRST_RUN:-yes}"
|
||||
DATA_DIR_INITIALIZED="${DATA_DIR_INITIALIZED:-false}"
|
||||
CONFIG_DIR_INITIALIZED="${CONFIG_DIR_INITIALIZED:-false}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Check if this is a new container
|
||||
[ -f "$ENTRYPOINT_PID_FILE" ] && START_SERVICES="no"
|
||||
[ -f "$ENTRYPOINT_CONFIG_INIT_FILE" ] && ENTRYPOINT_FIRST_RUN="no"
|
||||
[ -f "$ENTRYPOINT_DATA_INIT_FILE" ] && DATA_DIR_INITIALIZED="true"
|
||||
[ -f "$ENTRYPOINT_CONFIG_INIT_FILE" ] && CONFIG_DIR_INITIALIZED="true"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Reference in New Issue
Block a user