#!/bin/bash R='\033[0;31m' G='\033[0;32m' Y='\033[0;33m' C='\033[1;34m' B='\033[0;36m' S='\033[0;90m' NC='\033[0m' OPTION=${1:-} GIT_SERVER="github.com" CP_VER="5.0.0" PRC_=0 CP_DOMAIN=${CP_DOMAIN:-} CP_LANG=${CP_LANG:-} CP_THEME=${CP_THEME:-} CP_PASSWD=${CP_PASSWD:-} CP_MIRROR=${CP_MIRROR:-} CP_KEY=${CP_KEY:-} CLOUDFLARE_EMAIL=${CLOUDFLARE_EMAIL:-} CLOUDFLARE_API_KEY=${CLOUDFLARE_API_KEY:-} MEGA_EMAIL=${MEGA_EMAIL:-} MEGA_PASSWORD=${MEGA_PASSWORD:-} FTP_USERNAME=${FTP_USERNAME:-} FTP_PASSWORD=${FTP_PASSWORD:-} FTP_HOSTNAME=${FTP_HOSTNAME:-} FTP_NAME=${FTP_NAME:-} CP_DOMAIN_=$(echo "${CP_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g") CP_MIRROR_=$(echo "${CP_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g") CP_SPB="" CP_IP="domain" EXTERNAL_PORT="" EXTERNAL_DOCKER="" CP_OS="`awk '/^ID=/' /etc/*os-release | awk -F'=' '{ print tolower($2) }'`" CP_MEM=$(free -m | grep -oP '\d+' | sed '1!d') if echo "${CP_MEM}" | grep -qE '^[0-9]+$'; then DOCKER_MEM=("--memory" "$(( CP_MEM / 2 ))m") else DOCKER_MEM=() fi post_commands() { LOCAL_DOMAIN=${1:-${CP_DOMAIN}} LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g") if [ "$(grep "%d_%m_%Y" /etc/crontab)" != "" ]; then sed -i "s/%d_%m_%Y/\\\%d_\\\%m_\\\%Y/g" /etc/crontab &> /dev/null fi if [ "$(grep "${LOCAL_DOMAIN}_autostart" /etc/crontab)" = "" ] \ && [ -f "/home/${LOCAL_DOMAIN}/process.json" ] \ && [ -f "/home/${LOCAL_DOMAIN}/app.js" ]; then echo -e "\n" >>/etc/crontab echo "# ----- ${LOCAL_DOMAIN}_autostart --------------------------------------" >>/etc/crontab echo "@reboot root /usr/bin/cinemapress autostart \"${LOCAL_DOMAIN}\" >>\"/home/${LOCAL_DOMAIN}/log/autostart_\$(date '+\%d_\%m_\%Y').log\" 2>&1" >>/etc/crontab echo "# ----- ${LOCAL_DOMAIN}_autostart --------------------------------------" >>/etc/crontab fi if [ "$(grep "${LOCAL_DOMAIN}_renew" /etc/crontab)" = "" ] \ && [ -d "/home/${LOCAL_DOMAIN}/config/production/nginx/ssl.d/live/${LOCAL_DOMAIN}/" ]; then sed -i "s/.*${LOCAL_DOMAIN}_ssl.*//g" /etc/crontab &> /dev/null sed -i "s/.*${LOCAL_DOMAIN}\/config\/production\/nginx\/ssl\.d.*//g" /etc/crontab &> /dev/null echo -e "\n" >>/etc/crontab echo "# ----- ${LOCAL_DOMAIN}_renew --------------------------------------" >>/etc/crontab echo "0 23 * * * root /usr/bin/cinemapress renew \"${LOCAL_DOMAIN}\" >>\"/home/${LOCAL_DOMAIN}/log/renew_\$(date '+\%d_\%m_\%Y').log\" 2>&1" >>/etc/crontab echo "# ----- ${LOCAL_DOMAIN}_renew --------------------------------------" >>/etc/crontab fi } docker_install() { if [ "${CP_OS}" != "alpine" ] && [ "${CP_OS}" != "\"alpine\"" ]; then if [ "`basename "${0}"`" != "cinemapress" ] || [ "${1}" != "" ]; then echo ""; echo -n "☐ Downloading cinemapress.sh ..."; wget -qO /usr/bin/cinemapress https://gitlab.com/CinemaPress/CinemaPress/raw/master/cinemapress.sh -o /dev/null && \ chmod +x /usr/bin/cinemapress echo -e "\\r${G}✓ Downloading cinemapress.sh ...${NC}" echo -n "☐ Installing packages ..." if [ "${CP_OS}" = "debian" ] || [ "${CP_OS}" = "\"debian\"" ]; then DEBIAN_FRONTEND=noninteractive apt-get -y -qq update >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install sudo >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install wget >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install curl >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install nano >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install htop >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install lsb-release >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install ca-certificates >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install git-core >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install openssl >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install net-tools >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install netcat >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install cron >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install zip >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install gzip >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install bzip2 >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install unzip >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install gcc >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install make >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install libssl-dev >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install locales >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install lsof >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 elif [ "${CP_OS}" = "ubuntu" ] || [ "${CP_OS}" = "\"ubuntu\"" ]; then DEBIAN_FRONTEND=noninteractive apt-get -y -qq update >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install sudo >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install wget >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install curl >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install nano >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install htop >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install lsb-release >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install ca-certificates >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install git-core >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install openssl >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install netcat >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install net-tools >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install cron >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install zip >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install gzip >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install bzip2 >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install unzip >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install gcc >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install make >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install libssl-dev >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install locales >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install lsof >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install syslog-ng >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 elif [ "${CP_OS}" = "fedora" ] || [ "${CP_OS}" = "\"fedora\"" ]; then dnf -y install sudo >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install wget >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install curl >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install nano >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install htop >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install lsb-release >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install ca-certificates >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install git-core >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install openssl >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install netcat >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install cron >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install zip >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install gzip >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install bzip2 >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install unzip >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install gcc >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install make >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install libssl-dev >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install locales >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 dnf -y install lsof >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 elif [ "${CP_OS}" = "centos" ] || [ "${CP_OS}" = "\"centos\"" ]; then yum install -y epel-release >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y sudo >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y wget >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y curl >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y nano >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y htop >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y lsb-release >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y ca-certificates >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y git-core >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y openssl >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y netcat >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y net-tools >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y cron >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y zip >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y gzip >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y bzip2 >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y unzip >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y gcc >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y make >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y libssl-dev >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y locales >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 yum install -y lsof >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 fi echo -e "\\r${G}✓ Installing packages ...${NC}" echo "" fi if [ "$(docker -v 2>/dev/null)" = "" ]; then clear _line _logo _header "DOCKER" _content _content "Installing Docker ..." _content _s sed -Ei "s/#SyslogFacility AUTH/SyslogFacility AUTH/g" /etc/ssh/sshd_config >/dev/null sed -Ei "s/#LogLevel INFO/LogLevel ERROR/g" /etc/ssh/sshd_config >/dev/null sed -Ei "s/#MaxAuthTries 6/MaxAuthTries 3/g" /etc/ssh/sshd_config >/dev/null sed -Ei "s/#ClientAliveCountMax 3/ClientAliveCountMax 99999/g" /etc/ssh/sshd_config >/dev/null sed -Ei "s/#ClientAliveInterval 0/ClientAliveInterval 20/g" /etc/ssh/sshd_config >/dev/null if [ "${CP_OS}" = "debian" ] || [ "${CP_OS}" = "\"debian\"" ]; then CP_ARCH="`dpkg --print-architecture`" DEBIAN_FRONTEND=noninteractive apt-get -y -qq remove docker docker-engine docker.io containerd runc DEBIAN_FRONTEND=noninteractive apt-get -y -qq update DEBIAN_FRONTEND=noninteractive apt-get -y -qq install apt-transport-https DEBIAN_FRONTEND=noninteractive apt-get -y -qq install ca-certificates DEBIAN_FRONTEND=noninteractive apt-get -y -qq install curl DEBIAN_FRONTEND=noninteractive apt-get -y -qq install gnupg2 DEBIAN_FRONTEND=noninteractive apt-get -y -qq install software-properties-common curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --yes --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg if [ "${CP_ARCH}" = "amd64" ] || [ "${CP_ARCH}" = "x86_64" ] || [ "${CP_ARCH}" = "i386" ] then CP_ARCH="amd64" elif [ "${CP_ARCH}" = "armhf" ] || [ "${CP_ARCH}" = "armel" ] then CP_ARCH="armhf" elif [ "${CP_ARCH}" = "arm64" ] then CP_ARCH="arm64" fi sed -i "s~.*docker.com.*~~g" /etc/apt/sources.list &> /dev/null echo "deb [arch=${CP_ARCH} signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null DEBIAN_FRONTEND=noninteractive apt-get -y -qq update DEBIAN_FRONTEND=noninteractive apt-get -y -qq install docker-ce DEBIAN_FRONTEND=noninteractive apt-get -y -qq install docker-ce-cli DEBIAN_FRONTEND=noninteractive apt-get -y -qq install containerd.io systemctl restart ssh elif [ "${CP_OS}" = "ubuntu" ] || [ "${CP_OS}" = "\"ubuntu\"" ]; then CP_ARCH="`dpkg --print-architecture`" DEBIAN_FRONTEND=noninteractive apt-get -y -qq remove docker docker-engine docker.io containerd runc DEBIAN_FRONTEND=noninteractive apt-get -y -qq update DEBIAN_FRONTEND=noninteractive apt-get -y -qq install apt-transport-https DEBIAN_FRONTEND=noninteractive apt-get -y -qq install ca-certificates DEBIAN_FRONTEND=noninteractive apt-get -y -qq install curl DEBIAN_FRONTEND=noninteractive apt-get -y -qq install gnupg-agent DEBIAN_FRONTEND=noninteractive apt-get -y -qq install software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --yes --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg if [ "${CP_ARCH}" = "amd64" ] || [ "${CP_ARCH}" = "x86_64" ] || [ "${CP_ARCH}" = "i386" ] then CP_ARCH="amd64" elif [ "${CP_ARCH}" = "armhf" ] || [ "${CP_ARCH}" = "armel" ] then CP_ARCH="armhf" elif [ "${CP_ARCH}" = "arm64" ] then CP_ARCH="arm64" elif [ "${CP_ARCH}" = "ppc64el" ] || [ "${CP_ARCH}" = "ppc" ] || [ "${CP_ARCH}" = "powerpc" ] then CP_ARCH="ppc64el" elif [ "${CP_ARCH}" = "s390x" ] then CP_ARCH="s390x" fi sed -i "s~.*docker.com.*~~g" /etc/apt/sources.list &> /dev/null echo "deb [arch=${CP_ARCH} signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null DEBIAN_FRONTEND=noninteractive apt-get -y -qq update DEBIAN_FRONTEND=noninteractive apt-get -y -qq install docker-ce DEBIAN_FRONTEND=noninteractive apt-get -y -qq install docker-ce-cli DEBIAN_FRONTEND=noninteractive apt-get -y -qq install containerd.io systemctl restart ssh elif [ "${CP_OS}" = "fedora" ] || [ "${CP_OS}" = "\"fedora\"" ]; then dnf -y remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine dnf -y install dnf-plugins-core dnf config-manager \ --add-repo \ https://download.docker.com/linux/fedora/docker-ce.repo dnf -y install docker-ce dnf -y install docker-ce-cli dnf -y install containerd.io systemctl start docker systemctl enable docker systemctl restart sshd elif [ "${CP_OS}" = "centos" ] || [ "${CP_OS}" = "\"centos\"" ]; then yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce yum install -y docker-ce-cli yum install -y containerd.io systemctl start docker systemctl enable docker systemctl restart sshd fi if [ "$(docker -v 2>/dev/null)" = "" ]; then clear _header "ERROR" _content _content "Docker is not installed, try installing manually!" _content _s exit 0 fi fi fi } ip_install() { IP1=`ip route get 1 | awk '{print $NF;exit}'` IP2=`ip route get 8.8.4.4 | head -1 | cut -d' ' -f8` IP3=`ip route get 8.8.4.4 | head -1 | awk '{print $7}'` if [ "`expr "${IP1}" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$'`" = "0" ] \ && [ "`expr "${IP2}" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$'`" = "0" ] \ && [ "`expr "${IP3}" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$'`" = "0" ]; then exit 1; fi if [ "`expr "${IP1}" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$'`" != "0" ]; then IP_DOMAIN="${IP1}"; \ elif [ "`expr "${IP2}" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$'`" != "0" ]; then IP_DOMAIN="${IP2}"; \ elif [ "`expr "${IP3}" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$'`" != "0" ]; then IP_DOMAIN="${IP3}"; fi CP_IP="ip" CP_LANG="${1}" CP_THEME="tarly" CP_PASSWD="test" sh_yes _s sh_progress 1_install "${IP_DOMAIN}" "${CP_LANG}" "${CP_THEME}" "${CP_PASSWD}" sh_progress 100 success_install } 1_install() { LOCAL_DOMAIN=${1:-${CP_DOMAIN}} LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g") LOCAL_LANG=${2:-${CP_LANG}} LOCAL_THEME=${3:-${CP_THEME}} LOCAL_PASSWD=${4:-${CP_PASSWD}} echo "${PRC_}% install" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log if [ "$(grep "_uptimerobot" /etc/crontab)" != "" ]; then touch "/home/.uptimerobot" &>/dev/null fi # MEMTOTATAL=$(grep MemTotal /proc/meminfo | awk '{print $2}') # SWAPTOTAL=$(grep SwapTotal /proc/meminfo | awk '{print $2}') # MEMORY_DOCKER="" # if [ "${MEMTOTATAL}" -gt 0 ]; then # MEMDOCKER=$(("${MEMTOTATAL}"-"${MEMTOTATAL}"*10/100)) # if [ "${MEMDOCKER}" -gt 0 ]; then # SWAPDOCKER=$(("${MEMDOCKER}"+"${SWAPTOTAL}"-"${SWAPTOTAL}"*10/100)) # MEMORY_DOCKER="--memory ${MEMDOCKER}k --memory-swap ${SWAPDOCKER}k --oom-kill-disable" # fi # fi if [ ! "$(docker network ls | grep cinemapress)" ]; then docker network create \ --driver bridge \ cinemapress >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 fi # docker build -t cinemapress/docker https://github.com/CinemaPress/CinemaPress.git docker pull cinemapress/docker:latest >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 docker run \ -d \ --name "${LOCAL_DOMAIN_}" \ "${DOCKER_MEM[@]}" \ -e "CP_DOMAIN=${LOCAL_DOMAIN}" \ -e "CP_DOMAIN_=${LOCAL_DOMAIN_}" \ -e "CP_LANG=${LOCAL_LANG}" \ -e "CP_THEME=${LOCAL_THEME}" \ -e "CP_PASSWD=${LOCAL_PASSWD}" \ -e "RCLONE_CONFIG=/home/${LOCAL_DOMAIN}/config/production/rclone.conf" \ -w /home/"${LOCAL_DOMAIN}" \ --restart always \ --network cinemapress \ -v /var/lib/sphinx/data:/var/lib/sphinx/data \ -v /var/local/balancer:/var/local/balancer \ -v /home/"${LOCAL_DOMAIN}":/home/"${LOCAL_DOMAIN}" \ ${EXTERNAL_DOCKER} \ cinemapress/docker:latest >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 WEBSITE_RUN=1 while [ "${WEBSITE_RUN}" != "50" ]; do sleep 3 WEBSITE_RUN=$((1+${WEBSITE_RUN})) if [ "`docker ps -aq -f status=running -f name=^/${LOCAL_DOMAIN_}\$ 2>/dev/null`" != "" ]; then WEBSITE_RUN=50 fi done sh_progress echo "${PRC_}% nginx" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log DIR_SUCCESS=1 while [ "${DIR_SUCCESS}" != "10" ]; do sleep 3 DIR_SUCCESS=$((1+${DIR_SUCCESS})) if [ -d "/home/${LOCAL_DOMAIN}/" ]; then ln -s /home/"${LOCAL_DOMAIN}"/ /root/"${LOCAL_DOMAIN}" >/dev/null DIR_SUCCESS=10 fi done if [ "`docker ps -aq -f status=running -f name=^/nginx\$ 2>/dev/null`" != "" ]; then docker restart nginx >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 else if [ "${CP_IP}" = "domain" ] \ && [ "`netstat -tunlp | grep 0.0.0.0:80`" = "" ] \ && [ "`netstat -tunlp | grep :::80`" = "" ]; then # docker build -t cinemapress/nginx https://github.com/CinemaPress/CinemaPress.git#:config/default/nginx # docker build -t cinemapress/fail2ban https://github.com/CinemaPress/CinemaPress.git#:config/default/fail2ban # docker build -t cinemapress/filestash https://github.com/CinemaPress/CinemaPress.git#:config/default/filestash BOTS=() if [ ! -f "/etc/nginx/bots.d/blockbots.conf" ] \ && [ -f "/home/${LOCAL_DOMAIN}/config/production/nginx/bots.d/blockbots.conf" ]; then mkdir -p /etc/nginx/bots.d cp -rf /home/"${LOCAL_DOMAIN}"/config/production/nginx/bots.d/* /etc/nginx/bots.d/ fi if [ -f "/etc/nginx/bots.d/blockbots.conf" ]; then BOTS=(-v /etc/nginx/bots.d:/etc/nginx/bots.d) fi docker run \ -d \ --name nginx \ "${DOCKER_MEM[@]}" \ --restart always \ --network cinemapress \ -v /var/log/nginx:/var/log/nginx \ -v /var/local/balancer:/var/local/balancer \ -v /home:/home \ "${BOTS[@]}" \ -p 80:80 \ -p 443:443 \ cinemapress/nginx:latest >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 NGINX_RUN=1 while [ "${NGINX_RUN}" != "50" ]; do sleep 3 NGINX_RUN=$((1+${NGINX_RUN})) if [ "`docker ps -aq -f status=running -f name=^/nginx\$ 2>/dev/null`" != "" ]; then NGINX_RUN=50 fi done sh_progress echo "${PRC_}% fail2ban" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log if [ ! -f "/var/log/nginx/access.log" ]; then touch "/var/log/nginx/access.log"; fi if [ ! -f "/var/log/auth.log" ]; then touch "/var/log/auth.log"; fi docker run \ -d \ --name fail2ban \ "${DOCKER_MEM[@]}" \ --restart always \ --network host \ --cap-add NET_ADMIN \ --cap-add NET_RAW \ -v /home/${LOCAL_DOMAIN}/config/production/fail2ban:/data \ -v /var/log:/var/log:ro \ cinemapress/fail2ban:latest >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 FAIL2BAN_RUN=1 while [ "${FAIL2BAN_RUN}" != "50" ]; do sleep 3 FAIL2BAN_RUN=$((1+${FAIL2BAN_RUN})) if [ "`docker ps -aq -f status=running -f name=^/fail2ban\$ 2>/dev/null`" != "" ]; then FAIL2BAN_RUN=50 fi done sh_progress echo "${PRC_}% filestash" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log docker run \ -d \ --name filestash \ "${DOCKER_MEM[@]}" \ --restart always \ --network cinemapress \ cinemapress/filestash >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1 FILESTASH_RUN=1 while [ "${FILESTASH_RUN}" != "50" ]; do sleep 3 FILESTASH_RUN=$((1+${FILESTASH_RUN})) if [ "`docker ps -aq -f status=running -f name=^/filestash\$ 2>/dev/null`" != "" ]; then docker exec "${LOCAL_DOMAIN_}" /usr/bin/cinemapress container ftp FILESTASH_RUN=50 fi done fi fi sleep 20 if [ "$(grep "_uptimerobot" /etc/crontab)" != "" ]; then touch "/home/.uptimerobot" &>/dev/null fi } 2_update() { LOCAL_DOMAIN=${1:-${CP_DOMAIN}} LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g") LOCAL_MEGA_EMAIL=${2:-${MEGA_EMAIL}} LOCAL_MEGA_PASSWORD=${3:-${MEGA_PASSWORD}} LOCAL_NAME_STORAGE=${4:-mega} LOCAL_FTP_HOST=${5} if [ "${LOCAL_MEGA_EMAIL}" != "" ] && [ "${LOCAL_MEGA_PASSWORD}" != "" ]; then LOCAL_CONF_STORAGE=() if [ "${LOCAL_NAME_STORAGE}" = "mega" ]; then LOCAL_CONF_STORAGE=(mega user "${LOCAL_MEGA_EMAIL}" pass "${LOCAL_MEGA_PASSWORD}") elif [ "${LOCAL_NAME_STORAGE}" = "opendrive" ]; then LOCAL_CONF_STORAGE=(opendrive username "${LOCAL_MEGA_EMAIL}" password "${LOCAL_MEGA_PASSWORD}") elif [ "${LOCAL_NAME_STORAGE}" = "ftp" ]; then LOCAL_CONF_STORAGE=(ftp user "${LOCAL_MEGA_EMAIL}" pass "${LOCAL_MEGA_PASSWORD}" host "${LOCAL_FTP_HOST}") fi docker exec "${LOCAL_DOMAIN_}" rclone config create CINEMAPRESS "${LOCAL_CONF_STORAGE[@]}" \ >>/var/log/docker_backup_"$(date '+%d_%m_%Y')".log 2>&1 sleep 10 fi echo "${PRC_}% update" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log if [ "$(grep "_uptimerobot" /etc/crontab)" != "" ]; then touch "/home/.uptimerobot" &>/dev/null fi CHECK_MEGA=$(docker exec -t "${LOCAL_DOMAIN_}" rclone config show 2>/dev/null | grep "CINEMAPRESS") if [ "${CHECK_MEGA}" = "" ]; then _header "WARNING" _content _content "You have no configuration to create a backup!" _content _content "Configure for MEGA.nz cloud storage in one line:" _content printf " ~# cinemapress b %s config \"email\" \"pass\"" "${LOCAL_DOMAIN}" _br _content _content "email - your email on MEGA.nz" _content "pass - your password on MEGA.nz" _content _content "Configure for FTP storage in one line:" _content printf " ~# cinemapress b %s ftp \"user\" \"pass\" \"host\"" "${LOCAL_DOMAIN}" _br _content _content "user - your username on FTP" _content "pass - your password on FTP" _content "host - your IP/host on FTP" _content _s exit 0 fi KILOBYTE_ALL=$(df -k /home | tail -1 | awk '{print $4}') KILOBYTE_DIR=614400 if [ "${KILOBYTE_ALL}" -lt "${KILOBYTE_DIR}" ]; then _header "WARNING" _content _content "Less than 600 MB of free space left on the server!" _content "You need to increase disk space." _content _s exit 0 fi if [ ! -f "/home/${LOCAL_DOMAIN}/config/production/config.js" ]; then _header "WARNING" _content _content "File config.js not found!" _content _s exit 0 fi AA=$(grep "\"CP_ALL\"" /home/"${LOCAL_DOMAIN}"/process.json) XX=$(grep "\"CP_XMLPIPE2\"" /home/"${LOCAL_DOMAIN}"/process.json) KK=$(grep "\"key\"" /home/"${LOCAL_DOMAIN}"/config/default/config.js) DD=$(grep "\"date\"" /home/"${LOCAL_DOMAIN}"/config/default/config.js) BM=$(grep "\"bomain\"" /home/"${LOCAL_DOMAIN}"/config/production/config.js) CP_ALL=$(echo ${AA} | sed 's/.*"CP_ALL":\s*"\([a-zA-Z0-9_| -]*\)".*/\1/') CP_XMLPIPE2=$(echo ${XX} | sed 's/.*"CP_XMLPIPE2":\s*"\([a-zA-Z0-9_| -]*\)".*/\1/') CP_KEY=$(echo ${KK} | sed 's/.*"key":\s*"\(FREE\|[a-zA-Z0-9-]\{32\}\)".*/\1/') CP_DATE=$(echo ${DD} | sed 's/.*"date":\s*"\([0-9-]*\)".*/\1/') CP_BOMAIN=$(echo ${BM} | sed 's/.*"bomain":\s*"\([a-zA-Z0-9.-]*\)".*/\1/') if [ "${CP_ALL}" = "" ] || [ "${CP_ALL}" = "${AA}" ]; then CP_ALL=""; fi if [ "${CP_XMLPIPE2}" = "" ] || [ "${CP_XMLPIPE2}" = "${AA}" ]; then CP_XMLPIPE2=""; fi DISABLE_SSL=$(grep "#ssl" /home/"${LOCAL_DOMAIN}"/config/production/nginx/conf.d/default.conf 2>/dev/null) rm -rf /home/"${LOCAL_DOMAIN}"/config/production/nginx/conf.d/default.conf mkdir -p /var/temp if [ ! -d /var/temp/nginx ]; then mkdir -p /var/temp/nginx cp -rf /home/"${LOCAL_DOMAIN}"/config/production/nginx/* /var/temp/nginx/ 2>/dev/null fi if [ ! -d /var/temp/windows ] && [ -d /home/"${LOCAL_DOMAIN}"/files/windows ]; then mv -f /home/"${LOCAL_DOMAIN}"/files/windows /var/temp/windows 2>/dev/null fi if [ ! -d /var/temp/linux ] && [ -d /home/"${LOCAL_DOMAIN}"/files/linux ]; then mv -f /home/"${LOCAL_DOMAIN}"/files/linux /var/temp/linux 2>/dev/null fi if [ ! -d /var/temp/osx ] && [ -d /home/"${LOCAL_DOMAIN}"/files/osx ]; then mv -f /home/"${LOCAL_DOMAIN}"/files/osx /var/temp/osx 2>/dev/null fi if [ ! -d /var/temp/poster ]; then mv -f /home/"${LOCAL_DOMAIN}"/files/poster /var/temp/poster 2>/dev/null fi if [ ! -d /var/temp/picture ]; then mv -f /home/"${LOCAL_DOMAIN}"/files/picture /var/temp/picture 2>/dev/null fi if [ -f /home/"${CP_BOMAIN}"/config/production/nginx/conf.d/default.conf ]; then mv -f /home/"${CP_BOMAIN}"/config/production/nginx/conf.d/default.conf \ /home/"${CP_BOMAIN}"/config/production/nginx/conf.d/disabled.conf 2>/dev/null fi 3_backup "${LOCAL_DOMAIN}" "create" 8_remove "${LOCAL_DOMAIN}" "full" "safe" if [ ! -d /var/temp/sphinx ]; then mkdir -p /var/temp/sphinx cp -rf /var/lib/sphinx/data/* /var/temp/sphinx/ 2>/dev/null fi 1_install "${LOCAL_DOMAIN}" if [ -d /var/temp/sphinx ] && [ -d /var/lib/sphinx/data ]; then cp -rf /var/temp/sphinx/* /var/lib/sphinx/data/ 2>/dev/null rm -rf /var/temp/sphinx fi if [ -d /var/temp/nginx ] && [ -d /home/"${LOCAL_DOMAIN}"/config/production/nginx ]; then cp -rf /var/temp/nginx/* /home/"${LOCAL_DOMAIN}"/config/production/nginx/ 2>/dev/null rm -rf /var/temp/nginx fi if [ -d /var/temp/windows ] && [ ! -d /home/"${LOCAL_DOMAIN}"/files/windows ]; then mv -f /var/temp/windows /home/"${LOCAL_DOMAIN}"/files/windows 2>/dev/null fi if [ -d /var/temp/linux ] && [ ! -d /home/"${LOCAL_DOMAIN}"/files/linux ]; then mv -f /var/temp/linux /home/"${LOCAL_DOMAIN}"/files/linux 2>/dev/null fi if [ -d /var/temp/osx ] && [ ! -d /home/"${LOCAL_DOMAIN}"/files/osx ]; then mv -f /var/temp/osx /home/"${LOCAL_DOMAIN}"/files/osx 2>/dev/null fi if [ -d /var/temp/poster ]; then rm -rf /home/"${LOCAL_DOMAIN}"/files/poster mv -f /var/temp/poster /home/"${LOCAL_DOMAIN}"/files/poster 2>/dev/null fi if [ -d /var/temp/picture ]; then rm -rf /home/"${LOCAL_DOMAIN}"/files/picture mv -f /var/temp/picture /home/"${LOCAL_DOMAIN}"/files/picture 2>/dev/null fi 3_backup "${LOCAL_DOMAIN}" "restore" docker exec nginx nginx -s reload >>/var/log/docker_update_"$(date '+%d_%m_%Y')".log 2>&1 if [ "${CP_ALL}" != "" ] && [ ! -f "/var/lib/sphinx/data/movies_${CP_DOMAIN_}.spb" ]; then sed -E -i "s/\"CP_ALL\":\s*\"[a-zA-Z0-9_| -]*\"/\"CP_ALL\":\"${CP_ALL}\"/" \ /home/"${LOCAL_DOMAIN}"/process.json fi if [ "${CP_XMLPIPE2}" != "" ]; then sed -E -i "s/\"CP_XMLPIPE2\":\s*\"[a-zA-Z0-9_| -]*\"/\"CP_XMLPIPE2\":\"${CP_XMLPIPE2}\"/" \ /home/"${LOCAL_DOMAIN}"/process.json fi if [ "${#CP_KEY}" -eq "4" ] || [ "${#CP_KEY}" -eq "32" ]; then sed -E -i "s/\"key\":\s*\"(FREE|[a-zA-Z0-9-]{32})\"/\"key\":\"${CP_KEY}\"/" \ /home/"${LOCAL_DOMAIN}"/config/production/config.js sed -E -i "s/\"key\":\s*\"(FREE|[a-zA-Z0-9-]{32})\"/\"key\":\"${CP_KEY}\"/" \ /home/"${LOCAL_DOMAIN}"/config/default/config.js fi if [ "${#CP_DATE}" -eq "10" ]; then sed -E -i "s/\"date\":\s*\"[0-9-]*\"/\"date\":\"${CP_DATE}\"/" \ /home/"${LOCAL_DOMAIN}"/config/production/config.js sed -E -i "s/\"date\":\s*\"[0-9-]*\"/\"date\":\"${CP_DATE}\"/" \ /home/"${LOCAL_DOMAIN}"/config/default/config.js fi if [ "${DISABLE_SSL}" = "" ]; then docker exec "${LOCAL_DOMAIN_}" /usr/bin/cinemapress container protocol "https://" fi if [ -f /home/"${CP_BOMAIN}"/config/production/nginx/conf.d/disabled.conf ]; then mv -f /home/"${CP_BOMAIN}"/config/production/nginx/conf.d/disabled.conf \ /home/"${CP_BOMAIN}"/config/production/nginx/conf.d/default.conf 2>/dev/null fi for all_server in /home/*/config/production/nginx/conf.d/default.conf; do [ -f "${all_server}" ] || continue sed -i '/pagespeed/d' "${all_server}" done docker exec nginx nginx -s reload >>/var/log/docker_update_"$(date '+%d_%m_%Y')".log 2>&1 docker restart "${LOCAL_DOMAIN_}" >>/var/log/docker_update_"$(date '+%d_%m_%Y')".log 2>&1 sleep 10 } 3_backup() { LOCAL_DOMAIN=${1:-${CP_DOMAIN}} LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g") LOCAL_ACTION=${2} # 1 | 2 | 3 | create | restore | config | opendrive | ftp LOCAL_MEGA_EMAIL=${3:-${MEGA_EMAIL}} LOCAL_MEGA_PASSWORD=${4:-${MEGA_PASSWORD}} LOCAL_ACTION2=${5} # 1 | 2 | create | restore LOCAL_DOMAIN2=${6:-${LOCAL_DOMAIN}} echo "${PRC_}% backup" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log if [ "$(grep "_uptimerobot" /etc/crontab)" != "" ]; then touch "/home/.uptimerobot" &>/dev/null fi if [ -f "/var/rclone.conf" ] && [ ! -f "/home/${LOCAL_DOMAIN}/config/production/rclone.conf" ]; then cp -r /var/rclone.conf /home/"${LOCAL_DOMAIN}"/config/production/rclone.conf elif [ -f "/home/${LOCAL_DOMAIN}/config/production/rclone.conf" ]; then cp -r /home/"${LOCAL_DOMAIN}"/config/production/rclone.conf /var/rclone.conf fi sleep 5 RCS=$(docker exec -t "${LOCAL_DOMAIN_}" rclone config show 2>/dev/null | grep "CINEMAPRESS") LOCAL_CONF_STORAGE=() if [ "${LOCAL_ACTION}" = "opendrive" ]; then LOCAL_CONF_STORAGE=(opendrive username "${LOCAL_MEGA_EMAIL}" password "${LOCAL_MEGA_PASSWORD}") docker exec "${LOCAL_DOMAIN_}" rclone config create CINEMAPRESS "${LOCAL_CONF_STORAGE[@]}" \ >>/var/log/docker_backup_"$(date '+%d_%m_%Y')".log 2>&1 sh_progress 100 exit 0 elif [ "${LOCAL_ACTION}" = "ftp" ]; then if [ "${LOCAL_DOMAIN2}" = "static" ]; then LOCAL_CONF_STORAGE=(ftp user "${LOCAL_MEGA_EMAIL}" pass "${LOCAL_MEGA_PASSWORD}" host "${LOCAL_ACTION2}") docker exec "${LOCAL_DOMAIN_}" rclone config create CINEMASTATIC "${LOCAL_CONF_STORAGE[@]}" \ >>/var/log/docker_backup_"$(date '+%d_%m_%Y')".log 2>&1 sh_progress 100 exit 0 fi LOCAL_CONF_STORAGE=(ftp user "${LOCAL_MEGA_EMAIL}" pass "${LOCAL_MEGA_PASSWORD}" host "${LOCAL_ACTION2}") docker exec "${LOCAL_DOMAIN_}" rclone config create CINEMAPRESS "${LOCAL_CONF_STORAGE[@]}" \ >>/var/log/docker_backup_"$(date '+%d_%m_%Y')".log 2>&1 sh_progress 100 exit 0 else LOCAL_CONF_STORAGE=(mega user "${LOCAL_MEGA_EMAIL}" pass "${LOCAL_MEGA_PASSWORD}") fi if [ "${LOCAL_ACTION}" = "config" ] || [ "${LOCAL_ACTION}" = "3" ] || [ "${RCS}" = "" ]; then if [ "${LOCAL_MEGA_EMAIL}" != "" ] && [ "${LOCAL_MEGA_PASSWORD}" != "" ]; then sh_progress echo "${PRC_}% config check-connection" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log docker exec "${LOCAL_DOMAIN_}" rclone config create CINEMAPRESS "${LOCAL_CONF_STORAGE[@]}" \ >>/var/log/docker_backup_"$(date '+%d_%m_%Y')".log 2>&1 sleep 10 CHECK_MKDIR=$(docker exec -t "${LOCAL_DOMAIN_}" rclone mkdir CINEMAPRESS:/check-connection 2>/dev/null) sleep 3 CHECK_RMDIR=$(docker exec -t "${LOCAL_DOMAIN_}" rclone rmdir CINEMAPRESS:/check-connection 2>/dev/null) if [ "${CHECK_MKDIR}" != "" ] || [ "${CHECK_RMDIR}" != "" ]; then _header "ERROR" _content _content "Cannot connect to backup storage." _content _s exit 0 fi cp -r /home/"${LOCAL_DOMAIN}"/config/production/rclone.conf /var/rclone.conf if [ "${LOCAL_ACTION2}" = "create" ] || [ "${LOCAL_ACTION2}" = "1" ]; then docker exec "${LOCAL_DOMAIN_}" /usr/bin/cinemapress container backup create hand \ >>/var/log/docker_backup_"$(date '+%d_%m_%Y')".log 2>&1 elif [ "${LOCAL_ACTION2}" = "restore" ] || [ "${LOCAL_ACTION2}" = "2" ]; then docker exec "${LOCAL_DOMAIN_}" /usr/bin/cinemapress container backup restore "${LOCAL_DOMAIN2}" \ >>/var/log/docker_backup_"$(date '+%d_%m_%Y')".log 2>&1 docker exec nginx nginx -s reload \ >>/var/log/docker_backup_"$(date '+%d_%m_%Y')".log 2>&1 fi else _header "ERROR RCLONE CONFIG" _content _content "Configure for MEGA.nz cloud storage in one line:" _content printf " ~# cinemapress b %s config \"email\" \"pass\"" "${LOCAL_DOMAIN}" _br _content _content "email - your email on MEGA.nz" _content "pass - your password on MEGA.nz" _content _content "Configure for FTP storage in one line:" _content printf " ~# cinemapress b %s ftp \"user\" \"pass\" \"host\"" "${LOCAL_DOMAIN}" _br _content _content "user - your username on FTP" _content "pass - your password on FTP" _content "host - your IP/host on FTP" _content _content "after creating config, you can create/restore backup:" _content printf " ~# cinemapress b %s create" "${LOCAL_DOMAIN}" _br printf " ~# cinemapress b %s restore" "${LOCAL_DOMAIN}" _br _content _s exit 0 fi else if [ "${LOCAL_ACTION}" = "" ]; then _header "MAKE A CHOICE" printf "${C}---- ${G}1)${NC} create ${S}-------------------- Create New Backup Website ${C}----\n" printf "${C}---- ${G}2)${NC} restore ${S}------------ Restore Website From Last Backup ${C}----\n" _s read -e -p 'OPTION [1-2]: ' LOCAL_ACTION LOCAL_ACTION=$(echo "${LOCAL_ACTION}" | iconv -c -t UTF-8) _br fi sh_progress echo "${PRC_}% backup check-connection" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log CHECK_MKDIR=$(docker exec -t "${LOCAL_DOMAIN_}" rclone mkdir CINEMAPRESS:/check-connection 2>/dev/null) sleep 3 CHECK_RMDIR=$(docker exec -t "${LOCAL_DOMAIN_}" rclone rmdir CINEMAPRESS:/check-connection 2>/dev/null) if [ "${CHECK_MKDIR}" != "" ] || [ "${CHECK_RMDIR}" != "" ]; then _header "ERROR" _content _content "Cannot connect to backup storage." _content _s exit 0 fi if [ "${LOCAL_ACTION}" = "create" ] || [ "${LOCAL_ACTION}" = "1" ]; then docker exec "${LOCAL_DOMAIN_}" /usr/bin/cinemapress container backup create hand \ >>/var/log/docker_backup_"$(date '+%d_%m_%Y')".log 2>&1 elif [ "${LOCAL_ACTION}" = "restore" ] || [ "${LOCAL_ACTION}" = "2" ]; then docker exec "${LOCAL_DOMAIN_}" /usr/bin/cinemapress container backup restore \ >>/var/log/docker_backup_"$(date '+%d_%m_%Y')".log 2>&1 docker exec nginx nginx -s reload \ >>/var/log/docker_backup_"$(date '+%d_%m_%Y')".log 2>&1 fi fi sleep 10 } 4_theme() { LOCAL_DOMAIN=${1:-${CP_DOMAIN}} LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g") LOCAL_THEME=${2:-${CP_THEME}} echo "${PRC_}% theme" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log YES="NOT" if [ -d "/home/${LOCAL_DOMAIN}/themes/${LOCAL_THEME}" ]; then _header "${LOCAL_THEME}"; _content _content "This theme exists!" _content _s if [ ${3} ] then YES=${3} YES=`echo ${YES} | iconv -c -t UTF-8` echo "Update? [YES/not] : ${YES}" else read -e -p 'Update? [YES/not] : ' YES YES=`echo ${YES} | iconv -c -t UTF-8` fi _br if [ "${YES}" != "ДА" ] && [ "${YES}" != "Да" ] && [ "${YES}" != "да" ] && [ "${YES}" != "YES" ] && [ "${YES}" != "Yes" ] && [ "${YES}" != "yes" ] && [ "${YES}" != "Y" ] && [ "${YES}" != "y" ] && [ "${YES}" != "" ] then exit 0 else git clone https://${GIT_SERVER}/CinemaPress/Theme-"${LOCAL_THEME}".git \ /var/"${LOCAL_THEME}" >>/var/log/docker_theme_"$(date '+%d_%m_%Y')".log 2>&1 mkdir -p /home/"${LOCAL_DOMAIN}"/themes/"${LOCAL_THEME}"/ cp -rf /var/"${LOCAL_THEME}"/* /home/"${LOCAL_DOMAIN}"/themes/"${LOCAL_THEME}"/ sed -Ei "s/\"theme\":\s*\"[a-zA-Z0-9-]*\"/\"theme\":\"${LOCAL_THEME}\"/" \ /home/"${LOCAL_DOMAIN}"/config/production/config.js docker exec "${LOCAL_DOMAIN_}" node optimal.js "${LOCAL_THEME}" \ >>/var/log/docker_theme_"$(date '+%d_%m_%Y')".log 2>&1 fi else git clone https://${GIT_SERVER}/CinemaPress/Theme-"${LOCAL_THEME}".git \ /var/"${LOCAL_THEME}" >>/var/log/docker_theme_"$(date '+%d_%m_%Y')".log 2>&1 mkdir -p /home/"${LOCAL_DOMAIN}"/themes/"${LOCAL_THEME}"/ cp -rf /var/"${LOCAL_THEME}"/* /home/"${LOCAL_DOMAIN}"/themes/"${LOCAL_THEME}"/ sed -Ei "s/\"theme\":\s*\"[a-zA-Z0-9-]*\"/\"theme\":\"${LOCAL_THEME}\"/" \ /home/"${LOCAL_DOMAIN}"/config/production/config.js docker exec "${LOCAL_DOMAIN_}" node optimal.js "${LOCAL_THEME}" \ >>/var/log/docker_theme_"$(date '+%d_%m_%Y')".log 2>&1 fi rm -rf /var/"${LOCAL_THEME:?}" sh_progress echo "${PRC_}% theme" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log if [ "$(docker -v 2>/dev/null)" != "" ]; then docker restart "${LOCAL_DOMAIN_}" >>/var/log/docker_theme_"$(date '+%d_%m_%Y')".log 2>&1 fi sleep 10 } 5_database() { LOCAL_DOMAIN=${1:-${CP_DOMAIN}} LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g") echo "${PRC_}% database" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log _header "MOVIES" _content _content "Update movies information" _content "using the instructions:" _content "https://enota.club/threads/3043" _content _s exit 0 } 6_https() { LOCAL_DOMAIN=${1:-${CP_DOMAIN}} LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g") LOCAL_CLOUDFLARE_EMAIL=${2:-${CLOUDFLARE_EMAIL}} LOCAL_CLOUDFLARE_API_KEY=${3:-${CLOUDFLARE_API_KEY}} LOCAL_SUBDOMAIN=${4:-} echo "${PRC_}% https" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log if [ "$(grep "_uptimerobot" /etc/crontab)" != "" ]; then touch "/home/.uptimerobot" &>/dev/null fi NGX="/home/${LOCAL_DOMAIN}/config/production/nginx" if [ "${LOCAL_CLOUDFLARE_EMAIL}" != "" ] \ && [ "${LOCAL_CLOUDFLARE_API_KEY}" != "" ]; then echo -e "dns_cloudflare_email = \"${LOCAL_CLOUDFLARE_EMAIL}\"\ndns_cloudflare_api_key = \"${LOCAL_CLOUDFLARE_API_KEY}\"" \ > "${NGX}/cloudflare.ini" _header "Generating, please wait ..." _br sleep 5 DOMAINS=(-d "${LOCAL_DOMAIN}" -d *."${LOCAL_DOMAIN}") if [ "${LOCAL_SUBDOMAIN}" != "" ]; then for SUBDOMAIN in $LOCAL_SUBDOMAIN; do DOMAINS=("${DOMAINS[@]}" -d *."${SUBDOMAIN}"."${LOCAL_DOMAIN}"); done fi docker run \ --rm \ -v "${NGX}/ssl.d:/etc/letsencrypt" \ -v "${NGX}/letsencrypt:/var/lib/letsencrypt" \ -v "${NGX}/cloudflare.ini:/cloudflare.ini" \ certbot/dns-cloudflare \ certonly \ --dns-cloudflare \ --dns-cloudflare-credentials /cloudflare.ini \ --email "support@${LOCAL_DOMAIN}" \ --non-interactive \ --agree-tos \ "${DOMAINS[@]}" \ --server https://acme-v02.api.letsencrypt.org/directory \ >>/var/log/docker_https_"$(date '+%d_%m_%Y')".log 2>&1 sleep 15 if [ -d "${NGX}/ssl.d/live/${LOCAL_DOMAIN}/" ]; then openssl dhparam -out "${NGX}/ssl.d/live/${LOCAL_DOMAIN}/dhparam.pem" 2048 \ >>/var/log/docker_https_"$(date '+%d_%m_%Y')".log 2>&1 sed -Ei "s~/self-signed/~/live/~g" "${NGX}/ssl.d/default.conf" sed -Ei "s/ssl_stapling off;/ssl_stapling on;/g" "${NGX}/ssl.d/default.conf" sed -Ei "s/#ssl //g" "${NGX}/conf.d/default.conf" sed -Ei "s/\"protocol\":\s*\"http:/\"protocol\":\"https:/" \ "/home/${LOCAL_DOMAIN}/config/production/config.js" >/dev/null docker restart "${LOCAL_DOMAIN_}" \ >>/var/log/docker_https_"$(date '+%d_%m_%Y')".log 2>&1 _header "Generating wildcard certificate, completed successfully!" _br else _header "ERROR" _content _content "Wildcard SSL certificate is not generated," _content "check the correct Email and Global API Key." _content _s fi elif [ "${LOCAL_CLOUDFLARE_EMAIL}" = "ss" ]; then rm -rf "${NGX}"/ssl.d/self-signed/"${LOCAL_DOMAIN}" mkdir -p "${NGX}"/ssl.d/self-signed/"${LOCAL_DOMAIN}" openssl req \ -x509 \ -nodes \ -days 3650 \ -subj "/C=CA/ST=QC/O=${LOCAL_DOMAIN}/CN=${LOCAL_DOMAIN}" \ -addext "subjectAltName=DNS:${LOCAL_DOMAIN}" \ -newkey rsa:2048 \ -keyout "${NGX}"/ssl.d/self-signed/"${LOCAL_DOMAIN}"/privkey.pem \ -out "${NGX}"/ssl.d/self-signed/"${LOCAL_DOMAIN}"/fullchain.pem openssl dhparam \ -out "${NGX}"/ssl.d/self-signed/"${LOCAL_DOMAIN}"/dhparam.pem 2048 sed -Ei "s/live/self-signed/g" "${NGX}/ssl.d/default.conf" sed -Ei "s/ssl_stapling on;/ssl_stapling off;/g" "${NGX}/ssl.d/default.conf" sed -Ei "s/#ssl //g" "${NGX}/conf.d/default.conf" sed -Ei "s/\"protocol\":\s*\"http:/\"protocol\":\"https:/" \ "/home/${LOCAL_DOMAIN}/config/production/config.js" >/dev/null docker restart "${LOCAL_DOMAIN_}" \ >>/var/log/docker_https_"$(date '+%d_%m_%Y')".log 2>&1 _header "Generating self-signed certificate, completed successfully!" _br fi sleep 10 } 7_mirror() { LOCAL_DOMAIN=${1:-${CP_DOMAIN}} LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g") LOCAL_MIRROR=${2:-${CP_MIRROR}} LOCAL_MIRROR_=$(echo "${LOCAL_MIRROR}" | sed -r "s/[^A-Za-z0-9]/_/g") if [ ! -f "/home/${LOCAL_MIRROR}/process.json" ]; then if [ -f "/home/${LOCAL_DOMAIN}/process.json" ]; then M_="${LOCAL_MIRROR_}" LOCAL_MIRROR="${LOCAL_DOMAIN}" LOCAL_MIRROR_="${LOCAL_DOMAIN_}" LOCAL_DOMAIN="" LOCAL_DOMAIN_="${M_}" else _header "ERROR" _content _content "First create a mirror website ${LOCAL_MIRROR}," _content "import the movie database and" _content "configure HTTPS on it (if you use it)." _content _s exit 0 fi fi sh_progress echo "${PRC_}% mirror" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log if [ "$(grep "_uptimerobot" /etc/crontab)" != "" ]; then touch "/home/.uptimerobot" &>/dev/null fi docker stop "${LOCAL_MIRROR_}" >>/var/log/docker_mirror_"$(date '+%d_%m_%Y')".log 2>&1 if [ -f "/home/${LOCAL_DOMAIN}/process.json" ]; then 3_backup "${LOCAL_DOMAIN}" "create" docker stop "${LOCAL_DOMAIN_}" \ >>/var/log/docker_mirror_"$(date '+%d_%m_%Y')".log 2>&1 rm -rf \ /home/"${LOCAL_MIRROR}"/config/comment \ /home/"${LOCAL_MIRROR}"/config/content \ /home/"${LOCAL_MIRROR}"/config/rt \ /home/"${LOCAL_MIRROR}"/config/user cp -r \ /home/${LOCAL_DOMAIN}/config/comment \ /home/"${LOCAL_MIRROR}"/config/comment cp -r \ /home/${LOCAL_DOMAIN}/config/content \ /home/"${LOCAL_MIRROR}"/config/content cp -r \ /home/${LOCAL_DOMAIN}/config/rt \ /home/"${LOCAL_MIRROR}"/config/rt cp -r \ /home/${LOCAL_DOMAIN}/config/user \ /home/"${LOCAL_MIRROR}"/config/user cp -r \ /home/${LOCAL_DOMAIN}/config/production/config.js \ /home/"${LOCAL_MIRROR}"/config/production/config.js cp -r \ /home/${LOCAL_DOMAIN}/config/production/modules.js \ /home/"${LOCAL_MIRROR}"/config/production/modules.js cp -r \ /home/${LOCAL_DOMAIN}/themes/default/public/desktop/* \ /home/"${LOCAL_MIRROR}"/themes/default/public/desktop/ cp -r \ /home/${LOCAL_DOMAIN}/themes/default/public/mobile/* \ /home/"${LOCAL_MIRROR}"/themes/default/public/mobile/ cp -r \ /home/${LOCAL_DOMAIN}/themes/default/views/mobile/* \ /home/"${LOCAL_MIRROR}"/themes/default/views/mobile/ cp -r \ /home/${LOCAL_DOMAIN}/files/* \ /home/"${LOCAL_MIRROR}"/files/ sed -Ei \ "s/${LOCAL_DOMAIN_}:3000/${LOCAL_MIRROR_}:3000/g" \ /home/${LOCAL_DOMAIN}/config/production/nginx/conf.d/default.conf fi if [ "${LOCAL_DOMAIN_}" != "" ]; then for f in /home/"${LOCAL_MIRROR}"/config/comment/comment_${LOCAL_DOMAIN_}.*; do mv -f "${f}" "`echo ${f} | sed s/comment_${LOCAL_DOMAIN_}/comment_${LOCAL_MIRROR_}/`" 2>/dev/null done for f in /home/"${LOCAL_MIRROR}"/config/content/content_${LOCAL_DOMAIN_}.*; do mv -f "${f}" "`echo ${f} | sed s/content_${LOCAL_DOMAIN_}/content_${LOCAL_MIRROR_}/`" 2>/dev/null done for f in /home/"${LOCAL_MIRROR}"/config/rt/rt_${LOCAL_DOMAIN_}.*; do mv -f "${f}" "`echo ${f} | sed s/rt_${LOCAL_DOMAIN_}/rt_${LOCAL_MIRROR_}/`" 2>/dev/null done for f in /home/"${LOCAL_MIRROR}"/config/user/user_${LOCAL_DOMAIN_}.*; do mv -f "${f}" "`echo ${f} | sed s/user_${LOCAL_DOMAIN_}/user_${LOCAL_MIRROR_}/`" 2>/dev/null done fi sh_progress echo "${PRC_}% mirror2" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log docker start "${LOCAL_MIRROR_}" \ >>/var/log/docker_mirror_"$(date '+%d_%m_%Y')".log 2>&1 sleep 10 docker exec "${LOCAL_MIRROR_}" /usr/bin/cinemapress container mirror \ >>/var/log/docker_mirror_"$(date '+%d_%m_%Y')".log 2>&1 sleep 10 docker exec nginx nginx -s reload \ >>/var/log/docker_mirror_"$(date '+%d_%m_%Y')".log 2>&1 sleep 10 } 8_remove() { LOCAL_DOMAIN=${1:-${CP_DOMAIN}} LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g") LOCAL_FULL=${2} LOCAL_SAFE=${3} echo "${PRC_}% remove" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log if [ "$(grep "_uptimerobot" /etc/crontab)" != "" ]; then touch "/home/.uptimerobot" &>/dev/null fi if [ "${LOCAL_SAFE}" = "safe" ] && [ -f "/home/${LOCAL_DOMAIN}/config/production/config.js" ]; then T=`grep "\"theme\"" /home/${LOCAL_DOMAIN}/config/production/config.js` L=`grep "\"language\"" /home/${LOCAL_DOMAIN}/config/production/config.js` CP_THEME=`echo ${T} | sed 's/.*"theme":\s*"\([a-zA-Z0-9_-]*\)".*/\1/'` CP_LANG=`echo ${L} | sed 's/.*"language":\s*"\([a-z]*\)".*/\1/'` if [ "${CP_THEME}" = "" ] \ || [ "${CP_LANG}" = "" ] \ || [ "${CP_THEME}" = "${T}" ] \ || [ "${CP_LANG}" = "${L}" ]; then _header "ERROR" _content _content "The field has an invalid value:" _content "CP_THEME: ${CP_THEME}" _content "CP_LANG: ${CP_LANG}" _content _line exit 0 fi fi docker stop ${LOCAL_DOMAIN_} >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 docker rm -f ${LOCAL_DOMAIN_} >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 # docker build -t cinemapress/docker https://github.com/CinemaPress/CinemaPress.git docker pull cinemapress/docker:latest >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 sed -i "s/.*${LOCAL_DOMAIN}.*//g" /etc/crontab &> /dev/null rm -rf /home/${LOCAL_DOMAIN:?} rm -rf /root/${LOCAL_DOMAIN:?} if [ "${LOCAL_FULL}" != "" ]; then echo "STOP NGINX" >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 docker stop nginx >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 echo "RM NGINX" >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 docker rm -f nginx >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 echo "PULL NGINX" >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 # docker build -t cinemapress/nginx https://github.com/CinemaPress/CinemaPress.git#:config/default/nginx docker pull cinemapress/nginx:latest >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 # echo "STOP FAIL2BAN" >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 # docker stop fail2ban >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 # echo "RM FAIL2BAN" >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 # docker rm -f fail2ban >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 # echo "PULL FAIL2BAN" >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 # # docker build -t cinemapress/fail2ban https://github.com/CinemaPress/CinemaPress.git#:config/default/fail2ban # docker pull cinemapress/fail2ban:latest >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 # echo "STOP FILESTASH" >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 # docker stop filestash >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 # echo "RM FILESTASH" >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 # docker rm -f filestash >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 # echo "PULL FILESTASH" >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 # # docker build -t cinemapress/filestash https://github.com/CinemaPress/CinemaPress.git#:config/default/filestash # docker pull cinemapress/filestash:latest >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 fi echo "RMI OLD" >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 docker rmi -f $(docker images -f 'dangling=true' -q) >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 sleep 10 } option() { clear _line _logo _header "MAKE A CHOICE" printf "${C}---- ${G}i)${NC} install ${S}------------------ Create Movies / TV Website ${C}----\n" printf "${C}---- ${G}u)${NC} update ${S}------------------- Upgrade CinemaPress System ${C}----\n" printf "${C}---- ${G}b)${NC} backup ${S}-------------------- Backup System Master Data ${C}----\n" printf "${C}---- ${G}t)${NC} theme ${S}------------- Install / Update Website Template ${C}----\n" printf "${C}---- ${G}h)${NC} https ${S}-------------- Getting Wildcard SSL Certificate ${C}----\n" printf "${C}---- ${G}r)${NC} remove ${S}---------------------------- Uninstall Website ${C}----\n" _s AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then OPTION=${1} echo "OPTION: ${OPTION}" else read -e -p 'OPTION: ' OPTION OPTION=`echo ${OPTION} | iconv -c -t UTF-8` fi if [ "${OPTION}" != "" ] then if echo "${OPTION}" | grep -qE ^[0-9a-z]+$ then AGAIN=10 else printf "${R}WARNING:${NC} Enter the letter of the option. \n" AGAIN=$((${AGAIN}+1)) fi else printf "${R}WARNING:${NC} Make your choice. \n" AGAIN=$((${AGAIN}+1)) fi done printf "\n${NC}" } read_domain() { CP_DOMAIN=${1:-${CP_DOMAIN}} if [ "${CP_DOMAIN}" = "" ]; then _header "DOMAIN NAME OR IP" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then CP_DOMAIN=${1} CP_DOMAIN=`echo ${CP_DOMAIN} | iconv -c -t UTF-8` echo ": ${CP_DOMAIN}" else AUTO_DOMAIN="" cd /home && for D in *; do if [ -d "$D" ] && [ -f "$D/process.json" ] && [ -f "$D/app.js" ] && [ "${AUTO_DOMAIN}" = "" ]; then AUTO_DOMAIN="$D" fi done if [ "${AUTO_DOMAIN}" = "" ]; then read -e -p ': ' CP_DOMAIN else read -e -p ': ' -i "${AUTO_DOMAIN}" CP_DOMAIN fi CP_DOMAIN=`echo ${CP_DOMAIN} | iconv -c -t UTF-8` fi if [ "${CP_DOMAIN}" != "" ] then if echo "${CP_DOMAIN}" | grep -qE ^[.a-z0-9-]+$ then CP_DOMAIN_=`echo ${CP_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g" | sed -r "s/www\.//g" | sed -r "s/http:\/\///g" | sed -r "s/https:\/\///g"` if [ "`expr "${CP_DOMAIN}" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$'`" != "0" ]; then CP_IP="ip" fi AGAIN=10 else printf "${NC} You entered: ${R}${CP_DOMAIN}${NC} \n" printf "${R}WARNING:${NC} Only latin lowercase characters, \n" printf "${NC} numbers, dots, and hyphens are allowed! \n" AGAIN=$((${AGAIN}+1)) fi else printf "${R}WARNING:${NC} Domain name cannot be blank. \n" AGAIN=$((${AGAIN}+1)) fi done if [ "${CP_DOMAIN}" = "" ]; then exit 1; fi fi if [ "`expr "${CP_DOMAIN}" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$'`" != "0" ]; then while [ "`netstat -tunlp 2>/dev/null | grep :${EXTERNAL_PORT}`" != "" ]; do RND=`sh_random 1 9999` EXTERNAL_PORT=$((30000+${RND})) done if [ "`netstat -tunlp | grep 0.0.0.0:80`" = "" ] \ && [ "`netstat -tunlp | grep :::80`" = "" ]; then EXTERNAL_PORT="80" fi EXTERNAL_DOCKER="-p ${EXTERNAL_PORT}:3000" CP_IP="ip" fi CP_DOMAIN_=`echo ${CP_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"` } read_mirror() { CP_MIRROR=${1:-${CP_MIRROR}} if [ "${CP_MIRROR}" = "" ]; then _header "MIRROR WEBSITE" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then CP_MIRROR=${1} CP_MIRROR=`echo ${CP_MIRROR} | iconv -c -t UTF-8` echo ": ${CP_MIRROR}" else read -e -p ': ' CP_MIRROR CP_MIRROR=`echo ${CP_MIRROR} | iconv -c -t UTF-8` fi if [ "${CP_MIRROR}" != "" ] then if echo "${CP_MIRROR}" | grep -qE ^[.a-z0-9-]+$ then if [ "${CP_DOMAIN}" = "${CP_MIRROR}" ] then printf "${R}WARNING:${NC} The mirror of the website cannot be \n" printf "${NC} the same as the domain of the main website! \n" AGAIN=$((${AGAIN}+1)) else CP_MIRROR_=`echo ${CP_MIRROR} | sed -r "s/[^A-Za-z0-9]/_/g" | sed -r "s/www\.//g" | sed -r "s/http:\/\///g" | sed -r "s/https:\/\///g"` AGAIN=10 fi else printf "${NC} You entered: ${R}${CP_MIRROR}${NC} \n" printf "${R}WARNING:${NC} Only latin lowercase characters, \n" printf "${NC} numbers, dots, and hyphens are allowed! \n" AGAIN=$((${AGAIN}+1)) fi else printf "${R}WARNING:${NC} Mirror domain name cannot be blank. \n" AGAIN=$((${AGAIN}+1)) fi done if [ "${CP_MIRROR}" = "" ]; then exit 1; fi fi CP_MIRROR_=`echo ${CP_MIRROR} | sed -r "s/[^A-Za-z0-9]/_/g" | sed -r "s/www\.//g" | sed -r "s/http:\/\///g" | sed -r "s/https:\/\///g"` } read_theme() { CP_THEME=${1:-${CP_THEME}} if [ "${CP_THEME}" = "" ]; then _header "WEBSITE THEME" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then CP_THEME=${1} CP_THEME=$(echo ${CP_THEME} | iconv -c -t UTF-8) echo ": ${CP_THEME}" else read -e -p ': ' -i "snow" CP_THEME CP_THEME=$(echo ${CP_THEME} | iconv -c -t UTF-8) fi if [ "${CP_THEME}" = "" ] then AGAIN=10 CP_THEME='tarly' echo ": ${CP_THEME}" else if [ "${CP_THEME}" = "default" ] || [ "${CP_THEME}" = "hodor" ] || [ "${CP_THEME}" = "sansa" ] || [ "${CP_THEME}" = "robb" ] || [ "${CP_THEME}" = "ramsay" ] || [ "${CP_THEME}" = "tyrion" ] || [ "${CP_THEME}" = "cersei" ] || [ "${CP_THEME}" = "joffrey" ] || [ "${CP_THEME}" = "drogo" ] || [ "${CP_THEME}" = "bran" ] || [ "${CP_THEME}" = "arya" ] || [ "${CP_THEME}" = "mormont" ] || [ "${CP_THEME}" = "tarly" ] || [ "${CP_THEME}" = "daenerys" ] || [ "${CP_THEME}" = "tormund" ] || [ "${CP_THEME}" = "snow" ] || [ "${CP_THEME}" = "dustin" ] then AGAIN=10 else printf "%b There is no such theme! \n" "${NC}" printf "%bWARNING:%b Currently there are theme: hodor, sansa, robb, ramsay, tyrion, cersei \n" "${R}" "${NC}" printf "%b joffrey, drogo, bran, arya, mormont, tarly и daenerys, tormund, snow, dustin \n" "${NC}" AGAIN=$(("${AGAIN}"+1)) fi fi done if [ "${CP_THEME}" = "" ]; then exit 1; fi fi } read_password() { CP_PASSWD=${1:-${CP_PASSWD}} if [ "${CP_PASSWD}" = "" ]; then _header "PASSWORD ADMIN PANEL" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then CP_PASSWD=${1} CP_PASSWD=`echo ${CP_PASSWD} | iconv -c -t UTF-8` echo ": ${CP_PASSWD}" else read -e -p ': ' -i "`echo ${RANDOM} | tr '[0-9]' '[a-z]'`${RANDOM}`echo ${RANDOM} | tr '[0-9]' '[a-z]'`" CP_PASSWD CP_PASSWD=`echo ${CP_PASSWD} | iconv -c -t UTF-8` fi if [ "${CP_PASSWD}" != "" ] then if echo "${CP_PASSWD}" | grep -qE ^[a-zA-Z0-9]+$ then AGAIN=10 else printf "${NC} You entered: ${R}${CP_PASSWD}${NC} \n" printf "${R}WARNING:${NC} Only latin characters and numbers! \n" AGAIN=$((${AGAIN}+1)) fi else printf "${R}WARNING:${NC} Admin panel password cannot be empty. \n" AGAIN=$((${AGAIN}+1)) fi done if [ "${CP_PASSWD}" = "" ]; then exit 1; fi fi } read_key() { CP_KEY=${1:-${CP_KEY}} if [ "${CP_KEY}" = "" ]; then _header "DATABASE KEY" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ]; then CP_KEY=${1} CP_KEY=`echo ${CP_KEY} | iconv -c -t UTF-8` echo ": ${CP_KEY}" else read -e -p ': ' CP_KEY CP_KEY=`echo ${CP_KEY} | iconv -c -t UTF-8` fi if [ "${CP_KEY}" != "" ] then if echo "${CP_KEY}" | grep -qE ^[A-Za-z0-9]+$ then AGAIN=10 else printf "${NC} You entered: ${R}${CP_KEY}${NC} \n " printf "${R}WARNING:${NC} Only latin characters \n" printf "${NC} and numbers are allowed! \n" AGAIN=$((${AGAIN}+1)) fi else printf "${R}WARNING:${NC} You can purchase a key \n " printf "${NC} in the admin panel of your website. \n " AGAIN=$((${AGAIN}+1)) fi done if [ "${CP_KEY}" = "" ]; then exit 1; fi fi if [ "${CP_LANG}" = "" ]; then L=`grep "\"language\"" /home/${CP_DOMAIN}/config/production/config.js` CP_LANG=`echo "${L}" | sed 's/.*"language":\s*"\([a-z]*\)".*/\1/'` if [ "${CP_LANG}" = "" ] \ || [ "${CP_LANG}" = "${L}" ]; then _header "ERROR"; _content _content "Failed to determine" _content "the language of the website." _content _s exit 0 fi fi } read_lang() { CP_LANG=${1:-${CP_LANG}} if [ "${CP_LANG}" = "" ]; then _header "WEBSITE LANGUAGE" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then CP_LANG=${1} CP_LANG=`echo ${CP_LANG} | iconv -c -t UTF-8` echo ": ${CP_LANG}" else read -e -p ': ' -i "en" CP_LANG CP_LANG=`echo ${CP_LANG} | iconv -c -t UTF-8` fi if [ "${CP_LANG}" = "" ] then AGAIN=10 CP_LANG='en' echo ": ${CP_LANG}" else if [ "${CP_LANG}" = "ru" ] || [ "${CP_LANG}" = "en" ] || [ "${CP_LANG}" = "Русский" ] || [ "${CP_LANG}" = "English" ] || [ "${CP_LANG}" = "русский" ] || [ "${CP_LANG}" = "english" ] then if [ "${CP_LANG}" = "ru" ] || [ "${CP_LANG}" = "Русский" ] || [ "${CP_LANG}" = "русский" ] then CP_LANG="ru" else CP_LANG="en" fi AGAIN=10 else printf "${NC} There is no such language! \n" printf "${R}WARNING:${NC} Currently there are \n" printf "${NC} languages: ru and en. \n" AGAIN=$((${AGAIN}+1)) fi fi done if [ "${CP_LANG}" = "" ]; then exit 1; fi fi } read_cloudflare_zone_id() { CLOUDFLARE_ZONE_ID=${1:-${CLOUDFLARE_ZONE_ID}} if [ "${CLOUDFLARE_ZONE_ID}" = "" ]; then _header "CLOUDFLARE ZONE ID" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then CLOUDFLARE_ZONE_ID=${1} CLOUDFLARE_ZONE_ID=`echo ${CLOUDFLARE_ZONE_ID} | iconv -c -t UTF-8` echo ": ${CLOUDFLARE_ZONE_ID}" else read -e -p ': ' CLOUDFLARE_ZONE_ID CLOUDFLARE_ZONE_ID=`echo ${CLOUDFLARE_ZONE_ID} | iconv -c -t UTF-8` fi if [ "${CLOUDFLARE_ZONE_ID}" != "" ] then if echo "${CLOUDFLARE_ZONE_ID}" | grep -qE ^[.a-zA-Z0-9-]+$ then AGAIN=10 else printf "${NC} You entered: ${R}${CLOUDFLARE_ZONE_ID}${NC} \n" printf "${R}WARNING:${NC} Only latin characters \n" printf "${NC} and numbers are allowed! \n" AGAIN=$((${AGAIN}+1)) fi fi done if [ "${CLOUDFLARE_ZONE_ID}" = "" ]; then exit 1; fi fi } read_cloudflare_email() { CLOUDFLARE_EMAIL=${1:-${CLOUDFLARE_EMAIL}} if [ "${CLOUDFLARE_EMAIL}" = "" ]; then _header "CLOUDFLARE EMAIL" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then CLOUDFLARE_EMAIL=${1} CLOUDFLARE_EMAIL=`echo ${CLOUDFLARE_EMAIL} | iconv -c -t UTF-8` echo ": ${CLOUDFLARE_EMAIL}" else read -e -p ': ' CLOUDFLARE_EMAIL CLOUDFLARE_EMAIL=`echo ${CLOUDFLARE_EMAIL} | iconv -c -t UTF-8` fi if [ "${CLOUDFLARE_EMAIL}" != "" ] then if echo "${CLOUDFLARE_EMAIL}" | grep -qE ^[.a-zA-Z0-9@_-]+$ then AGAIN=10 else printf "${NC} You entered: ${R}${CLOUDFLARE_EMAIL}${NC} \n" printf "${R}WARNING:${NC} Only latin characters, @, numbers, \n" printf "${NC} dots, underscore and hyphens are allowed! \n" AGAIN=$((${AGAIN}+1)) fi fi done if [ "${CLOUDFLARE_EMAIL}" = "" ]; then exit 1; fi fi } read_cloudflare_api_key() { CLOUDFLARE_API_KEY=${1:-${CLOUDFLARE_API_KEY}} if [ "${CLOUDFLARE_API_KEY}" = "" ]; then _header "CLOUDFLARE API KEY" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then CLOUDFLARE_API_KEY=${1} CLOUDFLARE_API_KEY=`echo ${CLOUDFLARE_API_KEY} | iconv -c -t UTF-8` echo ": ${CLOUDFLARE_API_KEY}" else read -e -p ': ' CLOUDFLARE_API_KEY CLOUDFLARE_API_KEY=`echo ${CLOUDFLARE_API_KEY} | iconv -c -t UTF-8` fi if [ "${CLOUDFLARE_API_KEY}" != "" ] then if echo "${CLOUDFLARE_API_KEY}" | grep -qE ^[.a-zA-Z0-9-]+$ then AGAIN=10 else printf "${NC} You entered: ${R}${CLOUDFLARE_API_KEY}${NC} \n" printf "${R}WARNING:${NC} Only latin characters \n" printf "${NC} and numbers are allowed! \n" AGAIN=$((${AGAIN}+1)) fi fi done if [ "${CLOUDFLARE_API_KEY}" = "" ]; then exit 1; fi fi } read_mega_email() { MEGA_EMAIL=${1:-${MEGA_EMAIL}} if [ "${MEGA_EMAIL}" = "" ]; then _header "BACKUP EMAIL" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then MEGA_EMAIL=${1} MEGA_EMAIL=`echo ${MEGA_EMAIL} | iconv -c -t UTF-8` echo ": ${MEGA_EMAIL}" else read -e -p ': ' MEGA_EMAIL MEGA_EMAIL=`echo ${MEGA_EMAIL} | iconv -c -t UTF-8` fi if [ "${MEGA_EMAIL}" != "" ] then if echo "${MEGA_EMAIL}" | grep -qE ^[.a-zA-Z0-9@_-]+$ then AGAIN=10 else printf "${NC} You entered: ${R}${MEGA_EMAIL}${NC} \n" printf "${R}WARNING:${NC} Only latin characters, @, numbers, \n" printf "${NC} dots, underscore and hyphens are allowed! \n" AGAIN=$((${AGAIN}+1)) fi fi done if [ "${MEGA_EMAIL}" = "" ]; then exit 1; fi fi } read_mega_password() { MEGA_PASSWORD=${1:-${MEGA_PASSWORD}} if [ "${MEGA_PASSWORD}" = "" ]; then _header "BACKUP PASSWORD" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then MEGA_PASSWORD=${1} MEGA_PASSWORD=`echo ${MEGA_PASSWORD} | iconv -c -t UTF-8` echo ": ${MEGA_PASSWORD}" else read -e -p ': ' MEGA_PASSWORD MEGA_PASSWORD=`echo ${MEGA_PASSWORD} | iconv -c -t UTF-8` fi if [ "${MEGA_PASSWORD}" != "" ] then if echo "${MEGA_PASSWORD}" | grep -qE ^[.a-zA-Z0-9@_-!?]+$ then AGAIN=10 else printf "${NC} You entered: ${R}${MEGA_PASSWORD}${NC} \n" printf "${R}WARNING:${NC} Only latin characters \n" printf "${NC} and numbers are allowed! \n" AGAIN=$((${AGAIN}+1)) fi fi done if [ "${MEGA_PASSWORD}" = "" ]; then exit 1; fi fi } read_cms() { NAME_CMS=${1:-${NAME_CMS}} if [ "${NAME_CMS}" = "" ]; then _header "NAME CMS" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then NAME_CMS=${1} NAME_CMS=`echo ${NAME_CMS} | iconv -c -t UTF-8` echo ": ${NAME_CMS}" else read -e -p ': ' -i "php-mysql" NAME_CMS NAME_CMS=`echo ${NAME_CMS} | iconv -c -t UTF-8` fi if [ "${NAME_CMS}" = "" ] then AGAIN=10 NAME_CMS='php-mysql' echo ": ${NAME_CMS}" else if [ "${NAME_CMS}" = "php-mysql" ] || [ "${NAME_CMS}" = "wordpress" ] || [ "${NAME_CMS}" = "drupal" ] || [ "${NAME_CMS}" = "joomla" ] || [ "${NAME_CMS}" = "dle" ] || [ "${NAME_CMS}" = "backup" ] then AGAIN=10 else printf "${NC} There is no such CMS! \n" printf "${R}WARNING:${NC} Currently there are \n" printf "${NC} CMS: wordpress, drupal, joomla, dle and php-mysql. \n" AGAIN=$((${AGAIN}+1)) fi fi done if [ "${NAME_CMS}" = "" ]; then exit 1; fi fi } read_os() { NAME_OS=${1:-${NAME_OS}} if [ "${NAME_OS}" = "" ]; then _header "NAME OS" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then NAME_OS=${1} NAME_OS=`echo ${NAME_OS} | iconv -c -t UTF-8` echo ": ${NAME_OS}" else read -e -p ': ' -i "windows" NAME_OS NAME_OS=`echo ${NAME_OS} | iconv -c -t UTF-8` fi if [ "${NAME_OS}" = "" ] then AGAIN=10 NAME_OS='windows' echo ": ${NAME_OS}" else if [ "${NAME_OS}" = "macos" ] || [ "${NAME_OS}" = "ios" ] || [ "${NAME_OS}" = "apple" ] then NAME_OS="osx" fi if [ "${NAME_OS}" = "windows" ] || [ "${NAME_OS}" = "linux" ] || [ "${NAME_OS}" = "osx" ] then AGAIN=10 else printf "${NC} There is no such OS! \n" printf "${R}WARNING:${NC} Currently there are \n" printf "${NC} OS: windows, linux and osx. \n" AGAIN=$((${AGAIN}+1)) fi fi done if [ "${NAME_OS}" = "" ]; then exit 1; fi fi } read_app() { APP_DOMAIN=${1:-${APP_DOMAIN}} if [ "${APP_DOMAIN}" = "" ]; then _header "DOMAIN NAME FOR SPLASH SCREEN" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then APP_DOMAIN=${1} APP_DOMAIN=`echo ${APP_DOMAIN} | iconv -c -t UTF-8` echo ": ${APP_DOMAIN}" else read -e -p ': ' APP_DOMAIN APP_DOMAIN=`echo ${APP_DOMAIN} | iconv -c -t UTF-8` fi if [ "${APP_DOMAIN}" != "" ] then if echo "${APP_DOMAIN}" | grep -qE ^[.a-z0-9-]+$ then APP_DOMAIN_=`echo ${APP_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g" | sed -r "s/www\.//g" | sed -r "s/http:\/\///g" | sed -r "s/https:\/\///g"` AGAIN=10 else printf "${NC} You entered: ${R}${APP_DOMAIN}${NC} \n" printf "${R}WARNING:${NC} Only latin lowercase characters, \n" printf "${NC} numbers, dots, and hyphens are allowed! \n" AGAIN=$((${AGAIN}+1)) fi else printf "${R}WARNING:${NC} Domain name for splash screen cannot be blank. \n" AGAIN=$((${AGAIN}+1)) fi done if [ "${APP_DOMAIN}" = "" ]; then exit 1; fi fi APP_DOMAIN_=`echo ${APP_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"` } read_import() { IMPORT_DOMAIN=${1:-${IMPORT_DOMAIN}} if [ "${IMPORT_DOMAIN}" = "" ]; then _header "IMPORT DOMAIN NAME" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then IMPORT_DOMAIN=${1} IMPORT_DOMAIN=`echo ${IMPORT_DOMAIN} | iconv -c -t UTF-8` echo ": ${IMPORT_DOMAIN}" else read -e -p ': ' IMPORT_DOMAIN IMPORT_DOMAIN=`echo ${IMPORT_DOMAIN} | iconv -c -t UTF-8` fi if [ "${IMPORT_DOMAIN}" != "" ] then if echo "${IMPORT_DOMAIN}" | grep -qE ^[.a-z0-9-]+$ then IMPORT_DOMAIN_=`echo ${IMPORT_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g" | sed -r "s/www\.//g" | sed -r "s/http:\/\///g" | sed -r "s/https:\/\///g"` AGAIN=10 else printf "${NC} You entered: ${R}${IMPORT_DOMAIN}${NC} \n" printf "${R}WARNING:${NC} Only latin lowercase characters, \n" printf "${NC} numbers, dots, and hyphens are allowed! \n" AGAIN=$((${AGAIN}+1)) fi else printf "${R}WARNING:${NC} Import domain name cannot be blank. \n" AGAIN=$((${AGAIN}+1)) fi done if [ "${IMPORT_DOMAIN}" = "" ]; then exit 1; fi fi IMPORT_DOMAIN_=`echo ${IMPORT_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"` } read_bomain() { CP_BOMAIN=${1:-${CP_BOMAIN}} if [ "${CP_BOMAIN}" = "" ]; then _header "DOMAIN FOR BOTS / ALTERNATE DOMAIN" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then CP_BOMAIN=${1} CP_BOMAIN=`echo ${CP_BOMAIN} | iconv -c -t UTF-8` echo ": ${CP_BOMAIN}" else read -e -p ': ' CP_BOMAIN CP_BOMAIN=`echo ${CP_BOMAIN} | iconv -c -t UTF-8` fi if [ "${CP_BOMAIN}" != "" ] then if echo "${CP_BOMAIN}" | grep -qE ^[.a-z0-9-]+$ then if [ "${CP_DOMAIN}" = "${CP_BOMAIN}" ] then printf "${R}WARNING:${NC} The alternate domain cannot be \n" printf "${NC} the same as the domain for users! \n" AGAIN=$((${AGAIN}+1)) else CP_BOMAIN_=`echo ${CP_BOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g" | sed -r "s/www\.//g" | sed -r "s/http:\/\///g" | sed -r "s/https:\/\///g"` AGAIN=10 fi else printf "${NC} You entered: ${R}${CP_BOMAIN}${NC} \n" printf "${R}WARNING:${NC} Only latin lowercase characters, \n" printf "${NC} numbers, dots, and hyphens are allowed! \n" AGAIN=$((${AGAIN}+1)) fi else printf "${R}WARNING:${NC} Alternate domain name cannot be blank. \n" AGAIN=$((${AGAIN}+1)) fi done if [ "${CP_BOMAIN}" = "" ]; then exit 1; fi fi CP_BOMAIN_=`echo ${CP_BOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g" | sed -r "s/www\.//g" | sed -r "s/http:\/\///g" | sed -r "s/https:\/\///g"` } read_mode() { CP_MODE=${1:-${CP_MODE}} if [ "${CP_MODE}" = "" ]; then _header "MODE debug/production" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then CP_MODE=${1} CP_MODE=$(echo ${CP_MODE} | iconv -c -t UTF-8) echo ": ${CP_MODE}" else read -e -p ': ' -i "production" CP_MODE CP_MODE=$(echo ${CP_MODE} | iconv -c -t UTF-8) fi if [ "${CP_MODE}" = "" ] then AGAIN=10 CP_MODE='production' echo ": ${CP_MODE}" else if [ "${CP_MODE}" = "production" ] || [ "${CP_MODE}" = "debug" ] then AGAIN=10 else printf "%b There is no mode! \n" "${NC}" printf "%bWARNING:%b Currently: debug, production \n" "${R}" "${NC}" AGAIN=$(("${AGAIN}"+1)) fi fi done if [ "${CP_MODE}" = "" ]; then exit 1; fi fi } read_ftp_name() { FTP_NAME=${1:-${FTP_NAME}} if [ "${FTP_NAME}" = "" ]; then _header "FTP NAME" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then FTP_NAME=${1} FTP_NAME=`echo ${FTP_NAME} | iconv -c -t UTF-8` echo ": ${FTP_NAME}" else AUTO_FTP_NAME="" for N in {1..9}; do CINEMATORRENT=$(docker exec -t "${CP_DOMAIN_}" rclone config show 2>/dev/null | grep "CINEMATORRENT${N}") if [ "${CINEMATORRENT}" = "" ]; then AUTO_FTP_NAME="CINEMATORRENT${N}" break fi done read -e -p ': ' -i "${AUTO_FTP_NAME}" FTP_NAME FTP_NAME=`echo ${FTP_NAME} | iconv -c -t UTF-8` fi if [ "${FTP_NAME}" != "" ] then if echo "${FTP_NAME}" | grep -qE ^[A-Z0-9]+$ then AGAIN=10 else printf "${NC} You entered: ${R}${FTP_NAME}${NC} \n" printf "${R}WARNING:${NC} Only upper case latin characters \n" printf "${NC} and numbers are allowed! \n" AGAIN=$((${AGAIN}+1)) fi fi done if [ "${FTP_NAME}" = "" ]; then exit 1; fi fi } read_ftp_username() { FTP_USERNAME=${1:-${FTP_USERNAME}} if [ "${FTP_USERNAME}" = "" ]; then _header "FTP USERNAME" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then FTP_USERNAME=${1} FTP_USERNAME=`echo ${FTP_USERNAME} | iconv -c -t UTF-8` echo ": ${FTP_USERNAME}" else read -e -p ': ' FTP_USERNAME FTP_USERNAME=`echo ${FTP_USERNAME} | iconv -c -t UTF-8` fi if [ "${FTP_USERNAME}" != "" ] then if echo "${FTP_USERNAME}" | grep -qE ^[.a-zA-Z0-9@_-]+$ then AGAIN=10 else printf "${NC} You entered: ${R}${FTP_USERNAME}${NC} \n" printf "${R}WARNING:${NC} Only latin characters, @, numbers, \n" printf "${NC} dots, underscore and hyphens are allowed! \n" AGAIN=$((${AGAIN}+1)) fi fi done if [ "${FTP_USERNAME}" = "" ]; then exit 1; fi fi } read_ftp_password() { FTP_PASSWORD=${1:-${FTP_PASSWORD}} if [ "${FTP_PASSWORD}" = "" ]; then _header "FTP PASSWORD" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then FTP_PASSWORD=${1} FTP_PASSWORD=`echo ${FTP_PASSWORD} | iconv -c -t UTF-8` echo ": ${FTP_PASSWORD}" else read -e -p ': ' FTP_PASSWORD FTP_PASSWORD=`echo ${FTP_PASSWORD} | iconv -c -t UTF-8` fi if [ "${FTP_PASSWORD}" != "" ] then AGAIN=10 fi done if [ "${FTP_PASSWORD}" = "" ]; then exit 1; fi fi } read_ftp_hostname() { FTP_HOSTNAME=${1:-${FTP_HOSTNAME}} if [ "${FTP_HOSTNAME}" = "" ]; then _header "FTP HOSTNAME" AGAIN=1 while [ "${AGAIN}" -lt "10" ] do if [ ${1} ] then FTP_HOSTNAME=${1} FTP_HOSTNAME=`echo ${FTP_HOSTNAME} | iconv -c -t UTF-8` echo ": ${FTP_HOSTNAME}" else read -e -p ': ' FTP_HOSTNAME FTP_HOSTNAME=`echo ${FTP_HOSTNAME} | iconv -c -t UTF-8` fi if [ "${FTP_HOSTNAME}" != "" ] then if echo "${FTP_HOSTNAME}" | grep -qE ^[.:a-zA-Z0-9-]+$ then AGAIN=10 else printf "${NC} You entered: ${R}${FTP_HOSTNAME}${NC} \n" printf "${R}WARNING:${NC} Only latin characters, numbers, \n" printf "${NC} dots and hyphens are allowed! \n" AGAIN=$((${AGAIN}+1)) fi fi done if [ "${FTP_HOSTNAME}" = "" ]; then exit 1; fi fi } sh_yes() { if [ -f "/home/${CP_DOMAIN}/process.json" ]; then clear _line _logo _header "${CP_DOMAIN}"; _content _content "Website on this domain is installed!" _content if [ -n "${1}" ]; then docker exec "${CP_DOMAIN_}" /usr/bin/cinemapress container "passwd" "${1}" \ >>/var/log/docker_passwd_"$(date '+%d_%m_%Y')".log 2>&1 docker exec nginx nginx -s reload \ >>/var/log/docker_passwd_"$(date '+%d_%m_%Y')".log 2>&1 _content "USERNAME: admin" _content "PASSWORD: ${1}" _content _content "Reboot after 10 seconds ..." _content "To cancel, press Ctrl + C" _content _s sleep 10 reboot fi _s exit 0 fi } sh_not() { if [ ! -f "/home/${CP_DOMAIN}/process.json" ] && [ ! -f "/home/${CP_DOMAIN}/index.php" ]; then clear _line _logo _header "${CP_DOMAIN}"; _content _content "Website on this domain is not installed!" _content _s exit 0 fi } sh_random() { FLOOR=${1} RANGE=${2} number=0 while [ "${number}" -le ${FLOOR} ] do number=$RANDOM let "number %= $RANGE" done echo ${number} } sh_wget() { local flag=false c count cr=$'\r' nl=$'\n' while IFS='' read -d '' -rn 1 c do if $flag then printf '%s' "$c" else if [[ $c != $cr && $c != $nl ]] then count=0 else ((count++)) if ((count > 1)) then flag=true fi fi fi done } sh_progress() { if [ "${PRC_}" = "" ]; then PRC_=0; fi if [ "${1}" != "" ]; then PRC_=${1}; fi LR='\033[1;31m'; LG='\033[1;32m'; LY='\033[1;33m'; LC='\033[1;36m'; LW='\033[1;37m'; NC='\033[0m' if [ "${PRC_}" = "0" ]; then TME=$(date +"%s"); fi SEC=`printf "%04d\n" $(($(date +"%s")-${TME}))`; SEC="$SEC sec" PRC=`printf "%.0f" ${PRC_}` SHW=`printf "%3d\n" ${PRC}` LNE=`printf "%.0f" $((${PRC}/2))` LRR=`printf "%.0f" $((${PRC}/2-12))`; if [ ${LRR} -le 0 ]; then LRR=0; fi; LYY=`printf "%.0f" $((${PRC}/2-24))`; if [ ${LYY} -le 0 ]; then LYY=0; fi; LCC=`printf "%.0f" $((${PRC}/2-36))`; if [ ${LCC} -le 0 ]; then LCC=0; fi; LGG=`printf "%.0f" $((${PRC}/2-48))`; if [ ${LGG} -le 0 ]; then LGG=0; fi; LRR_=""; LYY_=""; LCC_=""; LGG_="" for ((i=1;i<=13;i++)) do DOTS=""; for ((ii=${i};ii<13;ii++)); do DOTS="${DOTS}."; done if [ ${i} -le ${LNE} ]; then LRR_="${LRR_}#"; else LRR_="${LRR_}."; fi echo -ne " ${LW}${SEC} ${LR}${LRR_}${DOTS}${LY}............${LC}............${LG}............ ${SHW}%${NC}\r" if [ ${LNE} -ge 1 ]; then sleep .05; fi done for ((i=14;i<=25;i++)) do DOTS=""; for ((ii=${i};ii<25;ii++)); do DOTS="${DOTS}."; done if [ ${i} -le ${LNE} ]; then LYY_="${LYY_}#"; else LYY_="${LYY_}."; fi echo -ne " ${LW}${SEC} ${LR}${LRR_}${LY}${LYY_}${DOTS}${LC}............${LG}............ ${SHW}%${NC}\r" if [ ${LNE} -ge 14 ]; then sleep .05; fi done for ((i=26;i<=37;i++)) do DOTS=""; for ((ii=${i};ii<37;ii++)); do DOTS="${DOTS}."; done if [ ${i} -le ${LNE} ]; then LCC_="${LCC_}#"; else LCC_="${LCC_}."; fi echo -ne " ${LW}${SEC} ${LR}${LRR_}${LY}${LYY_}${LC}${LCC_}${DOTS}${LG}............ ${SHW}%${NC}\r" if [ ${LNE} -ge 26 ]; then sleep .05; fi done for ((i=38;i<=49;i++)) do DOTS=""; for ((ii=${i};ii<49;ii++)); do DOTS="${DOTS}."; done if [ ${i} -le ${LNE} ]; then LGG_="${LGG_}#"; else LGG_="${LGG_}."; fi echo -ne " ${LW}${SEC} ${LR}${LRR_}${LY}${LYY_}${LC}${LCC_}${LG}${LGG_}${DOTS} ${SHW}%${NC}\r" if [ ${LNE} -ge 38 ]; then sleep .05; fi done if [ "${PRC}" = "100" ]; then printf "\n\n${NC}" fi PRC_=$((10+${PRC_})) if [ ${PRC_} -gt 100 ]; then PRC_=100; fi } _content_l() { __C=${1}; _M=$((${#__C})); _L=1; _R=$((57-${_M})); L_=""; R_="" if [ "$((${#__C}%2))" != "0" ]; then _R=$((${_R})); fi for ((l=1;l<=${_L};l++)); do L_=" ${L_}"; done for ((r=1;r<=${_R};r++)); do R_=" ${R_}"; done printf "${C}----${NC}${L_}${1}${R_}${C}----\n${NC}" } _content() { __C=${1}; _M=$((${#__C}/2)); _L=$((29-${_M})); _R=$((29-${_M})); L_=""; R_="" if [ "$((${#__C}%2))" != "0" ]; then _R=$((${_R}-1)); fi for ((l=1;l<=${_L};l++)); do L_=" ${L_}"; done for ((r=1;r<=${_R};r++)); do R_=" ${R_}"; done printf "${C}----${NC}${L_}${1}${R_}${C}----\n${NC}" } _header() { _C=${1}; _M=$((${#_C}/2)); _L=$((31-${_M})); _R=$((31-${_M})); L_=""; R_="" if [ "$((${#_C}%2))" != "0" ]; then _R=$((${_R}-1)); fi for ((l=1;l<=${_L};l++)); do L_="-${L_}"; done for ((r=1;r<=${_R};r++)); do R_="-${R_}"; done printf "${C}${L_}[ ${Y}${1}${C} ]${R_}\n${NC}" } _logo() { printf " ${B} _______ ${G}_ ${B} ______ ${G} \n" printf " ${B}(_______${G}|_) ${B}(_____ \ ${G} \n" printf " ${B} _ ${G} _ ____ _____ ____ _____${B} _____) )${G}___ _____ ___ ___ \n" printf " ${B}| | ${G}| | _ \| ___ | \(____ ${B}| ____/ ${G}___) ___ |/___)/___) \n" printf " ${B}| |_____${G}| | | | | ____| | | / ___ ${B}| | ${G}| | | ____|___ |___ | \n" printf " ${B} \______)${G}_|_| |_|_____)_|_|_\_____${B}|_| ${G}|_| |_____|___/(___/ \n" printf "\n${NC}" } _line() { printf "${C}------------------------------------------------------------------\n${NC}" } _br() { if [ "${1}" = "" ]; then printf "\n${NC}" fi } _s() { if [ "${1}" = "" ]; then _line _br else _br fi } docker_run() { if [ ! -d "/home/${CP_DOMAIN}/config/production" ]; then find /var/cinemapress -maxdepth 1 -type f -iname '\.gitkeep' -delete cp -rf /var/cinemapress/* /home/"${CP_DOMAIN}" rm -rf /var/cinemapress/* /var/${CP_THEME:?} cp -rf /home/"${CP_DOMAIN}"/config/locales/${CP_LANG}/default/sphinx/source.xml /etc/sphinx/source.xml rm -rf /home/"${CP_DOMAIN}"/config/locales/${CP_LANG}/default/sphinx cp -rf /home/"${CP_DOMAIN}"/config/locales/${CP_LANG}/* /home/"${CP_DOMAIN}"/config/ cp -rf /home/"${CP_DOMAIN}"/config/default/* /home/"${CP_DOMAIN}"/config/production/ cp -rf /home/"${CP_DOMAIN}"/files/bbb.mp4 /var/local/balancer/bbb.mp4 sed -Ei "s/127.0.0.1:3000/${CP_DOMAIN_}:3000/g" /home/"${CP_DOMAIN}"/config/production/nginx/conf.d/default.conf sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/"${CP_DOMAIN}"/config/production/nginx/conf.d/default.conf sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/"${CP_DOMAIN}"/config/production/nginx/error.d/default.conf sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/"${CP_DOMAIN}"/config/production/nginx/ssl.d/default.conf sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/"${CP_DOMAIN}"/config/production/nginx/any.d/default.conf sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/"${CP_DOMAIN}"/config/production/config.js sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/"${CP_DOMAIN}"/config/default/config.js sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/"${CP_DOMAIN}"/process.json sed -Ei "s/example_com/${CP_DOMAIN_}/g" /etc/sphinx/sphinx.conf sed -Ei "s/example_com/${CP_DOMAIN_}/g" /etc/sphinx/source.xml sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/"${CP_DOMAIN}"/config/production/nginx/conf.d/default.conf sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/"${CP_DOMAIN}"/config/production/nginx/error.d/default.conf sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/"${CP_DOMAIN}"/config/production/nginx/ssl.d/default.conf sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/"${CP_DOMAIN}"/config/production/nginx/any.d/default.conf sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/"${CP_DOMAIN}"/config/production/config.js sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/"${CP_DOMAIN}"/config/default/config.js sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/"${CP_DOMAIN}"/process.json sed -Ei "s/example\.com/${CP_DOMAIN}/g" /etc/sphinx/sphinx.conf sed -Ei "s/example\.com/${CP_DOMAIN}/g" /etc/sphinx/source.xml sed -Ei "s/\"theme\":\s*\"[a-zA-Z0-9-]*\"/\"theme\":\"${CP_THEME}\"/" /home/"${CP_DOMAIN}"/config/production/config.js cp -rf /home/"${CP_DOMAIN}"/config/production/config.js /home/"${CP_DOMAIN}"/config/production/config.prev.js cp -rf /home/"${CP_DOMAIN}"/config/production/modules.js /home/"${CP_DOMAIN}"/config/production/modules.prev.js cp -rf /home/"${CP_DOMAIN}"/config/production/config.js /home/"${CP_DOMAIN}"/config/production/config.backup.js cp -rf /home/"${CP_DOMAIN}"/config/production/modules.js /home/"${CP_DOMAIN}"/config/production/modules.backup.js git clone https://${GIT_SERVER}/CinemaPress/Theme-${CP_THEME}.git /var/${CP_THEME} mkdir -p /home/"${CP_DOMAIN}"/themes/${CP_THEME}/ cp -rf /var/${CP_THEME}/* /home/"${CP_DOMAIN}"/themes/${CP_THEME}/ node /home/"${CP_DOMAIN}"/optimal.js OPENSSL=$(echo "${CP_PASSWD}" | openssl passwd -1 -stdin -salt CP) echo "admin:${OPENSSL}" > /home/"${CP_DOMAIN}"/config/production/nginx/pass.d/"${CP_DOMAIN}".pass echo "${CP_DOMAIN}:${OPENSSL}" >> /home/"${CP_DOMAIN}"/config/production/nginx/pass.d/"${CP_DOMAIN}".pass if [ "${CP_IP}" = "ip" ]; then rm -rf /home/"${CP_DOMAIN}"/config/production/nginx/conf.d/default.conf; fi if [ ! -f "/var/lib/sphinx/data/movies_${CP_DOMAIN_}.sps" ]; then indexer --all; fi sleep 5 searchd sleep 5 node /home/"${CP_DOMAIN}"/config/update/default.js if [ ! -f "/var/log/${CP_DOMAIN_}.pid" ]; then nohup /usr/bin/cinemapress container cron run >"/var/log/${CP_DOMAIN_}.log" 2>&1 & echo $! >"/var/log/${CP_DOMAIN_}.pid" fi else searchd node /home/"${CP_DOMAIN}"/config/update/config.js #node /home/"${CP_DOMAIN}"/config/update/mirror.js fi crond -L /var/log/cron.log cd /home/"${CP_DOMAIN}" && pm2-runtime start process.json } docker_stop() { sed -Ei "s/\/\/app\.use\(rebooting\(\)\);/app\.use\(rebooting\(\)\);/" "/home/${CP_DOMAIN}/app.js" touch "/home/${CP_DOMAIN}/.uptimerobot" pm2 reload all searchd --stop killall crond sleep 5 } docker_start() { sed -Ei "s/app\.use\(rebooting\(\)\);/\/\/app\.use\(rebooting\(\)\);/" "/home/${CP_DOMAIN}/app.js" rm -f "/home/${CP_DOMAIN}/.uptimerobot" searchd crond -L /var/log/cron.log node /home/"${CP_DOMAIN}"/config/update/config.js cd /home/"${CP_DOMAIN}" && pm2 delete process.json && pm2 start process.json } docker_restart() { docker_stop docker_start } docker_reload() { cd /home/"${CP_DOMAIN}" && pm2 reload process.json } docker_logs() { SHOW_ERR_LOGS=$(pm2 logs --err --lines 50 --nostream | curl -s -F 'clbin=<-' https://clbin.com) SHOW_OUT_LOGS=$(pm2 logs --out --lines 50 --nostream | curl -s -F 'clbin=<-' https://clbin.com) _header "ERR LOGS" _content _content "${SHOW_ERR_LOGS}" _content _header "OUT LOGS" _content _content "${SHOW_OUT_LOGS}" _content _s } docker_zero() { if [ -n "${1}" ]; then sed -E -i "s/\"CP_XMLPIPE2\":\s*\"[a-zA-Z0-9_| -]*\"/\"CP_XMLPIPE2\":\"xmlpipe2_${CP_DOMAIN_}\"/" \ /home/"${CP_DOMAIN}"/process.json sed -Ei "s/\"only_realtime\":\s*[0-9]*/\"only_realtime\":0/" \ /home/"${CP_DOMAIN}"/config/production/config.js else sed -E -i "s/\"CP_XMLPIPE2\":\s*\"[a-zA-Z0-9_| -]*\"/\"CP_XMLPIPE2\":\"rt_${CP_DOMAIN_}\"/" \ /home/"${CP_DOMAIN}"/process.json sed -Ei "s/\"only_realtime\":\s*[0-9]*/\"only_realtime\":1/" \ /home/"${CP_DOMAIN}"/config/production/config.js fi cd /home/"${CP_DOMAIN}" && pm2 delete process.json && pm2 start process.json } docker_zero_rt() { searchd --stop sleep 2 rm -rf /home/"${CP_DOMAIN}"/config/rt/* /home/"${CP_DOMAIN}"/config/binlog/* searchd cd /home/"${CP_DOMAIN}" && pm2 delete process.json && pm2 start process.json } docker_hand() { if [ -n "${1}" ]; then node /home/"${CP_DOMAIN}"/config/update/hand.js "player" else node /home/"${CP_DOMAIN}"/config/update/hand.js fi } docker_movies() { if [ -n "${1}" ]; then if [ -f /home/"${CP_DOMAIN}"/log/cron_movies.pid ]; then MOVIES_PID=$(cat /home/"${CP_DOMAIN}"/log/cron_movies.pid) kill -9 "${MOVIES_PID}" rm -f /home/"${CP_DOMAIN}"/log/cron_movies.pid fi echo $$ >/home/"${CP_DOMAIN}"/log/cron_movies.pid node /home/"${CP_DOMAIN}"/lib/CP_movies.js "run" rm -f /home/"${CP_DOMAIN}"/log/cron_movies.pid else if [ ! -f /home/"${CP_DOMAIN}"/log/cron_movies.pid ]; then echo $$ >/home/"${CP_DOMAIN}"/log/cron_movies.pid node /home/"${CP_DOMAIN}"/lib/CP_movies.js rm -f /home/"${CP_DOMAIN}"/log/cron_movies.pid else echo "[SKIP] The autocomplete movies of the previous task has not finished yet!" fi fi } docker_cron() { nohup /usr/bin/cinemapress torrent "${CP_DOMAIN}" upload \ >> /home/"${CP_DOMAIN}"/log/torrent_"$(date '+%d_%m_%Y')".log 2>&1 & if [ ! -f /home/"${CP_DOMAIN}"/log/cron_movies.pid ]; then echo $$ >/home/"${CP_DOMAIN}"/log/cron_movies.pid if [ -n "${1}" ]; then node /home/"${CP_DOMAIN}"/lib/CP_movies.js "run" else node /home/"${CP_DOMAIN}"/lib/CP_movies.js fi rm -f /home/"${CP_DOMAIN}"/log/cron_movies.pid else echo "[SKIP] The autocomplete movies of the previous task has not finished yet!" fi node /home/"${CP_DOMAIN}"/lib/CP_cron.js } docker_restore() { WEB_DIR=${1:-${CP_DOMAIN}} LATEST_DIR=${2:-latest} RCS=$(rclone config show 2>/dev/null | grep "CINEMAPRESS") if [ "${RCS}" = "" ]; then exit 0; fi docker_stop rm -rf /var/mega/new && mkdir -p /var/mega/new mkdir -p /home/"${CP_DOMAIN}"/config/custom sleep 5 sleep 3; rclone -vv --ignore-size copy CINEMAPRESS:"${WEB_DIR}"/"${LATEST_DIR}"/config.tar /var/mega/new/"${CP_DOMAIN}"/ sleep 3; rclone -vv --ignore-size copy CINEMAPRESS:"${WEB_DIR}"/"${LATEST_DIR}"/themes.tar /var/mega/new/"${CP_DOMAIN}"/ sleep 5 if [ -f /var/mega/new/"${CP_DOMAIN}"/config.tar ]; then cd /home/"${CP_DOMAIN}" && \ tar -xf /var/mega/new/"${CP_DOMAIN}"/config.tar else cd /home/"${CP_DOMAIN}" && \ tar -xf /var/mega/"${CP_DOMAIN}"/config.tar fi if [ -f /var/mega/new/"${CP_DOMAIN}"/themes.tar ]; then cd /home/"${CP_DOMAIN}" && \ tar --exclude=themes/default/views/desktop \ -xf /var/mega/new/"${CP_DOMAIN}"/themes.tar else cd /home/"${CP_DOMAIN}" && \ tar --exclude=themes/default/views/desktop \ -xf /var/mega/"${CP_DOMAIN}"/themes.tar fi cp -rf /home/"${CP_DOMAIN}"/config/custom/* /home/"${CP_DOMAIN}"/ 2>/dev/null sleep 5 if [ -f "/home/${CP_DOMAIN}/config/comment/comment_${CP_DOMAIN_}.ram" ]; then COMMENTSIZE=$(wc -c <"/home/${CP_DOMAIN}/config/comment/comment_${CP_DOMAIN_}.ram") if [ "${COMMENTSIZE}" -le "20" ]; then rm -rf /home/"${CP_DOMAIN}"/config/comment/*; fi else rm -rf /home/"${CP_DOMAIN}"/config/comment/*; fi if [ -f "/home/${CP_DOMAIN}/config/user/user_${CP_DOMAIN_}.ram" ]; then USERSIZE=$(wc -c <"/home/${CP_DOMAIN}/config/user/user_${CP_DOMAIN_}.ram") if [ "${USERSIZE}" -le "20" ]; then rm -rf /home/"${CP_DOMAIN}"/config/user/*; fi else rm -rf /home/"${CP_DOMAIN}"/config/user/*; fi R=$(grep "\"only_realtime\"" /home/"${CP_DOMAIN}"/config/production/config.js) ONLY_REALTIME=$(echo "${R}" | sed 's/.*"only_realtime":\s*\([0-9]*\).*/\1/') if [ "${ONLY_REALTIME}" = "1" ]; then docker_zero fi docker_start } docker_backup() { RCS=$(rclone config show 2>/dev/null | grep "CINEMAPRESS") if [ "${RCS}" = "" ]; then exit 0; fi BACKUP_DAY=$(date +%d) BACKUP_NOW=$(date +%Y-%m-%d) BACKUP_DELETE=$(date +%Y-%m-%d -d "@$(($(date +%s) - 432000))") T=$(grep "\"theme\"" /home/"${CP_DOMAIN}"/config/production/config.js) THEME_NAME=$(echo "${T}" | sed 's/.*"theme":\s*"\([a-zA-Z0-9-]*\)".*/\1/') if [ "${THEME_NAME}" = "" ] || [ "${THEME_NAME}" = "${T}" ]; then exit 0; fi if [ -f "/var/log/${CP_DOMAIN_}.pid" ]; then NOHUP_PID=$(cat "/var/log/${CP_DOMAIN_}.pid") if [ "${NOHUP_PID}" != "" ]; then kill -9 "${NOHUP_PID}" >>"/var/log/${CP_DOMAIN_}.log" echo "KILL NOHUP PID ${NOHUP_PID}" >>"/var/log/${CP_DOMAIN_}.log" fi fi if [ -f "/home/${CP_DOMAIN}/log/cron_movies.pid" ]; then CRON_PID=$(cat "/home/${CP_DOMAIN}/log/cron_movies.pid") if [ "${CRON_PID}" != "" ]; then kill -9 "${CRON_PID}" >>"/var/log/${CP_DOMAIN_}.log" echo "KILL CRON PID ${CRON_PID}" >>"/var/log/${CP_DOMAIN_}.log" fi rm -f "/home/${CP_DOMAIN}/log/cron_movies.pid" fi PORT_DOMAIN=$(grep "mysql41" /etc/sphinx/sphinx.conf | sed 's/.*:\([0-9]*\):mysql41.*/\1/') # echo "FLUSH RAMCHUNK" # echo "FLUSH RAMCHUNK rt_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}" # echo "FLUSH RAMCHUNK content_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}" # echo "FLUSH RAMCHUNK comment_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}" # echo "FLUSH RAMCHUNK user_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}" # sleep 10 # FLUSH_RAMCHUNK=1 # while [ "${FLUSH_RAMCHUNK}" != "100" ]; do # sleep 3 # FLUSH_RAMCHUNK=$((1+FLUSH_RAMCHUNK)) # TMP_FILES=$(ls /home/"${CP_DOMAIN}"/config/rt/ | grep ".tmp.") # OLD_FILES=$(ls /home/"${CP_DOMAIN}"/config/rt/ | grep ".old.") # if [ "${TMP_FILES}" = "" ]; then # echo "${FLUSH_RAMCHUNK}) TMP FILES: ${TMP_FILES}" # fi # if [ "${OLD_FILES}" = "" ]; then # echo "${FLUSH_RAMCHUNK}) OLD FILES: ${OLD_FILES}" # fi # if [ "${TMP_FILES}" = "" ] && [ "${OLD_FILES}" = "" ]; then # FLUSH_RAMCHUNK=100 # fi # done echo "OPTIMIZE INDEX" echo "OPTIMIZE INDEX rt_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}" echo "OPTIMIZE INDEX content_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}" echo "OPTIMIZE INDEX comment_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}" echo "OPTIMIZE INDEX user_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}" sleep 10 OPTIMIZE_INDEX=1 while [ "${OPTIMIZE_INDEX}" != "100" ]; do sleep 3 OPTIMIZE_INDEX=$((1+OPTIMIZE_INDEX)) TMP_FILES=$(ls /home/"${CP_DOMAIN}"/config/rt/ | grep ".tmp.") OLD_FILES=$(ls /home/"${CP_DOMAIN}"/config/rt/ | grep ".old.") if [ "${TMP_FILES}" = "" ]; then echo "${OPTIMIZE_INDEX}) TMP FILES: ${TMP_FILES}" fi if [ "${OLD_FILES}" = "" ]; then echo "${OPTIMIZE_INDEX}) OLD FILES: ${OLD_FILES}" fi if [ "${TMP_FILES}" = "" ] && [ "${OLD_FILES}" = "" ]; then OPTIMIZE_INDEX=100 fi done echo "FLUSH RTINDEX" echo "FLUSH RTINDEX rt_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}" echo "FLUSH RTINDEX content_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}" echo "FLUSH RTINDEX comment_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}" echo "FLUSH RTINDEX user_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}" sleep 10 rm -rf /var/mega/"${CP_DOMAIN:?}" && mkdir -p /var/mega/"${CP_DOMAIN}" cd /home/"${CP_DOMAIN}" && \ tar --ignore-failed-read \ --exclude=config/update \ --exclude=config/default \ --exclude=config/locales \ --exclude=config/production/fail2ban \ --exclude=config/production/filestash \ --exclude=config/production/sphinx \ --exclude=config/production/nginx \ --exclude=config/production/mail \ --exclude=config/production/php \ -uf /var/mega/"${CP_DOMAIN}"/config.tar \ config cd /home/"${CP_DOMAIN}" && \ tar --ignore-failed-read \ --exclude=files/GeoLite2-Country.mmdb \ --exclude=files/GeoLite2-ASN.mmdb \ --exclude=files/poster \ --exclude=files/torrent \ --exclude=files/picture \ --exclude=files/windows \ --exclude=files/linux \ --exclude=files/osx \ --exclude=files/bbb.mp4 \ --exclude=files/content/collage.psd \ -uf /var/mega/"${CP_DOMAIN}"/themes.tar \ themes/default/public/desktop \ themes/default/public/mobile \ themes/default/views/mobile \ themes/"${THEME_NAME}" \ files sleep 3; rclone delete --rmdirs CINEMAPRESS:"${CP_DOMAIN}"/"${BACKUP_NOW}" &> /dev/null if [ "${BACKUP_DAY}" != "10" ]; then rclone delete --rmdirs CINEMAPRESS:"${CP_DOMAIN}"/"${BACKUP_DELETE}" &> /dev/null; rclone rmdirs CINEMAPRESS:"${CP_DOMAIN}"/"${BACKUP_DELETE}" &> /dev/null; fi sleep 3; rclone delete --rmdirs CINEMAPRESS:"${CP_DOMAIN}"/latest &> /dev/null sleep 3; rclone -vv --ignore-size copy /var/mega/"${CP_DOMAIN}"/config.tar CINEMAPRESS:"${CP_DOMAIN}"/"${BACKUP_NOW}"/ sleep 3; rclone -vv --ignore-size copy /var/mega/"${CP_DOMAIN}"/themes.tar CINEMAPRESS:"${CP_DOMAIN}"/"${BACKUP_NOW}"/ sleep 3; rclone -vv --ignore-size copy /var/mega/"${CP_DOMAIN}"/config.tar CINEMAPRESS:"${CP_DOMAIN}"/latest/ sleep 3; rclone -vv --ignore-size copy /var/mega/"${CP_DOMAIN}"/themes.tar CINEMAPRESS:"${CP_DOMAIN}"/latest/ KILOBYTE_ALL=$(df -k /home | tail -1 | awk '{print $4}') KILOBYTE_DIR=$(du -d 0 /home/"${CP_DOMAIN}"/files | cut -f1) RCST=$(rclone config show 2>/dev/null | grep "CINEMASTATIC") if [ "${1}" = "" ] && [ "${RCST}" != "" ] && [ "${BACKUP_DAY}" = "10" ] && [ "${KILOBYTE_ALL}" -gt "${KILOBYTE_DIR}" ]; then CHECK_MKDIR=$(rclone mkdir CINEMASTATIC:/check-connection 2>/dev/null) sleep 3 CHECK_RMDIR=$(rclone rmdir CINEMASTATIC:/check-connection 2>/dev/null) if [ "${CHECK_MKDIR}" = "" ] && [ "${CHECK_RMDIR}" = "" ]; then cd /home/"${CP_DOMAIN}" && tar -uf /home/"${CP_DOMAIN}"/static.tar \ files/poster \ files/picture if [ -d "/home/${CP_DOMAIN}/files/windows" ]; then cd /home/"${CP_DOMAIN}" && tar -uf /home/"${CP_DOMAIN}"/app.tar \ files/windows \ files/linux \ files/osx &>/dev/null sleep 3; rclone -vv delete CINEMASTATIC:"${CP_DOMAIN}"/app.tar sleep 3; rclone -vv --ignore-size copy /home/"${CP_DOMAIN}"/app.tar CINEMASTATIC:"${CP_DOMAIN}"/ fi sleep 3; rclone -vv delete CINEMASTATIC:"${CP_DOMAIN}"/static.tar sleep 3; rclone -vv --ignore-size copy /home/"${CP_DOMAIN}"/static.tar CINEMASTATIC:"${CP_DOMAIN}"/ rm -rf /home/"${CP_DOMAIN}"/static.tar /home/"${CP_DOMAIN}"/app.tar fi fi CHECK_MKDIR=$(rclone mkdir CINEMAPRESS:/check-connection 2>/dev/null) sleep 3 CHECK_RMDIR=$(rclone rmdir CINEMAPRESS:/check-connection 2>/dev/null) if [ "${CHECK_MKDIR}" != "" ] || [ "${CHECK_RMDIR}" != "" ]; then _header "ERROR" _content _content "Cannot connect to backup storage." _content _s exit 0 fi } docker_mirror() { node /home/"${CP_DOMAIN}"/config/update/mirror.js } docker_actual() { node /home/"${CP_DOMAIN}"/config/update/actual.js } docker_available() { node /home/"${CP_DOMAIN}"/config/update/available.js "${1}" } docker_rclone() { sleep 3; rclone "${1}" "${2}" } docker_cinematheme() { rm -rf /var/theme && mkdir -p /var/theme cd /var/theme && cinematheme "${@}" sleep 3 cd /var/theme/ && for i in */; do if [ "${i%%/}" != "" ]; then sed -Ei "s/\"theme\":\s*\"[a-zA-Z0-9-]*\"/\"theme\":\"${i%%/}\"/" \ /home/"${CP_DOMAIN}"/config/production/config.js fi done cp -rf /var/theme/* /home/"${CP_DOMAIN}"/themes/ pm2 delete process.json &>/dev/null cd /home/"${CP_DOMAIN}" && pm2 start process.json &>/dev/null sleep 3 rm -rf /var/theme } docker_spb() { SPB="/var/lib/sphinx/data/movies_${CP_DOMAIN_}.spb" CNF="/home/${CP_DOMAIN}/config/production/config.js" PRC="/home/${CP_DOMAIN}/process.json" CP_SPB="" if [ ! -f "${SPB}" ] && [ -f "${CNF}" ] && [ -f "${PRC}" ]; then AA=$(grep "\"CP_ALL\"" "${PRC}") KK=$(grep "\"key\"" "${CNF}") AAA=$(echo ${AA} | sed 's/.*"CP_ALL":\s*".*[ |"]\{1\}_\([A-Za-z0-9]\{7\}\)_[ |"]\{1\}.*/\1/') KKK=$(echo ${KK} | sed 's/.*"key":\s*"\(FREE\|[a-zA-Z0-9-]\{32\}\)".*/\1/') if [ "${#AAA}" -eq "7" ] && [ "${#KKK}" -eq "32" ]; then openssl enc \ -aes-256-cbc \ -pbkdf2 \ -iter 100000 \ -in <(echo "${AAA}") \ -out "${SPB}" \ -k "${CP_DOMAIN}/${KKK}" \ -salt 2>/dev/null fi fi if [ -f "${SPB}" ] && [ -f "${CNF}" ]; then KK=$(grep "\"key\"" "${CNF}") KKK=$(echo ${KK} | sed 's/.*"key":\s*"\(FREE\|[a-zA-Z0-9-]\{32\}\)".*/\1/') if [ "${#KKK}" -eq "32" ]; then AAA=$(openssl enc -aes-256-cbc -pbkdf2 -iter 100000 -in "${SPB}" -out - -k "${CP_DOMAIN}/${KKK}" -d 2>/dev/null) if [ "${#AAA}" -eq "7" ]; then CP_SPB="_${CP_DOMAIN_}_ | _${AAA}_" fi fi fi } docker_passwd() { OPENSSL=`echo "${1}" | openssl passwd -1 -stdin -salt CP` echo "admin:${OPENSSL}" > "/home/${CP_DOMAIN}/config/production/nginx/pass.d/${CP_DOMAIN}.pass" echo "${CP_DOMAIN}:${OPENSSL}" >> "/home/${CP_DOMAIN}/config/production/nginx/pass.d/${CP_DOMAIN}.pass" } docker_ssl_on() { if [ -d "/home/${CP_DOMAIN}/config/production/nginx/ssl.d/live/${CP_DOMAIN}/" ] || \ [ -d "/home/${CP_DOMAIN}/config/production/nginx/ssl.d/self-signed/${CP_DOMAIN}/" ]; then sed -Ei "s/ #ssl include \/home\/${CP_DOMAIN}\/config\/production\/nginx\/ssl\.d\/default\.conf;/ include \/home\/${CP_DOMAIN}\/config\/production\/nginx\/ssl.d\/default.conf;/" \ "/home/${CP_DOMAIN}/config/production/nginx/conf.d/default.conf" fi } docker_ssl_off() { sed -Ei "s/ include \/home\/${CP_DOMAIN}\/config\/production\/nginx\/ssl\.d\/default\.conf;/ #ssl include \/home\/${CP_DOMAIN}\/config\/production\/nginx\/ssl.d\/default.conf;/" \ "/home/${CP_DOMAIN}/config/production/nginx/conf.d/default.conf" } docker_ftp_on() { sed -Ei "s/#ftp //g" "/home/${CP_DOMAIN}/config/production/nginx/conf.d/default.conf" } docker_torrent_on() { sed -Ei "s/#torrent //g" "/home/${CP_DOMAIN}/config/production/nginx/conf.d/default.conf" } success_install(){ CP_URL="${CP_DOMAIN}" if [ "${CP_IP}" = "ip" ] && [ "${EXTERNAL_PORT}" != "80" ]; then CP_URL="${CP_DOMAIN}:${EXTERNAL_PORT}" else docker exec -d nginx nginx -s reload fi clear _line _logo _header "${CP_DOMAIN}"; _content if [ "${CP_IP}" = "domain" ]; then _content "Website successfully installed!" else _content "Test website successfully installed!" fi _content _content "${CP_URL}" _content "${CP_URL}/admin" if [ "${CP_IP}" = "domain" ]; then _content _content "USERNAME: admin" _content "PASSWORD: ${CP_PASSWD}" fi _content _content "We strongly recommend immediately" _content "setting up automatic backup!" _content "root@vps:~# cinemapress backup" _content _content "Issues: github.com/CinemaPress" _content _s } if [ ${EUID} -ne 0 ]; then printf "${R}WARNING:${NC} Run as root user! \n${NC}" exit 1 fi if [ "${CP_OS}" = "alpine" ] || [ "${CP_OS}" = "\"alpine\"" ] || \ [ "${CP_OS}" = "debian" ] || [ "${CP_OS}" = "\"debian\"" ] || \ [ "${CP_OS}" = "ubuntu" ] || [ "${CP_OS}" = "\"ubuntu\"" ] || \ [ "${CP_OS}" = "fedora" ] || [ "${CP_OS}" = "\"fedora\"" ] || \ [ "${CP_OS}" = "centos" ] || [ "${CP_OS}" = "\"centos\"" ]; then true else _header "ERROR" _content _content "This OS is not supported." _content "Please reinstall to" _content "CentOS 7 or Debian 9/10 or Ubuntu 18/19 or Fedora 28/29" _content _s exit 0 fi docker_install if [ "$(docker -v 2>/dev/null | grep "version")" = "" ]; then docker_spb 2>/dev/null fi WHILE=0 while [ "${WHILE}" -lt "2" ]; do WHILE=$((${WHILE}+1)) case ${OPTION} in "i"|"install"|1 ) read_domain "${2}" sh_yes "${5}" read_lang "${3}" read_theme "${4}" read_password "${5}" _s "${5}" sh_progress 1_install "${2}" "${3}" "${4}" "${5}" sh_progress 100 success_install post_commands exit 0 ;; "u"|"update"|2 ) read_domain "${2}" sh_not _s "${2}" sh_progress 2_update "${2}" "${3}" "${4}" "${5}" "${6}" sh_progress 100 post_commands exit 0 ;; "b"|"backup"|3 ) read_domain "${2}" sh_not _s "${2}" sh_progress 3_backup "${2}" "${3}" "${4}" "${5}" "${6}" "${7}" sh_progress 100 exit 0 ;; "t"|"theme"|4 ) read_domain "${2}" sh_not read_theme "${3}" _s "${3}" sh_progress 4_theme "${2}" "${3}" "${4}" sh_progress 100 exit 0 ;; "d"|"database"|5 ) read_domain "${2}" sh_not read_key "${3}" _s "${3}" 5_database "${2}" "${3}" exit 0 ;; "h"|"https"|6 ) read_domain "${2}" sh_not read_cloudflare_email "${3}" read_cloudflare_api_key "${4}" _s "${4}" 6_https "${2}" "${3}" "${4}" "${5}" post_commands exit 0 ;; "m"|"mirror"|7 ) read_domain "${2}" read_mirror "${3}" _s "${3}" sh_progress 7_mirror "${2}" "${3}" sh_progress 100 exit 0 ;; "r"|"rm"|"remove"|8 ) read_domain "${2}" sh_not _s "${2}" sh_progress 8_remove "${2}" "${3}" "${4}" sh_progress 100 exit 0 ;; "en"|"ru" ) ip_install "${1}" exit 0 ;; "passwd" ) _br "${3}" read_domain "${2}" sh_not read_password "${3}" _s "${3}" sh_progress docker exec "${CP_DOMAIN_}" /usr/bin/cinemapress container "${1}" "${CP_PASSWD}" \ >>/var/log/docker_passwd_"$(date '+%d_%m_%Y')".log 2>&1 sh_progress docker exec nginx nginx -s reload \ >>/var/log/docker_passwd_"$(date '+%d_%m_%Y')".log 2>&1 sh_progress 100 exit 0 ;; "images" ) _header "IMAGES" _content _content "No images!" _content _s exit 0 ;; "premium" ) _header "PREMIUM" _content _content "No premium themes!" _content _s exit 0 ;; "upd" ) docker_install "UPD" exit 0 ;; "ss"|"self-signed" ) read_domain "${2}" sh_not _s "${2}" 6_https "${2}" "ss" exit 0 ;; "stop"|"start"|"restart" ) _br "${2}" read_domain "${2}" sh_not _s "${2}" docker ${1} ${CP_DOMAIN_} >>/var/log/docker_${1}_"$(date '+%d_%m_%Y')".log 2>&1 exit 0 ;; "zero" ) _br "${2}" read_domain "${2}" sh_not _s "${2}" _header "WARNING"; _content _content "This command will delete all movies!" _content _s if [ ${3} ]; then YES=${3} YES=`echo ${YES} | iconv -c -t UTF-8` echo "Deactivate Automatic Index? [NOT/yes] : ${YES}" else read -e -p 'Deactivate Automatic Index? [NOT/yes] : ' YES YES=`echo ${YES} | iconv -c -t UTF-8` fi _br if [ "${YES}" != "ДА" ] && [ "${YES}" != "Да" ] && [ "${YES}" != "да" ] && [ "${YES}" != "YES" ] && [ "${YES}" != "Yes" ] && [ "${YES}" != "yes" ] && [ "${YES}" != "Y" ] && [ "${YES}" != "y" ]; then docker exec "${CP_DOMAIN_}" /usr/bin/cinemapress container zero "NOT" \ >>/var/log/docker_zero_"$(date '+%d_%m_%Y')".log 2>&1 else docker exec "${CP_DOMAIN_}" /usr/bin/cinemapress container zero \ >>/var/log/docker_zero_"$(date '+%d_%m_%Y')".log 2>&1 fi exit 0 ;; "zero_rt"|"zero_realtime" ) _br "${2}" read_domain "${2}" sh_not _s "${2}" _header "WARNING"; _content _content "This command will delete all movies!" _content _s if [ ${3} ]; then YES=${3} YES=`echo ${YES} | iconv -c -t UTF-8` echo "Delete Realtime Index? [NOT/yes] : ${YES}" else read -e -p 'Delete Realtime Index? [NOT/yes] : ' YES YES=`echo ${YES} | iconv -c -t UTF-8` fi _br if [ "${YES}" != "ДА" ] && [ "${YES}" != "Да" ] && [ "${YES}" != "да" ] && [ "${YES}" != "YES" ] && [ "${YES}" != "Yes" ] && [ "${YES}" != "yes" ] && [ "${YES}" != "Y" ] && [ "${YES}" != "y" ]; then exit 0 else docker exec "${CP_DOMAIN_}" /usr/bin/cinemapress container zero_rt \ >>/var/log/docker_zero_rt_"$(date '+%d_%m_%Y')".log 2>&1 fi exit 0 ;; "hand" ) _br "${2}" read_domain "${2}" sh_not _s "${2}" docker exec "${CP_DOMAIN_}" /usr/bin/cinemapress container hand "${3}" exit 0 ;; "main_mirror" ) _br "${2}" read_domain "${2}" sh_not _s "${2}" docker exec "${CP_DOMAIN_}" /usr/bin/cinemapress container mirror exit 0 ;; "movies" ) _br "${2}" read_domain "${2}" sh_not _s "${2}" docker exec "${CP_DOMAIN_}" /usr/bin/cinemapress container movies exit 0 ;; "reload"|"actual"|"available"|"reindex"|"speed"|"cron" ) _br "${2}" read_domain "${2}" sh_not _s "${2}" docker exec "${CP_DOMAIN_}" /usr/bin/cinemapress container "${1}" "${3}" _br exit 0 ;; "container" ) if [ "${2}" = "run" ]; then docker_run elif [ "${2}" = "stop" ]; then docker_stop elif [ "${2}" = "start" ]; then docker_start elif [ "${2}" = "restart" ]; then docker_restart elif [ "${2}" = "reload" ]; then docker_reload elif [ "${2}" = "logs" ]; then docker_logs elif [ "${2}" = "zero" ]; then docker_zero "${3}" elif [ "${2}" = "zero_rt" ]; then docker_zero_rt elif [ "${2}" = "hand" ]; then docker_hand "${3}" elif [ "${2}" = "movies" ]; then docker_movies "${3}" elif [ "${2}" = "cron" ]; then docker_cron "${3}" elif [ "${2}" = "actual" ]; then docker_actual elif [ "${2}" = "mirror" ]; then docker_mirror elif [ "${2}" = "available" ] || [ "${2}" = "reindex" ]; then docker_available "${3}" elif [ "${2}" = "passwd" ]; then docker_passwd "${3}" elif [ "${2}" = "rclone" ]; then docker_rclone "${3}" "${4}" elif [ "${2}" = "cinematheme" ]; then docker_cinematheme "${@}" elif [ "${2}" = "backup" ]; then if [ "${3}" = "create" ] || [ "${3}" = "1" ]; then docker_backup "${4}" elif [ "${3}" = "restore" ] || [ "${3}" = "2" ]; then docker_restore "${4}" "${5}" fi elif [ "${2}" = "protocol" ]; then if [ "${3}" = "http://" ]; then docker_ssl_off else docker_ssl_on fi elif [ "${2}" = "ftp" ]; then docker_ftp_on elif [ "${2}" = "torrent" ]; then docker_torrent_on fi exit 0 ;; "combine"|"c" ) CP_DOMAIN="" CP_LANG="" CP_THEME="" CP_PASSWD="" CP_MIRROR="" CP_KEY="" CLOUDFLARE_EMAIL="" CLOUDFLARE_API_KEY="" MEGA_EMAIL="" MEGA_PASSWORD="" if [ "${2}" = "chrm" ] || [ "${2}" = "create_https_restore_mirror" ] || [ "${2}" = "ihrm" ] || [ "${2}" = "install_https_restore_mirror" ]; then read_domain ${3} read_mirror ${4} read_lang ${5} read_theme ${6} read_password ${7} read_cloudflare_email ${8} read_cloudflare_api_key ${9} read_mega_email ${10} read_mega_password ${11} _s ${11} sh_progress 1_install "${CP_MIRROR}" 6_https "${CP_MIRROR}" "${CLOUDFLARE_EMAIL}" "${CLOUDFLARE_API_KEY}" 3_backup "${CP_MIRROR}" "config" "${MEGA_EMAIL}" "${MEGA_PASSWORD}" "restore" "${CP_DOMAIN}" 7_mirror "${CP_DOMAIN}" "${CP_MIRROR}" post_commands "${CP_MIRROR}" sh_progress 100 exit 0 elif [ "${2}" = "crm" ] || [ "${2}" = "create_restore_mirror" ] || [ "${2}" = "irm" ] || [ "${2}" = "install_restore_mirror" ]; then read_domain ${3} read_mirror ${4} read_lang ${5} read_theme ${6} read_password ${7} read_mega_email ${8} read_mega_password ${9} _s ${9} sh_progress 1_install "${CP_MIRROR}" 3_backup "${CP_MIRROR}" "config" "${MEGA_EMAIL}" "${MEGA_PASSWORD}" "restore" "${CP_DOMAIN}" 7_mirror "${CP_DOMAIN}" "${CP_MIRROR}" post_commands "${CP_MIRROR}" sh_progress 100 exit 0 elif [ "${2}" = "chm" ] || [ "${2}" = "create_https_mirror" ] || [ "${2}" = "ihm" ] || [ "${2}" = "install_https_mirror" ]; then read_domain ${3} read_mirror ${4} read_lang ${5} read_theme ${6} read_password ${7} read_cloudflare_email ${8} read_cloudflare_api_key ${9} _s ${9} sh_progress 1_install "${CP_MIRROR}" 6_https "${CP_MIRROR}" "${CLOUDFLARE_EMAIL}" "${CLOUDFLARE_API_KEY}" 7_mirror "${CP_DOMAIN}" "${CP_MIRROR}" post_commands "${CP_MIRROR}" sh_progress 100 exit 0 elif [ "${2}" = "chb" ] || [ "${2}" = "create_https_backup" ] || [ "${2}" = "ihb" ] || [ "${2}" = "install_https_backup" ]; then read_domain ${3} sh_yes read_lang ${4} read_theme ${5} read_password ${6} read_cloudflare_email ${7} read_cloudflare_api_key ${8} read_mega_email ${9} read_mega_password ${10} _s ${10} sh_progress 1_install "${CP_DOMAIN}" 6_https "${CP_DOMAIN}" "${CLOUDFLARE_EMAIL}" "${CLOUDFLARE_API_KEY}" 3_backup "${CP_DOMAIN}" "config" "${MEGA_EMAIL}" "${MEGA_PASSWORD}" "create" post_commands "${CP_DOMAIN}" sh_progress 100 exit 0 elif [ "${2}" = "chr" ] || [ "${2}" = "create_https_restore" ] || [ "${2}" = "ihr" ] || [ "${2}" = "install_https_restore" ]; then read_domain ${3} sh_yes read_lang ${4} read_theme ${5} read_password ${6} read_cloudflare_email ${7} read_cloudflare_api_key ${8} read_mega_email ${9} read_mega_password ${10} _s ${10} sh_progress 1_install "${CP_DOMAIN}" 6_https "${CP_DOMAIN}" "${CLOUDFLARE_EMAIL}" "${CLOUDFLARE_API_KEY}" 3_backup "${CP_DOMAIN}" "config" "${MEGA_EMAIL}" "${MEGA_PASSWORD}" "restore" post_commands "${CP_DOMAIN}" sh_progress 100 exit 0 elif [ "${2}" = "ch" ] || [ "${2}" = "create_https" ] || [ "${2}" = "ih" ] || [ "${2}" = "install_https" ]; then read_domain ${3} sh_yes read_lang ${4} read_theme ${5} read_password ${6} read_cloudflare_email ${7} read_cloudflare_api_key ${8} _s ${8} sh_progress 1_install "${CP_DOMAIN}" 6_https "${CP_DOMAIN}" "${CLOUDFLARE_EMAIL}" "${CLOUDFLARE_API_KEY}" post_commands "${CP_DOMAIN}" sh_progress 100 exit 0 elif [ "${2}" = "cb" ] || [ "${2}" = "create_backup" ] || [ "${2}" = "ib" ] || [ "${2}" = "install_backup" ]; then read_domain ${3} sh_yes read_lang ${4} read_theme ${5} read_password ${6} read_mega_email ${7} read_mega_password ${8} _s ${8} sh_progress 1_install "${CP_DOMAIN}" 3_backup "${CP_DOMAIN}" "config" "${MEGA_EMAIL}" "${MEGA_PASSWORD}" "create" post_commands "${CP_DOMAIN}" sh_progress 100 exit 0 elif [ "${2}" = "cr" ] || [ "${2}" = "create_restore" ] || [ "${2}" = "ir" ] || [ "${2}" = "install_restore" ]; then read_domain ${3} sh_yes read_lang ${4} read_theme ${5} read_password ${6} read_mega_email ${7} read_mega_password ${8} _s ${8} sh_progress 1_install "${CP_DOMAIN}" 3_backup "${CP_DOMAIN}" "config" "${MEGA_EMAIL}" "${MEGA_PASSWORD}" "restore" post_commands "${CP_DOMAIN}" sh_progress 100 exit 0 fi exit 0 ;; "autostart" ) read_domain "${2}" docker start "${CP_DOMAIN_}" docker start fail2ban docker start filestash docker start nginx exit 0 ;; "renew" ) _br "${2}" read_domain "${2}" sh_not _s "${2}" quiet="" if [ "${3}" != "" ]; then quiet="--dry-run" else sleep $(( ( "${RANDOM}" % 900 ) )) fi docker run \ --rm \ -v /home/${CP_DOMAIN}/config/production/nginx/ssl.d:/etc/letsencrypt \ -v /home/${CP_DOMAIN}/config/production/nginx/letsencrypt:/var/lib/letsencrypt \ -v /home/${CP_DOMAIN}/config/production/nginx/cloudflare.ini:/cloudflare.ini \ -v /var/log/letsencrypt:/var/log/letsencrypt \ certbot/dns-cloudflare \ renew \ --dns-cloudflare \ --dns-cloudflare-credentials /cloudflare.ini \ ${quiet} docker exec -d nginx nginx -s reload post_commands exit 0 ;; "optimal" ) _br "${2}" read_domain "${2}" sh_not _s "${2}" docker exec -t "${CP_DOMAIN_}" node optimal.js exit 0 ;; "mode" ) _br "${2}" read_domain "${2}" sh_not read_mode "${3}" _s "${2}" sh_progress sed -i "s~\"NODE_ENV\": \"production\"~\"NODE_ENV\": \"${CP_MODE}\"~" "/home/${CP_DOMAIN}/process.json" &>/dev/null sed -i "s~\"NODE_ENV\": \"debug\"~\"NODE_ENV\": \"${CP_MODE}\"~" "/home/${CP_DOMAIN}/process.json" &>/dev/null sh_progress docker exec -t "${CP_DOMAIN_}" /usr/bin/cinemapress container reload &>/dev/null sh_progress 100 exit 0 ;; "l"|"ll"|"lp"|"lm"|"lms"|"ls"|"llp"|"log"|"logs"|"live"|"lb"|"lbt"|"lbf"|"lbb" ) if [ "${1}" = "lb" ] || [ "${1}" = "lbt" ] || [ "${1}" = "lbf" ] || [ "${1}" = "lbb" ] || [ "${2}" = "bot" ] || [ "${2}" = "bots" ]; then RR='\o033[0;31m' GG='\o033[0;32m' YY='\o033[0;33m' BB='\o033[1;36m' NCC='\o033[0m' _br if [ "${1}" = "live" ]; then _line _header "BOT DETECTED" _line _br tail \ -n0 -f /home/*/log/err*.log \ -n0 -f /home/*/log/out*.log \ | sed \ -e 's/\([0-9T:-]*\):\s*/\1/' \ -e 's/\(TRUE BOT DETECTED\)/ \o033[32mTRUE\o033[39m/' \ -e 's/\(FAKE BOT DETECTED\)/ \o033[31mFAKE\o033[39m/' \ -e 's/\(BAD BOT DETECTED \[CAPTCHA \(TRUE\|FALSE\)\]\)/ \o033[36mBAD?\o033[39m [CAPTCHA]/' \ -e 's/\(BAD BOT DETECTED\)/ \o033[33mBAD!\o033[39m/' _br fi if [ "${3}" = "" ] && { [ "${1}" = "lb" ] || [ "${2}" = "bot" ] || [ "${2}" = "bots" ]; }; then _line _header "BOT DETECTED" _line _br grep \ "BOT DETECTED" /home/*/log/err*.log /home/*/log/out*.log \ | sed -E "s/\/home\/([0-9A-Za-z.-]{10})([0-9A-Za-z.-]*)\/log\/(out|err)-0\.log:([0-9T:-]*):\s*/\4 \1/" \ | sed -E "s/TRUE BOT DETECTED/ ${GG}TRUE${NCC}/" \ | sed -E "s/FAKE BOT DETECTED/ ${RR}FAKE${NCC}/" \ | sed -E "s/BAD BOT DETECTED \[CAPTCHA (TRUE|FALSE)\]/ ${BB}BAD?${NCC} [CAPTCHA]/" \ | sed -E "s/BAD BOT DETECTED/ ${YY}BAD!${NCC}/" \ | sort -k1 _br _line _br fi if [ "${1}" = "lbt" ] || [ "${3}" = "true" ]; then _line _header "TRUE BOT DETECTED" _line _br grep \ "TRUE BOT DETECTED" /home/*/log/err*.log /home/*/log/out*.log \ | sed -E "s/\/home\/([0-9A-Za-z.-]{10})([0-9A-Za-z.-]*)\/log\/(out|err)-0\.log:([0-9T:-]*):\s*/\4 \1/" \ | sed -E "s/TRUE BOT DETECTED/ ${GG}TRUE${NCC}/" \ | sort -k1 _br _line _br fi if [ "${1}" = "lbf" ] || [ "${3}" = "fake" ]; then _line _header "FAKE BOT DETECTED" _line _br grep \ "FAKE BOT DETECTED" /home/*/log/err*.log /home/*/log/out*.log \ | sed -E "s/\/home\/([0-9A-Za-z.-]{10})([0-9A-Za-z.-]*)\/log\/(out|err)-0\.log:([0-9T:-]*):\s*/\4 \1/" \ | sed -E "s/FAKE BOT DETECTED/ ${RR}FAKE${NCC}/" \ | sort -k1 _br _line _br fi if [ "${1}" = "lbb" ] || [ "${3}" = "bad" ]; then _line _header "BAD BOT DETECTED" _line _br grep \ "BAD BOT DETECTED" /home/*/log/err*.log /home/*/log/out*.log \ | sed -E "s/\/home\/([0-9A-Za-z.-]{10})([0-9A-Za-z.-]*)\/log\/(out|err)-0\.log:([0-9T:-]*):\s*/\4 \1/" \ | sed -E "s/BAD BOT DETECTED \[CAPTCHA (TRUE|FALSE)\]/ ${BB}BAD?${NCC} [CAPTCHA]/" \ | sed -E "s/BAD BOT DETECTED/ ${YY}BAD!${NCC}/" \ | sort -k1 _br _line _br fi exit 0 fi if [ "${1}" = "ll" ] || [ "${1}" = "live" ] || [ "${2}" = "live" ] || [ "${2}" = "l" ]; then _br tail \ -n0 -f /var/log/nginx/*.log \ -n0 -f /home/*/log/err*.log \ -n0 -f /home/*/log/out*.log exit 0 fi if [ "${1}" = "llp" ] || [ "${1}" = "lp" ]; then _br tail \ -n0 -f /var/log/nginx/*.log \ -n0 -f /home/*/log/err*.log \ -n0 -f /home/*/log/out*.log \ | grep -v ping exit 0 fi if [ "${1}" = "lm" ]; then _br tail \ -n0 -f /home/*/log/movies*.log exit 0 fi if [ "${1}" = "ls" ] || [ "${1}" = "lms" ]; then _br tail \ -n0 -f /home/*/log/movies*.log \ | grep -v REALTIME exit 0 fi _br "${2}" read_domain "${2}" sh_not _s "${2}" _header "DOCKER CONTAINER" _content if docker network ls | grep -q cinemapress then _content "Network: runnind" else _content "Network: stopped" fi if [ "$(docker ps -aq -f health=healthy -f name=^/${CP_DOMAIN_}\$ 2>/dev/null)" != "" ]; then _content "Website: runnind" else _content "Website: stopped" fi if [ "$(docker ps -aq -f health=healthy -f name=^/nginx\$ 2>/dev/null)" != "" ]; then NGINX_STATUS=$(docker exec -t nginx nginx -t | grep successful) if [ "${NGINX_STATUS}" != "" ]; then _content "Nginx: runnind" else _content "Nginx: error" docker exec -t nginx nginx -t fi else _content "Nginx: stopped" fi if [ "$(docker ps -aq -f health=healthy -f name=^/fail2ban\$ 2>/dev/null)" != "" ]; then _content "Fail2ban: runnind" else _content "Fail2ban: stopped" fi if [ "$(docker ps -aq -f status=running -f name=^/filestash\$ 2>/dev/null)" != "" ]; then _content "FTP: runnind" else _content "FTP: stopped" fi if [ "$(docker ps -aq -f status=running -f name=^/mail\$ 2>/dev/null)" != "" ]; then _content "MailServer: runnind" else _content "MailServer: stopped" fi _content _header "NGINX LOGS" _content _content "$(tail -n50 /var/log/nginx/*.log | curl -s -F 'clbin=<-' https://clbin.com)" _content docker exec -t "${CP_DOMAIN_}" /usr/bin/cinemapress container logs exit 0 ;; "clear_vps"|"clean_vps"|"flush_vps"|"clear_all"|"clean_all"|"flush_all" ) _br sh_progress docker rm -f $(docker ps -aq) >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 docker rmi -f $(docker images -q) >>/var/log/docker_remove_"$(date '+%d_%m_%Y')".log 2>&1 for D in /home/*; do if [ -f "${D}/process.json" ] || [ -f "${D}/index.php" ]; then DD=`find ${D} -maxdepth 0 -printf "%f"` sed -i "s/.*${DD}.*//g" /etc/crontab &> /dev/null rm -rf /home/${DD:?} rm -rf /root/${DD:?} fi done rm -rf \ /var/log/* \ /var/ngx_pagespeed_cache \ /var/lib/sphinx/tmp \ /var/lib/sphinx/old \ /etc/nginx/bots.d \ /var/lib/cinemapress \ /var/docker-mailserver sh_progress 100 exit 0 ;; "clear_log"|"clean_log"|"clear_logs"|"clean_logs"|"logrotate" ) CP_SIZE=${2:-"+102400"} find /var/log -type f -name '*.log' -size "${CP_SIZE}" -exec rm -rf {} \; \ >>/var/log/docker_logrotate_"$(date '+%d_%m_%Y')".log 2>&1 find /var/log -type f -name '*.gz' -exec rm -rf {} \; \ >>/var/log/docker_logrotate_"$(date '+%d_%m_%Y')".log 2>&1 rm -rf /var/ngx_pagespeed_cache/* if [ "${CP_OS}" != "alpine" ] && [ "${CP_OS}" != "\"alpine\"" ]; then docker restart fail2ban >>/var/log/docker_logrotate_"$(date '+%d_%m_%Y')".log 2>&1 docker restart filestash >>/var/log/docker_logrotate_"$(date '+%d_%m_%Y')".log 2>&1 docker restart nginx >>/var/log/docker_logrotate_"$(date '+%d_%m_%Y')".log 2>&1 fi exit 0 ;; "any"|"default_server"|"ds" ) for all_server in /home/*/config/production/nginx/conf.d/default.conf; do [ -f "${all_server}" ] || continue sed -i "s~ include ${all_server/conf.d/any.d}~#any include ${all_server/conf.d/any.d}~" "${all_server}" done if [ "${2}" = "none" ]; then _br _header "DEFAULT SERVER" _content _content "NONE" _content _content "(wait 20 seconds)" _content _line _br mkdir -p /home/default_server/config/production/nginx/conf.d/ mkdir -p /home/default_server/config/production/nginx/any.d/ echo "server { listen 80 default_server; listen [::]:80 default_server; root /home/default_server; server_name _; deny all; location / {return 444;} } " > /home/default_server/config/production/nginx/any.d/default.conf echo " include /home/default_server/config/production/nginx/any.d/default.conf;" \ > /home/default_server/config/production/nginx/conf.d/default.conf docker restart nginx &>/dev/null exit 0 fi read_domain "${2}" sh_not sed -i "s~#any include /home/${CP_DOMAIN}/config/production/nginx/any.d/default.conf~ include /home/${CP_DOMAIN}/config/production/nginx/any.d/default.conf~" \ /home/"${CP_DOMAIN}"/config/production/nginx/conf.d/default.conf _br _header "DEFAULT SERVER" _content _content "${CP_DOMAIN}" _content _content "(wait 60 seconds)" _content _line _br exit 0 ;; "bot"|"bot_https"|"domain"|"domain_https" ) _br "${2}" read_domain "${2}" sh_not _s "${2}" read_bomain "${3}" if [ "${1}" = "bot_https" ] || [ "${1}" = "domain_https" ]; then read_cloudflare_email "${4}" read_cloudflare_api_key "${5}" fi _s "${3}" sh_progress if [ ! -f /home/"${CP_BOMAIN}"/process.json ]; then sh_progress 1_install "${CP_BOMAIN}" "en" "default" "pass" fi if [ "${CLOUDFLARE_EMAIL}" != "" ] && [ "${CLOUDFLARE_API_KEY}" != "" ]; then sh_progress 6_https "${CP_BOMAIN}" "${CLOUDFLARE_EMAIL}" "${CLOUDFLARE_API_KEY}" fi sh_progress sed -i "s~root /home/${CP_BOMAIN};~root /home/${CP_DOMAIN};~g" \ /home/"${CP_BOMAIN}"/config/production/nginx/conf.d/default.conf sed -i "s~/home/${CP_BOMAIN}/config/production/nginx/pass.d/${CP_BOMAIN}.pass~/home/${CP_DOMAIN}/config/production/nginx/pass.d/${CP_DOMAIN}.pass~g" \ /home/"${CP_BOMAIN}"/config/production/nginx/conf.d/default.conf sed -i "s~/home/${CP_BOMAIN}/config/production/nginx/error.d/default.conf~/home/${CP_DOMAIN}/config/production/nginx/error.d/default.conf~g" \ /home/"${CP_BOMAIN}"/config/production/nginx/conf.d/default.conf sed -i "s~server ${CP_BOMAIN_}:3000~server ${CP_DOMAIN_}:3000~g" \ /home/"${CP_BOMAIN}"/config/production/nginx/conf.d/default.conf sh_progress docker stop "${CP_BOMAIN_}" >>/var/log/docker_bot_"$(date '+%d_%m_%Y')".log 2>&1 sh_progress docker rm -f "${CP_BOMAIN_}" >>/var/log/docker_bot_"$(date '+%d_%m_%Y')".log 2>&1 sh_progress rm -rf /home/"${CP_BOMAIN}"/config/production/nginx/bots.d \ /home/"${CP_BOMAIN}"/config/production/nginx/error.d \ /home/"${CP_BOMAIN}"/config/production/nginx/html \ /home/"${CP_BOMAIN}"/config/production/nginx/pagespeed.d \ /home/"${CP_BOMAIN}"/config/production/nginx/pass.d \ /home/"${CP_BOMAIN}"/config/production/nginx/nginx.sh \ /home/"${CP_BOMAIN}"/config/production/nginx/nginx.conf \ /home/"${CP_BOMAIN}"/config/production/nginx/mime.types \ /home/"${CP_BOMAIN}"/config/production/nginx/Dockerfile \ /home/"${CP_BOMAIN}"/config/production/nginx/conf.d/globalblacklist.conf \ /home/"${CP_BOMAIN}"/config/production/nginx/conf.d/real_ip.conf rm -rf /tmp/nginx && mv /home/"${CP_BOMAIN}"/config/production/nginx /tmp/nginx \ >>/var/log/docker_bot_"$(date '+%d_%m_%Y')".log 2>&1 rm -rf /home/"${CP_BOMAIN:?}" mkdir -p /home/"${CP_BOMAIN}"/config/production mkdir -p /home/"${CP_BOMAIN}"/log mv /tmp/nginx /home/"${CP_BOMAIN}"/config/production/nginx touch /home/"${CP_BOMAIN}"/process.json sh_progress 100 NGINX_STATUS=$(docker exec -t nginx nginx -t | grep successful) if [ "${NGINX_STATUS}" != "" ]; then docker exec nginx nginx -s reload >>/var/log/docker_bot_"$(date '+%d_%m_%Y')".log 2>&1 _header "DOMAIN FOR BOTS / ALTERNATE DOMAIN" _content _content "${CP_BOMAIN}" _content _line else _header "ERROR" _content docker exec -t nginx nginx -t _content _line fi post_commands "${CP_BOMAIN}" _br exit 0 ;; "bench"|"benchmark"|"speedtest" ) SPEED_LOCATION=${2:-"eu"} bash <(wget "https://raw.githubusercontent.com/laset-com/speedtest/master/speedtest.sh" -qO-) "-${SPEED_LOCATION}" exit 0 ;; "import" ) if [ "${2}" = "dle" ]; then read_domain "${3}" sh_not read_import "${4}" _s "${4}" FILE_EXPORT="http://${IMPORT_DOMAIN}/uploads/files/${CP_DOMAIN}.xml" CREATE_EXPORT=$(wget -qO- "http://${IMPORT_DOMAIN}/dle2cinemapress.php?domain=${CP_DOMAIN}") if [ "${CREATE_EXPORT}" != "ok" ]; then _header "ERROR" _content _content "The website ${IMPORT_DOMAIN} is temporarily unavailable," _content "please try again later." _content "http://${IMPORT_DOMAIN}/dle2cinemapress.php?domain=${CP_DOMAIN}" _content _s exit 0 else sleep 2 fi _line _content "Downloading ..." wget -qO "/home/${CP_DOMAIN}/config/production/sphinx/export.xml" "${FILE_EXPORT}" || \ rm -rf "/home/${CP_DOMAIN}/config/production/sphinx/export.xml" if [ -f "/home/${CP_DOMAIN}/config/production/sphinx/export.xml" ]; then _content "Import ..." rm -rf "/home/${CP_DOMAIN}/config/production/sphinx/source.xml" mv "/home/${CP_DOMAIN}/config/production/sphinx/export.xml" \ "/home/${CP_DOMAIN}/config/production/sphinx/source.xml" docker exec "${CP_DOMAIN_}" indexer "xmlpipe2_${CP_DOMAIN_}" --rotate >/dev/null _content "Done!" else _header "ERROR" _content _content "Failed to download export file," _content "please try again later." _content "${FILE_EXPORT}" _content _s exit 0 fi fi exit 0 ;; "app" ) read_domain "${2}" sh_not if [ "${3}" = "windows" ] || [ "${3}" = "linux" ] || [ "${3}" = "osx" ]; then NAME_OS="${3}" if [ "${4}" = "" ]; then APP_DOMAIN="app.${2}" else APP_DOMAIN="${4}" fi _br else read_os "${3}" read_app "${4}" _s "${4}" fi PROTOCOLS=$(grep "\"protocol\"" /home/"${CP_DOMAIN}"/config/production/config.js) PROTOCOL=$(echo "${PROTOCOLS}" | sed 's/.*"protocol":\s*"\(https\|http\).*/\1/') sh_progress docker rm $(docker ps -aq) >>/var/log/docker_app_"$(date '+%d_%m_%Y')".log 2>&1 sh_progress docker rmi -f $(docker images -f 'dangling=true' -q) >>/var/log/docker_app_"$(date '+%d_%m_%Y')".log 2>&1 sh_progress docker run \ --rm \ -v /home/"${CP_DOMAIN}"/config/app/icons:/icons \ -v /home/"${CP_DOMAIN}"/config/app/"${NAME_OS}":/cinemaapp \ cinemapress/app:latest \ --name "${CP_DOMAIN_}" \ --platform "${NAME_OS}" \ --arch "x64" \ --app-copyright "CinemaPress App" \ --app-version "${CP_VER}" \ --icon "/icons/icon.png" \ --width "1280px" \ --height "800px" \ --min-width "0" \ --min-height "0" \ --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0 CinemaPress App" \ --ignore-certificate \ --insecure \ --internal-urls ".*" \ --disable-context-menu \ --disable-dev-tools \ --single-instance \ --darwin-dark-mode-support \ --background-color "#1a2035" \ --verbose \ --win32metadata "{\"CompanyName\": \"${CP_DOMAIN}\",\"FileDescription\": \"${CP_DOMAIN}\",\"OriginalFilename\": \"${CP_DOMAIN}\",\"ProductName\": \"${CP_DOMAIN}\",\"InternalName\": \"${CP_DOMAIN}\"}" \ "${PROTOCOL}://${APP_DOMAIN}" \ "/cinemaapp/" \ >>/var/log/docker_app_"$(date '+%d_%m_%Y')".log 2>&1 sleep 10 sh_progress rm -rf /home/${CP_DOMAIN}/files/"${NAME_OS}" mkdir -p /home/${CP_DOMAIN}/files/"${NAME_OS}" mv /home/${CP_DOMAIN}/config/app/"${NAME_OS}"/* \ /home/${CP_DOMAIN}/config/app/"${NAME_OS}"/app >/dev/null 2>&1; if [ -f /home/${CP_DOMAIN}/config/app/"${NAME_OS}"/app/"${CP_DOMAIN_}".exe ]; then mv /home/${CP_DOMAIN}/config/app/"${NAME_OS}"/app/"${CP_DOMAIN_}".exe \ /home/${CP_DOMAIN}/config/app/"${NAME_OS}"/app/app.exe fi cd /home/${CP_DOMAIN}/config/app/"${NAME_OS}" && \ zip -rq /home/${CP_DOMAIN}/files/"${NAME_OS}"/app_"${CP_VER}".zip app rm -rf /home/${CP_DOMAIN}/config/app/"${NAME_OS}" docker image prune -af >>/var/log/docker_app_"$(date '+%d_%m_%Y')".log 2>&1 sh_progress 100 _line _header "/files/${NAME_OS}/app_${CP_VER}.zip" _line _br exit 0 ;; "splash" ) if [ "${4}" = "" ]; then exit 0; fi _br sh_progress PROTOCOLS=$(grep "\"protocol\"" /home/"${2}"/config/production/config.js) PROTOCOL=$(echo "${PROTOCOLS}" | sed 's/.*"protocol":\s*"\(https\|http\).*/\1/') SPLASH_DOMAIN="${PROTOCOL}:\/\/app.${2}" if [ "${6}" != "" ]; then SPLASH_DOMAIN="${6//\//\\\/}"; fi GIT=${5:-github} cd /home/"${2}"/files/splash && \ echo "config" >> .gitignore && \ echo "screen.html" >> .gitignore && \ git init >/dev/null 2>&1; \ cp -rf config .git/config; \ cp -rf screen.html index.html; \ sed -Ei "s/\/\/example\.com/${SPLASH_DOMAIN}/g" index.html; \ sed -Ei "s/config_name/${3}/g" .git/config; \ sed -Ei "s/config_password/${4}/g" .git/config; \ if [ "${GIT}" != "github" ]; then sed -Ei "s/github/gitlab/g" .git/config; fi; git add . >/dev/null 2>&1; \ git commit -a -m "${3}" >/dev/null 2>&1; \ git branch -M main >/dev/null 2>&1; \ git push -u origin main >/dev/null 2>&1 sh_progress sleep 20 sh_progress 100 _line _header "DOMAIN NAME FOR SPLASH SCREEN" _line _header "${3}.${GIT}.io" _line _br exit 0 ;; "ms"|"mailserver"|"mail"|"setup.sh"|"./setup.sh" ) if [ "${2}" = "help" ]; then wget -qO /usr/bin/mailcinema https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/2527ebfaf2b3eee11b11c4ee589010e8c7a61a99/setup.sh sed -Ei "s/\\\$0/cinemapress ms/" /usr/bin/mailcinema chmod a+x /usr/bin/mailcinema /usr/bin/mailcinema elif [ "${3}" = "" ]; then read_domain "${2}" sh_not SSL_TYPE=() SSL_DIR=() if [ -d "/home/${CP_DOMAIN}/config/production/nginx/ssl.d/live/${CP_DOMAIN}/" ]; then SSL_TYPE=(-e "SSL_TYPE=letsencrypt") SSL_DIR=(-v /home/"${CP_DOMAIN}"/config/production/nginx/ssl.d:/etc/letsencrypt:ro) fi docker run \ -d \ --name mail \ --hostname "mail.${CP_DOMAIN}" \ --restart always \ --cap-add NET_ADMIN \ --cap-add SYS_PTRACE \ -v /var/docker-mailserver:/tmp/docker-mailserver \ "${SSL_DIR[@]}" \ -e ENABLE_SPAMASSASSIN=1 \ -e SPAMASSASSIN_SPAM_TO_INBOX=1 \ -e ENABLE_CLAMAV=1 \ -e ENABLE_FAIL2BAN=1 \ -e DMS_DEBUG=1 \ "${SSL_TYPE[@]}" \ -p 25:25 \ -p 143:143 \ -p 465:465 \ -p 587:587 \ -p 993:993 \ cinemapress/mail wget -qO /usr/bin/mailcinema https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/2527ebfaf2b3eee11b11c4ee589010e8c7a61a99/setup.sh sed -Ei "s/\\\$0/cinemapress ms/" /usr/bin/mailcinema chmod a+x /usr/bin/mailcinema _br _line _header "MAIL SERVER ${CP_DOMAIN} STARTED" _line printf "${Y}Type:${NC} ${G}A${NC}" _br printf "${Y}Name:${NC} ${G}mail.${CP_DOMAIN}${NC}" _br printf "${Y}Content:${NC} ${G}IP of your server${NC}" _br _line printf "${Y}Type:${NC} ${G}A${NC}" _br printf "${Y}Name:${NC} ${G}imap.${CP_DOMAIN}${NC}" _br printf "${Y}Content:${NC} ${G}IP of your server${NC}" _br _line printf "${Y}Type:${NC} ${G}A${NC}" _br printf "${Y}Name:${NC} ${G}smtp.${CP_DOMAIN}${NC}" _br printf "${Y}Content:${NC} ${G}IP of your server${NC}" _br _line printf "${Y}Type:${NC} ${G}MX${NC}" _br printf "${Y}Name:${NC} ${G}${CP_DOMAIN}${NC}" _br printf "${Y}Content:${NC} ${G}mail.${CP_DOMAIN}${NC}" _br printf "${Y}Priority:${NC} ${G}1${NC}" _br _line printf "${Y}Type:${NC} ${G}TXT${NC}" _br printf "${Y}Name:${NC} ${G}${CP_DOMAIN}${NC}" _br printf "${Y}Content:${NC} ${G}v=spf1 mx -all${NC}" _br _line _br else /usr/bin/mailcinema "${2}" "${3}" "${4}" "${5}" "${6}" "${7}" "${8}" "${9}" sleep 5 _br if [ "${3}" = "dkim" ] && [ -d "/var/docker-mailserver/opendkim/keys" ]; then docker restart mail &>/dev/null sleep 15 cd /var/docker-mailserver/opendkim/keys/ && for f in */; do if [ -d "${f}" ] && [ -f "/var/docker-mailserver/opendkim/keys/${f%%/}/mail.txt" ]; then CONTENT_DKIM="" _header "${f%%/}" printf "${Y}Type:${NC} ${G}TXT${NC}" _br printf "${Y}Name:${NC} ${G}mail._domainkey${NC}" _br while IFS= read -r line; do CONTENT_DKIM_ONE=$(echo ${line} | sed 's/.*"\(.*\)".*/\1/'); CONTENT_DKIM="${CONTENT_DKIM}${CONTENT_DKIM_ONE}"; done < "/var/docker-mailserver/opendkim/keys/${f%%/}/mail.txt" printf "${Y}Content:${NC} ${G}${CONTENT_DKIM}${NC}" _br _line _br fi done fi fi exit 0 ;; "temp"|"template"|"design"|"cinematheme"|"ct"|"uncss" ) read_domain "${2}" sh_not ARRAY_PAGE=() if [ "${3}" = "-h" ]; then docker exec -it "${CP_DOMAIN_}" /usr/bin/cinematheme -h elif [ "${3}" != "" ]; then docker exec -it "${CP_DOMAIN_}" /usr/bin/cinemapress container cinematheme "${@}" else _line read -r -e -p '[Name Theme] -n ' NAME_THEME _line read -r -e -p '[URL Index] -i ' INDEX_PAGE _line read -r -e -p '[URL Movie] -m ' MOVIE_PAGE _line read -r -e -p '[URL Category] -c ' CATEGORY_PAGE _line read -r -e -p '[URL Categories] -s ' CATEGORIES_PAGE _line read -r -e -p '[URL Episode] -e ' EPISODE_PAGE _line read -r -e -p '[URL Picture] -p ' PICTURE_PAGE _line read -r -e -p '[URL Trailer] -t ' TRAILER_PAGE _line read -r -e -p '[URL Online] -o ' ONLINE_PAGE _line read -r -e -p '[URL Download] -d ' DOWNLOAD_PAGE _line _br if [ "${NAME_THEME}" != "" ]; then ARRAY_PAGE+=(-n "${NAME_THEME}"); fi if [ "${INDEX_PAGE}" != "" ]; then ARRAY_PAGE+=(-i "${INDEX_PAGE}"); fi if [ "${MOVIE_PAGE}" != "" ]; then ARRAY_PAGE+=(-m "${MOVIE_PAGE}"); fi if [ "${CATEGORY_PAGE}" != "" ]; then ARRAY_PAGE+=(-c "${CATEGORY_PAGE}"); fi if [ "${CATEGORIES_PAGE}" != "" ]; then ARRAY_PAGE+=(-s "${CATEGORIES_PAGE}"); fi if [ "${EPISODE_PAGE}" != "" ]; then ARRAY_PAGE+=(-e "${EPISODE_PAGE}"); fi if [ "${PICTURE_PAGE}" != "" ]; then ARRAY_PAGE+=(-p "${PICTURE_PAGE}"); fi if [ "${TRAILER_PAGE}" != "" ]; then ARRAY_PAGE+=(-t "${TRAILER_PAGE}"); fi if [ "${ONLINE_PAGE}" != "" ]; then ARRAY_PAGE+=(-o "${ONLINE_PAGE}"); fi if [ "${DOWNLOAD_PAGE}" != "" ]; then ARRAY_PAGE+=(-d "${DOWNLOAD_PAGE}"); fi if [ "${1}" = "uncss" ]; then ARRAY_PAGE+=(--uncss); docker exec -it "${CP_DOMAIN_}" /usr/bin/cinematheme "${ARRAY_PAGE[@]}" else docker exec -it "${CP_DOMAIN_}" /usr/bin/cinemapress container cinematheme "${ARRAY_PAGE[@]}" fi _br fi exit 0 ;; "cms" ) read_domain ${2} sh_yes read_cms "${3}" _s ${3} NAME_CMS=${NAME_CMS:-} MYSQL_PASSWORD="$(date +%s%N | sha256sum | base64 | head -c 12)" MYSQL_DATABASE="${CP_DOMAIN_}" MYSQL_USER="${CP_DOMAIN_}" ADMIN_USER="cinemaadmin" ADMIN_PASSWORD="$(date +%s%N | sha256sum | base64 | head -c 12)" if [ "${NAME_CMS}" = "backup" ] && [ "${4}" = "create" ]; then if [ -f "/var/lib/cinemapress/dump/backup.sql" ]; then echo "ERROR: Backup file found /var/lib/cinemapress/dump/backup.sql" exit 0 fi docker exec mysql sh -c 'exec mysqldump -A -uroot' \ > "/var/lib/cinemapress/dump/backup.sql" echo "SUCCESS: Backup file /var/lib/cinemapress/dump/backup.sql" exit 0 fi if [ "${NAME_CMS}" = "backup" ] && [ "${4}" = "restore" ]; then if [ ! -f "/var/lib/cinemapress/dump/restore.sql" ]; then echo "ERROR: Restore file not found /var/lib/cinemapress/dump/restore.sql" exit 0 fi docker exec -i mysql sh -c 'exec mysql -uroot' \ < "/var/lib/cinemapress/dump/restore.sql" echo "SUCCESS: Restore file /var/lib/cinemapress/dump/restore.sql" exit 0 fi mkdir -p /var/lib/cinemapress/php mkdir -p /var/lib/cinemapress/mysql mkdir -p /var/lib/cinemapress/dump mkdir -p /home/"${CP_DOMAIN}"/config/production/nginx/conf.d mkdir -p /home/"${CP_DOMAIN}"/config/production/nginx/pass.d mkdir -p /home/"${CP_DOMAIN}"/config/production/nginx/ssl.d mkdir -p /home/"${CP_DOMAIN}"/config/production/nginx/any.d mkdir -p /home/"${CP_DOMAIN}"/config/production/nginx/conf.d mkdir -p /home/"${CP_DOMAIN}"/config/production/nginx/letsencrypt if [ ! "$(docker network ls | grep cinemapress)" ]; then docker network create \ --driver bridge \ cinemapress fi if [ "`docker ps -aq -f status=running -f name=^/nginx\$ 2>/dev/null`" = "" ]; then if [ "${CP_IP}" = "domain" ] \ && [ "`netstat -tunlp | grep 0.0.0.0:80`" = "" ] \ && [ "`netstat -tunlp | grep :::80`" = "" ]; then # docker build -t cinemapress/nginx https://github.com/CinemaPress/CinemaPress.git#:config/default/nginx docker run \ -d \ --name nginx \ --restart always \ --network cinemapress \ -v /var/log/nginx:/var/log/nginx \ -v /var/local/balancer:/var/local/balancer \ -v /home:/home \ -p 80:80 \ -p 443:443 \ cinemapress/nginx:latest NGINX_RUN=1 while [ "${NGINX_RUN}" != "50" ]; do sleep 3 NGINX_RUN=$((1+${NGINX_RUN})) if [ "`docker ps -aq -f status=running -f name=^/nginx\$ 2>/dev/null`" != "" ]; then NGINX_RUN=50 fi done fi fi if [ ! "$(docker ps -a | grep php)" ]; then docker run \ -d \ --name php \ --restart always \ --network cinemapress \ -v /home:/home \ cinemapress/php:latest fi if [ ! "$(docker ps -a | grep mysql)" ]; then docker run \ -d \ --name mysql \ --restart always \ --network cinemapress \ -v /var/lib/cinemapress/mysql:/var/lib/mysql \ -e MYSQL_ALLOW_EMPTY_PASSWORD=yes \ mariadb:10 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci fi sleep 30 docker exec mysql sh -c \ "exec mysql -uroot -e \"FLUSH PRIVILEGES;CREATE DATABASE ${MYSQL_DATABASE} /*\!40100 DEFAULT CHARACTER SET utf8mb4 */;CREATE USER '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PASSWORD}';GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER}'@'%';FLUSH PRIVILEGES;\"" sleep 30 docker exec mysql sh -c \ "exec mysql -uroot -e \"FLUSH PRIVILEGES;DROP USER '${MYSQL_USER}'@'%';CREATE USER '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PASSWORD}';GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER}'@'%';FLUSH PRIVILEGES;\"" if [ ! "$(docker ps -a | grep adminer)" ]; then docker run \ -d \ --name adminer \ --restart always \ --network cinemapress \ -e ADMINER_DEFAULT_SERVER=mysql \ -e ADMINER_DESIGN='galkaev' \ adminer:fastcgi OPENSSL=`echo "${ADMIN_PASSWORD}" | openssl passwd -1 -stdin -salt CP` echo "cinemaadmin:${OPENSSL}" > /home/${CP_DOMAIN}/config/production/nginx/pass.d/${CP_DOMAIN}.pass else ADMIN_PASSWORD="" fi if [ "${NAME_CMS}" = "wordpress" ]; then wget -qO "wordpress.tar.gz" "https://wordpress.org/wordpress-latest.tar.gz" tar -xzf "wordpress.tar.gz" -C /var rm -rf "wordpress.tar.gz" cp -rf /var/wordpress/* /home/${CP_DOMAIN}/ { echo "> /home/${CP_DOMAIN}/wp-config.php elif [ "${NAME_CMS}" = "drupal" ]; then wget -qO "drupal.tar.gz" "https://www.drupal.org/download-latest/tar.gz" tar -xzf "drupal.tar.gz" -C /var mv /var/drupal-*/* /var/drupal-*/.htaccess /var/drupal-*/.csslintrc /var/drupal-*/.editorconfig /var/drupal-*/.eslintignore /var/drupal-*/.eslintrc.json /var/drupal-*/.gitattributes /home/${CP_DOMAIN}/ mkdir -p /home/${CP_DOMAIN}/sites/default/files/translations chmod a+w /home/${CP_DOMAIN}/sites/default/files chmod a+w /home/${CP_DOMAIN}/sites/default/files/translations cp /home/${CP_DOMAIN}/sites/default/default.settings.php /home/${CP_DOMAIN}/sites/default/settings.php chmod a+w /home/${CP_DOMAIN}/sites/default/settings.php rm -rf "drupal.tar.gz" elif [ "${NAME_CMS}" = "joomla" ]; then wget -qO "joomla3.tar.gz" "https://downloads.joomla.org/cms/joomla3/3-10-3/Joomla_3-10-3-Stable-Full_Package.tar.gz?format=gz" tar -xzf "joomla3.tar.gz" -C /home/${CP_DOMAIN}/ touch /home/${CP_DOMAIN}/configuration.php chmod 644 /home/${CP_DOMAIN}/configuration.php rm -rf "joomla3.tar.gz" elif [ "${NAME_CMS}" = "dle" ]; then wget -qO "dle_trial.zip" "https://dle-news.ru/files/dle_trial.zip" mkdir -p /var/dle unzip "dle_trial.zip" -d /var/dle/ rm -rf "dle_trial.zip" cp -rf /var/dle/upload/* /home/${CP_DOMAIN}/ chmod 777 /home/${CP_DOMAIN}/templates chmod 777 $(find /home/${CP_DOMAIN}/templates -type d) chmod 666 $(find /home/${CP_DOMAIN}/templates -type f) chmod 777 /home/${CP_DOMAIN}/backup chmod 777 $(find /home/${CP_DOMAIN}/backup -type d) chmod 777 /home/${CP_DOMAIN}/uploads chmod 777 $(find /home/${CP_DOMAIN}/uploads -type d) chmod 777 /home/${CP_DOMAIN}/engine/data chmod 777 /home/${CP_DOMAIN}/engine/cache chmod 777 /home/${CP_DOMAIN}/engine/cache/system elif [ "${MYSQL_USER}" != "" ] && [ "${MYSQL_PASSWORD}" != "" ] && [ "${MYSQL_DATABASE}" != "" ]; then { echo "" echo "" echo " Hello CinemaPress" echo "" echo "" echo " " echo "" echo "" } >> /home/${CP_DOMAIN}/index.php else { echo "" echo "" echo " Hello CinemaPress" echo "" echo "" echo " " echo "" echo "" } >> /home/${CP_DOMAIN}/index.php fi { echo "server {" echo " listen 80;" echo " listen [::]:80;" echo " #ssl include /home/${CP_DOMAIN}/config/production/nginx/ssl.d/default.conf;" echo " root /home/${CP_DOMAIN};" echo " index index.php index.html index.htm;" echo " server_name .${CP_DOMAIN};" echo " access_log /var/log/nginx/access_${CP_DOMAIN}.log;" echo " include /etc/nginx/bots.d/ddos.conf;" echo " include /etc/nginx/bots.d/blockbots.conf;" echo " keepalive_timeout 10;" echo " client_max_body_size 64m;" echo " if ( \$host ~* ^www\.(?.+) ) {" echo " rewrite ^/(.*)$ \$scheme://\$domain/\$1 permanent;" echo " }" echo " if ( \$request_method !~ ^(GET|POST)$ ) {" echo " return 444;" echo " }" echo " location ~* ^/(bin|.*\.sh|.*\.conf)($|\/) {" echo " return 404;" echo " }" echo " location / {" echo " try_files \$uri \$uri/ /index.php?\$query_string;" echo " }" echo " location ~* \.php$ {" echo " try_files \$uri \$uri/ /index.php last;" echo " fastcgi_split_path_info (.+?\.php)(/.*)$;" echo " fastcgi_pass php:9000;" echo " fastcgi_index index.php;" echo " include fastcgi_params;" echo " fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;" echo " fastcgi_param PATH_INFO \$fastcgi_path_info;" echo " }" echo " location ~* .php/ { rewrite (.*.php)/ \$1 last; }" echo " location ~ \/cinemaadmin {" echo " auth_basic \"Login Adminer!\";" echo " auth_basic_user_file /home/${CP_DOMAIN}/config/production/nginx/pass.d/${CP_DOMAIN}.pass;" echo " rewrite ^/cinemaadmin(/.*)$ \$1 break;" echo " try_files \$uri \$uri/ /index.php last;" echo " fastcgi_split_path_info (.+?\.php)(/.*)$;" echo " fastcgi_pass adminer:9000;" echo " fastcgi_index index.php;" echo " include fastcgi_params;" echo " fastcgi_param SCRIPT_FILENAME /var/www/html/index.php;" echo " fastcgi_param DOCUMENT_ROOT /var/www/html/;" echo " }" echo " location ~ /\.ht {" echo " deny all;" echo " }" echo " location = /favicon.ico {" echo " log_not_found off; access_log off;" echo " }" echo " location = /robots.txt {" echo " log_not_found off; access_log off; allow all;" echo " }" echo " location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {" echo " expires max; log_not_found off;" echo " }" echo "}" } >> /home/${CP_DOMAIN}/config/production/nginx/conf.d/default.conf { echo "listen 443 ssl;" echo "listen [::]:443 ssl;" echo "ssl_certificate /home/${CP_DOMAIN}/config/production/nginx/ssl.d/live/${CP_DOMAIN}/fullchain.pem;" echo "ssl_certificate_key /home/${CP_DOMAIN}/config/production/nginx/ssl.d/live/${CP_DOMAIN}/privkey.pem;" echo "ssl_dhparam /home/${CP_DOMAIN}/config/production/nginx/ssl.d/live/${CP_DOMAIN}/dhparam.pem;" echo "ssl_session_cache shared:SSL:10m;" echo "ssl_session_timeout 1d;" echo "ssl_stapling on;" echo "ssl_stapling_verify on;" echo "ssl_prefer_server_ciphers on;" echo "ssl_protocols TLSv1.2;" echo "ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;" echo "resolver 1.1.1.1;" echo "resolver_timeout 10s;" echo "add_header X-Content-Type-Options \"nosniff\";" echo "add_header Strict-Transport-Security \"max-age=31536000; includeSubDomains\" always;" } >> /home/"${CP_DOMAIN}"/config/production/nginx/ssl.d/default.conf if [ "`docker ps -aq -f status=running -f name=^/nginx\$ 2>/dev/null`" != "" ]; then docker exec nginx nginx -s reload fi _line _header "${NAME_CMS}" _line echo "Website: http://${CP_DOMAIN}" echo "MYSQL HOST: mysql" if [ "${MYSQL_DATABASE}" != "" ]; then echo "MYSQL DATABASE: ${MYSQL_DATABASE}"; fi; if [ "${MYSQL_USER}" != "" ]; then echo "MYSQL USER: ${MYSQL_USER}"; fi; if [ "${MYSQL_PASSWORD}" != "" ]; then echo "MYSQL PASSWORD: ${MYSQL_PASSWORD}"; fi; if [ "${ADMIN_PASSWORD}" != "" ]; then echo "Adminer: http://${CP_DOMAIN}/cinemaadmin" if [ "${ADMIN_USER}" != "" ]; then echo "USER: ${ADMIN_USER}"; fi; if [ "${ADMIN_PASSWORD}" != "" ]; then echo "PASSWORD: ${ADMIN_PASSWORD}"; fi; fi _line exit 0 ;; "redirect" ) if [ "${2}" = "" ] || [ "${3}" = "" ]; then echo "ERROR: cinemapress redirect example.co hd.example.com" exit 0 fi mkdir -p /home/"${2}"/config/production/nginx/ssl.d mkdir -p /home/"${2}"/config/production/nginx/conf.d mkdir -p /home/"${2}"/config/production/nginx/letsencrypt touch /home/"${2}"/index.php { echo "server {" echo " listen 80;" echo " listen [::]:80;" echo " #ssl include /home/${2}/config/production/nginx/ssl.d/default.conf;" echo " server_name .${2};" echo " return 301 \$scheme://${3}\$request_uri;" echo "}" } > /home/"${2}"/config/production/nginx/conf.d/default.conf if [ "${4}" = "bot" ]; then { echo "server {" echo " listen 80;" echo " listen [::]:80;" echo " #ssl include /home/${2}/config/production/nginx/ssl.d/default.conf;" echo " server_name .${2};" echo " if ( \$http_user_agent ~* (google|yandex|bing|yahoo|baidu|duckduckgo|mail|ask|aol|msn) ) {" echo " return 301 \$scheme://${3}\$request_uri;" echo " }" echo " return 444;" echo "}" } > /home/"${2}"/config/production/nginx/conf.d/default.conf fi { echo "listen 443 ssl;" echo "listen [::]:443 ssl;" echo "ssl_certificate /home/${2}/config/production/nginx/ssl.d/live/${2}/fullchain.pem;" echo "ssl_certificate_key /home/${2}/config/production/nginx/ssl.d/live/${2}/privkey.pem;" echo "ssl_dhparam /home/${2}/config/production/nginx/ssl.d/live/${2}/dhparam.pem;" echo "ssl_session_cache shared:SSL:10m;" echo "ssl_session_timeout 1d;" echo "ssl_stapling on;" echo "ssl_stapling_verify on;" echo "ssl_prefer_server_ciphers on;" echo "ssl_protocols TLSv1.2;" echo "ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;" echo "resolver 1.1.1.1;" echo "resolver_timeout 10s;" echo "add_header X-Content-Type-Options \"nosniff\";" echo "add_header Strict-Transport-Security \"max-age=31536000; includeSubDomains\" always;" } > /home/"${2}"/config/production/nginx/ssl.d/default.conf if [ -d "/home/${2}/config/production/nginx/ssl.d/live/${2}/" ] || \ [ -d "/home/${2}/config/production/nginx/ssl.d/self-signed/${2}/" ]; then sed -Ei "s/ #ssl include \/home\/${2}\/config\/production\/nginx\/ssl\.d\/default\.conf;/ include \/home\/${2}\/config\/production\/nginx\/ssl.d\/default.conf;/" \ "/home/${2}/config/production/nginx/conf.d/default.conf" fi NGINX_STATUS=$(docker exec -t nginx nginx -t | grep successful) if [ "${NGINX_STATUS}" != "" ]; then docker exec nginx nginx -s reload >/dev/null echo "REDIRECT ${2} -> ${3}" else echo "ERROR NGINX:" docker exec -t nginx nginx -t fi exit 0 ;; "static" ) read_domain "${2}" sh_not if [ "${4}" != "" ]; then if [ "${3}" = "config" ]; then docker exec "${CP_DOMAIN_}" rclone config create CINEMASTATIC mega user "${4}" pass "${5}" \ >>/var/log/docker_static_"$(date '+%d_%m_%Y')".log 2>&1 elif [ "${3}" = "ftp" ]; then docker exec "${CP_DOMAIN_}" rclone config create CINEMASTATIC ftp user "${4}" pass "${5}" host "${6}" \ >>/var/log/docker_static_"$(date '+%d_%m_%Y')".log 2>&1 else RCS=$(docker exec -t "${CP_DOMAIN_}" rclone config show 2>/dev/null | grep "CINEMASTATIC") if [ "${RCS}" = "" ]; then docker exec "${CP_DOMAIN_}" rclone config create CINEMASTATIC mega user "${3}" pass "${4}" \ >>/var/log/docker_static_"$(date '+%d_%m_%Y')".log 2>&1 fi fi sleep 10 CHECK_MKDIR=$(docker exec -t "${CP_DOMAIN_}" rclone mkdir CINEMASTATIC:/check-connection 2>/dev/null) sleep 3 CHECK_RMDIR=$(docker exec -t "${CP_DOMAIN_}" rclone rmdir CINEMASTATIC:/check-connection 2>/dev/null) if [ "${CHECK_MKDIR}" != "" ] || [ "${CHECK_RMDIR}" != "" ]; then _header "ERROR" _content _content "Cannot connect to backup storage." _content _s exit 0 fi cp -r /home/"${CP_DOMAIN}"/config/production/rclone.conf /var/rclone.conf fi if [ "${3}" = "restore" ] || [ "${5}" = "restore" ] || [ "${6}" = "restore" ] || [ "${7}" = "restore" ]; then sleep 3; docker exec "${CP_DOMAIN_}" rclone -vv copy CINEMASTATIC:${CP_DOMAIN}/static.tar /home/${CP_DOMAIN}/ cd /home/${CP_DOMAIN} && tar -xf /home/${CP_DOMAIN}/static.tar rm -rf /home/${CP_DOMAIN}/static.tar sleep 3; docker exec "${CP_DOMAIN_}" rclone -vv copy CINEMASTATIC:${CP_DOMAIN}/app.tar /home/${CP_DOMAIN}/ if [ -f "/home/${CP_DOMAIN}/app.tar" ]; then cd /home/${CP_DOMAIN} && tar -xf /home/${CP_DOMAIN}/app.tar rm -rf /home/${CP_DOMAIN}/app.tar fi elif [ "${3}" = "create" ] || [ "${5}" = "create" ] || [ "${6}" = "create" ] || [ "${7}" = "create" ]; then cd /home/${CP_DOMAIN} && tar -uf /home/${CP_DOMAIN}/static.tar \ files/poster \ files/picture if [ -d "/home/${CP_DOMAIN}/files/windows" ]; then cd /home/${CP_DOMAIN} && tar -uf /home/${CP_DOMAIN}/app.tar \ files/windows \ files/linux \ files/osx &>/dev/null sleep 3; docker exec "${CP_DOMAIN_}" rclone -vv delete CINEMASTATIC:${CP_DOMAIN}/app.tar sleep 10; docker exec "${CP_DOMAIN_}" rclone -vv cleanup CINEMASTATIC: sleep 10; docker exec "${CP_DOMAIN_}" rclone -vv copy /home/${CP_DOMAIN}/app.tar CINEMASTATIC:${CP_DOMAIN}/ fi sleep 3; docker exec "${CP_DOMAIN_}" rclone -vv delete CINEMASTATIC:${CP_DOMAIN}/static.tar sleep 10; docker exec "${CP_DOMAIN_}" rclone -vv cleanup CINEMASTATIC: sleep 10; docker exec "${CP_DOMAIN_}" rclone -vv copy /home/${CP_DOMAIN}/static.tar CINEMASTATIC:${CP_DOMAIN}/ rm -rf /home/${CP_DOMAIN}/static.tar /home/${CP_DOMAIN}/app.tar fi exit 0 ;; "scp" ) if [ "${2}" = "" ] || [ "${3}" = "" ]; then exit 0 fi read_domain "${2}" scp -r -q root@"${3}":/var/lib/sphinx/data/movies_"${CP_DOMAIN_}"* /var/lib/sphinx/data/ exit 0 ;; "cf"|"subdomains"|"sub" ) _br "${4}" read_domain "${2}" read_cloudflare_email "${3}" read_cloudflare_api_key "${4}" _s "${4}" CLOUDFLARE_ZONE_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=${CP_DOMAIN}" \ -H "X-Auth-Email: ${CLOUDFLARE_EMAIL}" \ -H "X-Auth-Key: ${CLOUDFLARE_API_KEY}" \ -H "Content-Type: application/json" | \ sed -rn 's/.*"result":\[\{"id":"([A-Za-z0-9]*)".*/\1/p') if [ "${CLOUDFLARE_ZONE_ID}" = "" ]; then _line printf "${Y} ☐ ZONE NOT FOUND [ ${NC}${CP_DOMAIN}${Y} ]\n${NC}" _line exit 0 fi if [ -f "/home/${CP_DOMAIN}/files/${CP_DOMAIN}.sub.txt" ]; then STATUS1=$(curl -s -X POST "https://api.cloudflare.com/client/v4/zones/${CLOUDFLARE_ZONE_ID}/dns_records/import" \ -H "X-Auth-Email: ${CLOUDFLARE_EMAIL}" \ -H "X-Auth-Key: ${CLOUDFLARE_API_KEY}" \ --form "file=@/home/${CP_DOMAIN}/files/${CP_DOMAIN}.sub.txt" \ --form 'proxied=false' | \ sed -rn 's/.*"success":(true|false).*/\1/p') _line if [ "${STATUS1}" = "true" ]; then printf "${G} ✓ SUCCESS [ ${NC}${CP_DOMAIN}.sub.txt${G} ]\n${NC}" else printf "${R} ☐ ERROR [ ${NC}${CP_DOMAIN}.sub.txt${R} ]\n${NC}" fi fi if [ -f "/home/${CP_DOMAIN}/files/${CP_DOMAIN}.proxied.sub.txt" ]; then STATUS2=$(curl -s -X POST "https://api.cloudflare.com/client/v4/zones/${CLOUDFLARE_ZONE_ID}/dns_records/import" \ -H "X-Auth-Email: ${CLOUDFLARE_EMAIL}" \ -H "X-Auth-Key: ${CLOUDFLARE_API_KEY}" \ --form "file=@/home/${CP_DOMAIN}/files/${CP_DOMAIN}.proxied.sub.txt" \ --form 'proxied=true' | \ sed -rn 's/.*"success":(true|false).*/\1/p') _line if [ "${STATUS2}" = "true" ]; then printf "${G} ✓ SUCCESS [ ${NC}${CP_DOMAIN}.proxied.sub.txt${G} ]\n${NC}" else printf "${R} ☐ ERROR [ ${NC}${CP_DOMAIN}.proxied.sub.txt${R} ]\n${NC}" fi fi if [ "${STATUS1}" != "" ] || [ "${STATUS2}" != "" ]; then _s; fi exit 0 ;; "debug" ) CRASH=() CRASH+=(" --------------------------------------------------- ") CRASH+=("TOP") CRASH+=(" --------------------------------------------------- ") CRASH+=("$(top -b -n 1)") CRASH+=(" --------------------------------------------------- ") CRASH+=("DF") CRASH+=(" --------------------------------------------------- ") CRASH+=("$(df -h)") CRASH+=(" --------------------------------------------------- ") CRASH+=("DOCKER STATS") CRASH+=(" --------------------------------------------------- ") CRASH+=("$(docker stats -a --no-stream)") CRASH+=(" --------------------------------------------------- ") CRASH+=("DOCKER PS") CRASH+=(" --------------------------------------------------- ") CRASH+=("$(docker ps -a)") CRASH+=(" --------------------------------------------------- ") CRASH+=("PS") CRASH+=(" --------------------------------------------------- ") CRASH+=("$(ps auxf)") CRASH+=(" --------------------------------------------------- ") for D in /home/*; do if [ -f "${D}/process.json" ] || [ -f "${D}/index.php" ]; then DD=$(find "${D}" -maxdepth 0 -printf "%f") DD_=$(echo "${DD}" | sed -r "s/[^A-Za-z0-9]/_/g") if [ "$(docker ps -aq -f status=running -f name=^/"${DD_}"\$ 2>/dev/null)" != "" ]; then CRASH+=("PING ${DD}") CRASH+=(" --------------------------------------------------- ") CRASH+=("$(docker exec -t "${DD_}" cinemapress ping 2>/dev/null)") CRASH+=(" --------------------------------------------------- ") CRASH+=("PS ${DD}") CRASH+=(" --------------------------------------------------- ") CRASH+=("$(docker exec -t "${DD_}" ps 2>/dev/null)") CRASH+=(" --------------------------------------------------- ") CRASH+=("PM2 LIST") CRASH+=(" --------------------------------------------------- ") CRASH+=("$(docker exec -t "${DD_}" pm2 list 2>/dev/null)") CRASH+=(" --------------------------------------------------- ") CRASH+=("PM2 ERR") CRASH+=(" --------------------------------------------------- ") CRASH+=("$(docker exec -t "${DD_}" pm2 logs --err --lines 50 --nostream 2>/dev/null)") CRASH+=(" --------------------------------------------------- ") CRASH+=("PM2 OUT") CRASH+=(" --------------------------------------------------- ") CRASH+=("$(docker exec -t "${DD_}" pm2 logs --out --lines 50 --nostream 2>/dev/null)") CRASH+=(" --------------------------------------------------- ") CRASH+=("CRON LOG ${DD}") CRASH+=(" --------------------------------------------------- ") CRASH+=("$(docker exec -t "${DD_}" tail -n 50 "/home/${DD}/log/cron_$(date '+%d_%m_%Y').log" | grep -v CP_save)") CRASH+=(" --------------------------------------------------- ") fi CRASH+=("NGINX ACCESS ${DD}") CRASH+=(" --------------------------------------------------- ") CRASH+=("$(tail -n 50 "/var/log/nginx/access_${DD}.log")") CRASH+=(" --------------------------------------------------- ") fi done CRASH+=("NGINX ACCESS") CRASH+=(" --------------------------------------------------- ") CRASH+=("$(tail -n 50 /var/log/nginx/access.log)") CRASH+=(" --------------------------------------------------- ") CRASH+=("NGINX ERROR") CRASH+=(" --------------------------------------------------- ") CRASH+=("$(tail -n 50 /var/log/nginx/error.log)") CRASH+=(" --------------------------------------------------- ") DEBUG_URL=$(echo "${CRASH[@]}" | curl -s -F 'clbin=<-' https://clbin.com) _br _header "DEBUG LOGS" _content _content "${DEBUG_URL}?hl" _content _s exit 0 ;; "people" ) _br "${3}" read_domain "${2}" read_theme "${3}" _s "${3}" if [ "${CP_DOMAIN}" = "" ] || [ "${CP_THEME}" = "" ]; then exit 0 fi PEOPLE_INFO="jpg" if [ "${4}" = "json" ] || [ "${4}" = "jpg" ] || [ "${4}" = "all" ]; then PEOPLE_INFO="${4}" fi PEOPLE_LANG="ru" if [ "${5}" = "ru" ] || [ "${5}" = "en" ] || [ "${5}" = "all" ]; then PEOPLE_LANG="${5}" fi PEOPLE_CACHE="" if [ "${6}" = "cache" ]; then PEOPLE_CACHE="${6}" fi if [ "${CP_OS}" = "debian" ] || [ "${CP_OS}" = "\"debian\"" ] || \ [ "${CP_OS}" = "ubuntu" ] || [ "${CP_OS}" = "\"ubuntu\"" ]; then DEBIAN_FRONTEND=noninteractive apt-get -y -qq install jq elif [ "${CP_OS}" = "fedora" ] || [ "${CP_OS}" = "\"fedora\"" ]; then dnf -y install jq elif [ "${CP_OS}" = "centos" ] || [ "${CP_OS}" = "\"centos\"" ]; then yum install -y jq fi api="https://api.themoviedb.org/3/person/id?api_key=269890f657dddf4635473cf4cf456576&language=ru" if [ "${PEOPLE_LANG}" = "en" ]; then api="https://api.themoviedb.org/3/person/id?api_key=269890f657dddf4635473cf4cf456576&language=en" fi tmp_dir="/var/tmp-people" mkdir -p "${tmp_dir}" json_dir="/var/json-people" mkdir -p "${json_dir}" if [ "${PEOPLE_INFO}" = "all" ] || [ "${PEOPLE_INFO}" = "jpg" ]; then people_images="/home/${CP_DOMAIN}/files/poster/people" mkdir -p "${people_images}" fi if [ "${PEOPLE_INFO}" = "all" ] || [ "${PEOPLE_INFO}" = "json" ]; then director_dir="/home/${CP_DOMAIN}/themes/${CP_THEME}/views/director" actor_dir="/home/${CP_DOMAIN}/themes/${CP_THEME}/views/actor" director_dir_tmp="${tmp_dir}/director" actor_dir_tmp="${tmp_dir}/actor" mkdir -p "${director_dir_tmp}" mkdir -p "${actor_dir_tmp}" mkdir -p "${director_dir}" mkdir -p "${actor_dir}" rm -rf "${director_dir}" rm -rf "${actor_dir}" fi for l in {1..10}; do start=$(( l * 310000 - 309999 )) stop=$(( l * 310000 )) ( for (( i=start; i<=stop; i++ )); do people_url="${api//id/${i}}" people="${json_dir}/${i}.json" if [ "${PEOPLE_CACHE}" = "cache" ]; then if [ ! -f "${people}" ]; then wget "${people_url}" -qO "${people}" fi else wget "${people_url}" -qO "${people}" fi if [ ! -f "${people}" ]; then rm -f "${people}" continue fi people_json="$(cat "${people}")" profile_path=$( echo "${people_json}" | jq -r ".profile_path" ) if [ "${profile_path}" = "null" ] || [ "${profile_path}" = "" ]; then rm -f "${people}" continue fi adult=$( echo "${people_json}" | jq -r ".adult" ) if [ "${adult}" != "false" ]; then rm -f "${people}" continue fi name=$( echo "${people_json}" | jq -r ".name" ) if [ "${PEOPLE_INFO}" = "all" ] || [ "${PEOPLE_INFO}" = "jpg" ]; then if [ "${PEOPLE_CACHE}" = "cache" ]; then if [ ! -f "${people_images}/${name}.jpg" ]; then wget "https://image.tmdb.org/t/p/w185${profile_path}" -qO "${people_images}/${name}.jpg" fi else wget "https://image.tmdb.org/t/p/w185${profile_path}" -qO "${people_images}/${name}.jpg" fi echo "${i}/${stop}) ${name}.jpg" fi if [ "${PEOPLE_INFO}" = "all" ] || [ "${PEOPLE_INFO}" = "json" ]; then known_for_department=$( echo "${people_json}" | jq -r ".known_for_department" ) department="" if [ "${known_for_department}" = "Directing" ]; then department="${director_dir_tmp}" else department="${actor_dir_tmp}" fi mv "${people}" "${department}/${name}.json" &>/dev/null echo "${i}/${stop}) ${name}.json" fi if [ "${PEOPLE_LANG}" = "all" ] || [ "${PEOPLE_LANG}" = "ru" ]; then also_known_as=$( echo "${people_json}" | jq -r ".also_known_as[] | @base64" ) for row in ${also_known_as}; do other_name="$(echo "${row}" | base64 --decode)" other_name="${other_name//Ё/Е}" other_name="${other_name//ё/е}" if [ "${PEOPLE_LANG}" = "all" ]; then if [ "${PEOPLE_INFO}" = "all" ] || [ "${PEOPLE_INFO}" = "json" ]; then cd "${department}" && ln -s "${name}.json" "${other_name}.json" &>/dev/null fi if [ "${PEOPLE_INFO}" = "all" ] || [ "${PEOPLE_INFO}" = "jpg" ]; then cd "${people_images}" && ln -s "${name}.jpg" "${other_name}.jpg" &>/dev/null fi echo "${i}/${stop}) ${name} » ${other_name}" else cyrillic="$(echo "${other_name}" | grep -Eo "[А-Яа-я]*")" if [ -n "${cyrillic}" ]; then if [ "${PEOPLE_INFO}" = "all" ] || [ "${PEOPLE_INFO}" = "json" ]; then cd "${department}" && ln -s "${name}.json" "${other_name}.json" &>/dev/null fi if [ "${PEOPLE_INFO}" = "all" ] || [ "${PEOPLE_INFO}" = "jpg" ]; then cd "${people_images}" && ln -s "${name}.jpg" "${other_name}.jpg" &>/dev/null fi echo "${i}/${stop}) ${name} » ${other_name}" fi fi done fi done ) & done wait if [ "${PEOPLE_INFO}" = "all" ] || [ "${PEOPLE_INFO}" = "json" ]; then mv "${actor_dir_tmp}" "${actor_dir}" mv "${director_dir_tmp}" "${director_dir}" fi rm -rf "${tmp_dir}" exit 0 ;; "ping" ) curl -s --fail http://localhost:3000/ping || exit 1 exit 0 ;; "uptimerobot" ) MIN=$(date '+%M') if [ "${MIN}" = "00" ] || [ "${MIN}" = "01" ]; then rm -f "/home/.uptimerobot" for D_MIN in /home/*; do DD_MIN=$(find "${D_MIN}" -maxdepth 0 -printf "%f") rm -f "/home/${DD_MIN}/.uptimerobot" done fi if [ -n "${2}" ] && [ "${2}" != "push" ]; then [ -f "/home/${2}/app.js" ] || [ -f "/home/${2}/index.php" ] || exit 0 [ ! -f "/home/.uptimerobot" ] || [ ! -f "/home/${2}/.uptimerobot" ] || exit 0 touch "/home/${2}/.uptimerobot" sleep $(( ( "${RANDOM}" % 30 ) )) DD=${2} DD_=$(echo "${2}" | sed -r "s/[^A-Za-z0-9]/_/g") PONG1=$(docker exec -t "${DD_}" /usr/bin/cinemapress ping 2>/dev/null) if [ "${PONG1}" != "pong" ]; then echo "$(date) ${DD} DOCKER warning" sleep $(( ( "${RANDOM}" % 30 ) )) PONG1=$(docker exec -t "${DD_}" /usr/bin/cinemapress ping 2>/dev/null) if [ "${PONG1}" != "pong" ]; then echo "$(date) ${DD} DOCKER restart" docker restart "${DD_}" sleep $(( ( "${RANDOM}" % 30 ) )) fi fi PONG2=$(curl -s --fail -A "PING" http://"${DD}"/ping || curl -s --fail http://ping."${DD}"/ping) if [ "${PONG2}" = "pong" ]; then echo "$(date) ${DD} WEBSITE online" else /usr/bin/cinemapress debug if [ -n "${3}" ] && [ -n "${4}" ]; then echo "$(date) ${DD} WEBSITE push" curl -d "{\"chat_id\":${4}, \"text\":\"Website down?\", \"reply_markup\": {\"inline_keyboard\": [[{\"text\":\"ping.${DD}\", \"url\": \"http://ping.${DD}\"}]]} }" -H "Content-Type: application/json" -X POST "https://api.telegram.org/bot${3}/sendMessage" &>/dev/null else echo "$(date) ${DD} WEBSITE restart" docker stop "${DD_}" sleep 5 docker start "${DD_}" docker stop nginx sleep 5 docker start nginx fi fi rm -f "/home/${2}/.uptimerobot" else for D in /home/*; do DD=$(find "${D}" -maxdepth 0 -printf "%f") DD_=$(echo "${DD}" | sed -r "s/[^A-Za-z0-9]/_/g") PONG1=$(curl -s --fail -A "PING" http://"${DD}"/ping || curl -s --fail http://ping."${DD}"/ping) if { [ -f "${D}/app.js" ] || [ -f "${D}/index.php" ]; } && [ "${PONG1}" = "pong" ]; then if [ "$(grep "${DD}_uptimerobot" /etc/crontab)" = "" ]; then echo -e "\n" >>/etc/crontab echo "# ----- ${DD}_uptimerobot --------------------------------------" >>/etc/crontab echo "*/2 * * * * root /usr/bin/cinemapress uptimerobot \"${DD}\" \"${3}\" \"${4}\" >>\"/home/${DD}/log/uptimerobot_\$(date '+\%d_\%m_\%Y').log\" 2>&1" >>/etc/crontab echo "# ----- ${DD}_uptimerobot --------------------------------------" >>/etc/crontab echo "Added to monitoring: ${DD}" fi else echo "Not added to monitoring: ${DD}" fi done fi exit 0 ;; "aria2"|"cloudtorrent"|"torrent"|"torrentclient" ) _br "${2}" read_domain "${2}" sh_not _s "${2}" LOCAL_ACTION="${3}" if [ "${LOCAL_ACTION}" = "" ]; then _header "MAKE A CHOICE" printf "${C}---- ${G}1)${NC} run ${S}------------------------ Run Torrent Cloud Client ${C}----\n" printf "${C}---- ${G}2)${NC} ftp ${S}---------------------- Configuration FTP Storages ${C}----\n" printf "${C}---- ${G}3)${NC} show ${S}-------------------------- Show FTP Storage List ${C}----\n" printf "${C}---- ${G}4)${NC} delete ${S}--------------------------- Delete FTP Storage ${C}----\n" _s read -e -p 'OPTION [1-4]: ' LOCAL_ACTION LOCAL_ACTION=$(echo "${LOCAL_ACTION}" | iconv -c -t UTF-8) _br fi if [ "${LOCAL_ACTION}" = "run" ] || [ "${LOCAL_ACTION}" = "1" ]; then if [ "${CP_OS}" = "debian" ] || [ "${CP_OS}" = "\"debian\"" ] || \ [ "${CP_OS}" = "ubuntu" ] || [ "${CP_OS}" = "\"ubuntu\"" ]; then DEBIAN_FRONTEND=noninteractive apt-get -y -qq install jq elif [ "${CP_OS}" = "fedora" ] || [ "${CP_OS}" = "\"fedora\"" ]; then dnf -y install jq elif [ "${CP_OS}" = "centos" ] || [ "${CP_OS}" = "\"centos\"" ]; then yum install -y jq fi RPC_SECRET=$(cat "/dev/urandom" | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1) RPC_SECRET=$(printf '%s\n' "${RPC_SECRET}" | awk '{ print toupper($0) }') if [ "`docker ps -aq -f status=running -f name=^/torrent\$ 2>/dev/null`" != "" ]; then docker stop torrent >>/var/log/docker_torrent_"$(date '+%d_%m_%Y')".log 2>&1 docker rm -f torrent >>/var/log/docker_torrent_"$(date '+%d_%m_%Y')".log 2>&1 fi docker run \ -d \ --name torrent \ "${DOCKER_MEM[@]}" \ --restart always \ --network cinemapress \ --env="PUID=${UID}" \ --env="PGID=${GID}" \ --env="UMASK_SET=022" \ --env="RPC_SECRET=${RPC_SECRET}" \ --env="RPC_PORT=6800" \ -p 6800:6800 \ --env="LISTEN_PORT=6888" \ -p 6888:6888 \ -p 6888:6888/udp \ -v "/home/${CP_DOMAIN}/files/torrent/config":/config \ -v "/home/${CP_DOMAIN}/files/torrent/downloads":/downloads \ p3terx/aria2-pro >>/var/log/docker_torrent_"$(date '+%d_%m_%Y')".log 2>&1 TORRENT_RUN=1 while [ "${TORRENT_RUN}" != "50" ]; do sleep 3 TORRENT_RUN=$((1+${TORRENT_RUN})) if [ "`docker ps -aq -f status=running -f name=^/torrent\$ 2>/dev/null`" != "" ]; then docker exec "${CP_DOMAIN_}" /usr/bin/cinemapress container torrent TORRENT_RUN=50 fi done mkdir -p "/home/${CP_DOMAIN}/files/torrent/uploads" _line _content _content "Torrent client is running!" _content _content "torrent.${CP_DOMAIN}/index.html" _content _content "RPC ADDRESS: torrent.${CP_DOMAIN}:80/jsonrpc" _content "RPC SECRET: ${RPC_SECRET}" _content "RPC METHOD: POST" _content _content "Configure your video storage." _content _s elif [ "${LOCAL_ACTION}" = "ftp" ] || [ "${LOCAL_ACTION}" = "2" ]; then read_ftp_name "${4}" read_ftp_hostname "${5}" read_ftp_username "${6}" read_ftp_password "${7}" FTP_PASSWORD="$(docker exec -t "${CP_DOMAIN_}" /usr/bin/cinemapress rclone_obscure "${FTP_PASSWORD}")" IFS=':' read -r -a HOST_PORT <<< "${FTP_HOSTNAME}" if [ "${HOST_PORT[1]}" = "" ]; then TORRENT_STORAGE=(ftp user "${FTP_USERNAME}" pass "${FTP_PASSWORD}" host "${HOST_PORT[0]}") else TORRENT_STORAGE=(ftp user "${FTP_USERNAME}" pass "${FTP_PASSWORD}" host "${HOST_PORT[0]}" port "${HOST_PORT[1]}") fi docker exec "${CP_DOMAIN_}" rclone config create "${FTP_NAME}" "${TORRENT_STORAGE[@]}" \ >>/var/log/docker_torrent_"$(date '+%d_%m_%Y')".log 2>&1 _s elif [ "${LOCAL_ACTION}" = "show" ] || [ "${LOCAL_ACTION}" = "3" ]; then if [ "${CP_OS}" = "alpine" ] || [ "${CP_OS}" = "\"alpine\"" ]; then rclone config show else docker exec -t "${CP_DOMAIN_}" rclone config show fi elif [ "${LOCAL_ACTION}" = "delete" ] || [ "${LOCAL_ACTION}" = "4" ]; then read_ftp_name "${4}" docker exec -t "${CP_DOMAIN_}" rclone config delete "${FTP_NAME}" elif [ "${LOCAL_ACTION}" = "upload" ] || [ "${LOCAL_ACTION}" = "uploads" ] || [ "${LOCAL_ACTION}" = "5" ]; then if [ ! -d "/home/${CP_DOMAIN}/files/torrent/uploads" ]; then exit 0 fi if [ -d "/home/${CP_DOMAIN}/files/torrent/.process" ]; then if [ -f "/home/${CP_DOMAIN}/files/torrent/.1hour" ]; then if [ -f "/home/${CP_DOMAIN}/files/torrent/.2hours" ]; then if [ -f "/home/${CP_DOMAIN}/files/torrent/.3hours" ]; then if [ -f "/home/${CP_DOMAIN}/files/torrent/.4hours" ]; then if [ -f "/home/${CP_DOMAIN}/files/torrent/.5hours" ]; then /usr/bin/cinemapress kill_rclone "${CP_DOMAIN}" rm -rf \ "/home/${CP_DOMAIN}/files/torrent/.1hour" \ "/home/${CP_DOMAIN}/files/torrent/.2hours" \ "/home/${CP_DOMAIN}/files/torrent/.3hours" \ "/home/${CP_DOMAIN}/files/torrent/.4hours" \ "/home/${CP_DOMAIN}/files/torrent/.5hours" mkdir -p "/home/${CP_DOMAIN}/files/torrent/uploads" cp -rf \ /home/"${CP_DOMAIN}"/files/torrent/.process/* \ /home/"${CP_DOMAIN}"/files/torrent/uploads/ rm -rf /home/"${CP_DOMAIN}"/files/torrent/.process else echo "$(date '+%Y/%m/%d %H:%M:%S') Uploading video files takes 5 hours." touch "/home/${CP_DOMAIN}/files/torrent/.5hours" exit 0 fi else echo "$(date '+%Y/%m/%d %H:%M:%S') Uploading video files takes 4 hours." touch "/home/${CP_DOMAIN}/files/torrent/.4hours" exit 0 fi else echo "$(date '+%Y/%m/%d %H:%M:%S') Uploading video files takes 3 hours." touch "/home/${CP_DOMAIN}/files/torrent/.3hours" exit 0 fi else echo "$(date '+%Y/%m/%d %H:%M:%S') Uploading video files takes 2 hours." touch "/home/${CP_DOMAIN}/files/torrent/.2hours" exit 0 fi else echo "$(date '+%Y/%m/%d %H:%M:%S') Uploading video files takes 1 hour." touch "/home/${CP_DOMAIN}/files/torrent/.1hour" exit 0 fi fi if [ -z "$(ls -A "/home/${CP_DOMAIN}/files/torrent/uploads")" ]; then echo "$(date '+%Y/%m/%d %H:%M:%S') The folder /home/${CP_DOMAIN}/files/torrent/uploads is empty." exit 0 fi CINEMATORRENT_ARRAY=() CINEMATORRENT_ACTIVE="false" for N in {1..9}; do CINEMATORRENT_NAME="CINEMATORRENT${N}" if [ "${CP_OS}" = "alpine" ] || [ "${CP_OS}" = "\"alpine\"" ]; then CINEMATORRENT=$(rclone config show 2>/dev/null | grep "${CINEMATORRENT_NAME}") else CINEMATORRENT=$(docker exec -t "${CP_DOMAIN_}" rclone config show 2>/dev/null | grep "${CINEMATORRENT_NAME}") fi if [ "${CINEMATORRENT}" = "" ]; then continue; fi CINEMATORRENT_ACTIVE="true" echo "$(date '+%Y/%m/%d %H:%M:%S') ✓ ${CINEMATORRENT_NAME}" CINEMATORRENT_ARRAY+=("${CINEMATORRENT_NAME}") done if [ "${CINEMATORRENT_ACTIVE}" = "false" ]; then echo "$(date '+%Y/%m/%d %H:%M:%S') You don't have an FTP server configuration." exit 0 fi mv "/home/${CP_DOMAIN}/files/torrent/uploads" "/home/${CP_DOMAIN}/files/torrent/.process" mkdir -p "/home/${CP_DOMAIN}/files/torrent/uploads" for DIR in "/home/${CP_DOMAIN}/files/torrent/.process"/*; do if [ ! -f "${DIR}" ]; then continue; fi DIR_NAME="${DIR##*/}" IFS='.' read -r -a FILE_ARR <<< "${DIR_NAME}" if [ "${FILE_ARR[1]}" = "dir" ] || \ [ "${FILE_ARR[1]}" = "Dir" ] || \ [ "${FILE_ARR[1]}" = "DIR" ]; then mkdir -p "/home/${CP_DOMAIN}/files/torrent/.process/${FILE_ARR[0]}" mv "${DIR}" \ "/home/${CP_DOMAIN}/files/torrent/.process/${FILE_ARR[0]}/${DIR##*/${FILE_ARR[0]}.${FILE_ARR[1]}.}" fi done for CINEMATORRENT_NAME in "${CINEMATORRENT_ARRAY[@]}"; do CFOLDER="/home/${CP_DOMAIN}/files/torrent/.process/${CINEMATORRENT_NAME}" if [ ! -d "${CFOLDER}" ]; then continue; fi echo "$(date '+%Y/%m/%d %H:%M:%S') UPLOAD TO ${CINEMATORRENT_NAME}" for DIR in "${CFOLDER}"/*; do DIR_NAME="${DIR##*/}" if [ -d "${DIR}" ]; then echo "$(date '+%Y/%m/%d %H:%M:%S') CREATE DIR ${DIR_NAME}" if [ "${CP_OS}" = "alpine" ] || [ "${CP_OS}" = "\"alpine\"" ]; then rclone -vv --retries 2 --low-level-retries 2 mkdir "${CINEMATORRENT_NAME}":"${DIR_NAME}" else docker exec -t "${CP_DOMAIN_}" rclone -vv --retries 2 --low-level-retries 2 mkdir "${CINEMATORRENT_NAME}":"${DIR_NAME}" fi for FILE in "${CFOLDER}/${DIR_NAME}"/*; do FILE_NAME="${FILE##*/}" if [ -f "${FILE}" ]; then echo "$(date '+%Y/%m/%d %H:%M:%S') UPLOAD FILE ${DIR_NAME}/${FILE_NAME}" if [ "${CP_OS}" = "alpine" ] || [ "${CP_OS}" = "\"alpine\"" ]; then { rclone -vv --retries 2 --low-level-retries 2 --ignore-size copy \ "${CFOLDER}/${DIR_NAME}/${FILE_NAME}" "${CINEMATORRENT_NAME}:${DIR_NAME}/"; } && \ rm -rf "${FILE}" else { docker exec -t "${CP_DOMAIN_}" rclone -vv --retries 2 --low-level-retries 2 --ignore-size copy \ "${CFOLDER}/${DIR_NAME}/${FILE_NAME}" "${CINEMATORRENT_NAME}:${DIR_NAME}/"; } && \ rm -rf "${FILE}" fi fi done elif [ -f "${DIR}" ]; then FILE_NAME="${DIR##*/}" echo "$(date '+%Y/%m/%d %H:%M:%S') UPLOAD FILE ${FILE_NAME}" if [ "${CP_OS}" = "alpine" ] || [ "${CP_OS}" = "\"alpine\"" ]; then { rclone -vv --retries 2 --low-level-retries 2 --ignore-size copy \ "${CFOLDER}/${FILE_NAME}" "${CINEMATORRENT_NAME}:${DIR_NAME}/"; } && \ rm -rf "${DIR}" else { docker exec -t "${CP_DOMAIN_}" rclone -vv --retries 2 --low-level-retries 2 --ignore-size copy \ "${CFOLDER}/${FILE_NAME}" "${CINEMATORRENT_NAME}:${DIR_NAME}/"; } && \ rm -rf "${DIR}" fi fi done rm -rf "${CFOLDER}" done PFOLDER="/home/${CP_DOMAIN}/files/torrent/.process" for DIR in "${PFOLDER}"/*; do DIR_NAME="${DIR##*/}" if [ -d "${DIR}" ]; then for CINEMATORRENT_NAME in "${CINEMATORRENT_ARRAY[@]}"; do echo "$(date '+%Y/%m/%d %H:%M:%S') CREATE DIR ${CINEMATORRENT_NAME}:${DIR_NAME}" if [ "${CP_OS}" = "alpine" ] || [ "${CP_OS}" = "\"alpine\"" ]; then rclone -vv --retries 2 --low-level-retries 2 mkdir "${CINEMATORRENT_NAME}":"${DIR_NAME}" else docker exec -t "${CP_DOMAIN_}" rclone -vv --retries 2 --low-level-retries 2 mkdir "${CINEMATORRENT_NAME}":"${DIR_NAME}" fi done for FILE in "${PFOLDER}/${DIR_NAME}"/*; do FILE_NAME="${FILE##*/}" if [ -f "${FILE}" ]; then echo "$(date '+%Y/%m/%d %H:%M:%S') UPLOAD FILE ${DIR_NAME}/${FILE_NAME}" FILE_UPLOADED="false" for CINEMATORRENT_NAME in "${CINEMATORRENT_ARRAY[@]}"; do echo "$(date '+%Y/%m/%d %H:%M:%S') UPLOAD TO ${CINEMATORRENT_NAME}" if [ "${CP_OS}" = "alpine" ] || [ "${CP_OS}" = "\"alpine\"" ]; then { rclone -vv --retries 2 --low-level-retries 2 --ignore-size copy \ "${PFOLDER}/${DIR_NAME}/${FILE_NAME}" "${CINEMATORRENT_NAME}:${DIR_NAME}/"; } && \ FILE_UPLOADED="true" else { docker exec -t "${CP_DOMAIN_}" rclone -vv --retries 2 --low-level-retries 2 --ignore-size copy \ "${PFOLDER}/${DIR_NAME}/${FILE_NAME}" "${CINEMATORRENT_NAME}:${DIR_NAME}/"; } && \ FILE_UPLOADED="true" fi done if [ "${FILE_UPLOADED}" = "true" ]; then echo "$(date '+%Y/%m/%d %H:%M:%S') DELETE FILE ${FILE}" rm -rf "${FILE}" fi fi done elif [ -f "${DIR}" ]; then FILE_UPLOADED="false" for CINEMATORRENT_NAME in "${CINEMATORRENT_ARRAY[@]}"; do FILE_NAME="${DIR##*/}" echo "$(date '+%Y/%m/%d %H:%M:%S') UPLOAD FILE ${FILE_NAME}" if [ "${CP_OS}" = "alpine" ] || [ "${CP_OS}" = "\"alpine\"" ]; then { rclone -vv --retries 2 --low-level-retries 2 --ignore-size copy \ "${PFOLDER}/${FILE_NAME}" "${CINEMATORRENT_NAME}:${DIR_NAME}/"; } && \ FILE_UPLOADED="true" else { docker exec -t "${CP_DOMAIN_}" rclone -vv --retries 2 --low-level-retries 2 --ignore-size copy \ "${PFOLDER}/${FILE_NAME}" "${CINEMATORRENT_NAME}:${DIR_NAME}/"; } && \ FILE_UPLOADED="true" fi done if [ "${FILE_UPLOADED}" = "true" ]; then echo "$(date '+%Y/%m/%d %H:%M:%S') DELETE FILE ${DIR}" rm -rf "${DIR}" fi fi done rm -rf "/home/${CP_DOMAIN}/files/torrent/.process" rm -rf \ "/home/${CP_DOMAIN}/files/torrent/.1hour" \ "/home/${CP_DOMAIN}/files/torrent/.2hours" \ "/home/${CP_DOMAIN}/files/torrent/.3hours" \ "/home/${CP_DOMAIN}/files/torrent/.4hours" \ "/home/${CP_DOMAIN}/files/torrent/.5hours" fi exit 0 ;; "kill_rclone" ) _br "${2}" read_domain "${2}" sh_not _s "${2}" if [ "${CP_OS}" = "alpine" ] || [ "${CP_OS}" = "\"alpine\"" ]; then ps -ef | grep "rclone" | grep -v 'grep' | awk '{ print $1 }' | xargs kill else docker exec -t "${CP_DOMAIN_}" /usr/bin/cinemapress kill_rclone "${CP_DOMAIN}" fi exit 0 ;; "local" ) echo ""; echo -n "☐ Change to a local build cinemapress.sh ..."; sed -Ei "s/# docker build/docker build/g" /usr/bin/cinemapress >/dev/null sed -Ei "s/docker pull/# docker pull/g" /usr/bin/cinemapress >/dev/null sleep 1 echo -e "\\r${G}✓ Change to a local build cinemapress.sh ...${NC}" echo "" exit 0 ;; "rclone_obscure" ) echo "$(echo "${2}" | rclone obscure -)" exit 0 ;; "help"|"H"|"--help"|"-h"|"-H" ) clear _line _logo _header "HELP" _br printf " ~# cinemapress [OPTION]"; _br; _br; printf " OPTIONS:"; _br; _br; printf " en - Fast install EN website"; _br; printf " ru - Fast install RU website"; _br; printf " passwd - Change the password for access to the admin panel"; _br; printf " stop - Stop website (docker container)"; _br; printf " start - Start website (docker container)"; _br; printf " restart - Restart website (docker container)"; _br; printf " reload - Reload website (PM2)"; _br; printf " zero - Delete all data from the automatic database"; _br; printf " zero_rt - Delete all data from the realtime database"; _br; printf " logs - Show all logs"; _br; printf " logs live - Show all logs realtime"; _br; printf " logs bot - Show logs for fake and true bots"; _br; printf " live bot - Show realtime logs for fake and true bots"; _br; printf " lbf - Show logs for fake bots"; _br; printf " lbt - Show logs for true bots"; _br; printf " lbb - Show logs for bad bots"; _br; printf " crash - Getting debug information after a site crash"; _br; printf " bench - System info, I/O test and speedtest"; _br; printf " actual - Updating data from an automatic database"; _br; printf " to a manual database (year, list of actors, list"; _br; printf " of genres, list of countries, list of directors,"; _br; printf " premiere date, rating and number of votes)"; _br; printf " clear_vps - Complete deletion of all data on the VPS"; _br; printf " app - Create movie application"; _br; printf " cms - Install other CMS (php-mysql,wordpress,drupal,joomla,dle)"; _br; printf " cms example.com backup [create,restore]"; _br; printf " bot - Install website for bots"; _br; printf " bot_https - Install website for bots and generate SSL"; _br; printf " ds - The domain that is the main on the server and accepts all requests"; _br; printf " ds none - Deny access to the site by IP address"; _br; printf " cf - Adding all subdomains to CloudFlare"; _br; printf " mode - debug: more information about the speed and memory of each request"; _br; printf " uptimerobot - Ping check for container and website every 2 minutes, if the website"; _br; printf " is offline, the server will be rebooted"; _br; printf " redirect movie.co hd.movie.com - Redirect from movie.co to hd.movie.com"; _br; printf " redirect movie.co hd.movie.com bot - Redirect only for bots (Googlebot, etc.)"; _br; printf " splash example.com git_login git_token [github,gitlab] [http://app-movies.com]"; _br; printf " static example.com mega_login mega_pass [create,restore]"; _br; _br; printf " combine install_https_restore_mirror"; _br; printf " combine install_restore_mirror"; _br; printf " combine install_https_mirror"; _br; printf " combine install_https_backup"; _br; printf " combine install_https_restore"; _br; printf " combine install_https"; _br; printf " combine install_backup"; _br; printf " combine install_restore"; _br; _br; printf " nohup cinemapress [FULL COMMAND] > log 2>&1; tail -f log"; _br; _br; exit 0 ;; "version"|"ver"|"v"|"V"|"--version"|"--ver"|"-v"|"-V" ) echo "CinemaPress ${CP_VER}" _br echo "Copyright (c) 2014 - ... CinemaPress" _br exit 0 ;; * ) option ${1} ;; esac done