mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Immich: v1.139.2 (#7116)
* Switch to pnpm for build - The Immich repo now uses pnpm to build the server, web/api and cli * streamline dependency installation - remove unnecessary duplicates - install libaom-dev from testing repo * Bump version to v1.139.2
This commit is contained in:
		
							
								
								
									
										52
									
								
								ct/immich.sh
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								ct/immich.sh
									
									
									
									
									
								
							@@ -29,6 +29,8 @@ function update_script() {
 | 
				
			|||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  setup_uv
 | 
					  setup_uv
 | 
				
			||||||
 | 
					  PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')"
 | 
				
			||||||
 | 
					  NODE_VERSION="22" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  STAGING_DIR=/opt/staging
 | 
					  STAGING_DIR=/opt/staging
 | 
				
			||||||
  BASE_DIR=${STAGING_DIR}/base-images
 | 
					  BASE_DIR=${STAGING_DIR}/base-images
 | 
				
			||||||
@@ -59,7 +61,7 @@ function update_script() {
 | 
				
			|||||||
    done
 | 
					    done
 | 
				
			||||||
    msg_ok "Image-processing libraries up to date"
 | 
					    msg_ok "Image-processing libraries up to date"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE="1.138.1"
 | 
					  RELEASE="1.139.2"
 | 
				
			||||||
  #RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  #RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
 | 
					  if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
@@ -116,8 +118,12 @@ set +a
 | 
				
			|||||||
EOF
 | 
					EOF
 | 
				
			||||||
    chmod +x "$INSTALL_DIR"/start.sh
 | 
					    chmod +x "$INSTALL_DIR"/start.sh
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  rm -rf "${APP_DIR:?}"/*
 | 
					
 | 
				
			||||||
  mkdir -p "$ML_DIR"
 | 
					  (
 | 
				
			||||||
 | 
					    shopt -s dotglob
 | 
				
			||||||
 | 
					    rm -rf "${APP_DIR:?}"/*
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  rm -rf "$SRC_DIR"
 | 
					  rm -rf "$SRC_DIR"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v${RELEASE}" "$SRC_DIR"
 | 
					  fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v${RELEASE}" "$SRC_DIR"
 | 
				
			||||||
@@ -127,30 +133,34 @@ EOF
 | 
				
			|||||||
  if [[ "$RELEASE" == "1.135.1" ]]; then
 | 
					  if [[ "$RELEASE" == "1.135.1" ]]; then
 | 
				
			||||||
    rm ./src/schema/migrations/1750323941566-UnsetPrewarmDimParameter.ts
 | 
					    rm ./src/schema/migrations/1750323941566-UnsetPrewarmDimParameter.ts
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  $STD npm install -g node-gyp node-pre-gyp
 | 
					  export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
 | 
				
			||||||
  $STD npm ci
 | 
					  export CI=1
 | 
				
			||||||
  $STD npm run build
 | 
					  corepack enable
 | 
				
			||||||
  $STD npm prune --omit=dev --omit=optional
 | 
					
 | 
				
			||||||
  cp -a {bin,dist,node_modules,resources,package*.json} "$APP_DIR"/
 | 
					  # server build
 | 
				
			||||||
  cp package.json "$APP_DIR"/bin
 | 
					  $STD pnpm --filter immich --frozen-lockfile build
 | 
				
			||||||
  mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin
 | 
					  $STD pnpm --filter immich --frozen-lockfile --prod --no-optional deploy "$APP_DIR"
 | 
				
			||||||
 | 
					  cp "$APP_DIR"/package.json "$APP_DIR"/bin
 | 
				
			||||||
  sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
 | 
					  sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
 | 
				
			||||||
  cd "$SRC_DIR"/open-api/typescript-sdk
 | 
					
 | 
				
			||||||
  $STD npm ci
 | 
					  # openapi & web build
 | 
				
			||||||
  $STD npm run build
 | 
					 | 
				
			||||||
  cd "$SRC_DIR"/web
 | 
					 | 
				
			||||||
  $STD npm ci
 | 
					 | 
				
			||||||
  $STD npm run build
 | 
					 | 
				
			||||||
  cd "$SRC_DIR"
 | 
					  cd "$SRC_DIR"
 | 
				
			||||||
 | 
					  export SHARP_FORCE_GLOBAL_LIBVIPS=true
 | 
				
			||||||
 | 
					  $STD pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install
 | 
				
			||||||
 | 
					  $STD pnpm --filter @immich/sdk --filter immich-web build
 | 
				
			||||||
  cp -a web/build "$APP_DIR"/www
 | 
					  cp -a web/build "$APP_DIR"/www
 | 
				
			||||||
  cp LICENSE "$APP_DIR"
 | 
					  cp LICENSE "$APP_DIR"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # cli build
 | 
				
			||||||
 | 
					  $STD pnpm --filter @immich/sdk --filter @immich/cli --frozen-lockfile install
 | 
				
			||||||
 | 
					  $STD pnpm --filter @immich/sdk --filter @immich/cli build
 | 
				
			||||||
 | 
					  $STD pnpm --filter @immich/cli --prod --no-optional deploy "$APP_DIR"/cli
 | 
				
			||||||
  cd "$APP_DIR"
 | 
					  cd "$APP_DIR"
 | 
				
			||||||
  export SHARP_FORCE_GLOBAL_LIBVIPS=true
 | 
					  mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin
 | 
				
			||||||
  $STD npm install sharp
 | 
					 | 
				
			||||||
  rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
 | 
					 | 
				
			||||||
  msg_ok "Updated ${APP} web and microservices"
 | 
					  msg_ok "Updated ${APP} web and microservices"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  cd "$SRC_DIR"/machine-learning
 | 
					  cd "$SRC_DIR"/machine-learning
 | 
				
			||||||
 | 
					  mkdir -p "$ML_DIR"
 | 
				
			||||||
  export VIRTUAL_ENV="${ML_DIR}"/ml-venv
 | 
					  export VIRTUAL_ENV="${ML_DIR}"/ml-venv
 | 
				
			||||||
  $STD /usr/local/bin/uv venv "$VIRTUAL_ENV"
 | 
					  $STD /usr/local/bin/uv venv "$VIRTUAL_ENV"
 | 
				
			||||||
  if [[ -f ~/.openvino ]]; then
 | 
					  if [[ -f ~/.openvino ]]; then
 | 
				
			||||||
@@ -178,10 +188,6 @@ EOF
 | 
				
			|||||||
  ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
 | 
					  ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
 | 
				
			||||||
  ln -s "$GEO_DIR" "$APP_DIR"
 | 
					  ln -s "$GEO_DIR" "$APP_DIR"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Updating Immich CLI"
 | 
					 | 
				
			||||||
  $STD npm i -g @immich/cli
 | 
					 | 
				
			||||||
  msg_ok "Updated Immich CLI"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  chown -R immich:immich "$INSTALL_DIR"
 | 
					  chown -R immich:immich "$INSTALL_DIR"
 | 
				
			||||||
  if [[ ! -f ~/.debian_version.bak ]]; then
 | 
					  if [[ ! -f ~/.debian_version.bak ]]; then
 | 
				
			||||||
    cp /etc/debian_version ~/.debian_version.bak
 | 
					    cp /etc/debian_version ~/.debian_version.bak
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,8 +30,12 @@ $STD apt-get install --no-install-recommends -y \
 | 
				
			|||||||
  autoconf \
 | 
					  autoconf \
 | 
				
			||||||
  build-essential \
 | 
					  build-essential \
 | 
				
			||||||
  python3-dev \
 | 
					  python3-dev \
 | 
				
			||||||
 | 
					  automake \
 | 
				
			||||||
  cmake \
 | 
					  cmake \
 | 
				
			||||||
  jq \
 | 
					  jq \
 | 
				
			||||||
 | 
					  libtool \
 | 
				
			||||||
 | 
					  libltdl-dev \
 | 
				
			||||||
 | 
					  libgdk-pixbuf-2.0-dev \
 | 
				
			||||||
  libbrotli-dev \
 | 
					  libbrotli-dev \
 | 
				
			||||||
  libde265-dev \
 | 
					  libde265-dev \
 | 
				
			||||||
  libexif-dev \
 | 
					  libexif-dev \
 | 
				
			||||||
@@ -39,37 +43,28 @@ $STD apt-get install --no-install-recommends -y \
 | 
				
			|||||||
  libglib2.0-dev \
 | 
					  libglib2.0-dev \
 | 
				
			||||||
  libgsf-1-dev \
 | 
					  libgsf-1-dev \
 | 
				
			||||||
  libjpeg62-turbo-dev \
 | 
					  libjpeg62-turbo-dev \
 | 
				
			||||||
  librsvg2-dev \
 | 
					 | 
				
			||||||
  libspng-dev \
 | 
					  libspng-dev \
 | 
				
			||||||
 | 
					  liblcms2-dev \
 | 
				
			||||||
 | 
					  libopenexr-dev \
 | 
				
			||||||
 | 
					  libgif-dev \
 | 
				
			||||||
 | 
					  librsvg2-dev \
 | 
				
			||||||
 | 
					  libexpat1 \
 | 
				
			||||||
 | 
					  libgcc-s1 \
 | 
				
			||||||
 | 
					  libgomp1 \
 | 
				
			||||||
 | 
					  liblqr-1-0 \
 | 
				
			||||||
 | 
					  libltdl7 \
 | 
				
			||||||
 | 
					  libmimalloc2.0 \
 | 
				
			||||||
 | 
					  libopenjp2-7 \
 | 
				
			||||||
  meson \
 | 
					  meson \
 | 
				
			||||||
  ninja-build \
 | 
					  ninja-build \
 | 
				
			||||||
  pkg-config \
 | 
					  pkg-config \
 | 
				
			||||||
  cpanminus \
 | 
					  cpanminus \
 | 
				
			||||||
  libde265-0 \
 | 
					 | 
				
			||||||
  libexif12 \
 | 
					 | 
				
			||||||
  libexpat1 \
 | 
					 | 
				
			||||||
  libgcc-s1 \
 | 
					 | 
				
			||||||
  libglib2.0-0 \
 | 
					 | 
				
			||||||
  libgomp1 \
 | 
					 | 
				
			||||||
  libgsf-1-114 \
 | 
					 | 
				
			||||||
  liblcms2-dev \
 | 
					 | 
				
			||||||
  liblqr-1-0 \
 | 
					 | 
				
			||||||
  libltdl7 \
 | 
					 | 
				
			||||||
  libmimalloc2.0 \
 | 
					 | 
				
			||||||
  libopenexr-dev \
 | 
					 | 
				
			||||||
  libgif-dev \
 | 
					 | 
				
			||||||
  libopenjp2-7 \
 | 
					 | 
				
			||||||
  librsvg2-2 \
 | 
					 | 
				
			||||||
  libspng0 \
 | 
					 | 
				
			||||||
  mesa-utils \
 | 
					  mesa-utils \
 | 
				
			||||||
  mesa-va-drivers \
 | 
					  mesa-va-drivers \
 | 
				
			||||||
  mesa-vulkan-drivers \
 | 
					  mesa-vulkan-drivers \
 | 
				
			||||||
  ocl-icd-libopencl1 \
 | 
					  ocl-icd-libopencl1 \
 | 
				
			||||||
  tini \
 | 
					  tini \
 | 
				
			||||||
  libaom-dev \
 | 
					 | 
				
			||||||
  zlib1g
 | 
					  zlib1g
 | 
				
			||||||
$STD apt-get install -y \
 | 
					 | 
				
			||||||
  libgdk-pixbuf-2.0-dev librsvg2-dev libtool
 | 
					 | 
				
			||||||
curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpg
 | 
					curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpg
 | 
				
			||||||
DPKG_ARCHITECTURE="$(dpkg --print-architecture)"
 | 
					DPKG_ARCHITECTURE="$(dpkg --print-architecture)"
 | 
				
			||||||
export DPKG_ARCHITECTURE
 | 
					export DPKG_ARCHITECTURE
 | 
				
			||||||
@@ -111,7 +106,8 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
				
			|||||||
  msg_ok "Installed OpenVINO dependencies"
 | 
					  msg_ok "Installed OpenVINO dependencies"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NODE_VERSION="22" setup_nodejs
 | 
					PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')"
 | 
				
			||||||
 | 
					NODE_VERSION="22" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
 | 
				
			||||||
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
 | 
					PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Setting up Postgresql Database"
 | 
					msg_info "Setting up Postgresql Database"
 | 
				
			||||||
@@ -149,7 +145,8 @@ $STD apt-get install -t testing --no-install-recommends -y \
 | 
				
			|||||||
  libhwy1t64 \
 | 
					  libhwy1t64 \
 | 
				
			||||||
  libdav1d-dev \
 | 
					  libdav1d-dev \
 | 
				
			||||||
  libhwy-dev \
 | 
					  libhwy-dev \
 | 
				
			||||||
  libwebp-dev
 | 
					  libwebp-dev \
 | 
				
			||||||
 | 
					  libaom-dev
 | 
				
			||||||
if [[ -f ~/.openvino ]]; then
 | 
					if [[ -f ~/.openvino ]]; then
 | 
				
			||||||
  $STD apt-get install -t testing -y patchelf
 | 
					  $STD apt-get install -t testing -y patchelf
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
@@ -281,36 +278,39 @@ APP_DIR="${INSTALL_DIR}/app"
 | 
				
			|||||||
ML_DIR="${APP_DIR}/machine-learning"
 | 
					ML_DIR="${APP_DIR}/machine-learning"
 | 
				
			||||||
GEO_DIR="${INSTALL_DIR}/geodata"
 | 
					GEO_DIR="${INSTALL_DIR}/geodata"
 | 
				
			||||||
mkdir -p "$INSTALL_DIR"
 | 
					mkdir -p "$INSTALL_DIR"
 | 
				
			||||||
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${ML_DIR}","${INSTALL_DIR}"/cache}
 | 
					mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.138.1" "$SRC_DIR"
 | 
					fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.139.2" "$SRC_DIR"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing ${APPLICATION} (more patience please)"
 | 
					msg_info "Installing ${APPLICATION} (more patience please)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cd "$SRC_DIR"/server
 | 
					cd "$SRC_DIR"/server
 | 
				
			||||||
$STD npm install -g node-gyp node-pre-gyp
 | 
					export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
 | 
				
			||||||
$STD npm ci
 | 
					export CI=1
 | 
				
			||||||
$STD npm run build
 | 
					corepack enable
 | 
				
			||||||
$STD npm prune --omit=dev --omit=optional
 | 
					
 | 
				
			||||||
cp -a {bin,dist,node_modules,resources,package*.json} "$APP_DIR"/
 | 
					# server build
 | 
				
			||||||
cp package.json "$APP_DIR"/bin
 | 
					$STD pnpm --filter immich --frozen-lockfile build
 | 
				
			||||||
 | 
					$STD pnpm --filter immich --frozen-lockfile --prod --no-optional deploy "$APP_DIR"
 | 
				
			||||||
 | 
					cp "$APP_DIR"/package.json "$APP_DIR"/bin
 | 
				
			||||||
sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
 | 
					sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
 | 
				
			||||||
cd "$SRC_DIR"/open-api/typescript-sdk
 | 
					
 | 
				
			||||||
$STD npm ci
 | 
					# openapi & web build
 | 
				
			||||||
$STD npm run build
 | 
					 | 
				
			||||||
cd "$SRC_DIR"/web
 | 
					 | 
				
			||||||
$STD npm ci
 | 
					 | 
				
			||||||
$STD npm run build
 | 
					 | 
				
			||||||
cd "$SRC_DIR"
 | 
					cd "$SRC_DIR"
 | 
				
			||||||
 | 
					export SHARP_FORCE_GLOBAL_LIBVIPS=true
 | 
				
			||||||
 | 
					$STD pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install
 | 
				
			||||||
 | 
					$STD pnpm --filter @immich/sdk --filter immich-web build
 | 
				
			||||||
cp -a web/build "$APP_DIR"/www
 | 
					cp -a web/build "$APP_DIR"/www
 | 
				
			||||||
cp LICENSE "$APP_DIR"
 | 
					cp LICENSE "$APP_DIR"
 | 
				
			||||||
cd "$APP_DIR"
 | 
					
 | 
				
			||||||
export SHARP_FORCE_GLOBAL_LIBVIPS=true
 | 
					# cli build
 | 
				
			||||||
$STD npm install sharp
 | 
					$STD pnpm --filter @immich/sdk --filter @immich/cli --frozen-lockfile install
 | 
				
			||||||
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
 | 
					$STD pnpm --filter @immich/sdk --filter @immich/cli build
 | 
				
			||||||
 | 
					$STD pnpm --filter @immich/cli --prod --no-optional deploy "$APP_DIR"/cli
 | 
				
			||||||
msg_ok "Installed Immich Server and Web Components"
 | 
					msg_ok "Installed Immich Server and Web Components"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cd "$SRC_DIR"/machine-learning
 | 
					cd "$SRC_DIR"/machine-learning
 | 
				
			||||||
 | 
					mkdir -p "$ML_DIR"
 | 
				
			||||||
export VIRTUAL_ENV="${ML_DIR}/ml-venv"
 | 
					export VIRTUAL_ENV="${ML_DIR}/ml-venv"
 | 
				
			||||||
$STD uv venv "$VIRTUAL_ENV"
 | 
					$STD uv venv "$VIRTUAL_ENV"
 | 
				
			||||||
if [[ -f ~/.openvino ]]; then
 | 
					if [[ -f ~/.openvino ]]; then
 | 
				
			||||||
@@ -337,10 +337,6 @@ sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py
 | 
				
			|||||||
ln -s "$UPLOAD_DIR" "$APP_DIR"/upload
 | 
					ln -s "$UPLOAD_DIR" "$APP_DIR"/upload
 | 
				
			||||||
ln -s "$UPLOAD_DIR" "$ML_DIR"/upload
 | 
					ln -s "$UPLOAD_DIR" "$ML_DIR"/upload
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing Immich CLI"
 | 
					 | 
				
			||||||
$STD npm i -g @immich/cli
 | 
					 | 
				
			||||||
msg_ok "Installed Immich CLI"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
msg_info "Installing GeoNames data"
 | 
					msg_info "Installing GeoNames data"
 | 
				
			||||||
cd "$GEO_DIR"
 | 
					cd "$GEO_DIR"
 | 
				
			||||||
URL_LIST=(
 | 
					URL_LIST=(
 | 
				
			||||||
@@ -400,10 +396,10 @@ cat <<EOF >"$APP_DIR"/bin/start.sh
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set -a
 | 
					set -a
 | 
				
			||||||
. "$INSTALL_DIR"/.env
 | 
					. ${INSTALL_DIR}/.env
 | 
				
			||||||
set +a
 | 
					set +a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/usr/bin/node "$APP_DIR"/dist/main.js "\$@"
 | 
					/usr/bin/node ${APP_DIR}/dist/main.js "\$@"
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
chmod +x "$ML_DIR"/ml_start.sh "$APP_DIR"/bin/start.sh
 | 
					chmod +x "$ML_DIR"/ml_start.sh "$APP_DIR"/bin/start.sh
 | 
				
			||||||
cat <<EOF >/etc/systemd/system/"${APPLICATION}"-web.service
 | 
					cat <<EOF >/etc/systemd/system/"${APPLICATION}"-web.service
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user