Dovremo cominciare partendo da un'installazione base e minimale di debian.
La premessa è che molti consigliano di compilare manualmente i pacchetti fondamentali come apache e mysql, io non concordo in quanto i pacchetti standard hanno molti accorgimenti di compilazione per le sicurezze.
Ora installeremo i software base da utilizzare:
GESTIONE QUOTE SPAZIO DISCO:
sudo apt-get -y install quota quotatoolDATABASES:
sudo apt-get -y install sqlite3 mysql-client mysql-server postgresql-8.1 postgresql-client-8.1WEBSERVER:
sudo apt-get -y install apache2 openssl php-pear php5 php5-cgi php5-cli php5-common php5-curl php5-gd php5-ldap libgd2-xpm php5-mcrypt php5-mysql php5-odbc php5-imap php5-xmlrpc libapache2-mod-fcgid libapache2-mod-jk libapache2-mod-perl2 libapache2-mod-ruby libapache2-svn libapache2-mod-python libapache2-mod-php5 libapache2-reload-perl ruby rdoc rake rails libfcgi-ruby libpgsql-ruby libmysql-ruby libsqlite3-ruby gem gems phpmyadmin libcrypt-passwdmd5-perl makepasswdInstalleremo anche i moduli pear per php:
sudo pear config-set auto_discover yes
sudo pear config-set preferred_state beta
sudo pear install Archive_Tar Cache Cache_Lite Config Console_Getopt DB Date FSM Fileinfo Gtk_FileDrop Gtk_ScrollingLabel Gtk_Styled HTML_Javascript HTTP HTTP_Request Log MDB2 MDB2_Driver_mysql MIME_Type Mail Net_SMTP Net_Socket Net_URL Numbers_Roman PEAR Payment_Clieop Payment_DTA QA_Peardoc_Coverage Stream_SHM Stream_Var Structures_Graph XML_Parser XML_Query2XML XML_RPC XML_RPC2 XML_RSS XML_SVG XML_Tree XML_Util XML_WddxWEBSERVER JAVA:
(personalmente consiglio di scaricare gli ultimi binari dal sito della sun e di jboss)
Sarà necessaria la jdk:
sudo apt-get -y install sun-java5-jdkpotrete scegliere se installare una tecnologia semplice (tomcat) :
sudo apt-get -y install tomcat5.5 tomcat5.5-admin tomcat5.5-webappsoppure la nuova generazione di J2EE (jbossAS):
sudo apt-get -y install jbossas4 libjboss-j2ee-java libjboss-connector-java libjboss-deployers-java libjboss-deployment-java libjboss-jms-java libjboss-managed-java libjboss-messaging-java libjboss-naming-java libjboss-security-java libjboss-server-java libjboss-system-java libjboss-transaction-java libjtds-java libjboss-webservices-java libehcache-java libajaxtags-java libaopalliance-javaSERVER DI POSTA:
sudo apt-get -y install postfix fetchmail procmail courier-imap courier-imap-ssl courier-pop courier-pop-ssl courier-authdaemon courier-authlib sasl2-bin gsasl libsasl2-modules pyzor spamassassin spamcSERVER LDAP GESTIONE UTENTI:
sudo apt-get -y install ldap-utils phpldapadmin slapdSERVER DNS:
sudo apt-get -y install bind9
sudo echo "nameserver 127.0.0.1" > /etc/resolv.conf
editate il file /etc/bind/named.conf.options rendendolo come segue:
options {SERVER DI COLLEGAMENTO:
directory "/var/cache/bind";
// query-source address * port 53;
forward first;
forwarders {
151.99.0.100;
151.99.125.1;
// 62.211.69.150;
// 212.48.4.15;
};
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
zone "workgroup" in
{
type master;
file "/etc/bind/db.workgroup";
};
zone "wifi" in
{
type master;
file "/etc/bind/db.wifi";
};
sudo apt-get -y install vsftpd subversion sshSERVER ADS CONTROLLO SICUREZZE:
sudo apt-get -y install aide snort snort-rules snort-rules-default denyhostsNEL CASO NON AVESTE IP PUBBLICO REGISTRATEVI A DYNDNS.ORG E:
sudo apt-get -y install ddclientCONFIGURAZIONE:
Ora basterà configurare il tutto.
Di default i pacchetti debian spesso sono già funzionanti appena installati, anche se spesso non avranno una configurazione ottimale.
Per quanto riguarda il databases l'installer installerà senza password di root, dovrete come prima cosa impostarla tramite l'indirizzo web http://localhost/phpmyadmin.
Sconsiglio di abilitare eventuali connessioni esterne al database e di lasciare le autorizzazzioni di default (solo localhost), ma se volete potete abilitare il networking per mysql editando /etc/mysql/my.cfg e commentando (aggiungere un # davanti) o meglio eliminando completamente la riga seguente:
bind-address = 127.0.0.1APACHE:
Per quanto riguarda apache il mio consiglio è di creare un'unico virtualhost dinamico, che quindi direzionerà le richieste http alle varie cartelle in base all'url.
Lascieremo il default per le richieste eventualmente non riconosciute, e ne creremo uno aggiuntivo editate /etc/apache2/sites-avaiable/default-php (createlo) ed inseritevi:
NameVirtualHost *:80Ora cancellate tutto all'interno della directory /var/www, poi ammettendo di voler creare un virtualhost per il dominio example.com, basterà creare la cartella in modo opportuno:
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog /var/www/%0/logs/access_log combined
ServerAdmin webmaster@%0
VirtualDocumentRoot /var/www/%0
VirtualScriptAlias /var/www/%0/cgi-bin
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
allow from all
Order Allow,Deny
RewriteEngine On
RewriteMap lowercase int:tolower
RewriteCond %{REQUEST_URI} !^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^www\.[a-z-]+\.isp\.com\.it\.net\.eu\.biz\.info$
RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]
RewriteRule ^www\.([a-z-]+)\.isp\.com/(.*) /var/www/$1/$2
sudo mkdir /var/www/example.orgCosì facendo NON avete alcun bisogno di riavviare apache per creare nuovi virtualhost, riducendo al minimo i disguidi tecnici ed eventuali down.
sudo chown -R www-data: /var/www/example.org
Ora aggiungiamo un'altro virtualhost dinamico per i siti ROR
Create un nuovo sito dinamico:
sudo mkdir /var/railsora editate /etc/apache2/sites-avaiable/default-rails rendendolo come segue:
sudo chown -R www-data: /var/rails
sudo cp /etc/apache2/sites-avaiable/default /etc/apache2/sites-avaiable/default-rails
NameVirtualHost *:80Controllate anche il file /etc/apache2/mods-enabled/fcgid.conf, cancellate tutto (o createlo) ed inseriteci:
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog /var/rails/%0/logs/access_log combined
ServerAdmin webmaster@%0
VirtualDocumentRoot /var/rails/%0/application/public
VirtualScriptAlias /var/rails/%0/cgi-bin
AddHandler fcgid-script .fcgi
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI
AllowOverride all
Order allow,deny
Allow from all
RewriteEngine On
RewriteBase /
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
allow from allOrder Allow,Deny
RewriteEngine On
RewriteMap lowercase int:tolower
RewriteCond %{REQUEST_URI} !^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^www\.[a-z-]+\.isp\.com\.it\.net\.eu\.biz\.info$
RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]
RewriteRule ^www\.([a-z-]+)\.isp\.com/(.*) /var/www/$1/$2
Ma ricordatevi che una volta completate le fasi di test e sviluppo dell'aplicatiovo ruby on rails dovrete sostituire :AddHandler fcgid-script .fcgi fcg fcgi fpl
DefaultInitEnv RAILS_ENV development
IdleTimeout 600
ProcessLifeTime 3600
MaxProcessCount 8
DefaultMinClassProcessCount 3
DefaultMaxClassProcessCount 3
IPCConnectTimeout 8
IPCCommTimeout 48
DefaultInitEnv RAILS_ENV developmentCon
DefaultInitEnv RAILS_ENV productionE riavviare apache.
Ora potrete creare l'applicazione rails:
cd /var/railsCome ultima cosa prima di riavviare (quindi per la vostra ultima volta) apache2, dovrete abilitare i moduli necessari e i siti creati:
sudo rails example.org
sudo chown -R www-data: example.org
sudo a2ensite default-railsOra riavviate apache:
sudo a2ensite default-php
sudo a2enmod proxy_http rewrite proxy setenvif alias cache autoindex dav deflate env fcgid include jk log_forensic mime_magic perl php5 proxy proxy_ajp ssl vhost_alias
sudo /etc/init.d/apache2 restartE verificate il funzionamento dell'apache e dei moduli alle url http://localhost/server-status e http://localhost/server-info, le disattiveremo in seguito (vedi PULIZIA).
Per limitare l'accesso via ssh solo ad un'utente (che potrà usare il comando su per diventare root) dovrete aggiungere al file /etc/ssh/sshd_config:
AllowUsers nomeutente1 nomeutente2Ora per non rischiare di essere auto-bannati da denyhosts inserite il vostro ip del client in /etc/hosts.allow
Per il server FTP vi basterà editare /etc/vsftpd.conf, cancellare tutto ed inserire:
listen=YESPoi per abilitare un utente all'uso ftp dovrete inserirlo nel file /etc/vsftpd.chroot_list.
anonymous_enable=YES
local_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
ftpd_banner=Welcome to FTP service.
chroot_local_user=YES
chroot_list_file=/etc/vsftpd.chroot_list
ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
Per il server di posta dovrete aggiungere in fondo al file /etc/postfix/main.cf :
home_mailbox = Maildir/E per creare le caselle postali basterà lanciare i seguenti comandi per ogni utente:
su - nomeutenteOra create il file /etc/fetchmailrc come segue:
maildirmake.courier Maildir
exit
set daemon 300Gli ads non hanno bisogno di configurazioni particolari.
set no bouncemail
set no syslog
set logfile /var/log/fetchmail.log
defaults:
antispam -1
batchlimit 100
## Caselle di posta
#poll mail.host.xx with protocol pop3 user USERNAME@example.org there is #NOMEUTENTELOCALE here with password 'POPPASSWORD' options keep;
Abilitiamo ora le quote disco, che ci serviranno per poter ridimensionare le dimensioni delle cartelle dei siti (come se fossero hard disk fisici) senza bisogno di creare dei down.
Modificate /etc/fstab come indicato (le parti in rosso non vanno modificate e possono dipendere dall'installazione eseguita):
/dev/sda1 / ext3 defaults,usrquota,grpquota 0 1Creo i files che conterranno le indicazioni quote disco:
sudo touch /aquota.userRimontiamo ora i filesystem con le nuove impostazioni:
sudo touch /aquota.group
sudo chmod 600 /aquota.user
sudo chmod 600 /aquota.group
sudo mount -o remount /dev/sda1Editiamo /etc/mtab come segue (stessa modifica dell fstab):
/dev/sda1 / ext3 defaults,usrquota,grpquota 0 1Editiamo /etc/modules per caricare il modulo quota all'avvio:
sudo echo quota_v2 >> /etc/modulesControlliamo il tutto con l'apposto tool del pacchetto installato:
sudo quotacheck -vgum /Se tutto è ok ora potrete impostare la dimensione come per le quote di windows.
PULIZIA:
Terminata la configurazione vi consiglio di rimuovere tutto il non necessario es:
sudo apt-get --purge remove sudo phpmyadminRiavviate il tutto e dovreste avere un ottimo server web adatto a molti siti web.
sudo apt-get clean
sudo a2dismod status info
sudo a2dissite default
Ultima cosa può essere creare alcuni script bash per la creazione automatica di tutto che potrete andare a richiamare con funzioni php come "exec".
Create quindi la cartella /usr/local/scripts
sudo mkdir /usr/local/scriptsed ora al suo interno potete inserire gli script da richiamare, una linea guida sugli script da creare potrebbe essere:
1)
Generazione Password utente:
makepasswd > /usr/local/scripts/password_utente-`date +%Y%m%d`Creazione databases
export PASSWORD_UTENTE="$(cat /usr/local/scripts/password_utente-`date +%Y%m%d`)"
echo "CREATE DATABASE `date +%Y%m%d`-nome_utente" | mysql -u root -ppasswordCreazione utente mysql
echo "GRANT ALL PRIVILEGES ON `date +%Y%m%d`-nome_utente.* TO ‘nome_utente’@'%’ IDENTIFIED BY ‘$PASSWORD_UTENTE’ WITH GRANT OPTION;" | mysql -u root -ppasswordCreazione cartella sito php
sudo mkdir /var/www/nomedominio.estensioneCreazione cartella sito rails
sudo mkdir /var/rails/nomedominio.estensioneCreazione utente fisico (con la homecorrispondente alla cartella del sito)
cd /var/rails/nomedominio.estensione
sudo rails application
sudo useradd -o -c clientevirtual -d /var/www/nomedominio.estensione -g www-data -p $PASSWORD_UTENTE -u 33 nome_utente2)
Impostazione permessi home
sudo chmod -R 644 /var/www/nomedominio.estensioneImpostazioni permessi database
sudo chown -R nomeutente /var/www/nomedominio.estensione
echo "FLUSH PRIVILEGIES;" | mysql -u root -ppassword3)
Come altri passaggi si potrebbe fare un script che in base alla scelta del cliente lasci la home vuota oppure vi decomprima all'interno un cms opensource.
Consiglio i seguenti pacchetti da poter fornire ai propri clienti
Joomla10 (cms) , Joomla15 (cms) , Magento (e-commerce) , Drupal (cms) , WordPress (blog) , SMF (forum)Posso segnalarvi anche "redhat el5 ES" per sviluppare una piattaforma web, in quanto molto stabile ed ora con una gestione di pacchetti più vicina a debian che a rpm tramite YUM. Ottima se cercate supporto per qualche applicativo proprietario.
Ciao A tutti
Swipon