Improved WordPress installation process.

This commit is contained in:
usmannasir
2018-07-13 04:26:40 +05:00
parent 7184373aa9
commit eb3bd4844f
27 changed files with 1291 additions and 195 deletions

View File

@@ -0,0 +1,281 @@
#!/usr/local/CyberCP/bin/python2
import os,sys
sys.path.append('/usr/local/CyberCP')
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
django.setup()
import threading as multi
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
import subprocess
import shlex
from vhost import vhost
from loginSystem.models import Administrator
from websiteFunctions.models import ChildDomains, Websites
import randomPassword
from mysqlUtilities import mysqlUtilities
from databases.models import Databases
from installUtilities import installUtilities
import shutil
class ApplicationInstaller(multi.Thread):
def __init__(self, installApp, extraArgs):
multi.Thread.__init__(self)
self.installApp = installApp
self.extraArgs = extraArgs
def run(self):
try:
if self.installApp == 'wordpress':
self.installWordPress()
except BaseException, msg:
logging.writeToFile( str(msg) + ' [ApplicationInstaller.run]')
def installWPCLI(self):
try:
command = 'sudo wget https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar'
subprocess.call(shlex.split(command))
command = 'sudo chmod +x wp-cli.phar'
subprocess.call(shlex.split(command))
command = 'sudo mv wp-cli.phar /usr/bin/wp'
subprocess.call(shlex.split(command))
except BaseException, msg:
logging.writeToFile( str(msg) + ' [ApplicationInstaller.installWPCLI]')
def installWordPress(self):
try:
admin = self.extraArgs['admin']
domainName = self.extraArgs['domainName']
home = self.extraArgs['home']
tempStatusPath = self.extraArgs['tempStatusPath']
blogTitle = self.extraArgs['blogTitle']
adminUser = self.extraArgs['adminUser']
adminPassword = self.extraArgs['adminPassword']
adminEmail = self.extraArgs['adminEmail']
### Check WP CLI
try:
command = 'sudo wp --info'
res = subprocess.call(shlex.split(command))
if res == 1:
self.installWPCLI()
except subprocess.CalledProcessError:
self.installWPCLI()
## Open Status File
statusFile = open(tempStatusPath, 'w')
statusFile.writelines('Setting up paths,0')
statusFile.close()
try:
website = ChildDomains.objects.get(domain=domainName)
externalApp = website.master.externalApp
if admin.type != 1:
if website.master.admin != admin:
statusFile = open(tempStatusPath, 'w')
statusFile.writelines("You do not own this website." + " [404]")
statusFile.close()
return 0
except:
website = Websites.objects.get(domain=domainName)
externalApp = website.externalApp
if admin.type != 1:
if website.admin != admin:
statusFile = open(tempStatusPath, 'w')
statusFile.writelines("You do not own this website." + " [404]")
statusFile.close()
return 0
finalPath = ""
if home == '0':
path = self.extraArgs['path']
finalPath = "/home/" + domainName + "/public_html/" + path + "/"
else:
finalPath = "/home/" + domainName + "/public_html/"
## Security Check
if finalPath.find("..") > -1:
statusFile = open(tempStatusPath, 'w')
statusFile.writelines("Specified path must be inside virtual host home." + " [404]")
statusFile.close()
return 0
FNULL = open(os.devnull, 'w')
if not os.path.exists(finalPath):
command = 'sudo mkdir -p ' + finalPath
subprocess.call(shlex.split(command))
## checking for directories/files
dirFiles = os.listdir(finalPath)
if len(dirFiles) == 1:
if dirFiles[0] == ".well-known":
pass
else:
statusFile = open(tempStatusPath, 'w')
statusFile.writelines("Target directory should be empty before installation, otherwise data loss could occur." + " [404]")
statusFile.close()
return 0
elif len(dirFiles) == 0:
pass
else:
statusFile = open(tempStatusPath, 'w')
statusFile.writelines(
"Target directory should be empty before installation, otherwise data loss could occur." + " [404]")
statusFile.close()
return 0
## DB Creation
statusFile = open(tempStatusPath, 'w')
statusFile.writelines('Setting up Database,20')
statusFile.close()
dbName = randomPassword.generate_pass()
dbUser = dbName
dbPassword = randomPassword.generate_pass()
## DB Creation
if website.package.dataBases > website.databases_set.all().count():
pass
else:
raise BaseException("Maximum database limit reached for this website.")
if Databases.objects.filter(dbName=dbName).exists() or Databases.objects.filter(
dbUser=dbUser).exists():
raise BaseException("This database or user is already taken.")
result = mysqlUtilities.createDatabase(dbName, dbUser, dbPassword)
if result == 1:
pass
else:
raise BaseException("Not able to create database.")
db = Databases(website=website, dbName=dbName, dbUser=dbUser)
db.save()
####
statusFile = open(tempStatusPath, 'w')
statusFile.writelines('Downloading WordPress Core,30')
statusFile.close()
command = "sudo wp core download --allow-root --path=" + finalPath
subprocess.call(shlex.split(command))
##
statusFile = open(tempStatusPath, 'w')
statusFile.writelines('Configuring the installation,40')
statusFile.close()
command = "sudo wp core config --dbname=" + dbName + " --dbuser=" + dbUser + " --dbpass=" + dbPassword + " --dbhost=localhost --dbprefix=wp_ --allow-root --path=" + finalPath
subprocess.call(shlex.split(command))
if home == '0':
path = self.extraArgs['path']
finalURL = domainName + '/' + path
else:
finalURL = domainName
command = 'sudo wp core install --url="http://' + finalURL + '" --title="' + blogTitle + '" --admin_user="' + adminUser + '" --admin_password="' + adminPassword + '" --admin_email="' + adminEmail + '" --allow-root --path=' + finalPath
subprocess.call(shlex.split(command))
##
statusFile = open(tempStatusPath, 'w')
statusFile.writelines('Installing LSCache Plugin,80')
statusFile.close()
command = "sudo wp plugin install litespeed-cache --allow-root --path=" + finalPath
subprocess.call(shlex.split(command))
statusFile = open(tempStatusPath, 'w')
statusFile.writelines('Activating LSCache Plugin,90')
statusFile.close()
command = "sudo wp plugin activate litespeed-cache --allow-root --path=" + finalPath
subprocess.call(shlex.split(command))
##
command = "sudo chown -R " + externalApp + ":" + externalApp + " " + "/home/" + domainName + "/public_html/"
cmd = shlex.split(command)
res = subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT)
vhost.addRewriteRules(domainName)
installUtilities.reStartLiteSpeed()
statusFile = open(tempStatusPath, 'w')
statusFile.writelines("Successfully Installed. [200]")
statusFile.close()
return 0
except BaseException, msg:
# remove the downloaded files
try:
command = "sudo rm -rf " + finalPath
cmd = shlex.split(command)
res = subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT)
except BaseException, msg:
logging.writeToFile(str(msg) + " [installWordPress]")
homeDir = "/home/" + domainName + "/public_html"
if not os.path.exists(homeDir):
FNULL = open(os.devnull, 'w')
command = 'sudo mkdir ' + homeDir
subprocess.call(shlex.split(command))
command = "sudo chown -R " + externalApp + ":" + externalApp + " " + homeDir
cmd = shlex.split(command)
res = subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT)
try:
mysqlUtilities.deleteDatabase(dbName, dbUser)
db = Databases.objects.get(dbName=dbName)
db.delete()
except:
pass
statusFile = open(tempStatusPath, 'w')
statusFile.writelines(str(msg) + " [404]")
statusFile.close()
return 0

0
plogical/letsEncrypt.py Normal file
View File

View File

@@ -534,7 +534,7 @@ milter_default_action = accept
subprocess.call(shlex.split(command))
writeToFile = open(postfixPath, 'a')
writeToFile.writelines('smtpd_data_restrictions = check_policy_service inet:localhost:1089\n')
writeToFile.writelines('smtpd_data_restrictions = check_policy_service unix:/var/log/policyServerSocket\n')
writeToFile.close()
command = 'systemctl restart postfix'
@@ -545,7 +545,7 @@ milter_default_action = accept
writeToFile = open(postfixPath, 'w')
for items in data:
if items.find('check_policy_service inet:localhost:1089') > -1:
if items.find('check_policy_service unix:/var/log/policyServerSocket') > -1:
continue
else:
writeToFile.writelines(items)

View File

@@ -39,10 +39,12 @@ class virtualHostUtilities:
try:
if Websites.objects.filter(domain=virtualHostName).count() > 0:
raise BaseException("This website already exists.")
print "0, This website already exists."
return 0, "This website already exists."
if ChildDomains.objects.filter(domain=virtualHostName).count() > 0:
raise BaseException("This website already exists as child domain.")
print "0, This website already exists as child domain."
return 0, "This website already exists as child domain."
####### Limitations Check End
@@ -55,10 +57,12 @@ class virtualHostUtilities:
## zone creation
if vhost.checkIfVirtualHostExists(virtualHostName) == 1:
raise BaseException("Virtual Host Directory already exists!")
print "0, Virtual Host Directory already exists!"
return 0, "Virtual Host Directory already exists!"
if vhost.checkIfAliasExists(virtualHostName) == 1:
raise BaseException("This domain exists as Alias.")
print "0, This domain exists as Alias."
return 0, "This domain exists as Alias."
if dkimCheck == 1:
if mailUtilities.checkIfDKIMInstalled() == 0:
@@ -924,10 +928,12 @@ class virtualHostUtilities:
DNS.dnsTemplate(virtualHostName, admin)
if Websites.objects.filter(domain=virtualHostName).count() > 0:
raise BaseException("This Domain already exists as a website.")
print "0, This Domain already exists as a website."
return 0, "This Domain already exists as a website."
if ChildDomains.objects.filter(domain=virtualHostName).count() > 0:
raise BaseException("This domain already exists as child domain.")
print "0, This domain already exists as child domain."
return 0, "This domain already exists as child domain."
####### Limitations check
@@ -939,16 +945,20 @@ class virtualHostUtilities:
elif domainsInPackage > master.childdomains_set.all().count():
pass
else:
raise BaseException("Exceeded maximum number of domains for this package")
print "0, Exceeded maximum number of domains for this package"
return 0, "Exceeded maximum number of domains for this package"
####### Limitations Check End
if vhost.checkIfVirtualHostExists(virtualHostName) == 1:
raise BaseException("Virtual Host Directory already exists!")
print "0, Virtual Host Directory already exists!"
return 0, "Virtual Host Directory already exists!"
if vhost.checkIfAliasExists(virtualHostName) == 1:
raise BaseException("This domain exists as Alias.")
print "0, This domain exists as Alias."
return 0, "This domain exists as Alias."
if dkimCheck == 1:
if mailUtilities.checkIfDKIMInstalled() == 0: