Skip to content

Instantly share code, notes, and snippets.

@hariadi
Last active June 24, 2016 03:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hariadi/67783ed47eec58e1ee11bdbba06c11a9 to your computer and use it in GitHub Desktop.
Save hariadi/67783ed47eec58e1ee11bdbba06c11a9 to your computer and use it in GitHub Desktop.
Setup Ubuntu Server 14.04 - PHP7, NGINX, MYSQL, NODEJS, REDIS, MEMCACHED, COMPOSER
#!/usr/bin/env bash
ENV="production"
USER="hariadi"
SQLUSER="hariadi"
SQLPASS="rahsia"
HHVM=true
LANG=("ms_MY")
POSTGRESQL=false
[ ! -z "$1" ] && ENV=$1
[ ! -z "$2" ] && USER=$2
[ ! -z "$3" ] && HHVM=$3
[ ! -z "$4" ] && SQLUSER=$4
[ ! -z "$5" ] && SQLPASS=$5
[ ! -z "$6" ] && LANG=$6
[ ! -z "$7" ] && POSTGRESQL=$7
export DEBIAN_FRONTEND=noninteractive
# Update Package List
apt-get update
# Update System Packages
apt-get -y upgrade
# Force Locale
echo "LC_ALL=en_US.UTF-8" >> /etc/default/locale
for i in "${LANG[@]}"
do
locale-gen $i.UTF-8
done
# Install Some PPAs
apt-get install -y software-properties-common curl
apt-add-repository ppa:nginx/development -y
apt-add-repository ppa:chris-lea/redis-server -y
apt-add-repository ppa:ondrej/php -y
# gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 5072E1F5
sh -c 'echo "deb http://repo.mysql.com/apt/ubuntu/ trusty mysql-5.7" >> /etc/apt/sources.list.d/mysql.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" >> /etc/apt/sources.list.d/postgresql.list'
curl -s https://packagecloud.io/gpg.key | apt-key add -
echo "deb http://packages.blackfire.io/debian any main" | tee /etc/apt/sources.list.d/blackfire.list
curl --silent --location https://deb.nodesource.com/setup_6.x | bash -
# Update Package Lists
apt-get update
# Install Some Basic Packages
apt-get install -y build-essential dos2unix gcc git libmcrypt4 libpcre3-dev \
make python2.7-dev python-pip re2c supervisor unattended-upgrades whois vim libnotify-bin
# Set My Timezone
ln -sf /usr/share/zoneinfo/UTC /etc/localtime
# Install PHP Stuffs
# -qq implies -y --force-yes
apt-get install -qq php7.0-cli php7.0-dev \
php-pgsql php-sqlite3 php-gd php-apcu \
php-curl php7.0-mcrypt \
php-imap php-mysql php-memcached php7.0-readline php-xdebug \
php-mbstring php-xml php7.0-zip php7.0-intl php7.0-bcmath php-soap
# Install Composer
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
# Add Composer Global Bin To Path
printf "\nPATH=\"$(sudo su - USER -c 'composer config -g home 2>/dev/null')/vendor/bin:\$PATH\"\n" | tee -a /home/$USER/.profile
# Set Some PHP CLI Settings
#DEV sudo sed -i "s/error_reporting = .*/error_reporting = E_ALL/" /etc/php/7.0/cli/php.ini
#DEV sudo sed -i "s/display_errors = .*/display_errors = On/" /etc/php/7.0/cli/php.ini
sudo sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/7.0/cli/php.ini
sudo sed -i "s/;date.timezone.*/date.timezone = UTC/" /etc/php/7.0/cli/php.ini
# Install Nginx & PHP-FPM
apt-get install -qq nginx php7.0-fpm
rm /etc/nginx/sites-enabled/default
rm /etc/nginx/sites-available/default
service nginx restart
# Add The HHVM Key & Repository
if [[ $HHVM == "true" ]]; then
echo ">>> Installing HHVM"
wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | apt-key add -
echo deb http://dl.hhvm.com/ubuntu trusty main | tee /etc/apt/sources.list.d/hhvm.list
apt-get update
apt-get install -y hhvm
# Configure HHVM To Run As Homestead
service hhvm stop
sed -i 's/#RUN_AS_USER="www-data"/RUN_AS_USER="$USER"/' /etc/default/hhvm
service hhvm start
# Start HHVM On System Start
update-rc.d hhvm defaults
fi
# Setup Some PHP-FPM Options
echo "xdebug.remote_enable = 1" >> /etc/php/7.0/fpm/conf.d/20-xdebug.ini
echo "xdebug.remote_connect_back = 1" >> /etc/php/7.0/fpm/conf.d/20-xdebug.ini
echo "xdebug.remote_port = 9000" >> /etc/php/7.0/fpm/conf.d/20-xdebug.ini
echo "xdebug.max_nesting_level = 512" >> /etc/php/7.0/fpm/conf.d/20-xdebug.ini
sed -i "s/error_reporting = .*/error_reporting = E_ALL/" /etc/php/7.0/fpm/php.ini
sed -i "s/display_errors = .*/display_errors = On/" /etc/php/7.0/fpm/php.ini
sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php/7.0/fpm/php.ini
sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/7.0/fpm/php.ini
sed -i "s/upload_max_filesize = .*/upload_max_filesize = 100M/" /etc/php/7.0/fpm/php.ini
sed -i "s/post_max_size = .*/post_max_size = 100M/" /etc/php/7.0/fpm/php.ini
sed -i "s/;date.timezone.*/date.timezone = UTC/" /etc/php/7.0/fpm/php.ini
# Disable XDebug On The CLI
sudo phpdismod -s cli xdebug
# Copy fastcgi_params to Nginx because they broke it on the PPA
cat > /etc/nginx/fastcgi_params << EOF
fastcgi_param QUERY_STRING \$query_string;
fastcgi_param REQUEST_METHOD \$request_method;
fastcgi_param CONTENT_TYPE \$content_type;
fastcgi_param CONTENT_LENGTH \$content_length;
fastcgi_param SCRIPT_FILENAME \$request_filename;
fastcgi_param SCRIPT_NAME \$fastcgi_script_name;
fastcgi_param REQUEST_URI \$request_uri;
fastcgi_param DOCUMENT_URI \$document_uri;
fastcgi_param DOCUMENT_ROOT \$document_root;
fastcgi_param SERVER_PROTOCOL \$server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/\$nginx_version;
fastcgi_param REMOTE_ADDR \$remote_addr;
fastcgi_param REMOTE_PORT \$remote_port;
fastcgi_param SERVER_ADDR \$server_addr;
fastcgi_param SERVER_PORT \$server_port;
fastcgi_param SERVER_NAME \$server_name;
fastcgi_param HTTPS \$https if_not_empty;
fastcgi_param REDIRECT_STATUS 200;
EOF
# Set The Nginx & PHP-FPM User
sed -i "s/user www-data;/user $USER;/" /etc/nginx/nginx.conf
sed -i "s/# server_names_hash_bucket_size.*/server_names_hash_bucket_size 64;/" /etc/nginx/nginx.conf
sed -i "s/user = www-data/user = $USER/" /etc/php/7.0/fpm/pool.d/www.conf
sed -i "s/group = www-data/group = $USER/" /etc/php/7.0/fpm/pool.d/www.conf
sed -i "s/listen\.owner.*/listen.owner = $USER/" /etc/php/7.0/fpm/pool.d/www.conf
sed -i "s/listen\.group.*/listen.group = $USER/" /etc/php/7.0/fpm/pool.d/www.conf
sed -i "s/;listen\.mode.*/listen.mode = 0666/" /etc/php/7.0/fpm/pool.d/www.conf
service nginx restart
service php7.0-fpm restart
# Add $USER User To WWW-Data
usermod -a -G www-data $USER
id $USER
groups $USER
# Install Node
apt-get install -y nodejs
/usr/bin/npm install -g gulp
/usr/bin/npm install -g bower
# Install SQLite
apt-get install -y sqlite3 libsqlite3-dev
# Install MySQL
debconf-set-selections <<< "mysql-community-server mysql-community-server/data-dir select ''"
debconf-set-selections <<< "mysql-community-server mysql-community-server/root-pass password $SQLPASS"
debconf-set-selections <<< "mysql-community-server mysql-community-server/re-root-pass password $SQLPASS"
apt-get install -y mysql-server
# Configure MySQL Password Lifetime
echo "default_password_lifetime = 0" >> /etc/mysql/my.cnf
# Configure MySQL Remote Access
sed -i '/^bind-address/s/bind-address.*=.*/bind-address = 0.0.0.0/' /etc/mysql/my.cnf
mysql --user="root" --password="$SQLPASS" -e "GRANT ALL ON *.* TO root@'0.0.0.0' IDENTIFIED BY '$SQLPASS' WITH GRANT OPTION;"
service mysql restart
mysql --user="root" --password="$SQLPASS" -e "CREATE USER '$SQLUSER'@'0.0.0.0' IDENTIFIED BY '$SQLPASS';"
mysql --user="root" --password="$SQLPASS" -e "GRANT ALL ON *.* TO '$SQLUSER'@'0.0.0.0' IDENTIFIED BY '$SQLPASS' WITH GRANT OPTION;"
mysql --user="root" --password="$SQLPASS" -e "GRANT ALL ON *.* TO '$SQLUSER'@'%' IDENTIFIED BY '$SQLPASS' WITH GRANT OPTION;"
mysql --user="root" --password="$SQLPASS" -e "FLUSH PRIVILEGES;"
mysql --user="root" --password="$SQLPASS" -e "CREATE DATABASE $SQLUSER;"
service mysql restart
# Add Timezone Support To MySQL
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql --user=root --password=$SQLPASS mysql
# Install Postgres
if [[ $POSTGRESQL == "true" ]]; then
apt-get install -y postgresql-9.5 postgresql-contrib-9.5
# Configure Postgres Remote Access
sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /etc/postgresql/9.5/main/postgresql.conf
echo "host all all 10.0.2.2/32 md5" | tee -a /etc/postgresql/9.5/main/pg_hba.conf
sudo -u postgres psql -c "CREATE ROLE $SQLUSER LOGIN UNENCRYPTED PASSWORD '$SQLPASS' SUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;"
sudo -u postgres /usr/bin/createdb --echo --owner=$SQLUSER $SQLUSER
service postgresql restart
fi
# Install A Few Other Things
apt-get install -y memcached
# Enable Swap Memory
/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1
# Minimize The Disk Image
echo "Minimizing disk image..."
dd if=/dev/zero of=/EMPTY bs=1M
rm -f /EMPTY
sync
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment