160 lines
3.4 KiB
Bash
160 lines
3.4 KiB
Bash
#!/bin/bash
|
|
|
|
# ============================================
|
|
# RUN sudo ./install.sh
|
|
# ============================================
|
|
|
|
set -e # Exit immediately if a command exits with a non-zero status
|
|
|
|
# -------------------------------------------------------
|
|
# bash colors for log
|
|
# -------------------------------------------------------
|
|
|
|
black=`tput setaf 0`
|
|
red=`tput setaf 1`
|
|
green=`tput setaf 2`
|
|
yellow=`tput setaf 3`
|
|
blue=`tput setaf 4`
|
|
magenta=`tput setaf 5`
|
|
cyan=`tput setaf 6`
|
|
white=`tput setaf 7`
|
|
reset=`tput sgr0`
|
|
|
|
# -------------------------------------------------------
|
|
# print log level
|
|
# -------------------------------------------------------
|
|
function log() {
|
|
date_now=`date '+%Y-%m-%d %H:%M:%S'`
|
|
case $1 in
|
|
debug) echo -e "${date_now} :: ${2}" ;;
|
|
warning) echo -e "${date_now} :: ${yellow}${2}${reset}" ;;
|
|
error) echo -e "${date_now} :: ${red}${2}${reset}" ;;
|
|
*) echo -e "${date_now} :: ${magenta}${1}${reset}" ;;
|
|
esac
|
|
}
|
|
|
|
# -------------------------------------------------------
|
|
# Check if Linux OS
|
|
# -------------------------------------------------------
|
|
unamestr=$(uname)
|
|
if [[ "$unamestr" != 'Linux' ]]; then
|
|
log warning "This install script is supported only on Linux OS"
|
|
exit
|
|
fi
|
|
|
|
# -------------------------------------------------------
|
|
# Check if run as root
|
|
# -------------------------------------------------------
|
|
if [ "$EUID" -ne 0 ]; then
|
|
log warning "Please run as root: sudo ./install.sh"
|
|
exit
|
|
fi
|
|
|
|
# ============================================
|
|
# Start the installation...
|
|
# ============================================
|
|
|
|
printf 'Install the dependences (y/n)? '
|
|
read answer
|
|
|
|
if [ "$answer" != "${answer#[Yy]}" ] ;then
|
|
|
|
log "Update package lists"
|
|
|
|
apt-get update
|
|
|
|
log "Install essential build tools: gcc, g++, make"
|
|
|
|
apt-get install -y build-essential
|
|
|
|
|
|
log "Install Python 3.8 and pip"
|
|
|
|
apt-get install -y software-properties-common
|
|
|
|
add-apt-repository -y ppa:deadsnakes/ppa
|
|
|
|
apt-get update
|
|
|
|
apt-get install -y python3.8 python3-pip
|
|
|
|
|
|
log "Install Node.js 18.x and npm"
|
|
|
|
apt install -y curl dirmngr apt-transport-https lsb-release ca-certificates
|
|
|
|
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
|
|
|
|
apt-get install -y nodejs
|
|
|
|
npm install -g npm@latest
|
|
fi
|
|
|
|
CONFIG=app/src/config.js
|
|
|
|
if ! [ -f "$CONFIG" ]; then
|
|
|
|
log "Copy the configuration file"
|
|
|
|
cp app/src/config.template.js $CONFIG
|
|
|
|
fi
|
|
|
|
printf 'Use docker (y/n)? '
|
|
read answer
|
|
|
|
if [ "$answer" != "${answer#[Yy]}" ] ;then
|
|
|
|
log "Install Docker and Docker Compose"
|
|
|
|
sudo apt install -y docker.io
|
|
|
|
sudo apt install -y docker-compose
|
|
|
|
|
|
log "Add the current user to the docker group"
|
|
|
|
usermod -aG docker $USER
|
|
|
|
|
|
YAML=docker-compose.yml
|
|
|
|
if ! [ -f "$YAML" ]; then
|
|
|
|
log "Copy Docker compose yaml file"
|
|
|
|
cp docker-compose.template.yml $YAML
|
|
fi
|
|
|
|
printf 'Use official docker image (y/n)? '
|
|
read answer
|
|
|
|
if [ "$answer" != "${answer#[Yy]}" ] ;then
|
|
|
|
log "Get latest official image from Docker Hub"
|
|
|
|
docker pull mirotalk/sfu:latest
|
|
else
|
|
log "Build image from source"
|
|
|
|
docker-compose build
|
|
|
|
|
|
log "Remove old and unused docker images"
|
|
|
|
docker images |grep '<none>' |awk '{print $3}' |xargs docker rmi
|
|
fi
|
|
|
|
log "Start containers"
|
|
|
|
docker-compose up #-d
|
|
else
|
|
log "Install dependencies"
|
|
|
|
npm install
|
|
|
|
|
|
log "Start the server"
|
|
|
|
npm start
|
|
fi |