This commit is contained in:
Usman Nasir 2019-11-07 15:06:34 +05:00
parent 8ccfdc95c2
commit 9fd6c45614
7 changed files with 1245 additions and 1 deletions

1
.gitignore vendored
View File

@ -1,3 +1,2 @@
*.pyc
ApachController/
.idea

View File

@ -0,0 +1,306 @@
#!/usr/local/CyberCP/bin/python2
import os
import subprocess
import shlex
import plogical.CyberCPLogFileWriter as logging
from ApacheVhosts import ApacheVhost
class ApacheController:
apacheInstallStatusPath = '/home/cyberpanel/apacheInstallStatus'
serverRootPath = '/etc/httpd'
mpmConfigs = """# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:
# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
LoadModule mpm_event_module modules/mod_mpm_event.so
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 30
MaxConnectionsPerChild 1000
</IfModule>"""
mpmConfigsPath = "/etc/httpd/conf.modules.d/00-mpm.conf"
@staticmethod
def checkIfApacheInstalled():
try:
if os.path.exists(ApacheController.serverRootPath):
pass
else:
return 0
if os.path.exists(ApacheVhost.php54Path):
pass
else:
return 0
if os.path.exists(ApacheVhost.php55Path):
pass
else:
return 0
if os.path.exists(ApacheVhost.php56Path):
pass
else:
return 0
if os.path.exists(ApacheVhost.php70Path):
pass
else:
return 0
if os.path.exists(ApacheVhost.php71Path):
pass
else:
return 0
if os.path.exists(ApacheVhost.php72Path):
pass
else:
return 0
if os.path.exists(ApacheVhost.php73Path):
return 1
else:
return 0
except BaseException, msg:
message = "%s. [%s]" % (str(msg), '[ApacheController.checkIfApacheInstalled]')
logging.CyberCPLogFileWriter.writeToFile(message)
@staticmethod
def executioner(command):
try:
# subprocess.call(shlex.split(command))
res = subprocess.call(shlex.split(command))
if res == 1:
return 0
else:
return 1
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
return 0
@staticmethod
def InstallApache():
try:
command = "yum install -y httpd httpd-tools mod_ssl php-fpm"
if ApacheController.executioner(command) == 0:
return "Failed to install Apache and PHP-FPM."
command = "yum -y install centos-release-scl yum-utils"
if ApacheController.executioner(command) == 0:
return "Failed to centos-release-scl and yum-utils"
command = "yum-config-manager --enable rhel-server-rhscl-7-rpms"
if ApacheController.executioner(command) == 0:
return "Failed to --enable rhel-server-rhscl-7-rpms"
## Minor Configuration changes.
sslPath = "/etc/httpd/conf.d/ssl.conf"
if os.path.exists(sslPath):
os.remove(sslPath)
confPath = ApacheVhost.serverRootPath + "/conf/httpd.conf"
data = open(confPath, 'r').readlines()
writeToFile = open(confPath, 'w')
for items in data:
if items.find("Listen") > -1 and items.find("80") > -1 and items.find('#') == -1:
writeToFile.writelines("Listen 8081\nListen 8082\n")
elif items.find("User") > -1 and items.find('#') == -1:
writeToFile.writelines("User nobody\n")
elif items.find("Group") > -1 and items.find('#') == -1:
writeToFile.writelines("Group nobody\n")
writeToFile.writelines('SetEnv LSWS_EDITION Openlitespeed\nSetEnv X-LSCACHE on\n')
elif items[0] == "#":
continue
else:
writeToFile.writelines(items)
writeToFile.close()
# MPM Module Configurations
writeToFile = open(ApacheController.mpmConfigsPath , 'w')
writeToFile.write(ApacheController.mpmConfigs)
writeToFile.close()
###
command = "systemctl start httpd.service"
ApacheController.executioner(command)
command = "systemctl enable httpd.service"
ApacheController.executioner(command)
return 1
except BaseException, msg:
return str(msg)
@staticmethod
def phpVersions():
# Version 5.4
command = 'yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm'
ApacheController.executioner(command)
command = 'yum-config-manager --enable remi-php'
ApacheController.executioner(command)
command = 'yum install -y php54-php-fpm php54-php-gd php54-php-xml php54-php-twig php54-php-zstd php54-php-tidy' \
'php54-php-suhosin php54-php-soap php54-php-snmp php54-php-snappy php54-php-smbclient' \
'php54-php-process php54-php-pimple php54-php-pgsql php54-php-pear.noarch php54-php-pdo' \
'php54-php-mysqlnd php54-php-mssql php54-php-mcrypt php54-php-mbstring php54-php-maxminddb' \
'php54-php-common php54-php-imap php54-php-intl php54-php-tarantool php54-php-pspell php54-php-oci8' \
'php54-php-bcmath php54-php-litespeed php54-php-recode php54-php-odbc'
if ApacheController.executioner(command) == 0:
return "Failed to install php54-fpm"
# Version 5.5
command = 'yum install -y php55-php-fpm php55-php-gd php55-php-xml php55-php-twig php55-php-zstd php55-php-tidy' \
'php55-php-suhosin php55-php-soap php55-php-snmp php55-php-snappy php55-php-smbclient ' \
'php55-php-process php55-php-pimple php55-php-pgsql php55-php-pear.noarch php55-php-pdo' \
'php55-php-mysqlnd php55-php-mssql php55-php-mcrypt php55-php-mbstring php55-php-maxminddb' \
'php55-php-common php55-php-imap php55-php-intl php55-php-tarantool php55-php-pspell php55-php-oci8' \
'php55-php-litespeed php55-php-bcmath php55-php-odbc php55-php-recode'
if ApacheController.executioner(command) == 0:
return "Failed to install php55-fpm"
# Version 5.6
command = 'yum install -y php56-php-fpm php56-php-gd php56-php-xml php56-php-twig php56-php-zstd php56-php-tidy' \
'php56-php-suhosin php56-php-soap php56-php-snmp php56-php-snappy php56-php-smbclient' \
'php56-php-process php56-php-pimple php56-php-pgsql php56-php-pear.noarch php56-php-pdo ' \
'php56-php-mysqlnd php56-php-mssql php56-php-mcrypt php56-php-mbstring php56-php-maxminddb' \
'php56-php-common php56-php-imap php56-php-intl php56-php-tarantool php56-php-recode' \
'php56-php-odbc php56-php-oci8 php56-php-litespeed php56-php-bcmath php56-php-pspell'
if ApacheController.executioner(command) == 0:
return "Failed to install php56-fpm"
# Version 7.0
command = 'yum install -y php70-php-fpm php70-php-gd php70-php-xml php70-php-twig php70-php-zstd php70-php-tidy' \
'php70-php-suhosin php70-php-soap php70-php-snmp php70-php-snappy php70-php-smbclient' \
'php70-php-process php70-php-pimple php70-php-pgsql php70-php-pear.noarch php70-php-pdo ' \
'php70-php-mysqlnd php70-php-mssql php70-php-mcrypt php70-php-mbstring php70-php-maxminddb' \
'php70-php-common php70-php-imap php70-php-intl php70-php-tarantool php70-php-recode' \
'php70-php-odbc php70-php-oci8 php70-php-litespeed php70-php-bcmath php70-php-pspell'
if ApacheController.executioner(command) == 0:
return "Failed to install php70-fpm"
# Version 7.1
command = 'yum install -y php71-php-fpm php71-php-gd php71-php-xml php71-php-twig php71-php-zstd php71-php-tidy' \
'php71-php-suhosin php71-php-soap php71-php-snmp php71-php-snappy php71-php-smbclient' \
'php71-php-process php71-php-pimple php71-php-pgsql php71-php-pear.noarch php71-php-pdo ' \
'php71-php-mysqlnd php71-php-mssql php71-php-mcrypt php71-php-mbstring php71-php-maxminddb' \
'php71-php-common php71-php-imap php71-php-intl php71-php-tarantool php71-php-recode' \
'php71-php-odbc php71-php-oci8 php71-php-litespeed php71-php-bcmath php71-php-pspell'
if ApacheController.executioner(command) == 0:
return "Failed to install php71-fpm"
# Version 7.2
command = 'yum install -y php72-php-fpm php72-php-gd php72-php-xml php72-php-twig php72-php-zstd php72-php-tidy' \
'php72-php-suhosin php72-php-soap php72-php-snmp php72-php-snappy php72-php-smbclient' \
'php72-php-process php72-php-pimple php72-php-pgsql php72-php-pear.noarch php72-php-pdo ' \
'php72-php-mysqlnd php72-php-mssql php72-php-mcrypt php72-php-mbstring php72-php-maxminddb' \
'php72-php-common php72-php-imap php72-php-intl php72-php-tarantool php72-php-recode' \
'php72-php-odbc php72-php-oci8 php72-php-litespeed php72-php-bcmath php72-php-pspell'
if ApacheController.executioner(command) == 0:
return "Failed to install php72-fpm"
# Version 7.3
command = 'yum install -y php73-php-fpm php73-php-gd php73-php-xml php73-php-twig php73-php-zstd php73-php-tidy' \
'php73-php-suhosin php73-php-soap php73-php-snmp php73-php-snappy php73-php-smbclient' \
'php73-php-process php73-php-pimple php73-php-pgsql php73-php-pear.noarch php73-php-pdo ' \
'php73-php-mysqlnd php73-php-mssql php73-php-mcrypt php73-php-mbstring php73-php-maxminddb' \
'php73-php-common php73-php-imap php73-php-intl php73-php-tarantool php73-php-recode' \
'php73-php-odbc php73-php-oci8 php73-php-litespeed php73-php-bcmath php73-php-pspell'
if ApacheController.executioner(command) == 0:
return "Failed to install php73-fpm"
try:
wwwConfPath = ApacheVhost.php54Path + "/www.conf"
if os.path.exists(wwwConfPath):
os.remove(wwwConfPath)
wwwConfPath = ApacheVhost.php55Path + "/www.conf"
if os.path.exists(wwwConfPath):
os.remove(wwwConfPath)
wwwConfPath = ApacheVhost.php56Path + "/www.conf"
if os.path.exists(wwwConfPath):
os.remove(wwwConfPath)
wwwConfPath = ApacheVhost.php70Path + "/www.conf"
if os.path.exists(wwwConfPath):
os.remove(wwwConfPath)
wwwConfPath = ApacheVhost.php71Path + "/www.conf"
if os.path.exists(wwwConfPath):
os.remove(wwwConfPath)
wwwConfPath = ApacheVhost.php72Path + "/www.conf"
if os.path.exists(wwwConfPath):
os.remove(wwwConfPath)
wwwConfPath = ApacheVhost.php73Path + "/www.conf"
if os.path.exists(wwwConfPath):
os.remove(wwwConfPath)
except:
pass
return 1
@staticmethod
def setupApache(statusFile):
try:
logging.CyberCPLogFileWriter.statusWriter(statusFile, 'Starting Apache installation. It may take some time..,70')
result = ApacheController.InstallApache()
if result != 1:
return [0,result]
logging.CyberCPLogFileWriter.statusWriter(statusFile,
'Installing PHP-FPM Versions. It may take some time..,80')
result = ApacheController.phpVersions()
if result != 1:
return [0,result]
return [1, 'None']
except BaseException, msg:
return [0, str(msg)]

388
ApachController/ApacheVhosts.py Executable file
View File

@ -0,0 +1,388 @@
#!/usr/local/CyberCP/bin/python2
import os
import os.path
import sys
import django
sys.path.append('/usr/local/CyberCP')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
django.setup()
import os
from websiteFunctions.models import Websites, ChildDomains
from plogical.vhostConfs import vhostConfs
from managePHP.phpManager import PHPManager
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
from plogical.processUtilities import ProcessUtilities
import re
class ApacheVhost:
apacheInstallStatusPath = '/home/cyberpanel/apacheInstallStatus'
serverRootPath = '/etc/httpd'
configBasePath = '/etc/httpd/conf.d/'
lswsMainConf = "/usr/local/lsws/conf/httpd_config.conf"
php54Path = '/opt/remi/php54/root/etc/php-fpm.d/'
php55Path = '/opt/remi/php55/root/etc/php-fpm.d/'
php56Path = '/etc/opt/remi/php56/php-fpm.d/'
php70Path = '/etc/opt/remi/php70/php-fpm.d/'
php71Path = '/etc/opt/remi/php71/php-fpm.d/'
php72Path = '/etc/opt/remi/php72/php-fpm.d/'
php73Path = '/etc/opt/remi/php73/php-fpm.d/'
count = 0
sslBasePath = "/etc/httpd/conf.d/ssl/"
@staticmethod
def DecidePHPPath(php, virtualHostName):
if php == '53' or php == '54':
finalConfPath = ApacheVhost.php54Path + virtualHostName
elif php == '55':
finalConfPath = ApacheVhost.php55Path + virtualHostName
elif php == '56':
finalConfPath = ApacheVhost.php56Path + virtualHostName
elif php == '70':
finalConfPath = ApacheVhost.php70Path + virtualHostName
elif php == '71':
finalConfPath = ApacheVhost.php71Path + virtualHostName
elif php == '72':
finalConfPath = ApacheVhost.php72Path + virtualHostName
elif php == '73':
finalConfPath = ApacheVhost.php73Path + virtualHostName
return finalConfPath + '.conf'
@staticmethod
def whichPHPExists(virtualHostName):
virtualHostName = virtualHostName + ".conf"
if os.path.exists(ApacheVhost.php54Path + virtualHostName):
return ApacheVhost.php54Path + virtualHostName
if os.path.exists(ApacheVhost.php55Path + virtualHostName):
return ApacheVhost.php55Path + virtualHostName
if os.path.exists(ApacheVhost.php56Path + virtualHostName):
return ApacheVhost.php56Path + virtualHostName
if os.path.exists(ApacheVhost.php70Path + virtualHostName):
return ApacheVhost.php70Path + virtualHostName
if os.path.exists(ApacheVhost.php71Path + virtualHostName):
return ApacheVhost.php71Path + virtualHostName
if os.path.exists(ApacheVhost.php72Path + virtualHostName):
return ApacheVhost.php72Path + virtualHostName
if os.path.exists(ApacheVhost.php73Path + virtualHostName):
return ApacheVhost.php73Path + virtualHostName
@staticmethod
def GenerateSelfSignedSSL(virtualHostName):
if os.path.exists(ApacheVhost.sslBasePath):
pass
else:
os.mkdir(ApacheVhost.sslBasePath)
pathToStoreSSLPrivKey = ApacheVhost.sslBasePath + virtualHostName + ".privkey.pem"
pathToStoreSSLFullChain = ApacheVhost.sslBasePath + virtualHostName + ".fullchain.pem"
command = 'openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout ' + pathToStoreSSLPrivKey + ' -out ' + pathToStoreSSLFullChain
ProcessUtilities.normalExecutioner(command)
@staticmethod
def perHostVirtualConf(administratorEmail,externalApp, virtualHostUser, phpVersion, virtualHostName):
try:
## Non-SSL Conf
finalConfPath = ApacheVhost.configBasePath + virtualHostName + '.conf'
confFile = open(finalConfPath, "w+")
php = PHPManager.getPHPString(phpVersion)
currentConf = vhostConfs.apacheConf
currentConf = currentConf.replace('{virtualHostName}', virtualHostName)
currentConf = currentConf.replace('{administratorEmail}', administratorEmail)
currentConf = currentConf.replace('{virtualHostUser}', virtualHostUser)
currentConf = currentConf.replace('{php}', php)
currentConf = currentConf.replace('{adminEmails}', administratorEmail)
currentConf = currentConf.replace('{externalApp}', virtualHostUser)
confFile.write(currentConf)
confFile.close()
## SSL Conf
finalConfPath = ApacheVhost.configBasePath + virtualHostName + '.conf'
confFile = open(finalConfPath, "a")
php = PHPManager.getPHPString(phpVersion)
currentConf = vhostConfs.apacheConfSSL
currentConf = currentConf.replace('{virtualHostName}', virtualHostName)
currentConf = currentConf.replace('{administratorEmail}', administratorEmail)
currentConf = currentConf.replace('{virtualHostUser}', virtualHostUser)
currentConf = currentConf.replace('{php}', php)
currentConf = currentConf.replace('{adminEmails}', administratorEmail)
currentConf = currentConf.replace('{externalApp}', virtualHostUser)
confFile.write(currentConf)
confFile.close()
##
finalConfPath = ApacheVhost.DecidePHPPath(php, virtualHostName)
confFile = open(finalConfPath, "w+")
currentConf = vhostConfs.phpFpmPool
currentConf = currentConf.replace('{www}', virtualHostUser)
currentConf = currentConf.replace('{Sock}', virtualHostName)
currentConf = currentConf.replace('{externalApp}', externalApp)
confFile.write(currentConf)
ApacheVhost.GenerateSelfSignedSSL(virtualHostName)
command = "systemctl restart httpd"
ProcessUtilities.normalExecutioner(command)
return [1, 'None']
except BaseException, msg:
return [0, str(msg)]
@staticmethod
def enableProxyInMainConf():
try:
data = open(ApacheVhost.lswsMainConf, 'r').readline()
putProxyConf = 1
putProxyConfSSL = 1
for items in data:
if items.find('apachebackend') > -1:
putProxyConf = 0
if items.find('proxyApacheBackendSSL') > -1:
putProxyConfSSL = 0
if putProxyConf:
confFile = open(ApacheVhost.lswsMainConf, "a")
confFile.write(vhostConfs.proxyApacheBackend)
confFile.close()
if putProxyConfSSL:
confFile = open(ApacheVhost.lswsMainConf, "a")
confFile.write(vhostConfs.proxyApacheBackendSSL)
confFile.close()
return [1, 'None']
except BaseException, msg:
return [0, str(msg)]
@staticmethod
def reWrite(domain_name):
try:
domainPath = '/home/' + domain_name + '/public_html/.htaccess'
confFile = open(domainPath, "w+")
confFile.write("REWRITERULE ^(.*)$ HTTP://apachebackend/$1 [P]")
confFile.close()
return [1, 'None']
except BaseException, msg:
return [0, str(msg)]
@staticmethod
def setupApacheVhost(administratorEmail,externalApp, virtualHostUser, phpVersion, virtualHostName):
result = ApacheVhost.perHostVirtualConf(administratorEmail,externalApp, virtualHostUser, phpVersion, virtualHostName)
if result[0] == 0:
return [0, result[1]]
result = ApacheVhost.enableProxyInMainConf()
if result[0] == 0:
return [0, result[1]]
return [1, 'None']
@staticmethod
def perHostVirtualConfChild(administratorEmail, externalApp, virtualHostUser, phpVersion, virtualHostName, path):
try:
## Non - SSL Conf
finalConfPath = ApacheVhost.configBasePath + virtualHostName + '.conf'
confFile = open(finalConfPath, "w+")
php = PHPManager.getPHPString(phpVersion)
currentConf = vhostConfs.apacheConfChild
currentConf = currentConf.replace('{virtualHostName}', virtualHostName)
currentConf = currentConf.replace('{administratorEmail}', administratorEmail)
currentConf = currentConf.replace('{php}', php)
currentConf = currentConf.replace('{adminEmails}', administratorEmail)
currentConf = currentConf.replace('{externalApp}', virtualHostUser)
currentConf = currentConf.replace('{path}', path)
confFile.write(currentConf)
confFile.close()
## SSL Conf
finalConfPath = ApacheVhost.configBasePath + virtualHostName + '.conf'
confFile = open(finalConfPath, "a")
php = PHPManager.getPHPString(phpVersion)
currentConf = vhostConfs.apacheConfChildSSL
currentConf = currentConf.replace('{virtualHostName}', virtualHostName)
currentConf = currentConf.replace('{administratorEmail}', administratorEmail)
currentConf = currentConf.replace('{php}', php)
currentConf = currentConf.replace('{adminEmails}', administratorEmail)
currentConf = currentConf.replace('{externalApp}', virtualHostUser)
currentConf = currentConf.replace('{path}', path)
confFile.write(currentConf)
confFile.close()
## SSL Conf
finalConfPath = ApacheVhost.DecidePHPPath(php, virtualHostName)
confFile = open(finalConfPath, "w+")
currentConf = vhostConfs.phpFpmPool
currentConf = currentConf.replace('{www}', "".join(re.findall("[a-zA-Z]+", virtualHostName))[:7])
currentConf = currentConf.replace('{Sock}', virtualHostName)
currentConf = currentConf.replace('{externalApp}', externalApp)
confFile.write(currentConf)
ApacheVhost.GenerateSelfSignedSSL(virtualHostName)
command = "systemctl restart httpd"
ProcessUtilities.normalExecutioner(command)
return [1, 'None']
except BaseException, msg:
return [0, str(msg)]
@staticmethod
def setupApacheVhostChild(administratorEmail, externalApp, virtualHostUser, phpVersion, virtualHostName, path):
result = ApacheVhost.perHostVirtualConfChild(administratorEmail, externalApp, virtualHostUser, phpVersion,
virtualHostName, path)
if result[0] == 0:
return [0, result[1]]
result = ApacheVhost.enableProxyInMainConf()
if result[0] == 0:
return [0, result[1]]
return [1, 'None']
@staticmethod
def DeleteApacheVhost(virtualHostName):
try:
finalConfPath = ApacheVhost.configBasePath + virtualHostName + '.conf'
if os.path.exists(finalConfPath):
os.remove(finalConfPath)
ApacheVhost.deletePHPPath(virtualHostName)
command = "systemctl restart httpd"
ProcessUtilities.normalExecutioner(command)
except BaseException, msg:
logging.writeToFile(str(msg))
@staticmethod
def perHostVirtualConfOLS(vhFile, administratorEmail):
# General Configurations tab
try:
confFile = open(vhFile, "w+")
currentConf = vhostConfs.OLSLBConf
currentConf = currentConf.replace('{adminEmails}', administratorEmail)
confFile.write(currentConf)
confFile.close()
except BaseException, msg:
logging.writeToFile(
str(msg) + " [IO Error with per host config file [ApacheVhosts.perHostVirtualConf]]")
@staticmethod
def deletePHPPath(virtualHostName):
phpPath = ApacheVhost.DecidePHPPath('54', virtualHostName)
if os.path.exists(phpPath):
os.remove(phpPath)
command = "systemctl restart php%s-php-fpm" % ('54')
ProcessUtilities.normalExecutioner(command)
phpPath = ApacheVhost.DecidePHPPath('55', virtualHostName)
if os.path.exists(phpPath):
os.remove(phpPath)
command = "systemctl restart php%s-php-fpm" % ('55')
ProcessUtilities.normalExecutioner(command)
phpPath = ApacheVhost.DecidePHPPath('56', virtualHostName)
if os.path.exists(phpPath):
os.remove(phpPath)
command = "systemctl restart php%s-php-fpm" % ('56')
ProcessUtilities.normalExecutioner(command)
phpPath = ApacheVhost.DecidePHPPath('70', virtualHostName)
if os.path.exists(phpPath):
os.remove(phpPath)
command = "systemctl restart php%s-php-fpm" % ('70')
ProcessUtilities.normalExecutioner(command)
phpPath = ApacheVhost.DecidePHPPath('71', virtualHostName)
if os.path.exists(phpPath):
os.remove(phpPath)
command = "systemctl restart php%s-php-fpm" % ('71')
ProcessUtilities.normalExecutioner(command)
phpPath = ApacheVhost.DecidePHPPath('72', virtualHostName)
if os.path.exists(phpPath):
os.remove(phpPath)
command = "systemctl restart php%s-php-fpm" % ('72')
ProcessUtilities.normalExecutioner(command)
phpPath = ApacheVhost.DecidePHPPath('73', virtualHostName)
if os.path.exists(phpPath):
os.remove(phpPath)
command = "systemctl restart php%s-php-fpm" % ('73')
ProcessUtilities.normalExecutioner(command)
@staticmethod
def changePHP(phpVersion, vhFile):
try:
virtualHostName = vhFile.split('/')[6]
finalConfPath = ApacheVhost.configBasePath + virtualHostName + '.conf'
if not os.path.exists(finalConfPath):
return 0
ApacheVhost.deletePHPPath(virtualHostName)
website = Websites.objects.get(domain=virtualHostName)
php = PHPManager.getPHPString(phpVersion)
finalConfPath = ApacheVhost.DecidePHPPath(php, virtualHostName)
confFile = open(finalConfPath, "w+")
currentConf = vhostConfs.phpFpmPool
currentConf = currentConf.replace('{www}', website.externalApp)
currentConf = currentConf.replace('{Sock}', virtualHostName)
currentConf = currentConf.replace('{externalApp}', website.externalApp)
confFile.write(currentConf)
command = "systemctl stop php%s-php-fpm" % (php)
ProcessUtilities.normalExecutioner(command)
command = "systemctl restart php%s-php-fpm" % (php)
ProcessUtilities.normalExecutioner(command)
return 1
except BaseException, msg:
logging.writeToFile(str(msg))
return 1

View File

@ -0,0 +1,73 @@
import smtplib
import time
import argparse
import subprocess, shlex
import os
class BackupUtil:
@staticmethod
def normalExecutioner(command):
try:
res = subprocess.call(shlex.split(command))
if res == 0:
return 1
else:
return 0
except BaseException, msg:
return 0
@staticmethod
def SendEmail(message):
sender = 'info@designti01.cyberhosting.org'
receivers = ['jeanftellier@gmail.com', 'jeanftellier@gmail.com']
try:
smtpObj = smtplib.SMTP('127.0.0.1')
smtpObj.sendmail(sender, receivers, message)
print "Successfully sent email"
except BaseException, msg:
print "Error: unable to send email %s" % str(msg)
@staticmethod
def SyncHome():
command = 'rsync -avz /home /mnt/HC_Volume_2760413'
BackupUtil.normalExecutioner(command)
message = "/home successfully synced on %s" % (time.strftime("%I-%M-%S-%a-%b-%Y"))
BackupUtil.SendEmail(message)
@staticmethod
def BackupDBS():
command = "/usr/local/CyberCP/ApachController/backup.sh"
BackupUtil.normalExecutioner(command)
message = "Database backups successfully generated on %s" % (time.strftime("%I-%M-%S-%a-%b-%Y"))
BackupUtil.SendEmail(message)
@staticmethod
def MoveAllBackups():
for virtualHost in os.listdir("/home"):
completePath = "/home/%s/backup/" % (virtualHost)
command = "mv %s %s" % (completePath + '*.tar.gz', '/home/backup/')
subprocess.call(command, shell=True)
def main():
parser = argparse.ArgumentParser(description='CyberPanel Backup tool.')
parser.add_argument('function', help='Specific a function to call!')
args = parser.parse_args()
if args.function == "home":
BackupUtil.SyncHome()
elif args.function == "db":
BackupUtil.BackupDBS()
elif args.function == "sync":
BackupUtil.MoveAllBackups()
if __name__ == "__main__":
main()

0
ApachController/__init__.py Executable file
View File

19
ApachController/backup.sh Normal file
View File

@ -0,0 +1,19 @@
#!/bin/bash
USER="root"
PASSWORD="1d1bb076c3bd9ae9ef545e3eafb1a35c68d3c5f4a6c03862"
#OUTPUT="/Users/rabino/DBs"
cd /mnt/HC_Volume_2760413
#rm "$OUTPUTDIR/*gz" > /dev/null 2>&1
databases=`mysql -u $USER -p$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
mkdir `date +%Y%m%d`
for db in $databases; do
if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] ; then
echo "Dumping database: $db"
mysqldump -u $USER -p$PASSWORD --databases $db > `date +%Y%m%d`/`date +%Y%m%d`.$db.sql
# gzip $OUTPUT/`date +%Y%m%d`.$db.sql
fi
done

459
ApachController/phpApache.xml Executable file
View File

@ -0,0 +1,459 @@
<?xml version="1.0" ?>
<php>
<extension>
<extensionName>php%s-php-zstd</extensionName>
<extensionDescription>: Zstd Extension for PHP</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-zephir-parser</extensionName>
<extensionDescription>Zephir parser extension</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-xmlrpc</extensionName>
<extensionDescription>A module for PHP applications which use the XML-RPC</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-xml</extensionName>
<extensionDescription>A module for PHP applications which use XML</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-xcache</extensionName>
<extensionDescription>Fast, stable PHP opcode cacher</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-twig</extensionName>
<extensionDescription>The flexible, fast, and secure template engine for PHP</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-tidy</extensionName>
<extensionDescription>Standard PHP module provides tidy library support</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-tarantool</extensionName>
<extensionDescription>PHP driver for Tarantool/Box</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-suhosin</extensionName>
<extensionDescription>Suhosin is an advanced protection system for PHP</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-soap</extensionName>
<extensionDescription>A module for PHP applications that use the SOAP protocol</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-snmp</extensionName>
<extensionDescription>A module for PHP applications that query SNMP-managed devices</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-snappy</extensionName>
<extensionDescription>Snappy Extension for PHP</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-smbclient</extensionName>
<extensionDescription>PHP wrapper for libsmbclient</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-recode</extensionName>
<extensionDescription>A module for PHP applications for using the recode library</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pspell</extensionName>
<extensionDescription>A module for PHP applications for using pspell interfaces</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-process</extensionName>
<extensionDescription>Modules for PHP script using system process interfaces</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-pimple</extensionName>
<extensionDescription>A simple dependency injection container for PHP Extensions</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-phurple</extensionName>
<extensionDescription>PHP bindings for libpurple</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-phpiredis</extensionName>
<extensionDescription>Client extension for Redis</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-phalcon3</extensionName>
<extensionDescription>Phalcon Framework</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pgsql</extensionName>
<extensionDescription>A PostgreSQL database module for PHP</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-zmq</extensionName>
<extensionDescription>ZeroMQ messaging</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-zip</extensionName>
<extensionDescription>Une extension de gestion des ZIP</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-yp</extensionName>
<extensionDescription>YP/NIS functions</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-yaz</extensionName>
<extensionDescription>Z39.50/SRU client</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-yar</extensionName>
<extensionDescription>Light, concurrent RPC framework</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-yaml</extensionName>
<extensionDescription>PHP Bindings for yaml</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-yaf</extensionName>
<extensionDescription>Extension to work with the Memcached caching daemon.</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-yac</extensionName>
<extensionDescription>Yet Another Framework</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-yac</extensionName>
<extensionDescription>Lockless user data cache</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-xxtea</extensionName>
<extensionDescription>XXTEA encryption algorithm extension for PHP</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-xslcache</extensionName>
<extensionDescription>XSL extension that caches the parsed XSL style sheet</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-xrange</extensionName>
<extensionDescription>Numeric iterator primitives</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-xmp</extensionName>
<extensionDescription>Bindings for the libxmp library</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-xmldiff</extensionName>
<extensionDescription>XML diff and merge.</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-xhprof</extensionName>
<extensionDescription>PHP extension for XHProf, a Hierarchical Profiler</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-xdiff</extensionName>
<extensionDescription> File differences/patches.</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-xdebug</extensionName>
<extensionDescription>PECL package for debugging PHP scripts</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-xattr</extensionName>
<extensionDescription> Extended attributes</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-wxwidgets</extensionName>
<extensionDescription>Cross-platform widget toolkit</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-weakref</extensionName>
<extensionDescription>Implementation of weak references</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-vld</extensionName>
<extensionDescription>Dump the internal representation of PHP scripts</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pecl-varnish</extensionName>
<extensionDescription>Varnish Cache bindings</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-pear.noarch</extensionName>
<extensionDescription>PHP Extension and Application Repository framework</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-pdo</extensionName>
<extensionDescription>A database access abstraction module for PHP applications</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-opcache</extensionName>
<extensionDescription>The Zend OPcache</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-odbc</extensionName>
<extensionDescription>A module for PHP applications that use ODBC databases</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-oci8</extensionName>
<extensionDescription>A module for PHP applications that use OCI8 databases</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-mysqlnd</extensionName>
<extensionDescription> A module for PHP applications that use MySQL Database</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-mssql</extensionName>
<extensionDescription>MSSQL database module for PHP</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-mcrypt</extensionName>
<extensionDescription>Standard PHP module provides mcrypt library support</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-mbstring</extensionName>
<extensionDescription>A module for PHP applications which need multi-byte String handle</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-maxminddb</extensionName>
<extensionDescription>MaxMind DB Reader extension</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-magickwand</extensionName>
<extensionDescription>PHP API for ImageMagick</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-lz4</extensionName>
<extensionDescription>LZ4 Extension for PHP</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-libvirt-doc</extensionName>
<extensionDescription>Document of php-libvirt</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-libvirt</extensionName>
<extensionDescription>PHP language binding for Libvirt</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-ldap</extensionName>
<extensionDescription>A module for PHP applications that use LDAP</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-ioncube-loader</extensionName>
<extensionDescription>Loader for ionCube Encoded Files with ionCube</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-intl</extensionName>
<extensionDescription>Internationalization extension for PHP applications</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-interbase</extensionName>
<extensionDescription> A module for PHP applications that use Interbase/Firebird databases</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-imap</extensionName>
<extensionDescription>A module for PHP applications that use IMAPs</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-horde-horde-lz4</extensionName>
<extensionDescription>Horde LZ4 Compression Extension</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-gmp</extensionName>
<extensionDescription>A module for PHP applications for using the GNU MP library</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-geos</extensionName>
<extensionDescription>PHP module for GEOS</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-gd</extensionName>
<extensionDescription> A module for PHP applications for using the gd graphics library</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-enchant</extensionName>
<extensionDescription> Enchant spelling extension for PHP applications</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-embedded</extensionName>
<extensionDescription>PHP library for embedding in applications</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-devel</extensionName>
<extensionDescription>Files needed for building PHP extensions</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-dbg</extensionName>
<extensionDescription>The interactive PHP debugger</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-dba</extensionName>
<extensionDescription>A database abstraction layer module for PHP applications</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-common</extensionName>
<extensionDescription>Common files for PHP</extensionDescription>
<status>1</status>
</extension>
<extension>
<extensionName>php%s-php-cli</extensionName>
<extensionDescription>Command-line interface for PHP</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-channel-horde.noarch</extensionName>
<extensionDescription>Adds pear.horde.org channel to PEAR</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-brotli</extensionName>
<extensionDescription>Brotli Extension for PHP</extensionDescription>
<status>0</status>
</extension>
<extension>
<extensionName>php%s-php-bcmath</extensionName>
<extensionDescription>A module for PHP applications for using the bcmath library</extensionDescription>
<status>1</status>
</extension>
</php>