Hi! I have a CRM that is already published. Now I want to sell it on subscription basis. I want to clone the same application as soon as a new client registers and pay the fee. For that I need a sub domain automatically through code and the virtual host too. Not through the CPanel. I will just copy the current application and the database it is using for every new client and he/she will access it through a sub domain which will be named after their username. Help will be appreciated greatly. Thanks!
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Accepted Answer
Hi there @deevannaveed,
If you have a cPanel server, then what you could do is use the cPanel/WHM API to create new accounts for your new users. It will look like this:
- whmapi1 createacct username=username domain=example.com bwlimit=unlimited cgi=1 contactemail=username@example.com cpmod=paper_lantern customip=192.0.2.0 dkim=1 featurelist=feature_list forcedns=0 frontpage=0 gid=123456789 hasshell=0 hasuseregns=1 homedir=/home/user ip=n language=en owner=root mailbox_format=mdbox max_defer_fail_percentage=unlimited max_email_per_hour=unlimited max_emailacct_quota=1024 maxaddon=unlimited maxftp=unlimited maxlst=unlimited maxpark=unlimited maxpop=unlimited maxsql=unlimited maxsub=unlimited mxcheck=auto password=123456luggage pkgname=my_new_package plan=default quota=1024 reseller=0 savepkg=1 spamassassin=1 spf=1 spambox=y uid=123456789 useregns=1
You can take a look at the documentation here:
https://documentation.cpanel.net/display/DD/WHM+API+1+Functions+-+createacct
If you don’t have cPanel what you could do is to have a template of a and then update the details in there. For example, your Vhost template could look like this:
<VirtualHost *:80>
ServerName DOMAIN_NAME
ServerAlias www.DOMAIN_NAME
ServerAdmin design@iskam.website
DocumentRoot /var/www/DOMAIN_NAME/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/DOMAIN_NAME/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Protocols h2 http/1.1
</VirtualHost>
Then you could just substitute the DOMAIN_NAME
part with the domain name of the specific user. If you are planning to do it with a shell script you could use the sed
command:
sed -i "s/DOMAIN_NAME/${domain}/g" ${domain}.conf
Then you can copy that Vhost into the sites-available
folder:
- cp ${domain}.conf /etc/apache2/sites-available/${domain}.conf
Then to enable the Vhost you could do something like this:
# Enable the new Vhost
a2ensite ${domain}
# Run a Config test
apache2ctl -t
# Restart Apache if config test is OK
if [[ $? -eq 0 ]] ; then
echo "Config test was ok, restarting Apache.."
systemctl restart apache2
else
Hope that this helps! Regards, Bobby
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Full documentation for every DigitalOcean product.
The Wave has everything you need to know about building a business, from raising funding to marketing your product.
Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.
New accounts only. By submitting your email you agree to our Privacy Policy
Scale up as you grow — whether you're running one virtual machine or ten thousand.
Sign up and get $200 in credit for your first 60 days with DigitalOcean.*
*This promotional offer applies to new accounts only.