isp-tools

git clone http://git.code.weiherhei.de/isp-tools.git
Log | Files | Refs | README

update_httpd (5682B)


      1 #!/bin/bash
      2 
      3 # Erzeugt die Virtual-Host-Konfigurationen fuer den Apache-Webserver.
      4 #
      5 
      6 
      7 # Konfiguration:
      8 
      9 CONFIG=/etc/default/ispconfig
     10 
     11 if [ ! -f $CONFIG  ]; then
     12     echo "File $CONFIG not found"
     13     exit 4;
     14 fi
     15 
     16 source $CONFIG
     17 
     18 
     19 if [ ! -d $HTTPD_VHOST_DIR  ]; then
     20     echo "Directory $HTTPD_VHOST_DIR not found"
     21     exit 4;
     22 fi
     23 
     24 # Ggf. Mercurial-Repository anlegen.
     25 if [ ! -d $HTTPD_VHOST_DIR/.hg ]; then
     26     hg -R $HTTPD_VHOST_DIR init
     27 fi
     28 
     29 
     30 function sql {
     31     sql=$1
     32     mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -se "$sql" $MYSQL_DATABASE
     33 }
     34 
     35 
     36 sql "SELECT domain,active,UNIX_TIMESTAMP(modified),x_ssl,x_db,x_php FROM domain"|while read domain active modified ssl db php; do
     37 
     38     CONFFILE=$HTTPD_VHOST_DIR/$domain
     39 
     40     if [ ! -f $CONFFILE ]; then
     41 	last_file_modified=0 # Datei existiert noch nicht.
     42     else
     43 	last_file_modified=`stat --format %Y $CONFFILE`
     44     fi
     45 
     46     if	[ "$modified" -gt "$last_file_modified" ]; then
     47 
     48         echo "Aktualisiere $domain"
     49 	cat > $CONFFILE <<EOF
     50 	
     51 # AUTO-GENERATED - DO NOT CHANGE!
     52 # Domain: $domain (active: $active, SSL: $ssl, Database: $db, PHP: $php)
     53 EOF
     54     if [ $active -eq 0 ]; then
     55 	cat >> $CONFFILE <<EOF
     56 # domain is inactive.
     57 <VirtualHost *:80>
     58     ServerName $domain
     59 
     60     RewriteEngine on
     61     RewriteRule (.*) - [L,R=410]
     62 </VirtualHost>
     63 <VirtualHost *:443>
     64     ServerName $domain
     65 
     66     RewriteEngine on
     67     RewriteRule (.*) - [L,R=410]
     68 </VirtualHost>
     69 EOF
     70 
     71     
     72     else
     73 	# Domain ist aktiv.
     74 	# Den Benutzer zur Domain zu finden. Es ist der (hoffentlich einzige) <Benutzername>@webmaster..., der für die Domain berechtigt ist.
     75 	user=`sql "SELECT substring_index(username,'@',1) as user FROM domain_admins where domain='$domain' and username like '%@webmaster%'"`
     76 	echo "User: $user  ==>  Domain: $domain"
     77     
     78     
     79 	# Gibt es einen Domain-Admin?
     80 	if [ ! "$user" ]; then
     81     
     82 	# Kein Domain-Admin vorhanden, die Domain hat keine regulaeren Inhalte.
     83     	if [ -f $HTTPD_EXTRA_CONFIG_DIR/$domain.conf ]; then
     84 		cat >> $CONFFILE <<EOF
     85 	
     86 <VirtualHost *:80>
     87     # No domain owner available
     88     ServerName $domain
     89     Include $HTTPD_EXTRA_CONFIG_DIR/$domain.conf
     90 </VirtualHost>
     91 EOF
     92 	else
     93 
     94 		cat >> $CONFFILE <<EOF
     95 	
     96 <VirtualHost *:80>
     97     # Domain owner: $user
     98     ServerName $domain
     99 
    100     RewriteEngine on
    101     RewriteRule (.*) - [L,R=410]
    102 </VirtualHost>
    103 EOF
    104 	fi
    105 	else
    106 	    cat >> $CONFFILE <<EOF
    107 # Domain administrator user account: $user
    108 EOF
    109 	    # Es gibt einen Domainverwalter.
    110 	    # Docroot:
    111 	    docroot=/home/$user/var/www/$domain
    112 	
    113 	    if [ ! -d $docroot ]; then
    114 		# Document-Root existiert noch nicht, also anlegen.
    115 		mkdir -v $docroot
    116 		chown -v $user $docroot
    117 	    fi
    118 	
    119 	
    120 
    121     	    log_dir=/home/$user/var/log/apache2/$domain
    122 	
    123 	    if [ ! -d $log_dir ]; then
    124 		mkdir -v $log_dir
    125 	    fi
    126 	
    127 	    #echo "Logdir: $log_dir"
    128 	
    129 	
    130 	
    131 	    # Zertifikatsdatei bestimmen
    132 	    key=/etc/ssl/local/server.key
    133 	    crt=/etc/ssl/local/cert/$domain.crt
    134 	
    135 	    if [ $ssl -eq 0 ] || [ ! -f $crt ]; then
    136 	      # no SSL or no SSL cert available
    137 		cat >> $CONFFILE <<EOF
    138 	
    139 #<VirtualHost *:443>
    140 #    # Deny SSL
    141 #    ServerName $domain
    142 #    SSLEngine off
    143 #    RewriteEngine on
    144 #    RewriteRule (.*) http://$domain\$1 [R,L]
    145 #</VirtualHost>
    146 
    147 <VirtualHost *:80>
    148 EOF
    149 	    else
    150 		
    151 		cat >> $CONFFILE <<EOF
    152 	
    153 <VirtualHost *:80>
    154     ServerName $domain
    155     # Force SSL
    156     RewriteEngine on
    157     RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
    158     RewriteRule ^(.*)$ https://$domain\$1 [R=301,L]
    159 </VirtualHost>
    160 
    161 <VirtualHost *:443>
    162 
    163     SSLEngine on
    164     SSLCertificateFile    $crt
    165     SSLCertificateKeyFile $key
    166     
    167     SSLProtocol All -SSLv2 -SSLv3
    168     #SSLCipherSuite HIGH:MEDIUM
    169     
    170     SSLHonorCipherOrder On
    171     SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
    172 EOF
    173 		fi
    174 		
    175 
    176 		cat >> $CONFFILE <<EOF
    177     ServerName $domain
    178     ServerAdmin webmaster@$domain
    179 
    180     DocumentRoot $docroot
    181 
    182 
    183     ErrorLog $log_dir/error.log
    184     CustomLog $log_dir/access.log combined
    185 EOF
    186 		if [ -f $HTTPD_EXTRA_CONFIG_DIR/$domain.conf ]; then
    187 		    cat >> $CONFFILE <<EOF
    188     Include $HTTPD_EXTRA_CONFIG_DIR/$domain.conf
    189 EOF
    190 		fi
    191 
    192 		# PHP aktiviert?
    193 		if [ $php -eq 1 ]; then
    194     		cat >> $CONFFILE <<EOF
    195     php_admin_flag engine on
    196     php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -r webmaster@$domain"
    197     php_admin_value open_basedir /home/$user/var/www/$domain:/home/$user/tmp
    198     php_admin_value upload_tmp_dir /home/$user/tmp
    199 EOF
    200 		else
    201     		    cat >> $CONFFILE <<EOF
    202     php_admin_flag engine off
    203 EOF
    204 		fi
    205 	
    206 		#if [ $php -eq 1 && $db -eq 1 ]; then
    207 		if [ $db -eq 1 ]; then
    208 		    if [ -f $HTTPD_MYSQL_PASSWD_DIR/$domain.passwd ]; then
    209 			source $HTTPD_MYSQL_PASSWD_DIR/$domain.passwd
    210 			echo "pass ist $mysql_password"
    211 			cat >> $CONFFILE <<EOF
    212     php_value mysql.default_host localhost
    213     php_value mysql.default_user $mysql_user
    214     php_value mysql.default_password $mysql_password
    215 
    216     php_value mysqli.default_host localhost
    217     php_value mysqli.default_user $mysql_user
    218     php_value mysqli.default_pw $mysql_password
    219 EOF
    220 
    221 		    fi
    222     		fi
    223 		cat >> $CONFFILE <<EOF
    224 </VirtualHost>
    225 EOF
    226 	    fi
    227 	    
    228         fi
    229 
    230     fi
    231     
    232 
    233 
    234 done
    235 
    236 
    237 # Apache-Webserver muss Konfiguration neu laden
    238 if [ `hg -R $HTTPD_VHOST_DIR status -m -a -u|wc -l` -gt 0 ]; then
    239 
    240     echo "Änderungen durchgeführt:"
    241     hg -R $HTTPD_VHOST_DIR diff
    242     hg -R $HTTPD_VHOST_DIR commit -A -u `whoami` -m "Updating HTTPD configuration"
    243 
    244 
    245     if [ ! `apache2ctl -t|grep "Syntax OK"|wc -l` -eq "0" ]; then
    246 	echo "Apache-Konfiguraton ist fehlerhaft! Kein Restart!"
    247 	apache2ctl -t
    248     else
    249 	echo "Apache-Konfiguration ist OK."
    250 	echo "Reloading Apache Webserver."
    251 	apache2ctl restart 
    252     fi
    253 fi
    254