mirror of https://github.com/tteck/Proxmox
Merge pull request #1 from chmistry/immich-script
first pass immich lxc script and installerpull/3611/head
commit
b6b48e2160
2 changed files with 295 additions and 0 deletions
@ -0,0 +1,104 @@ |
||||
#!/usr/bin/env bash |
||||
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) |
||||
# Copyright (c) 2024 chmistry |
||||
# Author: chmistry |
||||
# License: MIT |
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE |
||||
|
||||
function header_info { |
||||
clear |
||||
cat <<"EOF" |
||||
.__ .__ .__ |
||||
|__| _____ _____ |__| ____ | |__ |
||||
| |/ \ / \| |/ ___\| | \ |
||||
| | Y Y \ Y Y \ \ \___| Y \ |
||||
|__|__|_| /__|_| /__|\___ >___| / |
||||
\/ \/ \/ \/ |
||||
EOF |
||||
} |
||||
header_info |
||||
echo -e "Loading..." |
||||
APP="immich" |
||||
var_disk="50" |
||||
var_cpu="4" |
||||
var_ram="8193" |
||||
var_os="ubuntu" |
||||
var_version="24.04" |
||||
variables |
||||
color |
||||
catch_errors |
||||
|
||||
function default_settings() { |
||||
CT_TYPE="1" |
||||
PW="" |
||||
CT_ID=$NEXTID |
||||
HN=$NSAPP |
||||
DISK_SIZE="$var_disk" |
||||
CORE_COUNT="$var_cpu" |
||||
RAM_SIZE="$var_ram" |
||||
BRG="vmbr0" |
||||
NET="dhcp" |
||||
GATE="" |
||||
APT_CACHER="" |
||||
APT_CACHER_IP="" |
||||
DISABLEIP6="no" |
||||
MTU="" |
||||
SD="" |
||||
NS="" |
||||
MAC="" |
||||
VLAN="" |
||||
SSH="no" |
||||
VERB="no" |
||||
echo_default |
||||
} |
||||
|
||||
function update_script() { |
||||
header_info |
||||
INSTALL_DIR_app=/home/immich/app |
||||
if [[ ! -d $INSTALL_DIR_app ]]; then msg_error "No ${APP} Installation Found!"; exit; fi |
||||
if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then |
||||
read -r -p "Warning: Storage is dangerously low, continue anyway? <y/N> " prompt |
||||
[[ ${prompt,,} =~ ^(y|yes)$ ]] || exit |
||||
fi |
||||
rm -rf $INSTALL_DIR_app |
||||
|
||||
su immich -c "git clone https://github.com/loeeeee/immich-in-lxc.git /tmp" |
||||
|
||||
msg_info "Stopping immich" |
||||
systemctl stop immich-microservices.service |
||||
systemctl stop immich-ml.service |
||||
systemctl stop immich-web.service |
||||
msg_ok "Stopped immich" |
||||
|
||||
cd /tmp/immich-in-lxc |
||||
#su immich -c "/tmp/install.sh" # creates env file |
||||
# Replace password in runtime.env file |
||||
#sed -i 's/A_SEHR_SAFE_PASSWORD/YUaaWZAvtL@JpNgpi3z6uL4MmDMR_w/g' runtime.env |
||||
|
||||
msg_info "Updating immich" |
||||
|
||||
su immich -c "/tmp/install.sh" # runs rest of script |
||||
|
||||
msg_ok "Updated immich" |
||||
|
||||
msg_info "Starting immich" |
||||
systemctl stop immich-microservices.service |
||||
systemctl stop immich-ml.service |
||||
systemctl stop immich-web.service |
||||
msg_ok "Started immich" |
||||
|
||||
msg_info "Cleaning Up" |
||||
rm -rf /tmp/immich-in-lxc |
||||
msg_ok "Cleaned" |
||||
msg_ok "Updated Successfully" |
||||
exit |
||||
} |
||||
|
||||
start |
||||
build_container |
||||
description |
||||
|
||||
msg_ok "Completed Successfully!\n" |
||||
echo -e "${APP} Setup should be reachable by going to the following URL. |
||||
${BL}http://${IP}:3001${CL} \n" |
||||
|
@ -0,0 +1,191 @@ |
||||
#!/usr/bin/env bash |
||||
|
||||
# Copyright (c) 2024 chmistry |
||||
# Author: chmistry |
||||
# License: MIT |
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE |
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" |
||||
color |
||||
verb_ip6 |
||||
catch_errors |
||||
setting_up_container |
||||
network_check |
||||
update_os |
||||
|
||||
msg_info "Installing Dependencies" |
||||
$STD apt install -y curl |
||||
$STD apt install -y git |
||||
$STD apt install -y python3-venv |
||||
$STD apt install -y python3-dev |
||||
$STD apt install -y build-essential |
||||
$STD apt install -y unzip |
||||
$STD apt install -y postgresql-common |
||||
$STD apt install -y gnupg |
||||
$STD apt install -y software-properties-common |
||||
$STD apt install -y redis |
||||
msg_ok "Installed Dependencies" |
||||
|
||||
msg_info "Installing Postgresql and pgvector" |
||||
$STD /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y |
||||
apt install -y postgresql postgresql-16-pgvector |
||||
msg_ok "Installed Postgresql and pgvector" |
||||
|
||||
msg_info "Setting up database" |
||||
#test this: |
||||
$STD su postgres -s /bin/sh -c "psql \ |
||||
CREATE DATABASE immich; |
||||
CREATE USER immich WITH ENCRYPTED PASSWORD 'YUaaWZAvtL@JpNgpi3z6uL4MmDMR_w'; |
||||
GRANT ALL PRIVILEGES ON DATABASE immich to immich; |
||||
ALTER USER immich WITH SUPERUSER; |
||||
\q" |
||||
|
||||
#otherwise this: |
||||
#su postgres <<EOF |
||||
#psql -c "CREATE DATABASE immich;" |
||||
#psql -c "CREATE USER immich WITH ENCRYPTED PASSWORD 'YUaaWZAvtL@JpNgpi3z6uL4MmDMR_w';" |
||||
#psql -c "GRANT ALL PRIVILEGES ON DATABASE immich to immich;" |
||||
#psql -c "ALTER USER immich WITH SUPERUSER;" |
||||
#EOF |
||||
|
||||
msg_ok "Database setup completed" |
||||
|
||||
msg_info "Installing ffmpeg yellyfin" |
||||
$STD add-apt-repository universe -y |
||||
$STD mkdir -p /etc/apt/keyrings |
||||
$STD curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpg |
||||
$STD export VERSION_OS="$( awk -F'=' '/^ID=/{ print $NF }' /etc/os-release )" |
||||
$STD export VERSION_CODENAME="$( awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release )" |
||||
$STD export DPKG_ARCHITECTURE="$( dpkg --print-architecture )" |
||||
cat <<EOF | tee /etc/apt/sources.list.d/jellyfin.sources |
||||
Types: deb |
||||
URIs: https://repo.jellyfin.org/${VERSION_OS} |
||||
Suites: ${VERSION_CODENAME} |
||||
Components: main |
||||
Architectures: ${DPKG_ARCHITECTURE} |
||||
Signed-By: /etc/apt/keyrings/jellyfin.gpg |
||||
EOF |
||||
$STD apt update |
||||
|
||||
$STD apt install -y jellyfin-ffmpeg6 |
||||
|
||||
ln -s /usr/lib/jellyfin-ffmpeg/ffmpeg /bin/ffmpeg |
||||
ln -s /usr/lib/jellyfin-ffmpeg/ffprobe /bin/ffprobe |
||||
msg_ok "Installed ffmpeg yellyfin" |
||||
|
||||
msg_info "Adding immich user" |
||||
$STD useradd -m immich |
||||
#TODO: strip user login etc. (make it more a daemon user) |
||||
msg_ok "User immich added" |
||||
|
||||
msg_info "Installing Node.js" |
||||
$STD bash <(curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh) |
||||
source ~/.bashrc |
||||
$STD nvm install 20 |
||||
ln -sf /root/.nvm/versions/node/v20/bin/node /usr/bin/node |
||||
msg_ok "Installed Node.js" |
||||
|
||||
msg_info "Installing ${APPLICATION}" |
||||
|
||||
su immich -c "git clone https://github.com/loeeeee/immich-in-lxc.git /tmp" |
||||
cd /tmp/immich-in-lxc |
||||
su immich -c "./install.sh" # creates env file |
||||
# Replace password in runtime.env file |
||||
sed -i 's/A_SEHR_SAFE_PASSWORD/YUaaWZAvtL@JpNgpi3z6uL4MmDMR_w/g' runtime.env |
||||
su immich -c "./install.sh" # runs rest of script |
||||
msg_ok "Installed ${APPLICATION}" |
||||
|
||||
msg_info "Creating log directory /var/log/immich" |
||||
mkdir -p /var/log/immich |
||||
msg_ok "Log directory created" |
||||
|
||||
msg_info "Creating Services" |
||||
cat <<EOF >/etc/systemd/system/immich-microservices.service |
||||
[Unit] |
||||
Description=immich microservices |
||||
Documentation=https://github.com/immich-app/immich |
||||
Requires=redis-server.service |
||||
Requires=postgresql.service |
||||
|
||||
[Service] |
||||
User=immich |
||||
Group=immich |
||||
Type=simple |
||||
Restart=on-failure |
||||
UMask=0077 |
||||
|
||||
ExecStart=/bin/bash /home/immich/app/start.sh microservices |
||||
|
||||
SyslogIdentifier=immich-microservices |
||||
StandardOutput=append:/var/log/immich/microservices.log |
||||
StandardError=append:/var/log/immich/microservices.log |
||||
|
||||
[Install] |
||||
WantedBy=multi-user.target |
||||
EOF |
||||
|
||||
cat <<EOF >/etc/systemd/system/immich-ml.service |
||||
[Unit] |
||||
Description=immich machine-learning |
||||
Documentation=https://github.com/immich-app/immich |
||||
|
||||
[Service] |
||||
User=immich |
||||
Group=immich |
||||
Type=simple |
||||
Restart=on-failure |
||||
UMask=0077 |
||||
|
||||
WorkingDirectory=/home/immich/app |
||||
EnvironmentFile=/home/immich/runtime.env |
||||
ExecStart=/home/immich/app/machine-learning/start.sh |
||||
|
||||
SyslogIdentifier=immich-machine-learning |
||||
StandardOutput=append:/var/log/immich/ml.log |
||||
StandardError=append:/var/log/immich/ml.log |
||||
|
||||
[Install] |
||||
WantedBy=multi-user.target |
||||
EOF |
||||
|
||||
cat <<EOF >/etc/systemd/system/immich-web.service |
||||
[Unit] |
||||
Description=immich web server |
||||
Documentation=https://github.com/immich-app/immich |
||||
Requires=redis-server.service |
||||
Requires=postgresql.service |
||||
Requires=immich-ml.service |
||||
Requires=immich-microservices.service |
||||
|
||||
[Service] |
||||
User=immich |
||||
Group=immich |
||||
Type=simple |
||||
Restart=on-failure |
||||
UMask=0077 |
||||
|
||||
ExecStart=/bin/bash /home/immich/app/start.sh immich |
||||
|
||||
SyslogIdentifier=immich-web |
||||
StandardOutput=append:/var/log/immich/web.log |
||||
StandardError=append:/var/log/immich/web.log |
||||
|
||||
[Install] |
||||
WantedBy=multi-user.target |
||||
EOF |
||||
|
||||
systemctl enable -q --now immich-microservices.service |
||||
systemctl enable -q --now immich-ml.service |
||||
systemctl enable -q --now immich-web.service |
||||
|
||||
msg_ok "Created Services" |
||||
|
||||
motd_ssh |
||||
customize |
||||
|
||||
msg_info "Cleaning up" |
||||
|
||||
$STD apt-get -y autoremove |
||||
$STD apt-get -y autoclean |
||||
msg_ok "Cleaned" |
||||
|
Loading…
Reference in new issue