Guest User

Untitled

a guest
Sep 15th, 2016
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.52 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. # STILL ON PROGRESS
  4. #
  5. # WordPress Setup Script
  6. #
  7. # This script will install and configure WordPress on
  8. # an Ubuntu 16.04 droplet
  9. # Generate root and wordpress mysql passwords
  10.  
  11. export DEBIAN_FRONTEND=noninteractive;
  12.  
  13. #initial values
  14. init() {
  15. pass_file='/root/mysql_passwd.txt'
  16. # leave sub_folder empty if you don't want to make installation to a subfolder
  17. sub_folder=""
  18. web_address="dima.bg"
  19. # for making an installation to www.mywebsite.com/myblog/
  20. #sub_folder="myblog"
  21. #web_address="www.mywebsite.com"
  22.  
  23. multi_site=0
  24. # for multi site installation uncomment this line
  25. #multi_site=1
  26. }
  27.  
  28. #creating installation folders
  29. create_folders() {
  30. mkdir /var/www
  31. if [ "$sub_folder" != "" ]; then
  32. full_path="/var/www/$web_address/$sub_folder"
  33. mkdir /var/www/$web_address
  34. mkdir $full_path
  35. else
  36. full_path="/var/www/$web_address"
  37. mkdir $full_path
  38. fi
  39. #echo $full_path
  40. }
  41.  
  42. #creating random passwords
  43. set_passwords() {
  44. pass_file='/root/mysql_passwd.txt'
  45. touch pass_file
  46. root_mysql_passwd=`dd if=/dev/urandom bs=1 count=16 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev | tr -dc 'a-zA-Z0-9'`;
  47. wp_mysql_passwd=`dd if=/dev/urandom bs=1 count=8 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev | tr -dc 'a-zA-Z0-9'`;
  48. wp_mysql_user=`dd if=/dev/urandom bs=1 count=6 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev | tr -dc 'a-zA-Z0-9'`;
  49. wp_database=wp_`dd if=/dev/urandom bs=1 count=6 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev | tr -dc 'a-zA-Z0-9'`;
  50. echo "root mysql password: $root_mysql_passwd" >> $pass_file
  51. echo "wordpress password: $wp_mysql_passwd" >> $pass_file
  52. echo "wordpress user: $wp_mysql_user" >> $pass_file
  53. echo "wordpress database: $wp_database" >> $pass_file
  54. }
  55.  
  56. get_passwords() {
  57. root_mysql_passwd=`sed -n "s/^.*root mysql password:\s*\(\S*\).*$/\1/p" $pass_file`;
  58. wp_mysql_passwd=`sed -n "s/^.*wordpress password:\s*\(\S*\).*$/\1/p" $pass_file`;
  59. wp_mysql_user=`sed -n "s/^.*wordpress user:\s*\(\S*\).*$/\1/p" $pass_file`;
  60. wp_database=`sed -n "s/^.*wordpress database:\s*\(\S*\).*$/\1/p" $pass_file`;
  61. }
  62.  
  63. install_packages() {
  64. install_php_7
  65. install_mysql_57
  66. install_nginx
  67. install_unzip
  68. restart_packages
  69. echo "Installation Done."
  70. }
  71.  
  72. restart_packages() {
  73. echo "Restarting Nginx, PHP-FPM and MySQL."
  74. sleep 1
  75. sudo systemctl restart php7.0-fpm
  76. service nginx restart
  77. service mysql restart
  78. echo "Packages restarted."
  79. }
  80.  
  81. uff8_fix() {
  82. # use this function if you have any utf-8 related error with ondrej/php ppa
  83. echo "Fixing utf-8 error for ondrej/php package."
  84. sleep 1
  85. apt-get install -y language-pack-en-base
  86. export LC_ALL=en_US.UTF-8
  87. export LANG=en_US.UTF-8
  88. }
  89.  
  90. add_apt_repository() {
  91. # fixing add-apt-repository: command not found error
  92. echo "fixing add-apt-repository: command not found error"
  93. sleep 1
  94. apt-get install -y software-properties-common python-software-properties
  95. }
  96.  
  97. general_update() {
  98. echo "Updating packages."
  99. sleep 1
  100. apt-get update
  101. apt-get -y upgrade
  102. }
  103.  
  104. install_unzip() {
  105. echo "Install unzip"
  106. sleep 1
  107. apt-get -y install unzip
  108. }
  109.  
  110. install_mysql_57() {
  111. echo "Installing MySQL 5.7 Server and Client"
  112. sleep 1
  113. apt-get -y install debconf-utils
  114. echo mysql-server mysql-server/root_password password $root_mysql_passwd | sudo debconf-set-selections
  115. echo mysql-server mysql-server/root_password_again password $root_mysql_passwd | sudo debconf-set-selections
  116. sudo apt-get -y install mysql-server mysql-client
  117. apt-get -y install mysql-server-5.7
  118. }
  119.  
  120. install_nginx() {
  121. echo "Installing Nginx webserver"
  122. sleep 1
  123. echo "deb http://ppa.launchpad.net/nginx/stable/ubuntu $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/nginx-stable.list
  124. sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
  125. sudo apt-get update
  126. sudo apt-get -y install nginx
  127. }
  128.  
  129. install_php_7() {
  130. echo "Adding ppa:ondrej/php repository as default PHP repository."
  131. sleep 1
  132. # -y flag means automatically say yes for command prompt.
  133. sudo add-apt-repository -y ppa:ondrej/php
  134. sudo apt-get update
  135. echo "Installing PHP 7.0 packages"
  136. sleep 1
  137. apt-get -y install screen build-essential libcurl3 libmcrypt4 libmemcached11 libxmlrpc-epi0 php7.0-cli php7.0-common php7.0-curl php7.0-fpm php7.0-gd php7.0-intl php7.0-json php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-readline php7.0-xml php7.0-xmlrpc psmisc libmcrypt-dev mcrypt php-pear php-mysql php-mbstring php-mcrypt php-xml php-intl libmhash2 php-common php-memcached
  138. }
  139.  
  140. set_packages()
  141. {
  142. #updating packages again
  143. general_update
  144. get_wordpress
  145. set_mysql
  146. set_php_7
  147. set_nginx
  148. set_wordpress
  149. }
  150.  
  151. get_wordpress() {
  152. # Download and uncompress WordPress
  153. if [ -d /tmp/wordpress/ ]; then
  154. rm -rf /tmp/wordpress/*
  155. fi
  156. echo "Downloading & Unzipping WordPress Latest Release"
  157. sleep 1
  158. wget https://wordpress.org/latest.zip -O /tmp/wordpress.zip;
  159. cd /tmp/ || exit;
  160. unzip /tmp/wordpress.zip;
  161. }
  162.  
  163. set_mysql() {
  164. echo "Set up database user"
  165. #sleep 1
  166. # Set up database user
  167. /usr/bin/mysqladmin -u root -h localhost create $wp_database -p$root_mysql_passwd;
  168. /usr/bin/mysql -uroot -p$root_mysql_passwd -e "CREATE USER $wp_mysql_user@localhost IDENTIFIED BY '"$wp_mysql_passwd"'";
  169. /usr/bin/mysql -uroot -p$root_mysql_passwd -e "GRANT ALL PRIVILEGES ON $wp_database.* TO $wp_mysql_user@localhost";
  170. }
  171.  
  172. set_php_7() {
  173. echo "set php 7"
  174. sleep 1
  175. # Configure PHP by mostly increasing default variables!
  176. sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php/7.0/fpm/php.ini
  177. sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 20M/" /etc/php/7.0/fpm/php.ini
  178. sed -i "s/post_max_size = 8M/post_max_size = 20M/" /etc/php/7.0/fpm/php.ini
  179. sed -i "s/max_execution_time = 30/max_execution_time = 120/" /etc/php/7.0/fpm/php.ini
  180. sed -i "s/max_input_time = 60/max_input_time = 120/" /etc/php/7.0/fpm/php.ini
  181. sed -i "s/; max_input_vars = 1000/max_input_vars = 6000/" /etc/php/7.0/fpm/php.ini
  182. # Configure Opcache
  183. echo "opcache.memory_consumption=512" >> /etc/php/7.0/fpm/conf.d/10-opcache.ini
  184. echo "opcache.max_accelerated_files=50000" >> /etc/php/7.0/fpm/conf.d/10-opcache.ini
  185. echo "opcache.revalidate_freq=0" >> /etc/php/7.0/fpm/conf.d/10-opcache.ini
  186. echo "opcache.consistency_checks=1" >> /etc/php/7.0/fpm/conf.d/10-opcache.ini
  187. #sed -i "s|listen = 127.0.0.1:9000|listen = /var/run/php5-fpm.sock|" /etc/php5/fpm/pool.d/www.conf;
  188. sudo systemctl restart php7.0-fpm
  189. }
  190.  
  191. set_nginx() {
  192. echo "Configuring nginx settings"
  193. sleep 1
  194. cp -avr /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
  195. cp -avr /etc/nginx/sites-available/default.bak /etc/nginx/sites-available/$web_address
  196. #rm -avr /etc/nginx/sites-available/default
  197. # adding multi site redirections
  198. if [ "$sub_folder" != "" ] && [ "$multi_site" = "1" ]
  199. then
  200. echo "multi site with sub folder"
  201. sed -i "s/server_name _;/server_name _;\n\tif (!-e \$request_filename) {\n\t\trewrite \/wp-admin\$ \$scheme:\/\/\$host\$uri\/ permanent;\n\t\trewrite \^\/$sub_folder(\/\[^\/\]+)\?(\/wp-.*) \/$sub_folder\$2 last;\n\t\trewrite \^\/$sub_folder(\/\[^\/\]+)\?(\/.*\.php)\$ \/$sub_folder\$2 last;\n\t}/" /etc/nginx/sites-available/$web_address;
  202. fi
  203. if [ "$sub_folder" = "" ] && [ "$multi_site" = "1" ]
  204. then
  205. echo "multi site without sub folder"
  206. sed -i "s/server_name _;/server_name _; \n\tif (!-e \$request_filename) {\n\t\trewrite \/wp-admin\$ \$scheme:\/\/\$host\$uri\/ permanent;\n\t\trewrite \^(\/\[^\/\]+)\?(\/wp-.*) \$2 last;\n\t\trewrite \^(\/\[^\/\]+)\?(\/.*\.php)\$ \$2 last;\n\t}/" /etc/nginx/sites-available/$web_address
  207. fi
  208. # adding subfolder redirections
  209. if [ "$sub_folder" != "" ]; then
  210. sed -i "s/server_name _;/server_name _;\n\n\tlocation \/$sub_folder {\n\t\tindex index.php;\n\t\ttry_files \$uri \$uri\/ \/$sub_folder\/index.php\?\$args;\n\t}/" /etc/nginx/sites-available/$web_address
  211. fi
  212. # log and browser cache settings
  213. sed -i "s/server_name _;/server_name _;\n\n\tlocation = \/favicon.ico {\n\t\tlog_not_found off;\n\t\taccess_log off;\n\t}/" /etc/nginx/sites-available/$web_address
  214. sed -i "s/server_name _;/server_name _;\n\n\tlocation = \/robots.txt {\n\t\tlog_not_found off;\n\t\taccess_log off;\n\t}/" /etc/nginx/sites-available/$web_address
  215. sed -i "s/server_name _;/server_name _;\n\n\tlocation ~* \\\.(js|css|ogg\|ogv\|svg\|svgz\|eot\|otf\|woff\|mp4\|ttf\|rss\|atom\|jpg\|jpeg\|gif\|png\|ico\|zip\|tgz\|gz\|rar\|bz2\|doc\|xls\|exe\|ppt\|tar\|mid\|midi\|wav\|bmp\|rtf)\$ {\n\t\texpires 30d;\n\t\tlog_not_found off;\n\t}/" /etc/nginx/sites-available/$web_address
  216. # activate gzip
  217. if [ ! -f /etc/nginx/nginx.conf.bak ]; then
  218. cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
  219. fi
  220. cp /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf
  221. sed -i "s/# gzip_vary on;/gzip_vary on;/" /etc/nginx/nginx.conf
  222. sed -i "s/# gzip_proxied any;/gzip_proxied any;/" /etc/nginx/nginx.conf
  223. sed -i "s/# gzip_comp_level 6;/gzip_comp_level 6;/" /etc/nginx/nginx.conf
  224. sed -i "s/# gzip_buffers 16 8k;/gzip_buffers 16 8k;/" /etc/nginx/nginx.conf
  225. sed -i "s/# gzip_http_version 1.1;/gzip_http_version 1.1;/" /etc/nginx/nginx.conf
  226. sed -i "s/# gzip_min_length 256;/gzip_min_length 256;/" /etc/nginx/nginx.conf
  227. sed -i "s/# gzip_types text\/plain/gzip_types text\/plain application\/vnd.ms\-fontobject application\/x-font-ttf font\/opentype image\/svg+xml image\/x-icon/" /etc/nginx/nginx.conf
  228. # set file upload settings 20 M and 6 min max
  229. sed -i "s/sendfile on;/sendfile on;\n\tclient_max_body_size 20M;/" /etc/nginx/nginx.conf
  230. sed -i "s/sendfile on;/sendfile on;\n\tsend_timeout 360s;/" /etc/nginx/nginx.conf
  231. # making default settings
  232. sed -i "s/try_files \$uri \$uri\/ =404;/try_files \$uri \$uri\/ \/index.php\$is_args\$args;/" /etc/nginx/sites-available/$web_address
  233. sed -i "s/server_name _;/server_name $web_address;/" /etc/nginx/sites-available/$web_address
  234. sed -i "s/root \/var\/www\/html;/root \/var\/www\/$web_address;/" /etc/nginx/sites-available/$web_address
  235. sed -i "s/index index.html/index index.php index.html/" /etc/nginx/sites-available/$web_address
  236. # replacing default server if it's not localhost
  237. if [ "$web_address" != "localhost" ]; then
  238. sed -i "s/listen 80 default_server;/listen 80;/" /etc/nginx/sites-available/$web_address
  239. sed -i "s/listen \[\:\:\]\:80 default_server;/listen \[\:\:\]\:80;/" /etc/nginx/sites-available/$web_address
  240. fi
  241. # adding .php connection to the nginx
  242. sed -i "s/#location ~ \\\.php\$ {/location ~ \\\.php\$ {/" /etc/nginx/sites-available/$web_address
  243. sed -i "s/#\tinclude snippets\/fastcgi-php.conf;/\tinclude snippets\/fastcgi-php.conf;/" /etc/nginx/sites-available/$web_address
  244. sed -i "s/#\tfastcgi_pass unix:\/var\/run\/php7.0-fpm.sock;/\tfastcgi_pass unix:\/run\/php\/php7.0-fpm.sock;\n\t\tinclude fastcgi_params;/" /etc/nginx/sites-available/$web_address
  245. # blocking access from .htaccess
  246. sed -i "s/#location ~ \/\\\.ht {/location ~ \/\\\.ht {/" /etc/nginx/sites-available/$web_address
  247. sed -i "s/#\tdeny all;/\tdeny all;/" /etc/nginx/sites-available/$web_address
  248. # closing the gap for previous nginx and htaccess settings
  249. sed -i "s/\t#}/\t}/" /etc/nginx/sites-available/$web_address
  250. mv /etc/nginx/sites-available/$web_address /etc/nginx/sites-enabled/$web_address
  251. touch /var/www/$web_address/info.php
  252. echo "<?php phpinfo();?>" > /var/www/$web_address/info.php
  253. echo /var/www/$web_address/info.php
  254. rm /etc/nginx/sites-enabled/default
  255. sudo systemctl reload nginx
  256. }
  257.  
  258. set_wordpress() {
  259. echo "Configuring WordPress"
  260. sleep 1
  261. rm -rf $full_path/*
  262. mv /tmp/wordpress/* $full_path
  263. cp $full_path/wp-config-sample.php $full_path/wp-config.php;
  264. if [ "$multi_site" = "1" ]; then
  265. sed -i "s/'WP_DEBUG', false);/'WP_DEBUG', false);\r\ndefine('WP_ALLOW_MULTISITE', true);/" $full_path/wp-config.php;
  266. else
  267. echo "multi site is disabled"
  268. sleep 1
  269. fi
  270. sed -i "s/'WP_DEBUG', false);/'WP_DEBUG', false);\r\ndefine('WP_MEMORY_LIMIT', '96M');/" $full_path/wp-config.php;
  271. sed -i "s|'DB_NAME', 'database_name_here'|'DB_NAME', '$wp_database'|g" $full_path/wp-config.php;
  272. sed -i "s/'DB_USER', 'username_here'/'DB_USER', '$wp_mysql_user'/g" $full_path/wp-config.php;
  273. sed -i "s/'DB_PASSWORD', 'password_here'/'DB_PASSWORD', '$wp_mysql_passwd'/g" $full_path/wp-config.php;
  274. db_prefix=`dd if=/dev/urandom bs=1 count=3 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev | tr -dc 'a-zA-Z0-9'`_;
  275. echo "db_prefix : $db_prefix ";
  276. sleep 1;
  277. sed -i "s/\$table_prefix = 'wp_';/\$table_prefix = '$db_prefix';/" $full_path/wp-config.php;
  278. for i in `seq 1 8`
  279. do
  280. wp_salt=$(</dev/urandom tr -dc 'a-zA-Z0-9!@#$%^&*()\-_ []{}<>~`+=,.;:/?|' | head -c 64 | sed -e 's/[\/&]/\\&/g');
  281. sed -i "0,/put your unique phrase here/s/put your unique phrase here/$wp_salt/" $full_path/wp-config.php;
  282. done
  283. chown -Rf www-data:www-data $full_path;
  284. }
  285.  
  286. set_wordpress_multisite() {
  287. echo "Configuring WordPress Multisite Settings"
  288. sleep 1
  289. sed -i "s/'WP_DEBUG', false);/'WP_DEBUG', false);\r\ndefine('BLOG_ID_CURRENT_SITE', 1);/" $full_path/wp-config.php;
  290. sed -i "s/'WP_DEBUG', false);/'WP_DEBUG', false);\r\ndefine('SITE_ID_CURRENT_SITE', 1);/" $full_path/wp-config.php;
  291. if [ "$sub_folder" != "" ]; then
  292. sed -i "s/'WP_DEBUG', false);/'WP_DEBUG', false);\r\ndefine('PATH_CURRENT_SITE', '\/$sub_folder\/');/" $full_path/wp-config.php;
  293. else
  294. sed -i "s/'WP_DEBUG', false);/'WP_DEBUG', false);\r\ndefine('PATH_CURRENT_SITE', '\/');/" $full_path/wp-config.php;
  295. fi
  296. sed -i "s/'WP_DEBUG', false);/'WP_DEBUG', false);\r\ndefine('DOMAIN_CURRENT_SITE', '$web_address');/" $full_path/wp-config.php;
  297. sed -i "s/'WP_DEBUG', false);/'WP_DEBUG', false);\r\ndefine('SUBDOMAIN_INSTALL', false);/" $full_path/wp-config.php;
  298. sed -i "s/'WP_DEBUG', false);/'WP_DEBUG', false);\r\ndefine('MULTISITE', true);/" $full_path/wp-config.php;
  299. }
  300.  
  301. rm_temp() {
  302. echo "Removing temp files"
  303. sleep 1
  304. rm -rf /tmp/wordpress
  305. rm /tmp/wordpress.zip
  306. }
  307.  
  308. uff8_fix
  309. add_apt_repository
  310. init
  311. create_folders
  312. set_passwords
  313. get_passwords
  314. install_packages
  315. set_packages
  316. rm_temp
Add Comment
Please, Sign In to add comment