Debian LAMP + nginx installation for high-loaded webservers
All below steps have been done on the server which have the latest version of Debian pre-installed. I will setup a standard LAMP installation for a web-server and will install and configure nginx to serve static content for better performance.
Set the host name:
echo "www" > /etc/hostname
Alter /etc/hosts with new hostname (replace x.x.x.x with your ip address):
x.x.x.x www.sysadmin.md sysadmin.md www
Install utilities:
apt-get install tcpdump links htop nmap mc screen sysv-rc-conf sudo
Tune the server by editing /etc/network/options. Here's an example /etc/network/options file:
spoofprotect=yes syncookies=yes
Launch this tool and disable unneded services:
sysv-rc-conf
Edit /etc/inittab. Find the section of the file that contains the following:
1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3 4:23:respawn:/sbin/getty 38400 tty4 5:23:respawn:/sbin/getty 38400 tty5 6:23:respawn:/sbin/getty 38400 tty6
Make the following changes:
1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3 #4:23:respawn:/sbin/getty 38400 tty4 #5:23:respawn:/sbin/getty 38400 tty5 #6:23:respawn:/sbin/getty 38400 tty6
The above changes will insure that this copy of Linux only creates three terminals on startup
Before proceeding to install, update the necessary packages with Debian with this command:
apt-get update apt-get upgrade
Install Apache + PHP:
apt-get install apache2 php5 libapache2-mod-php5
Configure Apache. Edit /etc/apache2/apache2.conf and alter the following variables to match like this:
ServerSignature Off ServerTokens Prod
Prepare webserver folders:
mkdir -p /home/sysadmin.md/{public_html,logs} chown -R www-data:www-data /home/sysadmin.md
Create a file /etc/apache2/sites-available/sysadmin.md to match like this:
<VirtualHost *> ServerAdmin webmaster@sysadmin.md ServerName www.sysadmin.md ServerAlias sysadmin.md DocumentRoot /home/sysadmin.md/public_html Options -Indexes FollowSymLinks AllowOverride None Order allow,deny allow from all ErrorLog /home/sysadmin.md/logs/sysadmin.md-error_log CustomLog /home/sysadmin.md/logs/sysadmin.md-access_log common </VirtualHost>
Test the config and enable the site:
apache2ctl configtest a2ensite sysadmin.md
Alter /etc/apache2/ports.conf:
Listen 127.0.0.1:80
Restart the Apache and test if it is running on 127.0.0.1:80
/etc/init.d/apache2 restart netstat -nalp
Install nginx:
apt-get install nginx
Move default config to another location:
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.default
Create a new one to match like this (replace x.x.x.x with your IP address)
user www-data; worker_processes 2; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 8192; } http { include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; tcp_nopush on; keepalive_timeout 65; tcp_nodelay on; gzip on; server { listen x.x.x.x:80; server_name sysadmin.md www.sysadmin.md; access_log /home/sysadmin.md/logs/nginx.sysadmin.md.access.log; location / { proxy_pass http://127.0.0.1:80/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 16k; proxy_buffers 32 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 256M; } # for static files location /s/ { root /home/sysadmin.md/; access_log /home/sysadmin.md/logs/nginx.static.sysadmin.md.access.log; } # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/nginx-default; } } }
Install MySQL Database Server + phpMyadmin:
apt-get install mysql-server mysql-client-5.0 php5-mysql phpmyadmin
Configure it:
mysql -u root mysql> USE mysql; mysql> UPDATE user SET Password=PASSWORD('new-password') WHERE user='root'; mysql> FLUSH PRIVILEGES;
Set up phpMyAdmin - include the following line to /etc/apache2/apache2.conf:
Include /etc/phpmyadmin/apache.conf
Now restart Apache:
/etc/init.d/apache2 restart
And reboot:
reboot