-
-
Notifications
You must be signed in to change notification settings - Fork 64
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
256 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,256 @@ | ||
#!/bin/bash | ||
|
||
echo | ||
echo "---------------------------------------------------------------" | ||
echo " __ " | ||
echo " ____ ___ / /______ _________ ____ ____ ___ _____" | ||
echo " / __ \/ _ \/ //_/ __ \ / ___/ __ \/ __ \/ __ '__ \/ ___/" | ||
echo " / / / / __/ ,< / /_/ /_____/ / / /_/ / /_/ / / / / / (__ ) " | ||
echo "/_/ /_/\___/_/|_|\____/_____/_/ \____/\____/_/ /_/ /_/____/ " | ||
echo " " | ||
echo " Automatic installer by m1k1o " | ||
echo "---------------------------------------------------------------" | ||
echo | ||
echo "You need to have:" | ||
echo | ||
echo " - OS:" | ||
echo " - Kernel version 2 or higher." | ||
echo " - Debian 9 or higher." | ||
echo " - Ubuntu 18.04 or higher." | ||
echo | ||
echo " - Hardware:" | ||
echo " - Memory at least 2GB." | ||
echo " - CPU at least 4 cores." | ||
echo " - Disk at least 8GB." | ||
echo | ||
echo " - Network:" | ||
echo " - Public IP." | ||
echo " - Free TCP ports 80 and 443." | ||
echo " - Free UDP port range (59000-59100)." | ||
echo " - Domain name pointing to your IP." | ||
echo | ||
echo " - Run this script as superuser." | ||
echo | ||
|
||
while true; do | ||
read -p "Are you ready to continue? [Y/n] " yn | ||
case $yn in | ||
"" ) break;; | ||
[Yy]* ) break;; | ||
[Nn]* ) exit;; | ||
* ) echo "Please answer yes or no.";; | ||
esac | ||
done | ||
|
||
# Detect Debian users running the script with "sh" instead of bash | ||
if readlink /proc/$$/exe | grep -q "dash"; then | ||
echo 'This installer needs to be run with "bash", not "sh".' | ||
exit | ||
fi | ||
|
||
# Detect Root | ||
if [[ "$EUID" -ne 0 ]]; then | ||
echo "This installer needs to be run with superuser privileges." | ||
exit | ||
fi | ||
|
||
# Detect OS | ||
if grep -qs "ubuntu" /etc/os-release; then | ||
os_version=$(grep 'VERSION_ID' /etc/os-release | cut -d '"' -f 2 | tr -d '.') | ||
|
||
if [[ "$os_version" -lt 1804 ]]; then | ||
echo "Ubuntu 18.04 or higher is required to use this installer." | ||
echo "This version of Ubuntu is too old and unsupported." | ||
exit | ||
fi | ||
elif [[ -e /etc/debian_version ]]; then | ||
os_version=$(grep -oE '[0-9]+' /etc/debian_version | head -1) | ||
|
||
if [[ "$os_version" -lt 9 ]]; then | ||
echo "Debian 9 or higher is required to use this installer." | ||
echo "This version of Debian is too old and unsupported." | ||
exit | ||
fi | ||
else | ||
echo "This installer seems to be running on an unsupported distribution." | ||
echo "Supported distributions are Ubuntu and Debian." | ||
exit | ||
fi | ||
|
||
# Detect Kernel | ||
if [[ $(uname -r | cut -d "." -f 1) -eq 2 ]]; then | ||
echo "The system is running an old kernel, which is incompatible with this installer." | ||
exit | ||
fi | ||
|
||
# | ||
# Install docker | ||
# | ||
|
||
if ! dockerd --help 2>&1 >/dev/null; | ||
then | ||
while true; do | ||
read -p "Docker is not installed. Do you wish to install this program? [Y/n]" yn | ||
case $yn in | ||
[Yy]* ) break;; | ||
[Nn]* ) exit;; | ||
* ) echo "Please answer yes or no.";; | ||
esac | ||
done | ||
|
||
apt-get remove docker docker-engine docker.io containerd runc | ||
apt-get update | ||
apt-get install \ | ||
apt-transport-https \ | ||
ca-certificates \ | ||
curl \ | ||
gnupg \ | ||
lsb-release | ||
|
||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg | ||
|
||
echo \ | ||
"deb [arch=amd64 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 | ||
|
||
apt-get update | ||
apt-get install docker-ce docker-ce-cli containerd.io | ||
fi | ||
|
||
echo "[Y] Docker is installed..." | ||
|
||
# | ||
# Install dependencies | ||
# | ||
|
||
apt update | ||
apt install -y sed apache2-utils docker-compose | ||
|
||
echo "[Y] Dependencies are installed..." | ||
|
||
# | ||
# Prompt for data | ||
# | ||
|
||
# Epr | ||
read -p "Enter UDP port range: (default 59000-59100) " NEKO_ROOMS_EPR | ||
if [[ $NEKO_ROOMS_EPR = "" ]]; | ||
then | ||
NEKO_ROOMS_EPR="59000-59100" | ||
fi | ||
|
||
# Domain | ||
while true; do | ||
read -p "Enter your domain name: (e.g. example.com) " NEKO_ROOMS_TRAEFIK_DOMAIN | ||
if [[ $NEKO_ROOMS_TRAEFIK_DOMAIN = "" ]]; | ||
then | ||
echo "Please enter your domain." | ||
continue | ||
fi | ||
|
||
break | ||
done | ||
|
||
# Timezone | ||
TZ_DEF=$(cat /etc/timezone) | ||
read -p "Current timezone: (default ${TZ_DEF}) " TZ | ||
if [[ $TZ = "" ]]; | ||
then | ||
TZ="${TZ_DEF}" | ||
fi | ||
|
||
while true; do | ||
read -p "Enter your email for Let's Encrypt domain notification: " TRAEFIK_EMAIL | ||
if [[ $TRAEFIK_EMAIL = "" ]]; | ||
then | ||
echo "Please enter your email. Or, well, use fake if you want..." | ||
continue | ||
fi | ||
|
||
break | ||
done | ||
|
||
mkdir -p "./traefik" | ||
touch "./traefik/usersfile" | ||
|
||
# Users | ||
while true; do | ||
echo "Add new user:" | ||
|
||
# Username | ||
read -p " | - Username: (default admin) " USR_NAME | ||
if [[ $USR_NAME = "" ]]; | ||
then | ||
USR_NAME="admin" | ||
fi | ||
|
||
# Password | ||
read -p " | - Password: (default admin) " -s USR_PASS | ||
if [[ $USR_PASS = "" ]]; | ||
then | ||
USR_PASS="admin" | ||
fi | ||
|
||
echo $(htpasswd -nb ${USR_NAME} ${USR_PASS}) >> traefik/usersfile | ||
|
||
echo | ||
read -p "Do you want to add another user? [y/N] " yn | ||
case $yn in | ||
"" ) break;; | ||
[Yy]* ) echo;; | ||
[Nn]* ) break;; | ||
* ) echo "Please answer yes or no.";; | ||
esac | ||
done | ||
|
||
echo "[Y] Got all settings..." | ||
|
||
# | ||
# Create env | ||
# | ||
|
||
echo "TZ=${TZ}" > .env | ||
echo "NEKO_ROOMS_EPR=${NEKO_ROOMS_EPR}" >> .env | ||
echo "NEKO_ROOMS_TRAEFIK_DOMAIN=${NEKO_ROOMS_TRAEFIK_DOMAIN}" >> .env | ||
echo "NEKO_ROOMS_TRAEFIK_ENTRYPOINT=websecure" >> .env | ||
echo "NEKO_ROOMS_TRAEFIK_NETWORK=neko-rooms-traefik" >> .env | ||
echo "NEKO_ROOMS_TRAEFIK_CERTRESOLVER=lets-encrypt" >> .env | ||
|
||
echo "[Y] Creating env..." | ||
|
||
# | ||
# Download traefik config | ||
# | ||
|
||
mkdir -p "./traefik/config" | ||
|
||
wget -O "./traefik/traefik.yml" "https://raw.githubusercontent.com/m1k1o/neko-rooms/master/traefik/traefik.yml" | ||
sed -i "s/[email protected]/${TRAEFIK_EMAIL}/g" "./traefik/traefik.yml" | ||
|
||
wget -O "./traefik/config/middlewares.yml" "https://raw.githubusercontent.com/m1k1o/neko-rooms/master/traefik/config/middlewares.yml" | ||
wget -O "./traefik/config/routers.yml" "https://raw.githubusercontent.com/m1k1o/neko-rooms/master/traefik/config/routers.yml" | ||
wget -O "./traefik/config/tls.yml" "https://raw.githubusercontent.com/m1k1o/neko-rooms/master/traefik/config/tls.yml" | ||
|
||
touch "./traefik/acme.json" | ||
chmod 600 "./traefik/acme.json" | ||
|
||
echo "[Y] Downloading traefik config..." | ||
|
||
# | ||
# Download docker compose file | ||
# | ||
|
||
wget -O "./docker-compose.yml" "https://raw.githubusercontent.com/m1k1o/neko-rooms/master/docker-compose.yml" | ||
|
||
# Pull neko images | ||
docker pull m1k1o/neko:latest | ||
docker pull m1k1o/neko:chromium | ||
|
||
exit | ||
|
||
# Start | ||
docker-compose pull | ||
docker-compose up -d | ||
|
||
echo "[Y] Finished! You can now visit https://${NEKO_ROOMS_TRAEFIK_DOMAIN}/" |