Skip to content

Instantly share code, notes, and snippets.

@sipofwater
Last active November 25, 2021 17:36
Show Gist options
  • Save sipofwater/efab7ccdce4c9c7d61b82334fc3dd2f7 to your computer and use it in GitHub Desktop.
Save sipofwater/efab7ccdce4c9c7d61b82334fc3dd2f7 to your computer and use it in GitHub Desktop.
Installs and configures a LAMP-based web server.

The Purpose of installwebserver.sh

was to script the installation and configuration of a LAMP webserver (inc: phpMyAdmin, git, Laravel, and curl) as part of my Disaster Recovery Plan. This script has been tested as working on Ubuntu 14.04, 16.04, 20.04.

sh installwebserver.sh <username>

  • takes 1 input parameter <username> for the user
  • installs and configures git
  • installs ^lamp-server
  • installs myphpadmin
  • creates file structure, including for: backups, logfiles, scripts, webroot
  • updates default .conf files to point to new web folders
  • updates Error Reporting, File Uploads and Timezone in php.ini
  • installs ftpdaemon, mcrypt, curl, composer, laravel
  • configs composer, updating PATH,
  • creates a default page to test configuration and installation
  • gets ip address of new server

assumptions

  • creating a LAMP-based webserver
  • webroot /web/webroot/
  • script /web/scripts//web/scripts/.sh
  • owner www-data
  • group webdev

dependancies required

  • none (this is a fresh install with all dependancies?)

to run from command-line-interface:

  • sh /web/scripts/installwebserver.sh
# Created: April 20, 2017
# Updated: December 20, 2017
# Purpose: To install and configure a LAMP webserver.
# Input: Program takes 1 input parameter to name the user
#!/bin/bash
set -x # echo on
# ################# setting variables ###########################
username=$1
# -z is variable
if [ -z "$username" ]
then
echo "\$username is empty"
$username="jake"
else
echo "\$username is NOT empty"
fi
webdir="/web/webroot/"
webowner="www-data"
webgroup="webdev"
# ###############################################################
### HAPPENING WITH INSTALL/RECOVERY DOC: sudo apt-get update
### HAPPENING WITH INSTALL/RECOVERY DOC:sudo apt-get install git
# Configure git global values
git config --global user.name "Jake"
git config --global user.email email@gmail.com
git config --global core.editor nano
git config --global color.ui true
git config --list
#### install LAMP and phpMyAdmin
sudo apt-get install lamp-server^
#### get PHP and MySQL versions
php -version
mysql --version
sudo apt-get install phpmyadmin
sudo service apache2 restart
# NEEDED!?
####################################################################
############################ END ###############################
#### Create Homes for web server webroot, backup, installs and log files:
sudo mkdir web web/webroot web/backup web/installs web/logfiles
#### Create the webdev group, add users and set permissions:
sudo groupadd webdev
sudo usermod -a -G webdev ${username}
sudo chown -R www-data:webdev /web
sudo chmod -R 775 /web
####################################################################
#### NEED TO FINISH HASHING OUT:
#### Setting /web/webroot/ as the root web folder:
#### PARAMETERIZE:
# x="/var/www/"
# y="/web/webroot/"
sudo sed -i -e "s/var/www|web/webroot|g" /etc/apache2/apache2.conf
#### Change DocumentRoot from /var/www/ to /web/webroot/ folder:
#### PARAMETERIZE:
# x="/var/www/"
# y="/web/webroot/"
sudo cp /web/scripts/includes/111-tpl.conf /etc/apache2/sites-available/111-tpl.conf
sudo sed -i -e "s/ServerName default|webroot|g" /etc/apache2/sites-available/000-default.conf
sudo sed -i -e "s/ServerAlias default|webroot|g" /etc/apache2/sites-available/000-default.conf
sudo sed -i -e "s/default-error|webroot-error|g" /etc/apache2/sites-available/000-default.conf
sudo sed -i -e "s/default-access|webroot-access|g" /etc/apache2/sites-available/000-default.conf
sudo sed -i -e "s/var/www/html|web/webroot|g" /etc/apache2/sites-available/000-default.conf
#### Update Error Reporting, File Uploads and Timezone in php.ini:
sudo sed -i -e "s/display_errors Off|display_errors On|g" /etc/php/7.0/apache2/php.ini
sudo sed -i -e "s/display_startup_errors Off|display_startup_errors On|g" /etc/php/7.0/apache2/php.ini
sudo sed -i -e "s/post_max_size = 8M|post_max_size = 40M|g" /etc/php/7.0/apache2/php.ini
sudo sed -i -e "s/upload_max_filesize = 2M|upload_max_filesize = 40M|g" /etc/php/7.0/apache2/php.ini
sudo sed -i -e "s/.timezone =|.timezone = America/Vancouver|g" /etc/php/7.0/apache2/php.ini
####################################################################
############################ END ###############################
# ############## REBOOT: ##########################
sudo service apache2 restart
####################################################################
#### Installing the FTP Daemon:
sudo apt-get install vsftpd
sudo nano /etc/vsftpd.conf
sudo restart vsftpd
#### Install mcrypt
sudo apt-get install mcrypt
sudo php5enmod mcrypt
#### Install curl
sudo apt-get install curl
# Install Composer and Laravel
sudo curl -sS https://getcomposer.org/installer | sudo php
sudo mv /home/fumbler/composer.phar /usr/local/bin/composer
sudo mv composer.phar /usr/local/bin/composer
composer global require "laravel/installer=~1.1"
sudo composer global require "laravel/installer=~1.1"
sudo export PATH="PATH:~/.composer/vendor/bin"
export PATH="PATH:~/.composer/vendor/bin"
sudo chmod +x /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer
export PATH="/usr/bin:$PATH"
sudo chmod +x /usr/local/bin/composer
sudo nano /etc/environment
apache2ctl -M
sudo a2enmod rewrite
#### Creating default index.php page for testing installation and configuration
echo "<?php phpinfo(); ?>" > {$webdir}index.php
# Get server IP Address:
ifconfig eth0 | grep inet | awk '{print $2 }'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment