Install Ubuntu 11.04 Nginx based web server with PHP-FPM, MySQL and MongoDB
#!/bin/bash | |
### | |
# | |
# Copyright (c) 2011 Cake Development Corporation (http://cakedc.com) | |
# | |
# Ubuntu 11.04 based web server installation script | |
# Run this by executing the following from a fresh install of Ubuntu 11.04 server: | |
# | |
# bash -c "$(curl -fsSL https://raw.github.com/gist/1264701)" <mysqlPassword> | |
# | |
# Be sure to replace <mysqlPassword> with your intended MySQL Password. | |
# Also, run this as root, unless you enjoy failing. | |
# | |
# Its handy to install 'screen' if you want to ensure your remote connection to | |
# a server doesn't disrupt the installation process. If you want to do this, just | |
# do the following before running the main bash command: | |
# | |
# apt-get install screen -y | |
# screen | |
# | |
# To recover your session if you are disconnected, ssh to your server as root again, | |
# and type: | |
# | |
# screen -x | |
# | |
# Dependencies: | |
# - curl | |
# | |
# Todo: | |
# - SSL Configuration | |
# | |
### | |
EXPECTEDARGS=0 | |
if [ $# -ne $EXPECTEDARGS -o "x$0" == "x" -o $0 == "bash" ]; then | |
echo "Usage:" | |
echo " Parameter 1: MySQL root password" | |
exit 1 | |
fi | |
MYSQLPASS=$1 | |
export DEBIAN_FRONTEND=noninteractive | |
######################################## | |
## System Updates | |
######################################## | |
apt-get update | |
apt-get install \ | |
curl \ | |
aptitude \ | |
-y | |
apt-get upgrade -y | |
######################################## | |
## Tools and Utilities | |
######################################## | |
apt-get install \ | |
git-core \ | |
subversion \ | |
-y | |
######################################## | |
## MySQL | |
######################################## | |
apt-get install \ | |
mysql-client \ | |
mysql-server \ | |
-y | |
mysqladmin -u root password $MYSQLPASS | |
######################################## | |
## PHP | |
######################################## | |
apt-get install \ | |
php5 \ | |
php5-cli \ | |
php5-common \ | |
php5-curl \ | |
php5-ffmpeg \ | |
php5-fpm \ | |
php5-gd \ | |
php5-geoip \ | |
php5-gmp \ | |
php5-imagick \ | |
php5-intl \ | |
php5-json \ | |
php5-mcrypt \ | |
php5-memcached \ | |
php5-mysql \ | |
php-apc \ | |
php-pear \ | |
-y | |
######################################## | |
## Configure PHP-FPM | |
######################################## | |
read -r -d '' FILECONTENT <<'ENDFILECONTENT' | |
[www] | |
listen = 127.0.0.1:9000 | |
listen.allowed_clients = 127.0.0.1 | |
user = www-data | |
group = www-data | |
pm = dynamic | |
pm.max_children = 50 | |
pm.start_servers = 25 | |
pm.min_spare_servers = 5 | |
pm.max_spare_servers = 35 | |
pm.max_requests = 2500 | |
pm.status_path = /php-status | |
slowlog = log/$pool.log.slow | |
chdir = / | |
;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com | |
;php_flag[display_errors] = off | |
;php_admin_value[error_log] = /var/log/fpm-php.www.log | |
;php_admin_flag[log_errors] = on | |
;php_admin_value[memory_limit] = 32M | |
ENDFILECONTENT | |
cp /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/www.conf.original | |
echo "$FILECONTENT" > /etc/php5/fpm/pool.d/www.conf | |
/etc/init.d/php5-fpm restart | |
######################################## | |
## Nginx | |
######################################## | |
apt-get install \ | |
nginx \ | |
-y | |
## CakePHP Configuration | |
read -r -d '' FILECONTENT <<'ENDFILECONTENT' | |
include php.conf; | |
location / { | |
try_files $uri $uri/ /index.php?$uri&$args; | |
expires max; | |
access_log off; | |
} | |
ENDFILECONTENT | |
echo "$FILECONTENT" > /etc/nginx/cakephp.conf | |
## Common Configuration | |
read -r -d '' FILECONTENT <<'ENDFILECONTENT' | |
index index.html; | |
location ~ /\.ht { | |
deny all; | |
} | |
ENDFILECONTENT | |
echo "$FILECONTENT" > /etc/nginx/common.conf | |
## FastCGI Configuration | |
read -r -d '' FILECONTENT <<'ENDFILECONTENT' | |
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | |
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_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 $ssl_session_id; | |
fastcgi_index index.php; | |
# PHP only, required if PHP was built with --enable-force-cgi-redirect | |
fastcgi_param REDIRECT_STATUS 200; | |
fastcgi_connect_timeout 60; | |
fastcgi_read_timeout 180; | |
fastcgi_send_timeout 180; | |
fastcgi_buffer_size 128k; | |
fastcgi_buffers 4 256k; | |
fastcgi_busy_buffers_size 256k; | |
fastcgi_temp_file_write_size 256k; | |
fastcgi_intercept_errors on; | |
ENDFILECONTENT | |
echo "$FILECONTENT" > /etc/nginx/fastcgi_params | |
## Nginx Main Configuration | |
read -r -d '' FILECONTENT <<'ENDFILECONTENT' | |
user www-data; | |
worker_processes 4; | |
pid /var/run/nginx.pid; | |
events { | |
worker_connections 768; | |
} | |
http { | |
sendfile on; | |
tcp_nopush on; | |
tcp_nodelay on; | |
keepalive_timeout 2; | |
types_hash_max_size 2048; | |
include /etc/nginx/mime.types; | |
default_type application/octet-stream; | |
access_log /var/log/nginx/access.log; | |
error_log /var/log/nginx/error.log; | |
gzip on; | |
gzip_disable "msie6"; | |
include /etc/nginx/conf.d/*.conf; | |
include /etc/nginx/sites-enabled/*; | |
} | |
ENDFILECONTENT | |
echo "$FILECONTENT" > /etc/nginx/nginx.conf | |
## PHP Configuration | |
read -r -d '' FILECONTENT <<'ENDFILECONTENT' | |
location ~ \.php$ { | |
fastcgi_pass 127.0.0.1:9000; | |
include fastcgi_params; | |
} | |
index index.php; | |
ENDFILECONTENT | |
echo "$FILECONTENT" > /etc/nginx/php.conf | |
## Default Site Configuration | |
read -r -d '' FILECONTENT <<'ENDFILECONTENT' | |
server { | |
listen 80; ## listen for ipv4; this line is default and implied | |
root /usr/share/nginx/www; | |
index index.html index.htm; | |
server_name localhost; | |
location / { | |
try_files $uri $uri/ /index.html; | |
} | |
location /doc { | |
root /usr/share; | |
autoindex on; | |
allow 127.0.0.1; | |
deny all; | |
} | |
location /images { | |
root /usr/share; | |
autoindex off; | |
} | |
} | |
ENDFILECONTENT | |
echo "$FILECONTENT" > /etc/nginx/sites-available/default | |
## Example CakePHP Site | |
read -r -d '' FILECONTENT <<'ENDFILECONTENT' | |
server { | |
listen 80; | |
server_name cakephpsite.com; | |
root /var/virtual/cakephp-2.0/cakephpsite.com/webroot; | |
access_log /var/log/nginx/cakephpsite.com-access.log; | |
include common.conf; | |
include cakephp.conf; | |
} | |
server { | |
listen 80; | |
server_name www.cakephpsite.com; | |
rewrite ^ http://cakephpsite.com$uri permanent; | |
} | |
ENDFILECONTENT | |
echo "$FILECONTENT" > /etc/nginx/sites-available/cakephp.example | |
## Example Plain PHP Site | |
read -r -d '' FILECONTENT <<'ENDFILECONTENT' | |
server { | |
listen 80; | |
server_name phpsite.com; | |
root /var/virtual/phpsite.com; | |
access_log /var/log/nginx/phpsite.com-access.log; | |
include common.conf; | |
include php.conf; | |
} | |
server { | |
listen 80; | |
server_name www.phpsite.com; | |
rewrite ^ http://phpsite.com$uri permanent; | |
} | |
ENDFILECONTENT | |
echo "$FILECONTENT" > /etc/nginx/sites-available/php.example | |
/etc/init.d/nginx restart | |
######################################## | |
## CakePHP and Sites | |
######################################## | |
mkdir -p /var/virtual | |
mkdir -p /var/www | |
chown www-data:www-data /var/virtual /var/www | |
su www-data -c 'bash -c " | |
cd /var/virtual | |
git clone -b 1.3 git://github.com/cakephp/cakephp.git cakephp-1.3 | |
cp -r cakephp-1.3 cakephp-2.0 | |
cd cakephp-2.0 | |
git checkout -b 2.0 origin/2.0 | |
git branch -d 1.3 | |
cd .. | |
"' |
This comment has been minimized.
This comment has been minimized.
Thanks @shama! I did exactly that :) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
You could do
git clone -b 1.3 git://github.com/cakephp/cakephp.git cakephp-1.3
and skip the next 3 lines when cloning cake. :)