diff --git a/automation/composer.json b/automation/composer.json index 6dfdd6b..48e37d6 100644 --- a/automation/composer.json +++ b/automation/composer.json @@ -6,6 +6,7 @@ "setbased/php-audit": "^1.9", "monolog/monolog": "^3.5", "league/flysystem": "^3.23", - "league/flysystem-sftp-v3": "^3.22" + "league/flysystem-sftp-v3": "^3.22", + "pinga/crontab": "^1.0" } } diff --git a/automation/cron.php b/automation/cron.php new file mode 100644 index 0000000..0e5c533 --- /dev/null +++ b/automation/cron.php @@ -0,0 +1,155 @@ + false, // Set to true to enable + 'backup' => false, // Set to true to enable + 'gtld_mode' => false, // Set to true to enable + 'spec11' => false, // Set to true to enable +]; + +// Zone Generator +$writezone = new Worker(); +$writezone->name = 'Zone Generator'; +$writezone->onWorkerStart = function () { + new Crontab('*/15 * * * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/write-zone.php > /dev/null 2>&1'); + }); +}; + +// System Maintenance +$maintenance = new Worker(); +$maintenance->name = 'System Maintenance'; +$maintenance->onWorkerStart = function () { + new Crontab('35 * * * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/registrar.php > /dev/null 2>&1'); + }); + + new Crontab('59 * * * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/statistics.php > /dev/null 2>&1'); + }); + + new Crontab('50 1 * * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/rdap-urls.php > /dev/null 2>&1'); + }); + + new Crontab('0 0 * * 1', function(){ + exec('/usr/bin/php8.2 /var/www/cp/bin/file_cache.php > /dev/null 2>&1'); + }); +}; + +// Domain Maintenance +$domainmaint = new Worker(); +$domainmaint->name = 'Domain Maintenance'; +$domainmaint->onWorkerStart = function () { + new Crontab('30 * * * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/change-domain-status.php > /dev/null 2>&1'); + }); + + new Crontab('45 * * * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/auto-approve-transfer.php > /dev/null 2>&1'); + }); + + new Crontab('5 0 * * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/auto-clean-unused-contact-and-host.php > /dev/null 2>&1'); + }); +}; + +// Accounting +if ($cronJobConfig['accounting']) { + $accounting = new Worker(); + $accounting->name = 'Accounting'; + $accounting->onWorkerStart = function () { + new Crontab('1 0 1 * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/send-invoice.php > /dev/null 2>&1'); + }); + }; +} + +// Backup +if ($cronJobConfig['backup']) { + $backup = new Worker(); + $backup->name = 'Backup'; + $backup->onWorkerStart = function () { + new Crontab('15 * * * *', function(){ + exec('/opt/registry/automation/vendor/bin/phpbu --configuration=/opt/registry/automation/backup.json > /dev/null 2>&1'); + }); + + new Crontab('30 * * * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/backup-upload.php > /dev/null 2>&1'); + }); + }; +} + +// Spec11 Reports +if ($cronJobConfig['spec11']) { + $spec11 = new Worker(); + $spec11->name = 'Spec11 Reports'; + $spec11->onWorkerStart = function () { + new Crontab('30 * * * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/abusemonitor.php > /dev/null 2>&1'); + }); + + new Crontab('5 0 * * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/abusereport.php > /dev/null 2>&1'); + }); + }; +} + +// TMCH +if ($cronJobConfig['gtld_mode']) { + $tmch = new Worker(); + $tmch->name = 'TMCH'; + $tmch->onWorkerStart = function () { + new Crontab('10 0 * * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/lordn.php > /dev/null 2>&1'); + }); + + new Crontab('0 0,12 * * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/tmch.php > /dev/null 2>&1'); + }); + }; +} + +// URS +if ($cronJobConfig['gtld_mode']) { + $urs = new Worker(); + $urs->name = 'URS'; + $urs->onWorkerStart = function () { + new Crontab('45 * * * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/urs.php > /dev/null 2>&1'); + }); + }; +} + +// Escrow +if ($cronJobConfig['gtld_mode']) { + $escrow = new Worker(); + $escrow->name = 'Escrow'; + $escrow->onWorkerStart = function () { + new Crontab('5 0 * * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/escrow.php > /dev/null 2>&1'); + }); + }; +} + +// Reporting +if ($cronJobConfig['gtld_mode']) { + $reporting = new Worker(); + $reporting->name = 'Reporting'; + $reporting->onWorkerStart = function () { + new Crontab('1 0 1 * *', function(){ + exec('/usr/bin/php8.2 /opt/registry/automation/reporting.php > /dev/null 2>&1'); + }); + }; +} + +Worker::runAll(); \ No newline at end of file diff --git a/docs/install.md b/docs/install.md index 106b2f6..9e86bf0 100644 --- a/docs/install.md +++ b/docs/install.md @@ -441,10 +441,6 @@ composer require phpmailer/phpmailer This command will install one of the packages which are essential for the message broker script to function correctly. -### Configuring the Crontab for Automation Scripts - -To set up automated tasks for Namingo, open the example crontab file located at ```/opt/registry/automation/crontab.example```. Review the contents and copy the relevant lines into your system's crontab file. Remember to adjust the paths and timings as necessary to suit your environment. - ### Configuring the Message Broker You can easily configure the message broker for email delivery in ```config.php```. It is compatible with SendGrid, Mailgun API, and PHPMailer for those opting to use their own SMTP server. All necessary settings are conveniently located under the mailer_ lines within the file. @@ -526,6 +522,17 @@ Always keep your private key secure. Do not share it. If someone gains access to Please send the exported `publickey.asc` to your RDE provider, and also place the path to `privatekey.asc` in the escrow.php system as required. +### Running the Automation System + +Once you have successfully configured all automation scripts, you are ready to initiate the automation system. Please proceed by executing the commands listed below: + +```bash +cd /opt/registry/automation +php cron.php start +``` + +Alternatively, you may opt for the traditional Linux crontab method. Should you choose this approach, begin by accessing the sample crontab file at ```/opt/registry/automation/crontab.example```. Carefully examine its contents, and then copy the pertinent lines into your system's crontab file. + ## 13. Setup DAS: ```bash diff --git a/docs/install.sh b/docs/install.sh index 8b246d7..48e6a20 100644 --- a/docs/install.sh +++ b/docs/install.sh @@ -405,7 +405,7 @@ EOF echo -e "Next steps:\n" echo -e "1. Configure each component by editing their respective configuration files." echo -e "2. Once configuration is complete, start each service with the following command:\n systemctl start SERVICE_NAME.service\n Replace 'SERVICE_NAME' with the specific service (whois, rdap, epp, das) as needed." - echo -e "3. To set up automation services, refer to the configuration manual and edit the files in:\n /opt/registry/automation\n" + echo -e "3. To set up automation services, refer to the configuration manual, edit the config in:\n /opt/registry/automation/config.php and run php /opt/registry/automation/cron.php start\n" echo -e "For more detailed information, please consult the accompanying documentation or support resources." else echo "Unsupported Linux distribution or version"