Virtual Hosting Hosting for the new sysadmin – Apache – Postfix
We have some users who own servers who dont want to fork out for automated systems like Plesk or Virtualmin, but don’t really want to deal with adding domains and email addresses all the time (and sometimes get lost)
I decided today after one such user emailed us to add another 3 domains and bunch of email addresses to write something simple to help him out, and thought I would share them with you.
I put the following in a plain text file in /root/adddomain.sh
#!/bin/bash if [ ! $1 ];then echo "Usage: $0 domainname.com" exit 0 fi echo Adding the virtualhost to apache cat >/tmp/httpd.tmp < < EOF <VirtualHost *:80> DocumentRoot /var/www/CHANGEME/html ServerName CHANGEME ServerAlias www.CHANGEME <directory "/var/www/CHANGEME"> allow from all Options +Indexes </directory> EOF cat /tmp/httpd.tmp | sed s/CHANGEME/$1/g >> /etc/httpd/conf/httpd.conf echo Making the directory at /var/www/$1 mkdir -p /var/www/$1/html echo reloading apache /etc/init.d/httpd reload echo Adding domain to mail echo $1 /etc/postfix/virtual_domain # this was his postfix virtual domain name list |
Then run
chmod +x adddomain.sh
|
Now I can add domains like this very easily
[root@hostname ~]# ./adddomain.sh Usage: ./adddomain.sh domainname.com [root@hostname ~]# ./adddomain.sh domain.co.nz Adding the virtualhost to apache Making the directory at /var/www/domain.co.nz reloading apache Reloading httpd: [ OK ] Adding domain to mail [root@hostname ~]# |
Please note: do not add the ‘www’ part onto the domain name. That is done in the script itself where required.
Since he had set up virtual hosting in postfix, i then created another text file at /root/addmailuser.sh – this was so he could add email addresses easily and quickly. The contents were
#!/bin/bash if [ ! $2 ]; then echo "Usage: $0 [username|destination] emailaddress" exit 0 fi if [ -z $(echo $1 | grep @) ];then echo Looks like a username to me, adding the user adduser -s /sbin/nologin $1 passwd $1 else echo Looks like a redirect off site, adding it as such fi echo Adding the email address echo $2 $1 >> /etc/postfix/virtual echo Running postmap postmap /etc/postfix/virtual echo Reloading postfix /etc/init.d/postfix restart |
Again i run the chmod on it
chmod +x addmailuser.sh
|
This is how I can use it
[root@hostname ~]# ./addmailuser.sh Usage: ./addmailuser.sh [username|destination] emailaddress [root@hostname ~]# ./addmailuser.sh julie.domain julie@domain.co.nz Looks like a username to me, adding the user Changing password for user julie.domain. New UNIX password: BAD PASSWORD: it is too short Retype new UNIX password: passwd: all authentication tokens updated successfully. Adding the email address Running postmap Reloading postfix Shutting down postfix: [ OK ] Starting postfix: [ OK ] [root@hostname ~]# |
Or I can use it to create an off site alias
[root@hostname ~]# ./addmailuser.sh james.someguy@gmail.com james@domain.co.nz Looks like a redirect offsite, adding it as such Adding the email address Running postmap Reloading postfix Shutting down postfix: [ OK ] Starting postfix: [ OK ] [root@hostname ~]# |
These were designed/written for Centos/RedHat based systems, let me know if you want it for Debian/Ubuntu based ones. Also, strictly speaking, things don’t need to be restarted, but it doesn’t hurt and is a good way of testing things work ok.
There is no error checking in either of these scripts, feel free to contribute patches/fixes 🙂
The -i parameter for sed can be useful, making a change in place rather than building a pipe can make scripts look a bit nicer.
eg ;
sed -i ‘s/CHANGEME/$1/g’ /etc/httpd/conf/httpd.conf