Application Commands:

    # Add User
    clpctl user:add --userName='john.doe' --email='john.doe@domain.com' --firstName='John' --lastName='Doe' --password='!password!' --role='admin' --timezone='UTC' --status='1'
    clpctl user:add --userName='john.doe' --email='john.doe@domain.com' --firstName='John' --lastName='Doe' --password='!password!' --role='site-manager' --timezone='UTC' --status='1'
    clpctl user:add --userName='john.doe' --email='john.doe@domain.com' --firstName='John' --lastName='Doe' --password='!password!' --role='user' --sites='domain.com,domain.io' --timezone='Europe/Berlin' --status='1'

    # Delete User
    clpctl user:delete --userName='john.doe'

    # List Users
    clpctl user:list

    # Resets users password
    clpctl user:reset:password --userName='stefan' --password='stefan87'

    # Disable MFA for user
    clpctl user:disable:mfa --userName='stefan'

    # Enable CloudPanel Basic Auth
    clpctl cloudpanel:enable:basic-auth --userName='stefan' --password='stefan87'

    # Disable CloudPanel Basic Auth
    clpctl cloudpanel:disable:basic-auth

    # Set Release Channel
    clpctl cloudpanel:set:release-channel --channel='test'
    clpctl cloudpanel:set:release-channel --channel='stable'

    # Delete CloudPanel Sites
    clpctl cloudpanel:delete:sites

    # Get Config Value
    clpctl app:get:config-value 'cloud'
    clpctl app:get:config-value 'release_channel'

    # Set a Config Value
    clpctl app:get:config-value 'key' 'value'

    # CloudFlare update IP ranges
    clpctl cloudflare:update:ips
    clpctl cloudflare:update:ips --delay=true

    # Let's Encrypt Install Certificate
    clpctl lets-encrypt:install:certificate --domainName=www.domain.com
    clpctl lets-encrypt:install:certificate --domainName=www.domain.com --subjectAlternativeName=domain1.com,www.domain1.com

    # Let's Encrypt Renew Domains
    clpctl lets-encrypt:renew:certificates

    # Let's Encrypt Renew Custom Domain
    clpctl lets-encrypt:renew:custom-domain:certificate

    # Delete a Site
    clpctl site:delete --domainName=www.domain.com

    # Add a Nodejs Site
    clpctl site:add:nodejs --domainName=www.moby.io --nodejsVersion=16 --appPort=3000 --siteUser=moby --siteUserPassword='stefan87'

    # Add a Static HTML Site
    clpctl site:add:static --domainName=www.moby.io --siteUser=moby --siteUserPassword='stefan87'

    # Add a Python Site
    clpctl site:add:python --domainName=www.moby.io --pythonVersion=3.9 --appPort=8080 --siteUser=moby --siteUserPassword='stefan87'

    # Add a PHP Site
    clpctl site:add:php --domainName=www.moby.io --phpVersion=8.1 --vhostTemplate='Generic' --siteUser=moby --siteUserPassword='stefan87'

    # Add a Reverse Proxy
    clpctl site:add:reverse-proxy --domainName=www.moby.io --reverseProxyUrl='http://8.8.8.8' --siteUser='moby' --siteUserPassword='stefan87'

    # Install Certificate
    clpctl site:install:certificate --domainName=www.moby.io --privateKey=/path/to/private.key --certificate=/path/to/certificate.crt --certificateChain=/path/to/chain.crt

    # Show Database Master Credentials
    clpctl db:show:master-credentials

    # Add Database
    clpctl db:add --domainName=www.moby.io --databaseName=moby --databaseUserName=moby --databaseUserPassword='stefan123'

    # Export Database
    clpctl db:export --databaseName=magento2 --file=dump.sql

    # Import Database
    clpctl db:import --databaseName=magento2 --file=dump.sql

    # Delete Database
    clpctl db:delete  --databaseName=moby

    # Backup Databases
    clpctl db:backup --ignoreDatabases='db1,db2' --retentionPeriod=7

    # System Permissions Reset
    clpctl system:permissions:reset --path=. --directories=770 --files=660

    # Import Vhost Templates
    clpctl vhost-templates:import
    clpctl vhost-templates:import --delay=true

    # List Vhost Templates
    clpctl vhost-templates:list

    # Add Vhost Template
    clpctl vhost-template:add --name='My Application' --file=/tmp/template.tpl
    clpctl vhost-template:add --name='Magento 2' --file=https://gist.githubusercontent.com/swieczorek/2389d894644b65e8eb61ce2e39923b9e/raw/9234bbbcacb6425fc19372aea1856ba0d81ddd44/gistfile1.txt

    # Delete Vhost Template
    clpctl vhost-template:delete --name='My Application'
    clpctl vhost-template:delete --name='Magento 2'

    # View Vhost Template
    clpctl vhost-template:view --name='My Application'

    # Clean Monitoring Data
    clpctl monitoring:data:clean

    # Remote Backup
    clpctl remote-backup:create

## Cloud Commands

    # AWS create image
    clpctl aws:image:create --frequency=3

    # Do create snapshot
    clpctl do:snapshot:create --frequency=3

    # Gce create snapshot
    clpctl gce:snapshot:create --frequency=3

    # Vultr create snapshot
    clpctl vultr:snapshot:create --frequency=3


Symfony Commands:

  // Creates an entity
  php8.1 bin/console make:entity

  // Generates getter/setter methods
  php8.1 bin/console make:entity --regenerate App

  // Load fixtures
  php8.1 bin/console doctrine:fixtures:load -n

  // Validates database schema
  php8.1 bin/console doctrine:schema:validate

  // Updates database schema
  php8.1 bin/console doctrine:schema:update --force

  // Displays events and listeners
  php8.1 bin/console debug:event-dispatcher

  // List status of migrations
  php8.1 bin/console doctrine:migrations:status

  // List status of migrations
  php8.1 bin/console doctrine:migrations:list

  // Run migrations
  php8.1 bin/console doctrine:migrations:migrate -n

  // Validation translation files
  php8.1 bin/console lint:xliff translations

  // Execute SQL Query
  php8.1 bin/console doctrine:query:sql "SELECT name FROM sqlite_schema WHERE type ='table' AND name NOT LIKE 'sqlite_%';"
  php8.1 bin/console doctrine:query:sql "DELETE from doctrine_migration_versions;"
  php8.1 bin/console doctrine:query:sql "DELETE from notification;"
  php8.1 bin/console doctrine:query:sql "DELETE from site;"
  php8.1 bin/console doctrine:query:sql "SELECT type, sql FROM sqlite_master WHERE tbl_name='php_settings';"
  php8.1 bin/console doctrine:query:sql "DELETE from php_settings;"
  php8.1 bin/console doctrine:query:sql "SELECT * from config where key = 'cloud';"
  php8.1 bin/console doctrine:query:sql "SELECT * from user;"
  php8.1 bin/console doctrine:query:sql "SELECT * from instance_cpu;"

  // Database Backups
  su -s /bin/bash -c '/usr/bin/clpctl db:backup --ignoreDatabases='db1,db2' --retentionPeriod=7' clp

  // Example Queries
  su -s /bin/bash -c '/usr/bin/php8.1 /home/clp/htdocs/app/files/bin/console doctrine:query:sql "SELECT * from config where key = \"le_private_key\";"' clp
  su -s /bin/bash -c '/usr/bin/php8.1 /home/clp/htdocs/app/files/bin/console doctrine:query:sql "SELECT * from instance_cpu order by created_at DESC limit 10;"' clp
  su -s /bin/bash -c '/usr/bin/php8.1 /home/clp/htdocs/app/files/bin/console doctrine:query:sql "SELECT * from config where key = \"instance_uid\";"' clp
  su -s /bin/bash -c '/usr/bin/php8.1 /home/clp/htdocs/app/files/bin/console doctrine:query:sql "SELECT * from certificate;"' clp
  su -s /bin/bash -c '/usr/bin/php8.1 /home/clp/htdocs/app/files/bin/console doctrine:query:sql "SELECT * from user;"' clp

  // Doctrine Migration Commands
  su -s /bin/bash -c '/usr/bin/php8.1 /home/clp/htdocs/app/files/bin/console doctrine:migrations:list' clp

  // Renew Let's Encrypt Certificates
  su -s /bin/bash -c '/usr/bin/clpctl lets-encrypt:renew:certificates' clp

  // Setting Expiration Date
  su -s /bin/bash -c '/usr/bin/php8.1 /home/clp/htdocs/app/files/bin/console doctrine:query:sql "SELECT * from certificate where uid = \"bf84903133e86d61d2e88f55ec859ab7d646742d\";"' clp
  su -s /bin/bash -c '/usr/bin/php8.1 /home/clp/htdocs/app/files/bin/console doctrine:query:sql "UPDATE certificate SET expires_at = \"2024-11-16 16:27:24\" WHERE uid = \"2a6f44a3df1159309aa0d84ed26905bf454365cf\";"' clp

  // CleanUp CloudPanel Sessions
  su -s /bin/bash -c '/usr/bin/clpctl app:clean-up:sessions' clp

  // Create Remote Backup
  su -s /bin/bash -c '/usr/bin/clpctl remote-backup:create' clp

  // Display environment variables
  php8.1 bin/console about

  // Display all services
  php8.1 bin/console debug:container

  // Displays all routes
  php8.1 bin/console debug:router

  // Validation translation files
  php8.1 bin/console lint:xliff translations

Composer Update:
  php8.1 /usr/local/bin/composer update

Rclone Commands:
  // Get files as json
  rclone lsjson remote:clp-sw-bucket/backups/
  // Google Drive
  rclone --drive-impersonate stefan.wieczorek@mgt-commerce.com lsjson remote:/

  // Mount S3 Bucket
  mkdir /mnt/s3
  rclone mount remote:clp-sw-bucket /mnt/s3

  // Copy file
  rclone copy /home/wp-blog/tmp/backup.tar remote:clp-sw-bucket/backups/2022-07-21/home/wp-blog/

  // Delete Files
  rclone purge remote:clp-sw-bucket/backups/

Links:
  API:
    - https://www.baeldung.com/rest-api-error-handling-best-practices
    - https://swagger.io/specification/
    - https://www.vultr.com/api/
    - https://docs.digitalocean.com/reference/api/api-reference/
    - https://mailchimp.com/developer/marketing/api/campaigns/add-campaign/

  Validation:
    - https://symfony.com/doc/current/validation/raw_values.html


UFW:
  // Force Reset
  /usr/sbin/ufw --force reset

  // Allow services
  /usr/sbin/ufw allow 22/tcp
  /usr/sbin/ufw allow 80/tcp
  /usr/sbin/ufw allow 443/tcp

  // Enable with dry-run
  /usr/sbin/ufw --dry-run --force enable

  // Status
  /usr/sbin/ufw status numbered

Dev Docker Container:
  // Run
  docker run -d --net=bridge -v /var/lib/mysql -v /home/cloudpanel --restart=always --privileged -h clp-dev-v2 --name clp-dev-v2 -it -p 25:25 -p 80:80 -p 443:443 -p 8443:8443 -p 8843:8843 -p 22:22 -p 3306:3306 -p 9200:9200 -p 15672:15672 mgtcommerce/mgt-dev:cloudpanel

