Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- ################################################################################
- # Author: crombiecrunch
- # Credit: appleboy ( appleboy.tw AT gmail.com)
- # Web: www.my4x4.club
- #
- # Program:
- # Install Pterodactyl-Panel on Ubuntu
- #
- ################################################################################
- clear
- # get sever os name: ubuntu or centos
- server_name=`lsb_release -ds | awk -F ' ' '{printf $1}' | tr A-Z a-z`
- version_name=`lsb_release -cs`
- usage() {
- echo 'Usage: '$0' [-i|--install] [nginx] [apache]'
- exit 1;
- }
- output() {
- printf "\E[0;33;40m"
- echo $1
- printf "\E[0m"
- }
- displayErr() {
- echo
- echo $1;
- echo
- exit 1;
- }
- # get user input
- server_setup() {
- clear
- output "Hope you enjoy this install script created by http://www.my4x4.club. Please enter the information below. "
- read -p "Enter admin email (e.g. admin@example.com) : " EMAIL
- read -p "Enter servername (e.g. portal.example.com) : " SERVNAME
- read -p "Enter time zone (e.g. America/New_York) : " TIME
- read -p "Portal password : " PORTALPASS
- }
- initial() {
- output "Updating all packages"
- # update package and upgrade Ubuntu
- sudo apt-get -y update
- sudo apt-get -y upgrade
- sudo apt-get -y autoremove
- output "Switching to Aptitude"
- sudo apt-get -y install aptitude
- sudo aptitude update -y
- whoami=`whoami`
- }
- install_nginx() {
- output "Installing Nginx server."
- sudo aptitude -y install nginx
- sudo service nginx start
- sudo service cron start
- }
- install_apache() {
- output "Installing Apache server."
- sudo aptitude -y install apache2
- sudo service apache2 start
- sudo service cron start
- }
- install_mariadb() {
- output "Installing Mariadb Server."
- # create random password
- rootpasswd=$(openssl rand -base64 12)
- export DEBIAN_FRONTEND="noninteractive"
- sudo aptitude -y install mariadb-server
- # adding user to group, creating dir structure, setting permissions
- sudo mkdir -p /var/www/pterodactyl/html
- sudo chown -R $whoami:$whoami /var/www/pterodactyl/html
- sudo chmod -R 775 /var/www/pterodactyl/html
- }
- install_dependencies() {
- output "Installing PHP and Dependencies."
- sudo aptitude -y install php7.0 php7.0-cli php7.0-gd php7.0-mysql php7.0-common php7.0-mbstring php7.0-tokenizer php7.0-bcmath php7.0-xml php7.0-fpm php7.0-curl
- }
- install_dependencies_apache() {
- output "Installing PHP and Dependencies."
- sudo aptitude -y install php7.0 php7.0-cli php7.0-gd php7.0-mysql php7.0-common php7.0-mbstring php7.0-tokenizer php7.0-bcmath php7.0-xml php7.0-fpm php7.0-curl libapache2-mod-php
- }
- install_timezone() {
- output "Update default timezone."
- output "Thanks for using this installation script. Donations welcome PayPal:support@my4x4.club"
- # check if link file
- sudo [ -L /etc/localtime ] && sudo unlink /etc/localtime
- # update time zone
- sudo ln -sf /usr/share/zoneinfo/$TIME /etc/localtime
- sudo aptitude -y install ntpdate
- sudo ntpdate time.stdtime.gov.tw
- # write time to clock.
- sudo hwclock -w
- }
- server() {
- output "Installing Server Packages."
- # installing more server files
- sudo aptitude -y install curl
- sudo aptitude -y install tar
- sudo aptitude -y install unzip
- sudo aptitude -y install git
- sudo aptitude -y install python-pip
- pip install --upgrade pip
- sudo aptitude -y install supervisor
- sudo aptitude -y install make
- sudo aptitude -y install g++
- sudo aptitude -y install python-minimal
- sudo aptitude -y install gcc
- sudo aptitude -y install libssl-dev
- }
- pterodactyl() {
- output "Install Pterodactyl-Panel."
- # Installing the Panel
- cd /var/www/pterodactyl/html
- curl -Lo v0.5.7.tar.gz https://github.com/Pterodactyl/Panel/archive/develop.zip
- sudo chmod -R 777 storage/* bootstrap/cache
- curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
- composer setup
- # create mysql structure
- # create database
- password=`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1`
- Q1="CREATE DATABASE IF NOT EXISTS pterodactyl;"
- Q2="GRANT ALL ON *.* TO 'panel'@'localhost' IDENTIFIED BY '$password';"
- Q3="FLUSH PRIVILEGES;"
- SQL="${Q1}${Q2}${Q3}"
- sudo mysql -u root -p="" -e "$SQL"
- output "Database 'pterodactyl' and user 'panel' created with password $password"
- }
- pterodactyl_1() {
- clear
- output "Environment Setup"
- php artisan pterodactyl:env --dbhost=localhost --dbport=3306 --dbname=pterodactyl --dbuser=panel --dbpass=$password --url=http://$SERVNAME --timezone=$TIME
- output "Mail Setup"
- # php artisan pterodactyl:mail
- output "Database Setup"
- php artisan migrate --force
- output "Seeding the database"
- php artisan db:seed --force
- output "Create First User"
- php artisan pterodactyl:user --email="$EMAIL" --password=$PORTALPASS --admin=1
- sudo service cron restart
- sudo service supervisor start
- output "Creating config files"
- sudo bash -c 'cat > /etc/supervisor/conf.d/pterodactyl-worker.conf' <<-'EOF'
- [program:pterodactyl-worker]
- process_name=%(program_name)s_%(process_num)02d
- command=php /var/www/pterodactyl/html/artisan queue:work database --queue=high,standard,low --sleep=3 --tries=3
- autostart=true
- autorestart=true
- user=www-data
- numprocs=2
- redirect_stderr=true
- stdout_logfile=/var/www/pterodactyl/html/storage/logs/queue-worker.log
- EOF
- output "Updating Supervisor"
- sudo supervisorctl reread
- sudo supervisorctl update
- sudo supervisorctl start pterodactyl-worker:*
- sudo systemctl enable supervisor.service
- }
- pterodactyl_niginx() {
- output "Creating webserver initial config file"
- echo '
- server {
- listen 80;
- listen [::]:80;
- server_name '"${SERVNAME}"';
- root "/var/www/pterodactyl/html/public";
- index index.html index.htm index.php;
- charset utf-8;
- location / {
- try_files $uri $uri/ /index.php?$query_string;
- }
- location = /favicon.ico { access_log off; log_not_found off; }
- location = /robots.txt { access_log off; log_not_found off; }
- access_log off;
- error_log /var/log/nginx/pterodactyl.app-error.log error;
- # allow larger file uploads and longer script runtimes
- client_max_body_size 100m;
- client_body_timeout 120s;
- sendfile off;
- location ~ \.php$ {
- fastcgi_split_path_info ^(.+\.php)(/.+)$;
- fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
- fastcgi_index index.php;
- include fastcgi_params;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- fastcgi_intercept_errors off;
- fastcgi_buffer_size 16k;
- fastcgi_buffers 4 16k;
- fastcgi_connect_timeout 300;
- fastcgi_send_timeout 300;
- fastcgi_read_timeout 300;
- }
- location ~ /\.ht {
- deny all;
- }
- location ~ /.well-known {
- allow all;
- }
- }
- ' | sudo -E tee /etc/nginx/sites-available/pterodactyl.conf >/dev/null 2>&1
- sudo ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf
- output "Install LetsEncrypt and setting SSL"
- sudo service nginx restart
- sudo aptitude -y install letsencrypt
- sudo letsencrypt certonly -a webroot --webroot-path=/var/www/pterodactyl/html/public --email "$EMAIL" --agree-tos -d "$SERVNAME"
- sudo rm /etc/nginx/sites-available/pterodactyl.conf
- sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
- echo '
- server {
- listen 80;
- listen [::]:80;
- server_name '"${SERVNAME}"';
- # enforce https
- return 301 https://$server_name$request_uri;
- }
- server {
- listen 443 ssl http2;
- listen [::]:443 ssl http2;
- server_name '"${SERVNAME}"';
- root /var/www/pterodactyl/html/public;
- index index.php;
- access_log /var/log/nginx/pterodactyl.app-accress.log;
- error_log /var/log/nginx/pterodactyl.app-error.log error;
- # allow larger file uploads and longer script runtimes
- client_max_body_size 100m;
- client_body_timeout 120s;
- sendfile off;
- # strengthen ssl security
- ssl_certificate /etc/letsencrypt/live/'"${SERVNAME}"'/fullchain.pem;
- ssl_certificate_key /etc/letsencrypt/live/'"${SERVNAME}"'/privkey.pem;
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- ssl_prefer_server_ciphers on;
- ssl_session_cache shared:SSL:10m;
- ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
- ssl_dhparam /etc/ssl/certs/dhparam.pem;
- # Add headers to serve security related headers
- add_header Strict-Transport-Security "max-age=15768000; preload;";
- add_header X-Content-Type-Options nosniff;
- add_header X-XSS-Protection "1; mode=block";
- add_header X-Robots-Tag none;
- add_header Content-Security-Policy "frame-ancestors 'self'";
- location / {
- try_files $uri $uri/ /index.php?$query_string;
- }
- location ~ \.php$ {
- fastcgi_split_path_info ^(.+\.php)(/.+)$;
- fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
- fastcgi_index index.php;
- include fastcgi_params;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- fastcgi_intercept_errors off;
- fastcgi_buffer_size 16k;
- fastcgi_buffers 4 16k;
- fastcgi_connect_timeout 300;
- fastcgi_send_timeout 300;
- fastcgi_read_timeout 300;
- include /etc/nginx/fastcgi_params;
- }
- location ~ /\.ht {
- deny all;
- }
- }
- ' | sudo -E tee /etc/nginx/sites-available/pterodactyl.conf >/dev/null 2>&1
- sudo service nginx restart
- }
- pterodactyl_apache() {
- output "Creating webserver initial config file"
- echo '
- <VirtualHost *:80>
- ServerName '"${SERVNAME}"'
- DocumentRoot "/var/www/pterodactyl/html/public"
- AllowEncodedSlashes On
- <Directory "/var/www/pterodactyl/html/public">
- AllowOverride all
- </Directory>
- </VirtualHost>
- ' | sudo -E tee /etc/apache2/sites-available/pterodactyl.conf >/dev/null 2>&1
- sudo ln -s /etc/apache2/sites-available/pterodactyl.conf /etc/apache2/sites-enabled/pterodactyl.conf
- sudo a2enmod rewrite
- sudo service apache2 restart
- output "Install LetsEncrypt and setting SSL"
- sudo aptitude -y install letsencrypt
- sudo letsencrypt certonly -a webroot --webroot-path=/var/www/pterodactyl/html/public --email $EMAIL --agree-tos -d $SERVNAME
- echo '
- <VirtualHost *:80>
- ServerName '"${SERVNAME}"'
- DocumentRoot "/var/www/pterodactyl/html/public"
- AllowEncodedSlashes On
- <Directory "/var/www/pterodactyl/html/public">
- AllowOverride all
- </Directory>
- </VirtualHost>
- NameVirtualHost *:443
- <VirtualHost *:443>=
- DocumentRoot "/var/www/pterodactyl/html/public"
- ServerName '"${SERVNAME}"'
- <Directory "/var/www/pterodactyl/html/public">
- AllowOverride all
- </Directory>
- SSLEngine on
- SSLCertificateFile /etc/letsencrypt/live/'"${SERVNAME}"'/cert.pem
- SSLCertificateKeyFile /etc/letsencrypt/live/'"${SERVNAME}"'/privkey.pem
- SSLCertificateChainFile /etc/letsencrypt/live/'"${SERVNAME}"'/fullchain.pem
- </VirtualHost>
- ' | sudo -E tee /etc/apache2/sites-available/pterodactyl_ssl.conf >/dev/null 2>&1
- sudo ln -s /etc/apache2/sites-available/pterodactyl_ssl.conf /etc/apache2/sites-enabled/pterodactyl_ssl.conf
- sudo a2enmod ssl
- sudo service apache2 restart
- }
- pterodactyl_daemon() {
- output "Installing the daemon now! Almost done!!"
- sudo aptitude -y install linux-image-extra-$(uname -r) linux-image-extra-virtual
- sudo aptitude update -y
- sudo aptitude upgrade -y
- curl -sSL https://get.docker.com/ | sh
- sudo usermod -aG docker $whoami
- sudo systemctl enable docker
- output "Installing Nodejs"
- curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
- sudo aptitude -y install nodejs
- output "Making sure we didnt miss any dependencies "
- sudo aptitude -y install tar unzip make gcc g++ python-minimal
- output "Ok really installing the daemon files now"
- sudo mkdir -p /srv/daemon /srv/daemon-data
- sudo chown -R $whoami:$whoami /srv/daemon
- cd /srv/daemon
- curl -Lo v0.3.7.tar.gz https://github.com/Pterodactyl/Daemon/archive/v0.3.7.tar.gz
- tar --strip-components=1 -xzvf v0.3.7.tar.gz
- npm install --only=production
- output "This step requires you to create your first node through your panel, only continue after you get your core code"
- output "Paste the code in the file and then hit CTRL + o then CTRL + x."
- read -p "Press enter to continue" nothing
- sudo nano /srv/daemon/config/core.json
- sudo bash -c 'cat > /etc/systemd/system/wings.service' <<-EOF
- [Unit]
- Description=Pterodactyl Wings Daemon
- After=docker.service
- [Service]
- User=root
- #Group=some_group
- WorkingDirectory=/srv/daemon
- LimitNOFILE=4096
- PIDFile=/var/run/wings/daemon.pid
- ExecStart=/usr/bin/node /srv/daemon/src/index.js
- Restart=on-failure
- StartLimitInterval=600
- [Install]
- WantedBy=multi-user.target
- EOF
- sudo systemctl daemon-reload
- sudo systemctl enable wings
- sudo systemctl start wings
- sudo service wings start
- sudo usermod -aG www-data $whoami
- sudo chown -R www-data:www-data /var/www/pterodactyl/html
- sudo chown -R www-data:www-data /srv/daemon
- sudo chmod -R 775 /var/www/pterodactyl/html
- sudo chmod -R 775 /srv/daemon
- echo '
- [client]
- user=root
- password='"${rootpasswd}"'
- [mysql]
- user=root
- password='"${rootpasswd}"'
- ' | sudo -E tee ~/.my.cnf >/dev/null 2>&1
- sudo chmod 0600 ~/.my.cnf
- output "Setting mysql root password"
- sudo mysqladmin -u root password $rootpasswd
- (crontab -l ; echo "* * * * * php /var/www/pterodactyl/html/artisan schedule:run >> /dev/null 2>&1")| crontab -
- output "Please reboot your server to apply new permissions"
- }
- # Process command line...
- while [ $# -gt 0 ]; do
- case $1 in
- --help | -h)
- usage $0
- ;;
- --install | -i)
- shift
- action=$1
- shift
- ;;
- *)
- usage $0
- ;;
- esac
- done
- test -z $action && usage $0
- case $action in
- "nginx")
- server_setup
- initial
- install_nginx
- install_mariadb
- install_dependencies
- install_timezone
- server
- pterodactyl
- pterodactyl_1
- pterodactyl_niginx
- pterodactyl_daemon
- ;;
- "apache")
- server_setup
- initial
- install_apache
- install_mariadb
- install_dependencies_apache
- install_timezone
- server
- pterodactyl
- pterodactyl_1
- pterodactyl_apache
- pterodactyl_daemon
- ;;
- *)
- usage $0
- ;;
- esac
- exit 1;
Add Comment
Please, Sign In to add comment