Skip to content

Instantly share code, notes, and snippets.

@stenin-nikita
Last active August 1, 2017 08:14
Show Gist options
  • Save stenin-nikita/069e653666be5612aec509011c2af498 to your computer and use it in GitHub Desktop.
Save stenin-nikita/069e653666be5612aec509011c2af498 to your computer and use it in GitHub Desktop.
Install packages for Debian 8
#!/usr/bin/env bash
# run command:
# wget -qO- https://gist.githubusercontent.com/stenin-nikita/069e653666be5612aec509011c2af498/raw/install-packages.sh | DB_ROOT_PASSWORD="secret" DB_USER_PASSWORD="secret" bash
export DEBIAN_FRONTEND=noninteractive
function print_green {
echo -e "\e[32m${1}\e[0m"
}
function reload-env {
source /etc/profile
source ~/.profile
}
function apt-update {
print_green "Update Package List"
sudo aptitude update
}
function apt-upgrade {
print_green "Update System Packages"
sudo aptitude -y upgrade
}
function init-environment {
print_green "Init Environment"
sudo sed -i 's/PATH=".*"/PATH="\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin:\/usr\/games:\/usr\/local\/games"/' /etc/profile
reload-env
}
function init-base-package {
print_green "Install curl, git, unzip, supervisor"
sudo aptitude -y install curl git unzip supervisor
sudo systemctl enable supervisor.service
sudo service supervisor start
}
function init-centrifugo {
print_green "Install centrifugo"
curl -s https://packagecloud.io/install/repositories/FZambia/centrifugo/script.deb.sh | sudo bash
sudo aptitude -y install centrifugo
}
function init-node {
print_green "Install node"
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo aptitude install -y nodejs
}
function init-nginx-redis {
print_green "Install nginx & redis"
sudo sh -c 'echo "deb http://ftp.ru.debian.org/debian/ jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list'
sudo sh -c 'echo "deb-src http://ftp.ru.debian.org/debian/ jessie-backports main" >> /etc/apt/sources.list.d/jessie-backports.list'
sudo aptitude update
sudo aptitude -y install -t jessie-backports nginx redis-server
sudo rm /etc/nginx/sites-enabled/default
sudo rm /etc/nginx/sites-available/default
sudo service nginx restart
print_green "Copy fastcgi_params to Nginx because they broke it on the PPA"
sudo sh -c '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'
}
function init-php {
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo aptitude update
print_green "Install PHP 7.1"
sudo aptitude -y install php7.1-fpm php7.1-cli php7.1-dev \
php7.1-bz2 php7.1-mcrypt php7.1-json \
php7.1-pgsql php7.1-sqlite3 php7.1-gd \
php7.1-curl php7.1-imap php7.1-mysql php7.1-mbstring \
php7.1-xml php7.1-zip php7.1-bcmath php7.1-soap \
php7.1-intl php7.1-readline \
php7.1-common php-redis php-ssh2 php-imagick php-geoip php-memcached
print_green "Install PHP 7.0"
sudo aptitude -y install php7.0-fpm php7.0-cli php7.0-dev \
php7.0-bz2 php7.0-mcrypt php7.0-json \
php7.0-pgsql php7.0-sqlite3 php7.0-gd \
php7.0-curl php7.0-imap php7.0-mysql php7.0-mbstring \
php7.0-xml php7.0-zip php7.0-bcmath php7.0-soap \
php7.0-intl php7.0-readline
print_green "Install PHP 5.6"
sudo aptitude -y install php5.6-fpm php5.6-cli php5.6-dev \
php5.6-bz2 php5.6-mcrypt php5.6-json \
php5.6-pgsql php5.6-sqlite3 php5.6-gd \
php5.6-curl php5.6-imap php5.6-mysql php5.6-mbstring \
php5.6-xml php5.6-zip php5.6-bcmath php5.6-soap \
php5.6-intl php5.6-readline
print_green "Set Some PHP CLI Settings"
sudo sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/7.1/cli/php.ini
sudo sed -i "s/;date.timezone.*/date.timezone = Asia\/Yekaterinburg/" /etc/php/7.1/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 = Asia\/Yekaterinburg/" /etc/php/7.0/cli/php.ini
sudo sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/5.6/cli/php.ini
sudo sed -i "s/;date.timezone.*/date.timezone = Asia\/Yekaterinburg/" /etc/php/5.6/cli/php.ini
sudo sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php/7.1/fpm/php.ini
sudo sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/7.1/fpm/php.ini
sudo sed -i "s/upload_max_filesize = .*/upload_max_filesize = 100M/" /etc/php/7.1/fpm/php.ini
sudo sed -i "s/post_max_size = .*/post_max_size = 100M/" /etc/php/7.1/fpm/php.ini
sudo sed -i "s/;date.timezone.*/date.timezone = Asia\/Yekaterinburg/" /etc/php/7.1/fpm/php.ini
sudo sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/upload_max_filesize = .*/upload_max_filesize = 100M/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/post_max_size = .*/post_max_size = 100M/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/;date.timezone.*/date.timezone = Asia\/Yekaterinburg/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php/5.6/fpm/php.ini
sudo sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/5.6/fpm/php.ini
sudo sed -i "s/upload_max_filesize = .*/upload_max_filesize = 100M/" /etc/php/5.6/fpm/php.ini
sudo sed -i "s/post_max_size = .*/post_max_size = 100M/" /etc/php/5.6/fpm/php.ini
sudo sed -i "s/;date.timezone.*/date.timezone = Asia\/Yekaterinburg/" /etc/php/5.6/fpm/php.ini
}
function init-composer {
print_green "Install composer"
EXPECTED_SIGNATURE=$(wget -q -O - https://composer.github.io/installer.sig)
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
ACTUAL_SIGNATURE=$(php -r "echo hash_file('SHA384', 'composer-setup.php');")
if [ "$EXPECTED_SIGNATURE" != "$ACTUAL_SIGNATURE" ]
then
echo 'ERROR: Invalid installer signature'
rm composer-setup.php
fi
php composer-setup.php --quiet
rm composer-setup.php
sudo mv composer.phar /usr/local/bin/composer
LINE="PATH=\"$(sudo su - $USER -c 'composer config -g home 2>/dev/null')/vendor/bin:\$PATH\""
grep -q -F "$LINE" /home/$USER/.profile || echo "\n$LINE\n" >> /home/$USER/.profile
printf "\n$LINE\n"
}
function configure-nginx-php {
print_green "Set The Nginx & PHP-FPM User"
sudo sed -i "s/user www-data;/user $USER;/" /etc/nginx/nginx.conf
sudo sed -i "s/# server_names_hash_bucket_size.*/server_names_hash_bucket_size 64;/" /etc/nginx/nginx.conf
sudo sed -i "s/user = www-data/user = $USER/" /etc/php/7.1/fpm/pool.d/www.conf
sudo sed -i "s/group = www-data/group = $USER/" /etc/php/7.1/fpm/pool.d/www.conf
sudo sed -i "s/listen\.owner.*/listen.owner = $USER/" /etc/php/7.1/fpm/pool.d/www.conf
sudo sed -i "s/listen\.group.*/listen.group = $USER/" /etc/php/7.1/fpm/pool.d/www.conf
sudo sed -i "s/;listen\.mode.*/listen.mode = 0666/" /etc/php/7.1/fpm/pool.d/www.conf
sudo sed -i "s/user = www-data/user = $USER/" /etc/php/7.0/fpm/pool.d/www.conf
sudo sed -i "s/group = www-data/group = $USER/" /etc/php/7.0/fpm/pool.d/www.conf
sudo sed -i "s/listen\.owner.*/listen.owner = $USER/" /etc/php/7.0/fpm/pool.d/www.conf
sudo sed -i "s/listen\.group.*/listen.group = $USER/" /etc/php/7.0/fpm/pool.d/www.conf
sudo sed -i "s/;listen\.mode.*/listen.mode = 0666/" /etc/php/7.0/fpm/pool.d/www.conf
sudo sed -i "s/user = www-data/user = $USER/" /etc/php/5.6/fpm/pool.d/www.conf
sudo sed -i "s/group = www-data/group = $USER/" /etc/php/5.6/fpm/pool.d/www.conf
sudo sed -i "s/listen\.owner.*/listen.owner = $USER/" /etc/php/5.6/fpm/pool.d/www.conf
sudo sed -i "s/listen\.group.*/listen.group = $USER/" /etc/php/5.6/fpm/pool.d/www.conf
sudo sed -i "s/;listen\.mode.*/listen.mode = 0666/" /etc/php/5.6/fpm/pool.d/www.conf
sudo service nginx restart
sudo service php7.1-fpm restart
sudo service php7.0-fpm restart
sudo service php5.6-fpm restart
print_green "Add User To WWW-Data"
sudo usermod -a -G www-data $USER
id $USER
groups $USER
}
function init-database {
print_green "Install SQLite"
sudo aptitude install -y sqlite3 libsqlite3-dev
print_green "Install MySQL"
MYSQL_RELEASE_PACKAGE_VERSION=mysql-apt-config_0.8.7-1_all.deb
cd /tmp
wget http://dev.mysql.com/get/${MYSQL_RELEASE_PACKAGE_VERSION}
sudo debconf-set-selections <<< "mysql-apt-config mysql-apt-config/select-product select Ok"
sudo debconf-set-selections <<< "mysql-apt-config mysql-apt-config/select-server select mysql-5.7"
sudo debconf-set-selections <<< "mysql-server mysql-server/root_password password $DB_ROOT_PASSWORD"
sudo debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $DB_ROOT_PASSWORD"
sudo debconf-set-selections <<< "mysql-community-server mysql-community-server/root-pass password $DB_ROOT_PASSWORD"
sudo debconf-set-selections <<< "mysql-community-server mysql-community-server/re-root-pass password $DB_ROOT_PASSWORD"
sudo DEBIAN_FRONTEND=noninteractive dpkg -i $MYSQL_RELEASE_PACKAGE_VERSION
sudo apt-get update
sudo apt-get -y install mysql-client mysql-server
print_green "Configure MySQL Password Lifetime"
sudo sh -c 'echo "default_password_lifetime = 0" >> /etc/mysql/mysql.conf.d/mysqld.cnf'
print_green "Configure MySQL Remote Access"
sudo sed -i '/^bind-address/s/bind-address.*=.*/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
mysql --user="root" --password="$DB_ROOT_PASSWORD" -e "GRANT ALL ON *.* TO root@'0.0.0.0' IDENTIFIED BY '$DB_ROOT_PASSWORD' WITH GRANT OPTION;"
sudo service mysql restart
mysql --user="root" --password="$DB_ROOT_PASSWORD" -e "CREATE USER '$DB_USER'@'0.0.0.0' IDENTIFIED BY '$DB_USER_PASSWORD';"
mysql --user="root" --password="$DB_ROOT_PASSWORD" -e "GRANT ALL ON *.* TO '$DB_USER'@'0.0.0.0' IDENTIFIED BY '$DB_USER_PASSWORD' WITH GRANT OPTION;"
mysql --user="root" --password="$DB_ROOT_PASSWORD" -e "GRANT ALL ON *.* TO '$DB_USER'@'%' IDENTIFIED BY '$DB_USER_PASSWORD' WITH GRANT OPTION;"
mysql --user="root" --password="$DB_ROOT_PASSWORD" -e "FLUSH PRIVILEGES;"
mysql --user="root" --password="$DB_ROOT_PASSWORD" -e "CREATE DATABASE $DB_USER character set UTF8mb4 collate utf8mb4_bin;"
sudo service mysql restart
print_green "Add Timezone Support To MySQL"
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql --user=root --password=$DB_ROOT_PASSWORD mysql
print_green "Install Postgres"
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -sc)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo aptitude update
sudo aptitude -y install postgresql-9.5
sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /etc/postgresql/9.5/main/postgresql.conf
sudo sh -c 'echo "host all all 0.0.0.0/0 md5" | tee -a /etc/postgresql/9.5/main/pg_hba.conf'
sudo -u postgres psql -c "CREATE ROLE $DB_USER LOGIN UNENCRYPTED PASSWORD '$DB_USER_PASSWORD' SUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;"
sudo -u postgres /usr/bin/createdb --echo --owner=$DB_USER $DB_USER
sudo service postgresql restart
}
if [ -z "${DB_ROOT_PASSWORD-}" ]; then
DB_ROOT_PASSWORD="secret"
fi
if [ -z "${DB_USER-}" ]; then
DB_USER=$USER
fi
if [ -z "${DB_USER_PASSWORD-}" ]; then
DB_USER_PASSWORD="secret"
fi
print_green "db root password: $DB_ROOT_PASSWORD"
print_green "db user name: $DB_USER"
print_green "db user password: $DB_USER_PASSWORD"
init-environment
apt-update
apt-upgrade
init-base-package
init-centrifugo
init-node
init-nginx-redis
init-php
init-composer
configure-nginx-php
init-database
sudo apt-get -y autoremove
sudo apt-get -y clean
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment