Last active
February 16, 2018 15:55
-
-
Save EmranAhmed/7ad136ecea8840d427bc to your computer and use it in GitHub Desktop.
Simple and Straightforward VPS ( ubuntu and debian ) setup :)
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
#!/bin/bash | |
# Upload vps-setup.sh file | |
# open terminal and change permission like: chmod +x ./vps-setup.sh | |
# ./vps-setup.sh | |
# delete this file after setup :) | |
COLOR_RESET="\033[33;0m" | |
COLOR_RED="\033[33;31m" | |
COLOR_GREEN="\033[33;32m" | |
COLOR_YELLOW="\033[33;33m" | |
COLOR_BLUE="\033[33;34m" | |
COLOR_MAGENTA="\033[33;35m" | |
COLOR_GRAY="\033[33;30m" | |
COLOR_CYAN="\033[33;36m" | |
echo -en "${COLOR_GREEN}Host Name ${COLOR_CYAN}(themehippo)${COLOR_GREEN} : ${COLOR_BLUE}" | |
read YOUR_HOST_NAME | |
echo -en "${COLOR_GREEN}Domain Name with ${COLOR_RED}www${COLOR_CYAN} (www.themehippo.com)${COLOR_GREEN} : ${COLOR_BLUE}" | |
read YOUR_DOMAIN_NAME | |
#echo -en "${COLOR_GREEN}Non ${COLOR_RED}www${COLOR_GREEN} Domain Name ${COLOR_CYAN} (themehippo.com, themeroxsite.com)${COLOR_GREEN} : ${COLOR_BLUE}" | |
#read YOUR_NON_WWW_DOMAIN_NAME | |
YOUR_NON_WWW_DOMAIN_NAME=$(echo $YOUR_DOMAIN_NAME | sed -e "s/www.//g") | |
echo -en "${COLOR_GREEN}MYSQL Password : ${COLOR_BLUE}" | |
read YOUR_SQL_PASSWORD | |
echo -en "\n${COLOR_GREEN}Want to set Host Name Again? ${COLOR_RED}(y/n)${COLOR_GREEN}: ${COLOR_BLUE}" | |
read WANT_TO_SET_HOSTNAME | |
echo -en "${COLOR_RESET}" | |
YOUR_SERVER_IP=$(hostname -I | cut -f1 -d' ') # `hostname -I | cut -f2 -d' '` for vagrant | |
YOUR_ACCESS_LOG_FILE="access-"$(echo $YOUR_NON_WWW_DOMAIN_NAME | sed -e "s/\./-/g")".log" | |
YOUR_ERROR_LOG_FILE="error-"$(echo $YOUR_NON_WWW_DOMAIN_NAME | sed -e "s/\./-/g")".log" | |
if [[ $WANT_TO_SET_HOSTNAME == "y" ]] | |
then | |
echo -e "\n${COLOR_YELLOW}Setting Host Name${COLOR_RESET}" | |
echo "$YOUR_HOST_NAME" > /etc/hostname | |
hostname -F /etc/hostname | |
echo "$YOUR_SERVER_IP $YOUR_HOST_NAME" >> /etc/hosts | |
echo -e "\n${COLOR_YELLOW}===========================> Done. ${COLOR_RESET}" | |
fi | |
echo -e "\n${COLOR_YELLOW}Setting TimeZone${COLOR_RESET}\n" | |
timedatectl set-timezone Asia/Dhaka | |
echo -e "\n${COLOR_YELLOW}Updating repos${COLOR_RESET}\n" | |
apt-get update | |
apt-get upgrade | |
apt-get install debconf-utils htop zip unzip -y | |
echo -e "\n${COLOR_YELLOW}Prepairing for Nginx Installation${COLOR_RESET}\n" | |
apt-get remove nginx nginx-full nginx-common nginx-core | |
sudo apt-get autoremove | |
mkdir /opt/www | |
mkdir /opt/www/$YOUR_DOMAIN_NAME | |
wget http://nginx.org/keys/nginx_signing.key | |
apt-key add nginx_signing.key | |
rm nginx_signing.key | |
echo "deb http://nginx.org/packages/ubuntu/ trusty nginx" >> /etc/apt/sources.list | |
echo "deb-src http://nginx.org/packages/ubuntu/ trusty nginx" >> /etc/apt/sources.list | |
apt-get update | |
echo -e "\n${COLOR_YELLOW}Installing and Configuring Nginx${COLOR_RESET}\n" | |
apt-get install nginx -y | |
service nginx restart | |
echo "mysql-server mysql-server/root_password password $YOUR_SQL_PASSWORD" | debconf-set-selections | |
echo "mysql-server mysql-server/root_password_again password $YOUR_SQL_PASSWORD" | debconf-set-selections | |
apt-get install rsync curl vim build-essential python-software-properties git-core php5-fpm php5-common php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-ming php5-ps mysql-server -y > /dev/null | |
service php5-fpm restart | |
service mysql restart | |
/usr/bin/mysql_secure_installation | |
php5enmod mcrypt | |
service php5-fpm restart | |
mkdir /opt/log | |
touch /opt/log/$YOUR_ACCESS_LOG_FILE | |
touch /opt/log/$YOUR_ERROR_LOG_FILE | |
mkdir /etc/nginx/sites-available | |
mkdir /etc/nginx/sites-enabled | |
cat > /etc/nginx/sites-available/$YOUR_DOMAIN_NAME << "EOF" # cat >> Means Append and cat > write | |
server { | |
listen 80; | |
EOF | |
# Root Setup | |
echo " root /opt/www/$YOUR_DOMAIN_NAME;" >> /etc/nginx/sites-available/$YOUR_DOMAIN_NAME | |
cat >> /etc/nginx/sites-available/$YOUR_DOMAIN_NAME << "EOF" | |
index index.php index.html index.htm; | |
EOF | |
echo " server_name $YOUR_DOMAIN_NAME;" >> /etc/nginx/sites-available/$YOUR_DOMAIN_NAME | |
echo " access_log /opt/log/$YOUR_ACCESS_LOG_FILE;" >> /etc/nginx/sites-available/$YOUR_DOMAIN_NAME | |
echo " error_log /opt/log/$YOUR_ERROR_LOG_FILE;" >> /etc/nginx/sites-available/$YOUR_DOMAIN_NAME | |
cat >> /etc/nginx/sites-available/$YOUR_DOMAIN_NAME << "EOF" | |
location / { | |
# autoindex on; # For Directory Listing | |
try_files $uri $uri/ /index.php?$args; | |
} | |
location /phpmyadmin { | |
root /usr/share; | |
location ~ \.php$ { | |
fastcgi_pass unix:/var/run/php5-fpm.sock; | |
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | |
include /etc/nginx/fastcgi_params; | |
} | |
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { | |
root /usr/share/; | |
} | |
} | |
location ~ \.php$ { | |
try_files $uri =404; | |
fastcgi_split_path_info ^(.+\.php)(/.+)$; | |
fastcgi_pass unix:/var/run/php5-fpm.sock; | |
fastcgi_index index.php; | |
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | |
include fastcgi_params; | |
} | |
# Aggressive caching for static files | |
location ~* \.(css|js|html|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|ogv|otf|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|t?gz|tif|tiff|ttf|wav|webm|wma|woff|wri|xla|xls|xlsx|xlt|xlw|zip)$ { | |
expires 31536000s; | |
access_log off; | |
log_not_found off; | |
add_header Pragma public; | |
add_header Cache-Control "max-age=31536000, public"; | |
} | |
location = /favicon.ico { | |
log_not_found off; | |
access_log off; | |
} | |
location = /robots.txt { | |
allow all; | |
log_not_found off; | |
access_log off; | |
} | |
location ~ /\. { | |
deny all; | |
} | |
location ~* /(?:uploads|files)/.*\.php$ { | |
deny all; | |
} | |
} | |
EOF | |
ln -sf /etc/nginx/sites-available/$YOUR_DOMAIN_NAME /etc/nginx/sites-enabled/$YOUR_DOMAIN_NAME | |
cat > /etc/nginx/nginx.conf << "EOF" # cat >> Means Append and cat > write | |
user www-data; | |
worker_processes 1; | |
error_log /var/log/nginx/error.log warn; | |
pid /var/run/nginx.pid; | |
events { | |
worker_connections 1024; | |
} | |
http { | |
include /etc/nginx/mime.types; | |
default_type application/octet-stream; | |
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' | |
'$status $body_bytes_sent "$http_referer" ' | |
'"$http_user_agent" "$http_x_forwarded_for"'; | |
access_log /var/log/nginx/access.log main; | |
sendfile on; | |
server_tokens off; | |
#tcp_nopush on; | |
keepalive_timeout 65; | |
gzip on; | |
gzip_disable "msie6"; | |
gzip_vary on; | |
gzip_proxied any; | |
gzip_comp_level 6; | |
gzip_buffers 16 8k; | |
gzip_http_version 1.1; | |
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; | |
client_max_body_size 100M; | |
client_body_timeout 600s; | |
#include /etc/nginx/conf.d/*.conf; | |
include /etc/nginx/sites-enabled/*; | |
} | |
EOF | |
echo -e "\n${COLOR_YELLOW}Configuring PHP.INI FIle${COLOR_RESET}\n" | |
sed -i "s/;cgi.fix_pathinfo = .*/cgi.fix_pathinfo = 0/" /etc/php5/fpm/php.ini | |
sed -i "s/upload_max_filesize = .*/upload_max_filesize = 100M/" /etc/php5/fpm/php.ini | |
sed -i "s/post_max_size = .*/post_max_size = 512M/" /etc/php5/fpm/php.ini | |
sed -i "s/memory_limit = .*/memory_limit = 256M/" /etc/php5/fpm/php.ini | |
sed -i "s/display_errors = .*/display_errors = On/" /etc/php5/fpm/php.ini | |
service nginx restart | |
service php5-fpm restart | |
service mysql restart | |
echo "phpmyadmin phpmyadmin/app-password-confirm password $YOUR_SQL_PASSWORD" | debconf-set-selections | |
echo "phpmyadmin phpmyadmin/mysql/admin-pass password $YOUR_SQL_PASSWORD" | debconf-set-selections | |
echo "phpmyadmin phpmyadmin/mysql/app-pass password $YOUR_SQL_PASSWORD" | debconf-set-selections | |
echo "phpmyadmin phpmyadmin/reconfigure-webserver multiselect none" | debconf-set-selections | |
echo "phpmyadmin phpmyadmin/dbconfig-install boolean true" | debconf-set-selections | |
apt-get install phpmyadmin -y | |
service nginx restart | |
service php5-fpm restart | |
service mysql restart | |
cat > /opt/www/$YOUR_DOMAIN_NAME/info.php << "EOF" | |
<?php phpinfo(); | |
EOF | |
chown -R www-data:www-data /opt/www/$YOUR_DOMAIN_NAME | |
chmod -R 755 /opt/www/$YOUR_DOMAIN_NAME | |
echo -e "\n${COLOR_YELLOW}All Done Have Fun :) ${COLOR_RESET}" | |
echo -e "\n${COLOR_YELLOW}Please check http://${YOUR_SERVER_IP}/info.php and http://${YOUR_SERVER_IP}/phpmyadmin ${COLOR_RESET}\n" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment