2071 lines
85 KiB
Bash
2071 lines
85 KiB
Bash
#!/bin/bash
|
|
|
|
R='\033[0;31m'
|
|
G='\033[0;32m'
|
|
Y='\033[0;33m'
|
|
C='\033[0;34m'
|
|
B='\033[0;36m'
|
|
S='\033[0;90m'
|
|
NC='\033[0m'
|
|
|
|
OPTION=${1:-}
|
|
GIT_SERVER="github.com"
|
|
CP_VER="4.0.0"
|
|
CP_ALL=""
|
|
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:-}
|
|
|
|
CP_DOMAIN_=`echo ${CP_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"`
|
|
CP_MIRROR_=`echo ${CP_MIRROR} | sed -r "s/[^A-Za-z0-9]/_/g"`
|
|
|
|
CP_IP="domain"
|
|
|
|
EXTERNAL_PORT=""
|
|
EXTERNAL_DOCKER=""
|
|
|
|
CP_OS="`awk '/^ID=/' /etc/*-release | awk -F'=' '{ print tolower($2) }'`"
|
|
|
|
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
|
|
|
|
post_commands() {
|
|
LOCAL_DOMAIN=${1:-${CP_DOMAIN}}
|
|
LOCAL_DOMAIN_=`echo ${LOCAL_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"`
|
|
|
|
if [ "`grep \"${LOCAL_DOMAIN}_autostart\" /etc/crontab`" = "" ] \
|
|
&& [ -f "/home/${LOCAL_DOMAIN}/process.json" ]; 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}_ssl\" /etc/crontab`" = "" ] \
|
|
&& [ -d "/home/${LOCAL_DOMAIN}/config/production/nginx/ssl.d/live/${LOCAL_DOMAIN}/" ]; then
|
|
echo -e "\n" >>/etc/crontab
|
|
echo "# ----- ${LOCAL_DOMAIN}_ssl --------------------------------------" >>/etc/crontab
|
|
echo "0 23 * * * root docker run -it --rm -v /home/${LOCAL_DOMAIN}/config/production/nginx/ssl.d:/etc/letsencrypt -v /home/${LOCAL_DOMAIN}/config/production/nginx/letsencrypt:/var/lib/letsencrypt -v /home/${LOCAL_DOMAIN}/config/production/nginx/cloudflare.ini:/cloudflare.ini certbot/dns-cloudflare renew --dns-cloudflare --dns-cloudflare-credentials /cloudflare.ini --quiet >>/home/${LOCAL_DOMAIN}/log/https_\$(date '+%d_%m_%Y').log 2>&1; docker exec -d nginx nginx -s reload" >>/etc/crontab
|
|
echo "# ----- ${LOCAL_DOMAIN}_ssl --------------------------------------" >>/etc/crontab
|
|
fi
|
|
CP_SPEED=`grep "\"pagespeed\"" /home/${LOCAL_DOMAIN}/config/production/config.js | sed 's/.*"pagespeed":\s*\([0-9]\{1\}\).*/\1/'`
|
|
if [ "${CP_SPEED}" != "" ]; then
|
|
sed -E -i "s/\"pagespeed\":\s*[0-9]*/\"pagespeed\":${CP_SPEED}/" \
|
|
/home/${LOCAL_DOMAIN}/config/production/config.js
|
|
docker exec ${LOCAL_DOMAIN_} /usr/bin/cinemapress container speed "${CP_SPEED}" >/dev/null
|
|
docker exec nginx nginx -s reload >/dev/null
|
|
fi
|
|
}
|
|
docker_install() {
|
|
if [ "${CP_OS}" != "alpine" ] && [ "${CP_OS}" != "\"alpine\"" ]; then
|
|
if [ "`basename "${0}"`" != "cinemapress" ]; then
|
|
echo ""; 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 wget curl nano htop lsb-release ca-certificates git-core openssl netcat cron gzip bzip2 unzip gcc make libssl-dev locales lsof net-tools >>/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 wget curl nano htop lsb-release ca-certificates git-core openssl netcat cron gzip bzip2 unzip gcc make libssl-dev locales lsof net-tools >>/var/log/docker_install_$(date '+%d_%m_%Y').log 2>&1
|
|
elif [ "${CP_OS}" = "fedora" ] || [ "${CP_OS}" = "\"fedora\"" ]; then
|
|
dnf -y install sudo wget curl nano htop lsb-release ca-certificates git-core openssl netcat cron gzip bzip2 unzip gcc make libssl-dev locales 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 wget curl nano htop lsb-release ca-certificates git-core openssl netcat cron gzip bzip2 unzip gcc make libssl-dev locales lsof net-tools >>/var/log/docker_install_$(date '+%d_%m_%Y').log 2>&1
|
|
fi
|
|
sudo wget -qO /usr/bin/cinemapress https://gitlab.com/CinemaPress/CinemaPress/raw/master/cinemapress.sh && \
|
|
chmod +x /usr/bin/cinemapress
|
|
echo -e "\\r "
|
|
fi
|
|
if [ "`docker -v 2>/dev/null`" = "" ]; then
|
|
clear
|
|
_line
|
|
_logo
|
|
_header "DOCKER"
|
|
_content
|
|
_content "Installing Docker ..."
|
|
_content
|
|
_s
|
|
if [ "${CP_OS}" = "debian" ] || [ "${CP_OS}" = "\"debian\"" ]; then
|
|
CP_ARCH="`dpkg --print-architecture`"
|
|
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -qq remove docker docker-engine docker.io containerd runc
|
|
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -qq update
|
|
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -qq install \
|
|
apt-transport-https \
|
|
ca-certificates \
|
|
curl \
|
|
gnupg2 \
|
|
software-properties-common
|
|
sudo curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
|
|
sudo apt-key fingerprint 0EBFCD88
|
|
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
|
|
sudo add-apt-repository \
|
|
"deb [arch=${CP_ARCH}] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
|
|
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -qq update
|
|
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -qq install docker-ce docker-ce-cli containerd.io
|
|
elif [ "${CP_OS}" = "ubuntu" ] || [ "${CP_OS}" = "\"ubuntu\"" ]; then
|
|
CP_ARCH="`dpkg --print-architecture`"
|
|
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -qq remove docker docker-engine docker.io containerd runc
|
|
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -qq update
|
|
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -qq install \
|
|
apt-transport-https \
|
|
ca-certificates \
|
|
curl \
|
|
gnupg-agent \
|
|
software-properties-common
|
|
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
|
|
sudo apt-key fingerprint 0EBFCD88
|
|
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
|
|
sudo add-apt-repository \
|
|
"deb [arch=${CP_ARCH}] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
|
|
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -qq update
|
|
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -qq install docker-ce docker-ce-cli containerd.io
|
|
elif [ "${CP_OS}" = "fedora" ] || [ "${CP_OS}" = "\"fedora\"" ]; then
|
|
sudo 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
|
|
sudo dnf -y install dnf-plugins-core
|
|
sudo dnf config-manager \
|
|
--add-repo \
|
|
https://download.docker.com/linux/fedora/docker-ce.repo
|
|
sudo dnf -y install docker-ce docker-ce-cli containerd.io
|
|
sudo systemctl start docker
|
|
elif [ "${CP_OS}" = "centos" ] || [ "${CP_OS}" = "\"centos\"" ]; then
|
|
sudo yum remove -y docker \
|
|
docker-client \
|
|
docker-client-latest \
|
|
docker-common \
|
|
docker-latest \
|
|
docker-latest-logrotate \
|
|
docker-logrotate \
|
|
docker-engine
|
|
sudo yum install -y yum-utils \
|
|
device-mapper-persistent-data \
|
|
lvm2
|
|
sudo yum-config-manager \
|
|
--add-repo \
|
|
https://download.docker.com/linux/centos/docker-ce.repo
|
|
sudo yum install -y docker-ce docker-ce-cli containerd.io
|
|
sudo systemctl start docker
|
|
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
|
|
IP_DOMAIN=`echo ${IP_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"`
|
|
CP_IP="ip"
|
|
CP_LANG="${1}"
|
|
CP_THEME="arya"
|
|
CP_PASSWD="test"
|
|
sh_yes
|
|
_s
|
|
sh_progress
|
|
1_install "${IP_DOMAIN}"
|
|
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}}
|
|
|
|
docker network create \
|
|
--driver bridge \
|
|
cinemapress >>/var/log/docker_install_$(date '+%d_%m_%Y').log 2>&1
|
|
|
|
# docker build -t cinemapress/docker https://github.com/CinemaPress/CinemaPress.git
|
|
|
|
docker run \
|
|
-d \
|
|
--name ${LOCAL_DOMAIN_} \
|
|
-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/ngx_pagespeed_cache:/var/ngx_pagespeed_cache \
|
|
-v /var/lib/sphinx/data:/var/lib/sphinx/data \
|
|
-v /var/local/images:/var/local/images \
|
|
-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
|
|
|
|
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
|
|
|
|
BOTS=""
|
|
if [ ! -d "/etc/nginx/bots.d/" ] && [ -d "/home/${LOCAL_DOMAIN}/config/production/nginx/bots.d/" ]; then
|
|
mkdir -p /etc/nginx/bots.d
|
|
cp -rf /home/${LOCAL_DOMAIN}/config/production/nginx/bots.d/* /etc/nginx/bots.d/
|
|
BOTS="-v /etc/nginx/bots.d:/etc/nginx/bots.d"
|
|
fi
|
|
|
|
docker run \
|
|
-d \
|
|
--name nginx \
|
|
--restart always \
|
|
--network cinemapress \
|
|
-v /var/log/nginx:/var/log/nginx \
|
|
-v /etc/nginx/bots.d:/etc/nginx/bots.d \
|
|
-v /var/local/images:/var/local/images \
|
|
-v /var/local/balancer:/var/local/balancer \
|
|
-v /var/ngx_pagespeed_cache:/var/ngx_pagespeed_cache \
|
|
-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
|
|
|
|
docker run \
|
|
-d \
|
|
--name fail2ban \
|
|
--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
|
|
|
|
fi
|
|
fi
|
|
}
|
|
2_update() {
|
|
LOCAL_DOMAIN=${1:-${CP_DOMAIN}}
|
|
LOCAL_DOMAIN_=`echo ${LOCAL_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"`
|
|
|
|
AA=`grep "\"CP_ALL\"" /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`
|
|
PP=`grep "\"pagespeed\"" /home/${LOCAL_DOMAIN}/config/production/config.js`
|
|
CP_ALL=`echo "${AA}" | sed 's/.*"CP_ALL":\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_SPEED=`echo ${PP} | sed 's/.*"pagespeed":\s*\([0-9]\{1\}\).*/\1/'`
|
|
if [ "${CP_ALL}" = "" ] || [ "${CP_ALL}" = "${AA}" ]; then CP_ALL=""; fi
|
|
rm -rf /var/nginx && mkdir -p /var/nginx && cp -rf /home/${LOCAL_DOMAIN}/config/production/nginx/* /var/nginx/
|
|
3_backup "${LOCAL_DOMAIN}" "create"
|
|
8_remove "${LOCAL_DOMAIN}" "full" "safe"
|
|
rm -rf /var/sphinx && mkdir -p /var/sphinx && cp -rf /var/lib/sphinx/data/* /var/sphinx/
|
|
1_install "${LOCAL_DOMAIN}"
|
|
cp -rf /var/nginx/* /home/${LOCAL_DOMAIN}/config/production/nginx/ && rm -rf /var/nginx
|
|
cp -rf /var/sphinx/* /var/lib/sphinx/data/ && rm -rf /var/sphinx
|
|
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}" != "" ]; then
|
|
sed -E -i "s/\"CP_ALL\":\s*\"[a-zA-Z0-9_| -]*\"/\"CP_ALL\":\"${CP_ALL}\"/" \
|
|
/home/${LOCAL_DOMAIN}/process.json
|
|
fi
|
|
if [ "${CP_KEY}" != "" ]; 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}" != "" ]; 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 [ "${CP_SPEED}" != "" ]; then
|
|
sed -E -i "s/\"pagespeed\":\s*[0-9]*/\"pagespeed\":${CP_SPEED}/" \
|
|
/home/${LOCAL_DOMAIN}/config/production/config.js
|
|
docker exec ${LOCAL_DOMAIN_} /usr/bin/cinemapress container speed "${CP_SPEED}"
|
|
fi
|
|
docker restart ${LOCAL_DOMAIN_} >>/var/log/docker_update_$(date '+%d_%m_%Y').log 2>&1
|
|
}
|
|
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
|
|
LOCAL_MEGA_EMAIL=${3:-${MEGA_EMAIL}}
|
|
LOCAL_MEGA_PASSWORD=${4:-${MEGA_PASSWORD}}
|
|
LOCAL_ACTION2=${5} # 1 | 2 | create | restore
|
|
LOCAL_DOMAIN2=${6:-${LOCAL_DOMAIN}}
|
|
|
|
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
|
|
|
|
RCS=`docker exec ${LOCAL_DOMAIN_} /usr/bin/cinemapress container rclone config show 2>/dev/null | grep "CINEMAPRESS"`
|
|
|
|
if [ "${LOCAL_ACTION}" = "config" ] || [ "${LOCAL_ACTION}" = "3" ] || [ "${RCS}" = "" ]; then
|
|
if [ "${LOCAL_MEGA_EMAIL}" != "" ] && [ "${LOCAL_MEGA_PASSWORD}" != "" ]; then
|
|
|
|
sh_progress
|
|
|
|
docker exec ${LOCAL_DOMAIN_} rclone config delete CINEMAPRESS \
|
|
>>/var/log/docker_backup_$(date '+%d_%m_%Y').log 2>&1
|
|
docker exec ${LOCAL_DOMAIN_} rclone config create CINEMAPRESS mega user "${LOCAL_MEGA_EMAIL}" pass "${LOCAL_MEGA_PASSWORD}" \
|
|
>>/var/log/docker_backup_$(date '+%d_%m_%Y').log 2>&1
|
|
CHECK_MKDIR=`docker exec ${LOCAL_DOMAIN_} rclone mkdir CINEMAPRESS:/check-connection 2>/dev/null`
|
|
sleep 3
|
|
CHECK_PURGE=`docker exec ${LOCAL_DOMAIN_} rclone purge CINEMAPRESS:/check-connection 2>/dev/null`
|
|
if [ "${CHECK_MKDIR}" != "" ] || [ "${CHECK_PURGE}" != "" ]; 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 \
|
|
>>/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 "RCLONE CONFIG"
|
|
_content
|
|
_content "Configure RCLONE for one of the cloud storage,"
|
|
_content "in the «name» section write uppercase CINEMAPRESS"
|
|
_content
|
|
printf " ~# docker exec -it ${LOCAL_DOMAIN_} /bin/sh"
|
|
_br
|
|
printf " ~# rclone config"
|
|
_br
|
|
_content
|
|
_content "or configure for MEGA.nz cloud storage in one line:"
|
|
_content
|
|
printf " ~# cinemapress backup ${LOCAL_DOMAIN} config \"email\" \"pass\""
|
|
_br
|
|
_content
|
|
_content "email - your email on MEGA.nz"
|
|
_content "pass - your password on MEGA.nz"
|
|
_content
|
|
_content "after creating config, you can create/restore backup:"
|
|
_content
|
|
printf " ~# cinemapress backup ${LOCAL_DOMAIN} create"
|
|
_br
|
|
printf " ~# cinemapress backup ${LOCAL_DOMAIN} restore"
|
|
_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
|
|
|
|
CHECK_MKDIR=`docker exec ${LOCAL_DOMAIN_} rclone mkdir CINEMAPRESS:/check-connection 2>/dev/null`
|
|
sleep 3
|
|
CHECK_PURGE=`docker exec ${LOCAL_DOMAIN_} rclone purge CINEMAPRESS:/check-connection 2>/dev/null`
|
|
if [ "${CHECK_MKDIR}" != "" ] || [ "${CHECK_PURGE}" != "" ]; 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 \
|
|
>>/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 "${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
|
|
fi
|
|
}
|
|
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}}
|
|
|
|
YES="NOT"
|
|
if [ -d "/home/${LOCAL_DOMAIN}/themes/${LOCAL_THEME}" ]; then
|
|
_header "${LOCAL_THEME}";
|
|
_content
|
|
_content "This theme exists!"
|
|
_content
|
|
_s
|
|
if [ ${1} ]
|
|
then
|
|
YES=${1}
|
|
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
|
|
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
|
|
fi
|
|
|
|
rm -rf /var/${LOCAL_THEME}
|
|
|
|
sh_progress
|
|
|
|
if [ "`docker -v 2>/dev/null`" != "" ]; then
|
|
docker restart ${LOCAL_DOMAIN_} >>/var/log/docker_theme_$(date '+%d_%m_%Y').log 2>&1
|
|
fi
|
|
}
|
|
5_database() {
|
|
LOCAL_DOMAIN=${1:-${CP_DOMAIN}}
|
|
LOCAL_DOMAIN_=`echo ${LOCAL_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"`
|
|
LOCAL_KEY=${2:-${CP_KEY}}
|
|
|
|
STS="http://d.cinemapress.io/${LOCAL_KEY}/${LOCAL_DOMAIN}?lang=${CP_LANG}"
|
|
CHECK=`wget -qO- "${STS}&status=CHECK"`
|
|
if [ "${CHECK}" = "" ]; then
|
|
_header "ERROR"
|
|
_content
|
|
_content "The database server is temporarily unavailable,"
|
|
_content "please try again later."
|
|
_content
|
|
_s
|
|
exit 0
|
|
else
|
|
for ((io=0;io<=10;io++));
|
|
do
|
|
sh_progress "$((${io} * 10))"
|
|
sleep 30
|
|
done
|
|
_br
|
|
fi
|
|
mkdir -p /var/lib/sphinx/tmp /var/lib/sphinx/data /var/lib/sphinx/old
|
|
_line
|
|
_content "Downloading ..."
|
|
wget -qO "/var/lib/sphinx/tmp/${LOCAL_KEY}.tar" "${STS}" || \
|
|
rm -rf "/var/lib/sphinx/tmp/${LOCAL_KEY}.tar"
|
|
if [ -f "/var/lib/sphinx/tmp/${LOCAL_KEY}.tar" ]; then
|
|
_content "Unpacking ..."
|
|
NOW=$(date +%Y-%m-%d)
|
|
tar -xf "/var/lib/sphinx/tmp/${LOCAL_KEY}.tar" -C "/var/lib/sphinx/tmp" &> \
|
|
/var/lib/sphinx/data/${NOW}.log
|
|
rm -rf "/var/lib/sphinx/tmp/${LOCAL_KEY}.tar"
|
|
FILE_SPA=`find /var/lib/sphinx/tmp/*.* -type f | grep spa`
|
|
FILE_SPD=`find /var/lib/sphinx/tmp/*.* -type f | grep spd`
|
|
FILE_SPI=`find /var/lib/sphinx/tmp/*.* -type f | grep spi`
|
|
FILE_SPS=`find /var/lib/sphinx/tmp/*.* -type f | grep sps`
|
|
if [ -f "${FILE_SPA}" ] && [ -f "${FILE_SPD}" ] && [ -f "${FILE_SPI}" ] && [ -f "${FILE_SPS}" ]; then
|
|
_content "Installing ..."
|
|
if [ "`docker -v 2>/dev/null | grep "version"`" = "" ]; then
|
|
docker_stop >>/var/lib/sphinx/data/${NOW}.log 2>&1
|
|
else
|
|
docker exec ${LOCAL_DOMAIN_} /usr/bin/cinemapress container stop >>/var/lib/sphinx/data/${NOW}.log 2>&1
|
|
fi
|
|
rm -rf /var/lib/sphinx/old/movies_${LOCAL_DOMAIN_}.*
|
|
cp -R /var/lib/sphinx/data/movies_${LOCAL_DOMAIN_}.* /var/lib/sphinx/old/
|
|
rm -rf /var/lib/sphinx/data/movies_${LOCAL_DOMAIN_}.*
|
|
for file in `find /var/lib/sphinx/tmp/*.* -type f`
|
|
do
|
|
mv ${file} "/var/lib/sphinx/data/movies_${LOCAL_DOMAIN_}.${file##*.}"
|
|
done
|
|
sed -E -i "s/\"key\":\s*\"(FREE|[a-zA-Z0-9-]{32})\"/\"key\":\"${LOCAL_KEY}\"/" \
|
|
/home/${LOCAL_DOMAIN}/config/production/config.js
|
|
sed -E -i "s/\"date\":\s*\"[0-9-]*\"/\"date\":\"${NOW}\"/" \
|
|
/home/${LOCAL_DOMAIN}/config/production/config.js
|
|
sed -E -i "s/\"key\":\s*\"(FREE|[a-zA-Z0-9-]{32})\"/\"key\":\"${LOCAL_KEY}\"/" \
|
|
/home/${LOCAL_DOMAIN}/config/default/config.js
|
|
sed -E -i "s/\"date\":\s*\"[0-9-]*\"/\"date\":\"${NOW}\"/" \
|
|
/home/${LOCAL_DOMAIN}/config/default/config.js
|
|
if [ "`grep \"_${CHECK}_\" /home/${LOCAL_DOMAIN}/process.json`" = "" ]; then
|
|
CURRENT=`grep "CP_ALL" /home/${LOCAL_DOMAIN}/process.json | sed 's/.*"CP_ALL":\s*"\([a-zA-Z0-9_| -]*\)".*/\1/'`
|
|
sed -E -i "s/\"CP_ALL\":\s*\"[a-zA-Z0-9_| -]*\"/\"CP_ALL\":\"${CURRENT} | _${CHECK}_\"/" \
|
|
/home/${LOCAL_DOMAIN}/process.json
|
|
fi
|
|
_content "Starting ..."
|
|
if [ "`docker -v 2>/dev/null | grep "version"`" = "" ]; then
|
|
docker_start >>/var/lib/sphinx/data/${NOW}.log 2>&1
|
|
else
|
|
docker exec ${LOCAL_DOMAIN_} /usr/bin/cinemapress container start >>/var/lib/sphinx/data/${NOW}.log 2>&1
|
|
fi
|
|
wget -qO /dev/null -o /dev/null "${STS}&status=SUCCESS"
|
|
_content "Success ..."
|
|
_s
|
|
exit 0
|
|
else
|
|
wget -qO /dev/null -o /dev/null "${STS}&status=FAIL"
|
|
_header "ERROR"
|
|
_content
|
|
_content "The downloaded database archive turned out to be empty,"
|
|
_content "please try again later."
|
|
_content
|
|
_s
|
|
exit 0
|
|
fi
|
|
else
|
|
wget -qO /dev/null -o /dev/null "${STS}&status=FAIL"
|
|
_header "ERROR"
|
|
_content
|
|
_content "The movie database has not been downloaded,"
|
|
_content "please try again later."
|
|
_content
|
|
_s
|
|
exit 0
|
|
fi
|
|
}
|
|
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}}
|
|
|
|
if [ "${LOCAL_CLOUDFLARE_EMAIL}" != "" ] \
|
|
&& [ "${LOCAL_CLOUDFLARE_API_KEY}" != "" ]; then
|
|
|
|
NGX="/home/${LOCAL_DOMAIN}/config/production/nginx"
|
|
echo -e "dns_cloudflare_email = \"${LOCAL_CLOUDFLARE_EMAIL}\"\ndns_cloudflare_api_key = \"${LOCAL_CLOUDFLARE_API_KEY}\"" \
|
|
> ${NGX}/cloudflare.ini
|
|
|
|
_header "Generating ..."
|
|
_br
|
|
|
|
docker run \
|
|
-it \
|
|
--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 \
|
|
-d "${LOCAL_DOMAIN}" \
|
|
-d "*.${LOCAL_DOMAIN}" \
|
|
--server https://acme-v02.api.letsencrypt.org/directory \
|
|
>>/home/${LOCAL_DOMAIN}/log/https_$(date '+%d_%m_%Y').log 2>&1
|
|
|
|
if [ -d "${NGX}/ssl.d/live/${LOCAL_DOMAIN}/" ]; then
|
|
openssl dhparam -out ${NGX}/ssl.d/live/${LOCAL_DOMAIN}/dhparam.pem 2048 \
|
|
>>/var/log/https_$(date '+%d_%m_%Y').log 2>&1
|
|
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
|
|
docker restart ${LOCAL_DOMAIN_} \
|
|
>>/var/log/https_$(date '+%d_%m_%Y').log 2>&1
|
|
else
|
|
_header "ERROR"
|
|
_content
|
|
_content "SSL certificate is not generated,"
|
|
_content "check the correct Email and Global API Key."
|
|
_content
|
|
_s
|
|
fi
|
|
|
|
fi
|
|
}
|
|
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
|
|
|
|
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
|
|
CURRENT=`grep "CP_ALL" /home/${LOCAL_MIRROR}/process.json | sed 's/.*"CP_ALL":\s*"\([a-zA-Z0-9_| -]*\)".*/\1/'`
|
|
CURRENT=`echo "${CURRENT}" | sed "s/_${LOCAL_MIRROR_}_ | //"`
|
|
CURRENT=`echo "${CURRENT}" | sed "s/_${LOCAL_DOMAIN_}_ | //"`
|
|
CURRENT=`echo "${CURRENT}" | sed "s/ | _${LOCAL_MIRROR_}_//"`
|
|
CURRENT=`echo "${CURRENT}" | sed "s/ | _${LOCAL_DOMAIN_}_//"`
|
|
CURRENT=`echo "${CURRENT}" | sed "s/_${LOCAL_MIRROR_}_//"`
|
|
CURRENT=`echo "${CURRENT}" | sed "s/_${LOCAL_DOMAIN_}_//"`
|
|
if [ "${CURRENT}" != "" ]; then CURRENT=" | ${CURRENT}"; fi
|
|
if [ -f "/home/${LOCAL_DOMAIN}/process.json" ] && [ ! -f "/home/${LOCAL_MIRROR}/process.json" ]; then
|
|
sed -E -i "s/\"CP_ALL\":\s*\"[a-zA-Z0-9_| -]*\"/\"CP_ALL\":\"_${LOCAL_DOMAIN_}_ | _${LOCAL_MIRROR_}_${CURRENT}\"/" /home/${LOCAL_MIRROR}/process.json
|
|
else
|
|
sed -E -i "s/\"CP_ALL\":\s*\"[a-zA-Z0-9_| -]*\"/\"CP_ALL\":\"_${LOCAL_MIRROR_}_ | _${LOCAL_DOMAIN_}_${CURRENT}\"/" /home/${LOCAL_MIRROR}/process.json
|
|
fi
|
|
|
|
sh_progress
|
|
|
|
docker start ${LOCAL_MIRROR_} \
|
|
>>/var/log/docker_mirror_$(date '+%d_%m_%Y').log 2>&1
|
|
docker exec nginx nginx -s reload \
|
|
>>/var/log/docker_mirror_$(date '+%d_%m_%Y').log 2>&1
|
|
}
|
|
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}
|
|
|
|
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 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}
|
|
if [ "${LOCAL_FULL}" != "" ]; then
|
|
docker stop 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
|
|
docker pull cinemapress/nginx:latest >>/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
|
|
docker rm -f fail2ban >>/var/log/docker_remove_$(date '+%d_%m_%Y').log 2>&1
|
|
docker pull cinemapress/fail2ban:latest >>/var/log/docker_remove_$(date '+%d_%m_%Y').log 2>&1
|
|
fi
|
|
docker rmi -f $(docker images -f "dangling=true" -q) >>/var/log/docker_remove_$(date '+%d_%m_%Y').log 2>&1
|
|
}
|
|
|
|
option() {
|
|
clear
|
|
_line
|
|
_logo
|
|
_header "MAKE A CHOICE"
|
|
printf "${C}---- ${G}1)${NC} install ${S}------------------ Create Movies / TV Website ${C}----\n"
|
|
printf "${C}---- ${G}2)${NC} update ${S}------------------- Upgrade CinemaPress System ${C}----\n"
|
|
printf "${C}---- ${G}3)${NC} backup ${S}-------------------- Backup System Master Data ${C}----\n"
|
|
printf "${C}---- ${G}4)${NC} theme ${S}------------- Install / Update Website Template ${C}----\n"
|
|
printf "${C}---- ${G}5)${NC} database ${S}------------- Import All Movies In The World ${C}----\n"
|
|
printf "${C}---- ${G}6)${NC} https ${S}-------------- Getting Wildcard SSL Certificate ${C}----\n"
|
|
printf "${C}---- ${G}7)${NC} mirror ${S}------------------------- Moving To New Domain ${C}----\n"
|
|
printf "${C}---- ${G}8)${NC} remove ${S}---------------------------- Uninstall Website ${C}----\n"
|
|
_s
|
|
AGAIN=1
|
|
while [ "${AGAIN}" -lt "10" ]
|
|
do
|
|
if [ ${1} ]
|
|
then
|
|
OPTION=${1}
|
|
echo "OPTION [1-8]: ${OPTION}"
|
|
else
|
|
read -e -p 'OPTION [1-8]: ' 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 number 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
|
|
read -e -p ': ' CP_DOMAIN
|
|
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 "mormont" 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" ]
|
|
then
|
|
AGAIN=10
|
|
else
|
|
printf "${NC} There is no such theme! \n"
|
|
printf "${R}WARNING:${NC} Currently there are theme: hodor, sansa, robb, ramsay, tyrion, \n"
|
|
printf "${NC} cersei, joffrey, drogo, bran, arya, mormont, tarly и daenerys \n"
|
|
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
|
|
AGAIN=10
|
|
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! \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_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 "MEGA 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 "MEGA 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
|
|
AGAIN=10
|
|
fi
|
|
done
|
|
if [ "${MEGA_PASSWORD}" = "" ]; 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
|
|
_s
|
|
exit 0
|
|
fi
|
|
}
|
|
sh_not() {
|
|
if [ ! -f "/home/${CP_DOMAIN}/process.json" ]; 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() {
|
|
printf "\n${NC}"
|
|
}
|
|
_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}/* /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/pagespeed.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/ssl.d/default.conf
|
|
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/${CP_DOMAIN}/config/production/sphinx/sphinx.conf
|
|
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/${CP_DOMAIN}/config/production/sphinx/source.xml
|
|
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" /home/${CP_DOMAIN}/config/production/nginx/pagespeed.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/ssl.d/default.conf
|
|
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/${CP_DOMAIN}/config/production/sphinx/sphinx.conf
|
|
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/${CP_DOMAIN}/config/production/sphinx/source.xml
|
|
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/\"theme\":\s*\"[a-zA-Z0-9-]*\"/\"theme\":\"${CP_THEME}\"/" /home/${CP_DOMAIN}/config/production/config.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}/
|
|
OPENSSL=`echo "${CP_PASSWD}" | openssl passwd -1 -stdin -salt CP`
|
|
echo "admin:${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
|
|
ln -s /home/${CP_DOMAIN}/config/production/sphinx/sphinx.conf /etc/sphinx/sphinx.conf
|
|
ln -s /home/${CP_DOMAIN}/config/production/sphinx/source.xml /etc/sphinx/source.xml
|
|
indexer --all
|
|
searchd
|
|
memcached -u root -d
|
|
node /home/${CP_DOMAIN}/config/update/default.js
|
|
else
|
|
searchd
|
|
memcached -u root -d
|
|
node /home/${CP_DOMAIN}/config/update/config.js
|
|
fi
|
|
crond -L /var/log/cron.log
|
|
cd /home/${CP_DOMAIN} && pm2-runtime start process.json
|
|
}
|
|
docker_stop() {
|
|
searchd --stop
|
|
killall memcached
|
|
killall crond
|
|
sleep 5
|
|
}
|
|
docker_start() {
|
|
searchd
|
|
memcached -u root -d
|
|
crond -L /var/log/cron.log
|
|
node /home/${CP_DOMAIN}/config/update/config.js
|
|
cd /home/${CP_DOMAIN} && pm2 restart process.json --update-env
|
|
}
|
|
docker_restart() {
|
|
docker_stop
|
|
docker_start
|
|
}
|
|
docker_reload() {
|
|
cd /home/${CP_DOMAIN} && pm2 reload process.json
|
|
}
|
|
docker_zero() {
|
|
sed -i "s/xmlpipe_command =.*/xmlpipe_command =/" "/home/${CP_DOMAIN}/config/production/sphinx/sphinx.conf"
|
|
indexer xmlpipe2_${CP_DOMAIN_} --rotate
|
|
(sleep 2; echo flush_all; sleep 2; echo quit;) | telnet 127.0.0.1 11211
|
|
}
|
|
docker_cron() {
|
|
node /home/${CP_DOMAIN}/lib/CP_cron.js
|
|
}
|
|
docker_restore() {
|
|
WEB_DIR=${1:-${CP_DOMAIN}}
|
|
RCS=`rclone config show 2>/dev/null | grep "CINEMAPRESS"`
|
|
if [ "${RCS}" = "" ]; then exit 0; fi
|
|
docker_stop
|
|
rclone copy CINEMAPRESS:${WEB_DIR}/latest/config.tar /var/${CP_DOMAIN}/
|
|
rclone copy CINEMAPRESS:${WEB_DIR}/latest/themes.tar /var/${CP_DOMAIN}/
|
|
cd /home/${CP_DOMAIN} && \
|
|
tar -xf /var/${CP_DOMAIN}/config.tar && \
|
|
tar --exclude=themes/default/views/desktop \
|
|
-xf /var/${CP_DOMAIN}/themes.tar
|
|
mkdir -p /home/${CP_DOMAIN}/config/custom
|
|
cp -rf /home/${CP_DOMAIN}/config/custom/* /home/${CP_DOMAIN}/
|
|
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) - 2592000))"`
|
|
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
|
|
rclone purge CINEMAPRESS:${CP_DOMAIN}/${BACKUP_NOW} &> /dev/null
|
|
if [ "${BACKUP_DAY}" != "10" ]; then rclone purge CINEMAPRESS:${CP_DOMAIN}/${BACKUP_DELETE} &> /dev/null; fi
|
|
rclone purge CINEMAPRESS:${CP_DOMAIN}/latest &> /dev/null
|
|
PORT_DOMAIN=`grep "mysql41" /home/${CP_DOMAIN}/config/production/sphinx/sphinx.conf | sed 's/.*:\([0-9]*\):mysql41.*/\1/'`
|
|
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}
|
|
rm -rf /var/${CP_DOMAIN} && mkdir -p /var/${CP_DOMAIN}
|
|
cd /home/${CP_DOMAIN} && \
|
|
tar --exclude=config/update \
|
|
--exclude=config/default \
|
|
--exclude=config/locales \
|
|
--exclude=config/production/fail2ban \
|
|
--exclude=config/production/sphinx \
|
|
--exclude=config/production/nginx \
|
|
-uf /var/${CP_DOMAIN}/config.tar config
|
|
cd /home/${CP_DOMAIN} && \
|
|
tar --exclude=files/GeoLite2-Country.mmdb \
|
|
--exclude=files/GeoLite2-City.mmdb \
|
|
--exclude=files/bbb.mp4 \
|
|
-uf /var/${CP_DOMAIN}/themes.tar \
|
|
themes/default/public/desktop \
|
|
themes/default/public/mobile \
|
|
themes/default/views/mobile \
|
|
themes/${THEME_NAME} \
|
|
files
|
|
rclone copy /var/${CP_DOMAIN}/config.tar CINEMAPRESS:${CP_DOMAIN}/${BACKUP_NOW}/
|
|
rclone copy /var/${CP_DOMAIN}/themes.tar CINEMAPRESS:${CP_DOMAIN}/${BACKUP_NOW}/
|
|
rclone copy /var/${CP_DOMAIN}/config.tar CINEMAPRESS:${CP_DOMAIN}/latest/
|
|
rclone copy /var/${CP_DOMAIN}/themes.tar CINEMAPRESS:${CP_DOMAIN}/latest/
|
|
rm -rf /var/${CP_DOMAIN}
|
|
}
|
|
docker_actual() {
|
|
node /home/${CP_DOMAIN}/config/update/actual.js
|
|
}
|
|
docker_rclone() {
|
|
rclone "${1}" "${2}"
|
|
}
|
|
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"
|
|
}
|
|
docker_speed_on() {
|
|
sed -Ei "s/ #pagespeed include \/home\/${CP_DOMAIN}\/config\/production\/nginx\/pagespeed\.d\/default\.conf;/ include \/home\/${CP_DOMAIN}\/config\/production\/nginx\/pagespeed.d\/default.conf;/" \
|
|
"/home/${CP_DOMAIN}/config/production/nginx/conf.d/default.conf"
|
|
}
|
|
docker_speed_off() {
|
|
sed -Ei "s/ include \/home\/${CP_DOMAIN}\/config\/production\/nginx\/pagespeed\.d\/default\.conf;/ #pagespeed include \/home\/${CP_DOMAIN}\/config\/production\/nginx\/pagespeed.d\/default.conf;/" \
|
|
"/home/${CP_DOMAIN}/config/production/nginx/conf.d/default.conf"
|
|
}
|
|
docker_ssl_on() {
|
|
if [ -d "/home/${CP_DOMAIN}/config/production/nginx/ssl.d/live/${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"
|
|
}
|
|
|
|
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 "You have questions?"
|
|
_content "support@cinemapress.io"
|
|
_content "Forum: enota.club"
|
|
_content
|
|
_s
|
|
exit 0
|
|
}
|
|
|
|
if [ ${EUID} -ne 0 ]; then
|
|
printf "${R}WARNING:${NC} Run as root user! \n${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
docker_install
|
|
|
|
WHILE=0
|
|
while [ "${WHILE}" -lt "2" ]; do
|
|
WHILE=$((${WHILE}+1))
|
|
case ${OPTION} in
|
|
"i"|"install"|1 )
|
|
read_domain ${2}
|
|
sh_yes
|
|
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}
|
|
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}
|
|
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}
|
|
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
|
|
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" )
|
|
_br
|
|
read_domain ${2}
|
|
sh_not
|
|
read_key ${3}
|
|
_s ${3}
|
|
if [ -f "/var/local/images/poster/no-poster.jpg" ]; then
|
|
wget --progress=bar:force -O /var/images.tar \
|
|
"http://d.cinemapress.io/${CP_KEY}/${CP_DOMAIN}?lang=${CP_LANG}&status=LATEST" 2>&1 | sh_wget
|
|
if [ -f "/var/images.tar" ]; then
|
|
tar -xf /var/images.tar -C /var/local/images >>/var/log/docker_images_$(date '+%d_%m_%Y').log 2>&1
|
|
fi
|
|
else
|
|
wget --progress=bar:force -O /var/images.tar \
|
|
"http://d.cinemapress.io/${CP_KEY}/${CP_DOMAIN}?lang=${CP_LANG}&status=IMAGES" 2>&1 | sh_wget
|
|
mkdir -p /var/local/images/poster
|
|
cp -r /home/${CP_DOMAIN}/files/poster/no-poster.gif /var/local/images/poster/no-poster.gif
|
|
cp -r /home/${CP_DOMAIN}/files/poster/no-poster.jpg /var/local/images/poster/no-poster.jpg
|
|
if [ -f "/var/images.tar" ]; then
|
|
_header "UNPACKING"
|
|
_content
|
|
_content "Unpacking may take several hours ..."
|
|
_content
|
|
_s
|
|
nohup tar -xf /var/images.tar -C /var/local/images >>/var/log/docker_images_$(date '+%d_%m_%Y').log 2>&1 &
|
|
fi
|
|
fi
|
|
exit 0
|
|
;;
|
|
"upd" )
|
|
_br; echo -n "Downloading new cinemapress.sh ..."; _br; _br;
|
|
sudo wget -qO /usr/bin/cinemapress https://gitlab.com/CinemaPress/CinemaPress/raw/master/cinemapress.sh && \
|
|
chmod +x /usr/bin/cinemapress
|
|
exit 0
|
|
;;
|
|
"stop"|"start"|"restart" )
|
|
_br
|
|
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
|
|
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? [NOT/yes] : ${YES}"
|
|
else
|
|
read -e -p 'Delete? [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 \
|
|
>>/var/log/docker_zero_$(date '+%d_%m_%Y').log 2>&1
|
|
exit 0
|
|
fi
|
|
;;
|
|
"reload"|"actual"|"speed" )
|
|
_br
|
|
read_domain ${2}
|
|
sh_not
|
|
_s ${2}
|
|
docker exec ${CP_DOMAIN_} /usr/bin/cinemapress container "${1}" \
|
|
>>/var/log/docker_${1}_$(date '+%d_%m_%Y').log 2>&1
|
|
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}" = "zero" ]; then
|
|
docker_zero
|
|
elif [ "${2}" = "cron" ]; then
|
|
docker_cron
|
|
elif [ "${2}" = "actual" ]; then
|
|
docker_actual
|
|
elif [ "${2}" = "passwd" ]; then
|
|
docker_passwd "${3}"
|
|
elif [ "${2}" = "rclone" ]; then
|
|
docker_rclone "${3}" "${4}"
|
|
elif [ "${2}" = "backup" ]; then
|
|
if [ "${3}" = "create" ] || [ "${3}" = "1" ]; then
|
|
docker_backup
|
|
elif [ "${3}" = "restore" ] || [ "${3}" = "2" ]; then
|
|
docker_restore "${4}"
|
|
fi
|
|
elif [ "${2}" = "speed" ]; then
|
|
if [ "${3}" = "off" ] || [ "${3}" = "0" ]; then
|
|
docker_speed_off
|
|
else
|
|
docker_speed_on
|
|
fi
|
|
elif [ "${2}" = "protocol" ]; then
|
|
if [ "${3}" = "http://" ]; then
|
|
docker_ssl_off
|
|
else
|
|
docker_ssl_on
|
|
fi
|
|
fi
|
|
exit 0
|
|
;;
|
|
"combine" )
|
|
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" ]; 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" ]; 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" ]; 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" ]; 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" ]; 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" ]; 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" ]; 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" ]; 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" )
|
|
docker start ${CP_DOMAIN_}
|
|
docker start nginx
|
|
docker start fail2ban
|
|
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" ]
|
|
then
|
|
DD=`find ${D} -maxdepth 0 -printf "%f"`
|
|
sed -i "s/.*${DD}.*//g" /etc/crontab &> /dev/null
|
|
rm -rf /home/${DD}
|
|
fi
|
|
done
|
|
rm -rf /var/log/* /var/ngx_pagespeed_cache /var/lib/sphinx* /etc/nginx/bots.d
|
|
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
|
|
if [ "${CP_OS}" != "alpine" ] && [ "${CP_OS}" != "\"alpine\"" ]; then
|
|
docker restart nginx >>/var/log/docker_logrotate_$(date '+%d_%m_%Y').log 2>&1
|
|
docker restart fail2ban >>/var/log/docker_logrotate_$(date '+%d_%m_%Y').log 2>&1
|
|
fi
|
|
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 " speed - Enabled Nginx PageSpeed module"; _br;
|
|
printf " images - Downloading posters to own server (only RU)"; _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; _br;
|
|
printf " combine create_https_restore_mirror"; _br;
|
|
printf " combine create_restore_mirror"; _br;
|
|
printf " combine create_https_mirror"; _br;
|
|
printf " combine create_https_backup"; _br;
|
|
printf " combine create_https_restore"; _br;
|
|
printf " combine create_https"; _br;
|
|
printf " combine create_backup"; _br;
|
|
printf " combine create_restore"; _br; _br;
|
|
exit 0
|
|
;;
|
|
"version"|"ver"|"v"|"V"|"--version"|"--ver"|"-v"|"-V" )
|
|
printf "CinemaPress ${CP_VER}"
|
|
_br
|
|
printf "Copyright (c) 2014-2019, CinemaPress (https://cinemapress.io)"
|
|
_br
|
|
exit 0
|
|
;;
|
|
* )
|
|
option ${1}
|
|
;;
|
|
esac
|
|
done |