diff --git a/README.md b/README.md index 3a8e1ee5..56237fd1 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,96 @@ +IMPORTANT +============================================ -How To setup this version on your system?? +#### We are looking for [Python Developers] (https://rtcamp.com/careers/python-developer/) to join our team. We offer work from home, so you can join EasyEngine team anywhere! _[Why Python?] (https://rtcamp.com/blog/easyengine-3-roadmap/#whypython)_ + +--- + +[](https://waffle.io/rtcamp/easyengine) +[](https://waffle.io/rtcamp/easyengine) + +<img src="https://d3qt5vpr7p9rgn.cloudfront.net/wp-content/uploads/2013/08/easy-engine-logo-2-RS1.png" alt="EasyEngine Logo" align="right" /> + +[] (https://travis-ci.org/rtCamp/easyengine) + +EasyEngine (ee) is a linux shell-script collection, which makes it easy to manage your wordpress sites running on nginx web-server. + +**EasyEngine currently supports:** + +- Ubuntu 12.04 & 14.04 +- Debian 7 + +## Quick Start + +```bash +wget -qO ee rt.cx/ee && sudo bash ee # install easyengine +sudo ee site create example.com --wp # Install required packages & setup WordPress on example.com +``` + +## Update EasyEngine + + +Update Procedure For EasyEngine + +```bash +wget -qO eeup http://rt.cx/eeup && sudo bash eeup +``` + +## More Site Creation Commands + +### Standard WordPress Sites ```bash -sudo apt-get install python3-pip git -sudo pip3 install virtualenv -git clone -b python https://github.com/rtCamp/easyengine.git -cd easyengine -virtualenv ./env --system-site-packages -source ./env/bin/activate -sudo pip3 install -r requirements.txt -sudo python3 setup.py develop -ee --help +ee site create example.com --wp # install wordpress without any page caching +ee site create example.com --w3tc # install wordpress with w3-total-cache plugin +ee site create example.com --wpsc # install wordpress with wp-super-cache plugin +ee site create example.com --wpfc # install wordpress + nginx fastcgi_cache ``` -How to install this version on your system?? +### WordPress Multsite with subdirectory + ```bash -sudo apt-get update -sudo apt-get -y install python3 python3-apt python3-setuptools python3-dev git -git clone -b python https://github.com/rtCamp/easyengine.git -cd easyengine -sudo python3 setup.py install -ee --help +ee site create example.com --wpsubdir # install wpmu-subdirectory without any page caching +ee site create example.com --wpsubdir --w3tc # install wpmu-subdirectory with w3-total-cache plugin +ee site create example.com --wpsubdir --wpsc # install wpmu-subdirectory with wp-super-cache plugin +ee site create example.com --wpsubdir --wpfc # install wpmu-subdirectory + nginx fastcgi_cache ``` +### WordPress Multsite with subdomain + +```bash +ee site create example.com --wpsubdomin # install wpmu-subdomain without any page caching +ee site create example.com --wpsubdomain --w3tc # install wpmu-subdomain with w3-total-cache plugin +ee site create example.com --wpsubdomain --wpsc # install wpmu-subdomain with wp-super-cache plugin +ee site create example.com --wpsubdomain --wpfc # install wpmu-subdomain + nginx fastcgi_cache +``` + +### Non-WordPress Sites +```bash +ee site create example.com --html # create example.com for static/html sites +ee site create example.com --php # create example.com with php support +ee site create example.com --mysql # create example.com with php & mysql support +``` + +## Cheatsheet - Site creation + + +| | Single Site | Multisite w/ Subdir | Multisite w/ Subdom | +|--------------------|---------------|-----------------------|-----------------------| +| **NO Cache** | --wp | --wpsubdir | --wpsubdomain | +| **WP Super Cache** | --wpsc | --wpsubdir --wpsc | --wpsubdomain --wpsc | +| **W3 Total Cache** | --w3tc | --wpsubdir --w3tc | --wpsubdomain --w3tc | +| **Nginx cache** | --wpfc | --wpsubdir --wpfc | --wpsubdomain --wpfc | + -EasyEngine 3.x Developement version +## Useful Links +- [Documentation] (http://rtcamp.com/easyengine/docs/) +- [FAQ] (http://rtcamp.com/easyengine/faq/) +- [Conventions used] (http://rtcamp.com/wordpress-nginx/tutorials/conventions/) +## Donations -Thinking To Contribute??? +[] (https://rtcamp.com/donate/?project=easyengine) -refer docs to know more on EasyEngine Developement +## License -follow instruction from step 3 in Creating cement app -http://builtoncement.com/2.4/dev/boss_templates.html +Same [GPL] (http://www.gnu.org/licenses/gpl-2.0.txt) that WordPress uses! diff --git a/config/plugins.d/site.conf b/config/plugins.d/site.conf index 0dad9ff0..2fb468fe 100644 --- a/config/plugins.d/site.conf +++ b/config/plugins.d/site.conf @@ -6,4 +6,3 @@ ### `ee.cli.plugins.example` or from the file path ### `/var/lib/ee/plugins/example.py` enable_plugin = true -db_path = sqlite:////var/lib/ee/ee.sqlite diff --git a/ee/cli/plugins/debug.py b/ee/cli/plugins/debug.py index 66bcafab..4d346347 100644 --- a/ee/cli/plugins/debug.py +++ b/ee/cli/plugins/debug.py @@ -53,6 +53,7 @@ class EEDebugController(CementBaseController): @expose(hide=True) def debug_nginx(self): + """Start/Stop Nginx debug""" # start global debug if self.start and not self.app.pargs.site_name: try: @@ -134,6 +135,7 @@ class EEDebugController(CementBaseController): @expose(hide=True) def debug_php(self): + """Start/Stop PHP debug""" # PHP global debug start if self.start: if not (EEShellExec.cmd_exec(self, "sed -n \"/upstream php" @@ -173,6 +175,7 @@ class EEDebugController(CementBaseController): @expose(hide=True) def debug_fpm(self): + """Start/Stop PHP5-FPM debug""" # PHP5-FPM start global debug if self.start: if not EEShellExec.cmd_exec(self, "grep \"log_level = debug\" " @@ -214,6 +217,7 @@ class EEDebugController(CementBaseController): @expose(hide=True) def debug_mysql(self): + """Start/Stop MySQL debug""" # MySQL start global debug if self.start: if not EEShellExec.cmd_exec(self, "mysql -e \"show variables like" @@ -262,6 +266,7 @@ class EEDebugController(CementBaseController): @expose(hide=True) def debug_wp(self): + """Start/Stop WordPress debug""" if self.start and self.app.pargs.site_name: wp_config = ("{0}{1}/wp-config.php" .format(EEVariables.ee_webroot, @@ -332,6 +337,7 @@ class EEDebugController(CementBaseController): @expose(hide=True) def debug_rewrite(self): + """Start/Stop Nginx rewrite rules debug""" # Start Nginx rewrite debug globally if self.start and not self.app.pargs.site_name: if not EEShellExec.cmd_exec(self, "grep \"rewrite_log on;\" " @@ -396,6 +402,7 @@ class EEDebugController(CementBaseController): @expose(hide=True) def signal_handler(self, signal, frame): + """Handle Ctrl+c hevent for -i option of debug""" self.start = False if self.app.pargs.nginx: self.debug_nginx() @@ -421,6 +428,7 @@ class EEDebugController(CementBaseController): @expose(hide=True) def default(self): + """Default function of debug""" self.start = True self.interactive = False self.msg = [] diff --git a/ee/cli/plugins/import_slow_log.py b/ee/cli/plugins/import_slow_log.py index 41427c19..fece6771 100644 --- a/ee/cli/plugins/import_slow_log.py +++ b/ee/cli/plugins/import_slow_log.py @@ -19,6 +19,7 @@ class EEImportslowlogController(CementBaseController): @expose(hide=True) def default(self): + """Default function for import slow log""" if os.path.isdir("{0}22222/htdocs/db/anemometer" .format(EEVariables.ee_webroot)): if os.path.isfile("/var/log/mysql/mysql-slow.log"): diff --git a/ee/cli/plugins/info.py b/ee/cli/plugins/info.py index 54c9c89d..4ec74db2 100644 --- a/ee/cli/plugins/info.py +++ b/ee/cli/plugins/info.py @@ -36,6 +36,7 @@ class EEInfoController(CementBaseController): @expose(hide=True) def info_nginx(self): + """Display Nginx information""" version = os.popen("nginx -v 2>&1 | cut -d':' -f2 | cut -d' ' -f2 | " "cut -d'/' -f2 | tr -d '\n'").read() allow = os.popen("grep ^allow /etc/nginx/common/acl.conf | " @@ -65,6 +66,7 @@ class EEInfoController(CementBaseController): @expose(hide=True) def info_php(self): + """Display PHP information""" version = os.popen("php -v | head -n1 | cut -d' ' -f2 |" " cut -d'+' -f1 | tr -d '\n'").read config = configparser.ConfigParser() @@ -138,6 +140,7 @@ class EEInfoController(CementBaseController): @expose(hide=True) def info_mysql(self): + """Display MySQL information""" version = os.popen("mysql -V | awk '{print($5)}' | cut -d ',' " "-f1 | tr -d '\n'").read() host = "localhost" @@ -165,6 +168,7 @@ class EEInfoController(CementBaseController): @expose(hide=True) def default(self): + """default function for info""" if (not self.app.pargs.nginx and not self.app.pargs.php and not self.app.pargs.mysql): self.app.pargs.nginx = True diff --git a/ee/cli/plugins/site.py b/ee/cli/plugins/site.py index 0173021a..af59dec0 100644 --- a/ee/cli/plugins/site.py +++ b/ee/cli/plugins/site.py @@ -79,6 +79,13 @@ class EESiteController(CementBaseController): ee_db_pass = '' if os.path.isfile('/etc/nginx/sites-available/{0}' .format(ee_domain)): + check_site = getSiteInfo(self, ee_domain) + if check_site is None: + Log.error(self, " Site {0} does not exist.".format(ee_domain)) + else: + sitetype = check_site.site_type + cachetype = check_site.cache_type + ee_site_webroot = EEVariables.ee_webroot + ee_domain access_log = (ee_site_webroot + '/logs/access.log') error_log = (ee_site_webroot + '/logs/error.log') @@ -98,7 +105,10 @@ class EESiteController(CementBaseController): data = dict(domain=ee_domain, webroot=ee_site_webroot, accesslog=access_log, errorlog=error_log, dbname=ee_db_name, dbuser=ee_db_user, - dbpass=ee_db_pass) + dbpass=ee_db_pass, type=sitetype + " " + cachetype + + " ({0})".format("enabled" + if check_site.is_enabled else + "disabled")) self.app.render((data), 'siteinfo.mustache') else: Log.error(self, " site {0} does not exists".format(ee_domain)) @@ -578,9 +588,9 @@ class EESiteUpdateController(CementBaseController): or self.app.pargs.wpfc or self.app.pargs.wpsc)): if ((oldsitetype not in ['html', 'php', 'mysql', 'wp']) - or (oldsitetype is 'wp' and oldcachetype is 'basic')): - print(oldsitetype, oldcachetype) - Log.error(self, " Cannot update {0}, {1} {2} to wp basic" + or (oldsitetype == 'wp' and oldcachetype == 'basic')): + + Log.error(self, "Cannot update {0} {1} {2} to wp basic" .format(ee_domain, oldsitetype, oldcachetype)) data = dict(site_name=ee_domain, www_domain=ee_www_domain, @@ -597,8 +607,8 @@ class EESiteUpdateController(CementBaseController): (self.app.pargs.wpfc or self.app.pargs.wpsc)): if (oldsitetype not in ['html', 'php', 'mysql', 'wp'] - or (oldsitetype is 'wp' and oldcachetype is 'w3tc')): - Log.error(self, " Cannot update {0}, {1} {2} to wp w3tc" + or (oldsitetype == 'wp' and oldcachetype == 'w3tc')): + Log.error(self, "Cannot update {0}, {1} {2} to wp w3tc" .format(ee_domain, oldsitetype, oldcachetype)) data = dict(site_name=ee_domain, www_domain=ee_www_domain, @@ -616,7 +626,7 @@ class EESiteUpdateController(CementBaseController): (self.app.pargs.wpsc or self.app.pargs.w3tc)): if (oldsitetype not in ['html', 'php', 'mysql', 'wp'] - or (oldsitetype is 'wp' and oldcachetype is 'wpfc')): + or (oldsitetype == 'wp' and oldcachetype == 'wpfc')): Log.error(self, "Cannot update {0}, {1} {2} to wp wpfc" .format(ee_domain, oldsitetype, oldcachetype)) @@ -634,7 +644,7 @@ class EESiteUpdateController(CementBaseController): (self.app.pargs.w3tc or self.app.pargs.wpfc)): if (oldsitetype not in ['html', 'php', 'mysql', 'wp'] - or (oldsitetype is 'wp' and oldcachetype is 'wpsc')): + or (oldsitetype == 'wp' and oldcachetype == 'wpsc')): Log.error(self, "Cannot update {0}, {1} {2} to wp wpsc" .format(ee_domain, oldsitetype, oldcachetype)) @@ -657,7 +667,7 @@ class EESiteUpdateController(CementBaseController): if (oldsitetype not in ['html', 'php', 'mysql', 'wp', 'wpsubdir'] - or (oldsitetype is 'wpsubdir' and oldcachetype is 'basic')): + or (oldsitetype == 'wpsubdir' and oldcachetype == 'basic')): Log.error(self, " Cannot update {0}, {1} {2} " "to wpsubdir basic" .format(ee_domain, oldsitetype, oldcachetype)) @@ -677,7 +687,7 @@ class EESiteUpdateController(CementBaseController): if (oldsitetype not in ['html', 'php', 'mysql', 'wp', 'wpsubdir'] - or (oldsitetype is 'wpsubdir' and oldcachetype is 'w3tc')): + or (oldsitetype == 'wpsubdir' and oldcachetype == 'w3tc')): Log.error(self, " Cannot update {0} {1} {2}" "to wpsubdir w3tc" .format(ee_domain, oldsitetype, oldcachetype)) @@ -698,8 +708,8 @@ class EESiteUpdateController(CementBaseController): if (oldsitetype not in ['html', 'php', 'mysql', 'wp', 'wpsubdir'] - or (oldsitetype is 'wpsubdir' and oldcachetype is 'wpfc')): - Log.error(self, " Cannot update {0} {1} {2}" + or (oldsitetype == 'wpsubdir' and oldcachetype == 'wpfc')): + Log.error(self, "Cannot update {0} {1} {2}" " to wpsubdir wpfc" .format(ee_domain, oldsitetype, oldcachetype)) @@ -718,7 +728,7 @@ class EESiteUpdateController(CementBaseController): if (oldsitetype not in ['html', 'php', 'mysql', 'wp', 'wpsubdir'] - or (oldsitetype is 'wpsubdir' and oldcachetype is 'wpsc')): + or (oldsitetype == 'wpsubdir' and oldcachetype == 'wpsc')): Log.error(self, " Cannot update {0} {1} {2}" " to wpsubdir wpsc" .format(ee_domain, oldsitetype, oldcachetype)) @@ -736,13 +746,16 @@ class EESiteUpdateController(CementBaseController): if (self.app.pargs.wpsubdomain and not (self.app.pargs.html or self.app.pargs.php or self.app.pargs.mysql or self.app.pargs.wpsubdir or self.app.pargs.wp)): + if (self.app.pargs.wpsubdomain and not (self.app.pargs.w3tc + or self.app.pargs.wpfc or self.app.pargs.wpsc)): + if (oldsitetype not in ['html', 'php', 'mysql', 'wp', + 'wpsubdomain'] + or (oldsitetype == 'wpsubdomain' and + oldcachetype == 'basic')): - if (oldsitetype not in ['html', 'php', 'mysql', 'wp', - 'wpsubdomain'] - or (oldsitetype is 'wpsubdomain' and oldcachetype is 'basic')): - Log.error(self, " Cannot update {0} {1} {2}" - " to wpsubdomain basic" - .format(ee_domain, oldsitetype, oldcachetype)) + Log.error(self, " Cannot update {0} {1} {2}" + " to wpsubdomain basic" + .format(ee_domain, oldsitetype, oldcachetype)) data = dict(site_name=ee_domain, www_domain=ee_www_domain, static=False, basic=True, wp=True, w3tc=False, @@ -760,7 +773,8 @@ class EESiteUpdateController(CementBaseController): if (oldsitetype not in ['html', 'php', 'mysql', 'wp', 'wpsubdomain'] or - (oldsitetype is 'wpsubdomain' and oldcachetype is 'w3tc')): + (oldsitetype == 'wpsubdomain' and oldcachetype == 'w3tc')): + print(oldsitetype, oldcachetype) Log.error(self, " Cannot update {0}, {1} {2}" " to wpsubdomain w3tc" .format(ee_domain, oldsitetype, oldcachetype)) @@ -781,7 +795,8 @@ class EESiteUpdateController(CementBaseController): if (oldsitetype not in ['html', 'php', 'mysql', 'wp', 'wpsubdomain'] or - (oldsitetype is 'wpsubdomain' and oldcachetype is 'wpfc')): + (oldsitetype == 'wpsubdomain' and oldcachetype == 'wpfc')): + print(oldsitetype, oldcachetype) Log.error(self, " Cannot update {0}, {1} {2} " "to wpsubdomain wpfc" .format(ee_domain, oldsitetype, oldcachetype)) @@ -802,7 +817,8 @@ class EESiteUpdateController(CementBaseController): if (oldsitetype not in ['html', 'php', 'mysql', 'wp', 'wpsubdomain'] or - (oldsitetype is 'wpsubdomain' and oldcachetype is 'wpsc')): + (oldsitetype == 'wpsubdomain' and oldcachetype == 'wpsc')): + print(oldsitetype, oldcachetype) Log.error(self, " Cannot update {0}, {1} {2}" " to wpsubdomain wpsc" .format(ee_domain, oldsitetype, oldcachetype)) diff --git a/ee/cli/plugins/sitedb.py b/ee/cli/plugins/sitedb.py index 72a3ee6f..805b72bc 100644 --- a/ee/cli/plugins/sitedb.py +++ b/ee/cli/plugins/sitedb.py @@ -9,7 +9,10 @@ import sys def addNewSite(self, site, stype, cache, path, - enabled=True, ssl=False, fs='ext4', db=''): + enabled=True, ssl=False, fs='ext4', db='mysql'): + """ + Add New Site record information into ee database. + """ try: newRec = SiteDB(site, stype, cache, path, enabled, ssl, fs, db) db_session.add(newRec) @@ -20,6 +23,9 @@ def addNewSite(self, site, stype, cache, path, def getSiteInfo(self, site): + """ + Retrieves site record from ee databse + """ try: q = SiteDB.query.filter(SiteDB.sitename == site).first() return q @@ -30,6 +36,7 @@ def getSiteInfo(self, site): def updateSiteInfo(self, site, stype='', cache='', enabled=True, ssl=False, fs='', db=''): + """updates site record in database""" try: q = SiteDB.query.filter(SiteDB.sitename == site).first() except Exception as e: @@ -39,6 +46,7 @@ def updateSiteInfo(self, site, stype='', cache='', if not q: Log.error(self, "{0} does not exist in database".format(site)) + # Check if new record matches old if not then only update database if stype and q.site_type != stype: q.site_type = stype @@ -60,6 +68,7 @@ def updateSiteInfo(self, site, stype='', cache='', def deleteSiteInfo(self, site): + """Delete site record in database""" try: q = SiteDB.query.filter(SiteDB.sitename == site).first() except Exception as e: @@ -78,6 +87,7 @@ def deleteSiteInfo(self, site): def getAllsites(self): + try: q = SiteDB.query.all() return q diff --git a/ee/cli/plugins/stack.py b/ee/cli/plugins/stack.py index 5b4a96f5..b824a965 100644 --- a/ee/cli/plugins/stack.py +++ b/ee/cli/plugins/stack.py @@ -68,11 +68,12 @@ class EEStackController(CementBaseController): @expose(hide=True) def default(self): - # TODO Default action for ee stack command + """default action of ee stack command""" self.app.args.print_help() @expose(hide=True) def pre_pref(self, apt_packages): + """Pre settings to do before installation packages""" if set(EEVariables.ee_postfix).issubset(set(apt_packages)): Log.info(self, "Pre-seeding Postfix") EEShellExec.cmd_exec(self, "echo \"postfix postfix" @@ -143,6 +144,7 @@ class EEStackController(CementBaseController): @expose(hide=True) def post_pref(self, apt_packages, packages): + """Post activity after installation of packages""" if len(apt_packages): if set(EEVariables.ee_postfix).issubset(set(apt_packages)): EEGit.add(self, ["/etc/postfix"], @@ -1033,6 +1035,7 @@ class EEStackController(CementBaseController): @expose(help="Install packages") def install(self, packages=[], apt_packages=[], disp_msg=True): + """Start installation of packages""" self.msg = [] try: # Default action for stack installation @@ -1225,6 +1228,7 @@ class EEStackController(CementBaseController): @expose(help="Remove packages") def remove(self): + """Start removal of packages""" apt_packages = [] packages = [] @@ -1312,6 +1316,7 @@ class EEStackController(CementBaseController): @expose(help="Purge packages") def purge(self): + """Start purging of packages""" apt_packages = [] packages = [] diff --git a/ee/cli/plugins/stack_services.py b/ee/cli/plugins/stack_services.py index 31d46e13..37943dd0 100644 --- a/ee/cli/plugins/stack_services.py +++ b/ee/cli/plugins/stack_services.py @@ -19,6 +19,7 @@ class EEStackStatusController(CementBaseController): @expose(help="Start stack services") def start(self): + """Start services""" services = [] if self.app.pargs.nginx: Log.debug(self, "nginx service start") @@ -46,6 +47,7 @@ class EEStackStatusController(CementBaseController): @expose(help="Stop stack services") def stop(self): + """Stop services""" services = [] if self.app.pargs.nginx: Log.debug(self, "nginx service stop") @@ -73,6 +75,7 @@ class EEStackStatusController(CementBaseController): @expose(help="Restart stack services") def restart(self): + """Restart services""" services = [] if self.app.pargs.nginx: Log.debug(self, "nginx service restart") @@ -100,6 +103,7 @@ class EEStackStatusController(CementBaseController): @expose(help="Get stack status") def status(self): + """Status of services""" services = [] if self.app.pargs.nginx: Log.debug(self, "nginx service status") @@ -128,6 +132,7 @@ class EEStackStatusController(CementBaseController): @expose(help="Reload stack services") def reload(self): + """Reload service""" services = [] if self.app.pargs.nginx: Log.debug(self, "nginx service reload") diff --git a/ee/core/addswap.py b/ee/core/addswap.py index 37291a24..717d67a1 100644 --- a/ee/core/addswap.py +++ b/ee/core/addswap.py @@ -13,6 +13,7 @@ class EESwap(): pass def add(self): + """Swap addition with EasyEngine""" if EEVariables.ee_ram < 512: if EEVariables.ee_swap < 1000: Log.info(self, "Adding SWAP") diff --git a/ee/core/checkfqdn.py b/ee/core/checkfqdn.py index ea488a1f..915b2e24 100644 --- a/ee/core/checkfqdn.py +++ b/ee/core/checkfqdn.py @@ -4,6 +4,7 @@ import os def check_fqdn(self, ee_host): + """FQDN check with EasyEngine, for mail server hostname must be FQDN""" #ee_host=os.popen("hostname -f | tr -d '\n'").read() if '.' in ee_host: EEVariables.ee_fqdn = ee_host diff --git a/ee/core/database.py b/ee/core/database.py index 8fb0aa0f..573ee099 100644 --- a/ee/core/database.py +++ b/ee/core/database.py @@ -2,9 +2,10 @@ from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker from sqlalchemy.ext.declarative import declarative_base +from ee.core.variables import EEVariables # db_path = self.app.config.get('site', 'db_path') -engine = create_engine('sqlite:////var/lib/ee/ee.sqlite', convert_unicode=True) +engine = create_engine(EEVariables.ee_db_uri, convert_unicode=True) db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine)) diff --git a/ee/core/download.py b/ee/core/download.py index 90e70544..c0796658 100644 --- a/ee/core/download.py +++ b/ee/core/download.py @@ -11,6 +11,8 @@ class EEDownload(): pass def download(self, packages): + """Download packages, packges must be list in format of + [url, path, package name]""" for package in packages: url = package[0] filename = package[1] @@ -21,7 +23,8 @@ class EEDownload(): os.makedirs(directory) Log.info(self, "Downloading {0:20}".format(pkg_name), end=' ') urllib.request.urlretrieve(url, filename) - Log.info(self, "{0}".format("[" + Log.ENDC + "Done" + Log.OKBLUE + "]")) + Log.info(self, "{0}".format("[" + Log.ENDC + "Done" + + Log.OKBLUE + "]")) except urllib.error.URLError as e: Log.debug(self, "[{err}]".format(err=str(e.reason))) Log.error(self, "Unable to donwload file, {0}" diff --git a/ee/core/extract.py b/ee/core/extract.py index 534f7062..d8db19c5 100644 --- a/ee/core/extract.py +++ b/ee/core/extract.py @@ -8,6 +8,7 @@ class EEExtract(): """Method to extract from tar.gz file""" def extract(self, file, path): + """Function to extract tar.gz file""" try: tar = tarfile.open(file) tar.extractall(path=path) diff --git a/ee/core/mysql.py b/ee/core/mysql.py index 3b250c74..da77740f 100644 --- a/ee/core/mysql.py +++ b/ee/core/mysql.py @@ -10,6 +10,7 @@ class EEMysql(): """Method for MySQL connection""" def execute(self, statement, errormsg=''): + """Get login details from ~/.my.cnf & Execute MySQL query""" config = configparser.RawConfigParser() cnfpath = expanduser("~")+"/.my.cnf" if [cnfpath] == config.read(cnfpath): diff --git a/ee/core/shellexec.py b/ee/core/shellexec.py index c0791e6a..3827d7b8 100644 --- a/ee/core/shellexec.py +++ b/ee/core/shellexec.py @@ -12,6 +12,7 @@ class EEShellExec(): pass def cmd_exec(self, command, errormsg=''): + """Run shell command from Python""" try: Log.debug(self, "Running command: {0}".format(command)) retcode = subprocess.getstatusoutput(command) diff --git a/ee/core/variables.py b/ee/core/variables.py index ade26d28..e3d03117 100644 --- a/ee/core/variables.py +++ b/ee/core/variables.py @@ -115,5 +115,9 @@ class EEVariables(): ee_repo_file = "ee-repo.list" ee_repo_file_path = ("/etc/apt/sources.list.d/" + ee_repo_file) + # Application dabase file path + basedir = os.path.abspath(os.path.dirname('/var/lib/ee/')) + ee_db_uri = 'sqlite:///' + os.path.join(basedir, 'ee.db') + def __init__(self): pass diff --git a/install b/install new file mode 100644 index 00000000..ecb5125d --- /dev/null +++ b/install @@ -0,0 +1,241 @@ +#!/bin/bash + +# EasyEngine update script. +# This script is designed to install latest EasyEngine or +# to update current EasyEngine from 2.x to 3.x + +old_ee_version="2.2.3" +branch=$1 + +# Define echo function +# Blue color + +function ee_lib_echo() +{ + echo $(tput setaf 4)$@$(tput sgr0) +} +# White color +function ee_lib_echo_info() +{ + echo $(tput setaf 7)$@$(tput sgr0) +} +# Red color +function ee_lib_echo_fail() +{ + echo $(tput setaf 1)$@$(tput sgr0) +} + +# Capture errors +function ee_lib_error() +{ + echo "[ `date` ] $(tput setaf 1)$@$(tput sgr0)" + exit $2 +} + +function install_dep() +{ + # Execute: apt-get update + ee_lib_echo "Executing apt-get update" + apt-get update &>> /dev/null + + # Install Python3 on users system + ee_lib_echo "Installing pre depedencies" + apt-get -y install python3 python3-apt python3-setuptools python3-dev sqlite3 git + if [[ $? -ne 0 ]]; then + ee_lib_echo_fail "Unable to install pre depedencies" + exit 1 + fi +} + +function sync_db() +{ + mkdir /var/lib/ee + + # Sqlite query to create table `sites` into ee.db which will be used by ee.3.0 + echo "CREATE TABLE sites ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + sitename UNIQUE, + site_type CHAR, + cache_type CHAR, + site_path CHAR, + created_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + is_enabled INT, + is_ssl INT, + storage_fs CHAR, + storage_db CHAR + );" | sqlite3 /var/lib/ee/ee.db + + for site in $(ls /etc/nginx/sites-available/ | grep -v default); + do + if [ -f /etc/nginx/sites-available/$site ]; then + ENABLE_STATUS='1' + else + ENABLE_STATUS='0' + fi + # Find out information about current NGINX configuration + EE_SITE_CURRENT_TYPE=$(head -n1 /etc/nginx/sites-available/$site | grep "NGINX CONFIGURATION" | rev | cut -d' ' -f3,4,5,6,7 | rev | cut -d ' ' -f2,3,4,5) + # Detect current website type and cache + if [ "$EE_SITE_CURRENT_TYPE" = "HTML" ]; then + EE_SITE_CURRENT="html" + EE_SITE_CURRENT_CACHE="basic" + elif [ "$EE_SITE_CURRENT_TYPE" = "PHP" ]; then + EE_SITE_CURRENT="php" + EE_SITE_CURRENT_CACHE="basic" + elif [ "$EE_SITE_CURRENT_TYPE" = "MYSQL" ]; then + EE_SITE_CURRENT="mysql" + EE_SITE_CURRENT_CACHE="basic" + # Single WordPress + elif [ "$EE_SITE_CURRENT_TYPE" = "WPSINGLE BASIC" ]; then + EE_SITE_CURRENT="wp" + EE_SITE_CURRENT_CACHE="basic" + + elif [ "$EE_SITE_CURRENT_TYPE" = "WPSINGLE WP SUPER CACHE" ]; then + EE_SITE_CURRENT="wp" + EE_SITE_CURRENT_CACHE="wpsc" + + elif [ "$EE_SITE_CURRENT_TYPE" = "WPSINGLE W3 TOTAL CACHE" ]; then + EE_SITE_CURRENT="wp" + EE_SITE_CURRENT_CACHE="w3tc" + + elif [ "$EE_SITE_CURRENT_TYPE" = "WPSINGLE FAST CGI" ] || [ "$EE_SITE_CURRENT_TYPE" = "WPSINGLE FASTCGI" ]; then + EE_SITE_CURRENT="wp" + EE_SITE_CURRENT_CACHE="wpfc" + + # WordPress subdirectory + elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDIR BASIC" ]; then + EE_SITE_CURRENT="wpsubdir" + EE_SITE_CURRENT_CACHE="basic" + + elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDIR WP SUPER CACHE" ]; then + EE_SITE_CURRENT="wpsubdir" + EE_SITE_CURRENT_CACHE="wpsc" + + elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDIR W3 TOTAL CACHE" ]; then + EE_SITE_CURRENT="wpsubdir" + EE_SITE_CURRENT_CACHE="w3tc" + + elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDIR FAST CGI" ] || [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDIR FASTCGI" ]; then + EE_SITE_CURRENT="wpsubdir" + EE_SITE_CURRENT_CACHE="wpfc" + + # WordPress subdomain + elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDOMAIN BASIC" ]; then + EE_SITE_CURRENT="wpsubdomain" + EE_SITE_CURRENT_CACHE="basic" + + elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDOMAIN WP SUPER CACHE" ]; then + EE_SITE_CURRENT="wpsubdomain" + EE_SITE_CURRENT_CACHE="wpsc" + + elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDOMAIN W3 TOTAL CACHE" ]; then + EE_SITE_CURRENT="wpsubdomain" + EE_SITE_CURRENT_CACHE="w3tc" + + elif [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDOMAIN FAST CGI" ] || [ "$EE_SITE_CURRENT_TYPE" = "WPSUBDOMAIN FASTCGI" ]; then + EE_SITE_CURRENT="wpsubdomain" + EE_SITE_CURRENT_CACHE="wpfc" + fi + + WEBROOT="/var/www/$site" + + # Insert query to insert old site information into ee.db + echo "INSERT INTO sites (sitename, site_type, cache_type, site_path, is_enabled, is_ssl, storage_fs, storage_db) + VALUES (\"$site\", \"$EE_SITE_CURRENT\", \"$EE_SITE_CURRENT_CACHE\", \"$WEBROOT\", \"$ENABLE_STATUS\", 0, 'ext4', 'mysql');" | sqlite3 /var/lib/ee/ee.db + + done +} + + +function install_ee3() +{ + # Remove old clone of EasyEngine (ee) if any + rm -rf /tmp/easyengine &>> /dev/null + + # Clone EE 3.0 Python branch + ee_lib_echo "Cloning EasyEngine 3.0" + if [ "$branch" = "" ]; then + branch=python + fi + + git clone -b $branch https://github.com/rtCamp/easyengine.git /tmp/easyengine --quiet > /dev/null || ee_lib_error "Unable to clone EasyEngine, exit status" 1 + + cd /tmp/easyengine + ee_lib_echo "Installing EasyEngine 3.0" + python3 setup.py install || ee_lib_error "Unable to install EasyEngine 3.0, exit status " 1 + +} + +function update_to_ee3() +{ + # Preserve old configuration + ee_lib_echo "Updating EasyEngine 3.0 configuration" + + grant_host=$(grep grant-host /etc/easyengine/ee.conf | awk '{ print $3 }') + db_name=$(grep db-name /etc/easyengine/ee.conf | awk '{ print $3 }') + db_user=$(grep db-name /etc/easyengine/ee.conf | awk '{ print $3 }') + wp_prefix=$(grep prefix /etc/easyengine/ee.conf | awk '{ print $3 }') + wp_user=$(grep 'user ' /etc/easyengine/ee.conf | grep -v db-user |awk '{ print $3 }') + wp_pass=$(grep password /etc/easyengine/ee.conf | awk '{ print $3 }') + wp_email=$(grep email /etc/easyengine/ee.conf | awk '{ print $3 }') + ip_addr=$(grep ip-address /etc/easyengine/ee.conf |awk -F'=' '{ print $2 }') + + sed -i "s/ip-address.*/ip-address = ${ip_addr}/" /etc/ee/ee.conf && \ + sed -i "s/grant-host.*/grant-host = ${grant_host}/" /etc/ee/ee.conf && \ + sed -i "s/db-name.*/db-name = ${db-name}/" /etc/ee/ee.conf && \ + sed -i "s/db-user.*/db-user = ${db_user}/" /etc/ee/ee.conf && \ + sed -i "s/prefix.*/prefix = ${wp_prefix}/" /etc/ee/ee.conf && \ + sed -i "s/^user.*/user = ${wp_user}/" /etc/ee/ee.conf && \ + sed -i "s/password.*/password = ${wp_password}/" /etc/ee/ee.conf && \ + sed -i "s/email.*/email = ${wp_email}/" /etc/ee/ee.conf || ee_lib_error "Unable to update configuration, exit status " 1 + + + # Remove old EasyEngine + ee_lib_echo "Removing EasyEngine 2" + rm -rf /etc/bash_completion.d/ee /etc/easyengine/ /usr/share/easyengine/ /usr/local/lib/easyengine /usr/local/sbin/easyengine /usr/local/sbin/ee /var/log/easyengine + +} + +function git_init() +{ + # Do git intialisation on EasyEngine configuration + cd /etc/ee + if [ ! -d /etc/ee/.git ]; then + git init > /dev/null + fi + git add . + git commit -am "Installed/Updated to EasyEngine 3" > /dev/null + +} + +# Checking permissions +if [[ $EUID -ne 0 ]]; then + ee_lib_echo_fail "Sudo privilege required..." + ee_lib_echo_fail "Uses: wget -qO ee rt.cx/ee && sudo bash ee" + exit 1 +fi + +# Check old EasyEngine is installed or not +if [ ! -f /usr/local/sbin/easyengine ]; then + # Check latest EasyEngine is installed or not + if [ ! -f /usr/local/bin/ee ]; then + install_dep + install_ee3 + git_init + else + ee_lib_echo_fail "EasyEngine 3 allready installed on ur system" + exit 1 + fi +else + # Check old EasyEngine version + ee version | grep ${old_ee_version} &>> /dev/null + if [[ $? -ne 0 ]]; then + ee_lib_echo_fail "EasyEngine $old_ee_version not found on your system" + ee_lib_echo_fail "Please update it using command: ee update" + exit 1 + fi + install_dep + sync_db + install_ee3 + update_to_ee3 + git_init +fi diff --git a/setup.py b/setup.py index 4e0ee309..87d6a385 100644 --- a/setup.py +++ b/setup.py @@ -86,3 +86,13 @@ setup(name='ee', """, namespace_packages=[], ) + +print("""\033[94m +For EasyEngine (ee) auto completion, run the following command +\033[92m +source /etc/bash_completion.d/ee_auto.rc +\033[94m +EasyEngine (ee) installed successfully +EasyEngine (ee) help: https://rtcamp.com/easyengine/docs/ +\033[0m +""") diff --git a/upgrade b/upgrade deleted file mode 100644 index 7c9a6cec..00000000 --- a/upgrade +++ /dev/null @@ -1,114 +0,0 @@ -#!/bin/bash - -# EasyEngine update script. -# This script is designed to update current EasyEngine from 2.2.2 to 3.x -# Define echo function -old_ee_version="2.2.3" -branch=$1 - -# Blue color - -function ee_lib_echo() -{ - echo $(tput setaf 4)$@$(tput sgr0) -} -# White color -function ee_lib_echo_info() -{ - echo $(tput setaf 7)$@$(tput sgr0) -} -# Red color -function ee_lib_echo_fail() -{ - echo $(tput setaf 1)$@$(tput sgr0) -} - -# Checking permissions -if [[ $EUID -ne 0 ]]; then - ee_lib_echo_fail "Sudo privilege required..." - ee_lib_echo_fail "Uses: wget -qO ee rt.cx/ee && sudo bash ee" - exit 1 -fi - -# Check old EasyEngine is installed or not -if [ ! -f /usr/local/sbin/easyengine ]; then - ee_lib_echo_fail "EasyEngine 2.0 not found" - exit 1 -fi - -# Check old EasyEngine version -ee version | grep ${old_ee_version} &>> /dev/null -if [[ $? -ne 0 ]]; then - ee_lib_echo_fail "EasyEngine $old_ee_version not found on your system" - ee_lib_echo_fail "Please update is using command: ee update" - exit 1 -fi - -# Capture errors -function ee_lib_error() -{ - echo "[ `date` ] $(tput setaf 1)$@$(tput sgr0)" - exit $2 -} - -# Execute: apt-get update -ee_lib_echo "Executing apt-get update" -apt-get update &>> /dev/null - -# Install Python3 on users system -ee_lib_echo "Installing Python3" -apt-get -y install python3 python3-apt python3-setuptools python3-dev -if [[ $? -ne 0 ]]; then - ee_lib_echo_fail "Unable to install Python3 on system" - exit 1 -fi - -# Remove old version of EasyEngine (ee) -rm -rf /tmp/easyengine &>> /dev/null - -# Clone EE 3.0 Python branch -ee_lib_echo "Cloning EasyEngine 3.0" -if [ "$branch" = "" ]; then - branch=python -fi - -git clone -b $branch https://github.com/rtCamp/easyengine.git /tmp/easyengine > /dev/null || ee_lib_error "Unable to clone EasyEngine, exit status" 1 - -cd /tmp/easyengine -ee_lib_echo "Installing EasyEngine 3.0" -python3 setup.py install || ee_lib_error "Unable to install EasyEngine 3.0, exit status " 1 - -# Preserve old configuration -ee_lib_echo "Updating EasyEngine 3.0 configuration" - -grant_host=$(grep grant-host /etc/easyengine/ee.conf | awk '{ print $3 }') -db_name=$(grep db-name /etc/easyengine/ee.conf | awk '{ print $3 }') -db_user=$(grep db-name /etc/easyengine/ee.conf | awk '{ print $3 }') -wp_prefix=$(grep prefix /etc/easyengine/ee.conf | awk '{ print $3 }') -wp_user=$(grep 'user ' /etc/easyengine/ee.conf | grep -v db-user |awk '{ print $3 }') -wp_pass=$(grep password /etc/easyengine/ee.conf | awk '{ print $3 }') -wp_email=$(grep email /etc/easyengine/ee.conf | awk '{ print $3 }') -ip_addr=$(grep ip-address /etc/easyengine/ee.conf |awk -F'=' '{ print $2 }') - -sed -i "s/ip-address.*/ip-address = ${ip_addr}/" /etc/ee/ee.conf && \ -sed -i "s/grant-host.*/grant-host = ${grant_host}/" /etc/ee/ee.conf && \ -sed -i "s/db-name.*/db-name = ${db-name}/" /etc/ee/ee.conf && \ -sed -i "s/db-user.*/db-user = ${db_user}/" /etc/ee/ee.conf && \ -sed -i "s/prefix.*/prefix = ${wp_prefix}/" /etc/ee/ee.conf && \ -sed -i "s/^user.*/user = ${wp_user}/" /etc/ee/ee.conf && \ -sed -i "s/password.*/password = ${wp_password}/" /etc/ee/ee.conf && \ -sed -i "s/email.*/email = ${wp_email}/" /etc/ee/ee.conf || ee_lib_error "Unable to update configuration, exit status " 1 - - -# Remove old EasyEngine -ee_lib_echo "Removing EasyEngine 2" -rm -rf /etc/bash_completion.d/ee /etc/easyengine/ /usr/share/easyengine/ /usr/local/lib/easyengine /usr/local/sbin/easyengine /usr/local/sbin/ee /var/log/easyengine - -ee_lib_echo "Doing GIT init" -cd /etc/ee -if [ ! -d /etc/ee/.git ]; then - git init > /dev/null -fi -git commit -am "Update EasyEngine 2 to EasyEngine 3" > /dev/null - -ee_lib_echo "Successfully update to EasyEngine 3"