Dep. Comercial +40 365-882.777 +40 722-241.273 Lun-Vin: 10:00-18:00
View Categories

Automatizarea in DirectAdmin cu hook-uri pre- si post-

8 minute de citit

Gradul in care DirectAdmin poate fi personalizat este nelimitat. Cei care doresc sa dezvolte un mediu de gazduire in propriul stil si functionalitati ar trebui sa ia in considerare utilizarea DirectAdmin ca fundament. Cu acesta, posibilitatile sunt numeroase, de la stilul personalizat la temele custom, la inregistrari specifice DNS implicite sau sabloane de fisiere personalizate.

Scopul acestui articol este a explora hook-urile pre- si post- in DirectAdmin, utilizate pentru a efectua actiunile dorite în urma evenimentelor specificate. Vom folosi un post hook al crearii contului pentru a instala și configura automat WordPress pentru domeniile adăugate prin intermediul panoului.

Cum functioneaza

Iata care sunt pasii:
1. Scrieti script-ul si salvati-l cu numele hook-ului pre sau post pe care doriti sa il utilizati
2. Plasati scriptul in /usr/local/directadmin/scripts/custom/
3. chmod 700
4. chown diradmin.diradmin

In ceea ce priveste denumirea scriptului, trebuie sa il denumiti pentru hook-ul pe care doriti sa-l utilizati. Iată câteva exemple preluate din fișierul /usr/local/directadmin/scripts/custom/README, deși există multe alte hook-uri disponibile:

domain_create_pre.sh Se executa INAINTE de a fi creat un domeniu
domain_create_post.sh Se executa DUPA crearea domeniului
domain_destroy_pre.sh Se executa INAINTE de a inlatura un domeniu
domain_destroy_post.sh Se executa DUPA inlaturarea domeniului
domain_change_pre.sh Se executa INAINTE de redenumirea domeniului. O valoare non-zero va anula modificarea.
domain_change_post.sh Se executa DUPA redenumirea domeniului.
subdomain_create_pre.sh Se executa INAINTE de crearea unui subdomeniu, dar dupa ce este confirmat. Daca scriptul returneaza o valoare non-zero, crearea este anulata.
subdomain_create_post.sh Se executa DUPA crearea subdomeniului.
subdomain_destroy_pre.sh Se executa INAINTE de inlaturarea unui subdomeniu. Daca scriptul returneaza o valoare non-zero, inlaturarea este anulata.
subdomain_destroy_post.sh Se executa DUPA inlaturarea subdomeniului.
user_create_pre.sh Se executa INAINTE de crearea unui utilizator, dar dupa ce este confirmat. Daca scriptul returneaza altceva decat zero, crearea este anulata.
user_create_post.sh Se executa DUPA crearea utilizatorului.
user_destroy_pre.sh Se executa INAINTE de inlaturarea unui utilizator. Daca scriptul returneaza altceva decat zero, inlaturarea este anulata.
user_destroy_post.sh Se executa DUPA inlaturarea utilizatorului.
user_modify_post.sh Se executa DUPA modificarea utilizatorului.
email_create_pre.sh Se executa INAINTE de crearea emailului virtual, dar dupa ce este confirmat. Daca scriptul returneaza altceva decat zero, crearea este anulata.
email_create_post.sh Se executa DUPA crearea emailului.
email_destroy_pre.sh Se executa DUPA stergerea contului de email virtual.
email_change_pass_post.sh Se executa INAINTE de a fi modificata o parola virtuala a contului pop. Daca scriptul returneaza altceva decat zero, modificarea este anulata.
email_change_pass_post.sh Se executa DUPA modificarea unei  parole virtuale a contului pop.
dns_write_post.sh Se executa DUPA scrierea unei zone DNS (/var/named/domain.com.db)
database_create_post.sh Se executa DUPA crearea unei baze de date.
database_user_create_post.sh Se executa DUPA crearea unui utilizator pentru o baza de date.
domain_pointer_destroy_pre.sh Se executa INAINTE de inlaturarea unui domain pointer
domain_pointer_destroy_post.sh Se executa DUPA de inlaturarea unui domain pointer

Instalarea WordPress pentru fiecare domeniu creat prin DirectAdmin

Vom continua cu pasii amintiti mai sus dar folosind ca exemplu instalarea WP-CLI WordPress la crearea contului. În primul rând, trebuie să scrieți scriptul pe care doriți să-l rulați la crearea domeniului. Rețineți că acest script folosește WP-CLI, deci trebuie instalat pe serverul dvs. la /usr/local/bin/wp  pentru a putea folosi scriptul.

PASUL 1 Scrieti script-ul si salvati-l cu numele hook-ului pre sau post pe care doriti sa il utilizati

Dacă ne uitam la README-ul localizat in /usr/local/directadmin/scripts/custom/, acesta ne arata ce variabile de mediu ne sunt disponibile.

#!/bin/bash
exec 2>/usr/local/directadmin/customscripts.error.log

#set up DB variables
dbpass=$(openssl rand -hex 6) > /dev/null
ext=$(openssl rand -hex 2) > /dev/null
dbuser="wp${ext}"    # do not include the username_ for dataskq here as DA adds this 
wpconfigdbuser="${username}_wp${ext}"
wpadminpass=$(openssl rand -hex 6) > /dev/null

# install wp
if [ -f /home/$username/domains/$domain/public_html/index.php ]; then 
 echo "WARNING: There appears to be an index file already located in this directory, which indicates that an installation is already present! Empty the directory before running the script again."
 exit 
else

 #Disable DAs index.html file
 if [ -f /home/$username/domains/$domain/public_html/index.html ]; then
  mv /home/$username/domains/$domain/public_html/index.html{,.bak}
 fi

 #Create DB
 /usr/bin/mysqladmin -uda_admin -p$(cat /usr/local/directadmin/conf/mysql.conf | grep pass | cut -d\= -f2 ) create ${wpconfigdbuser};
 echo "CREATE USER ${wpconfigdbuser} IDENTIFIED BY '${dbpass}';" | mysql -uda_admin -p$(cat /usr/local/directadmin/conf/mysql.conf | grep pass | cut -d\= -f2 );
 echo "GRANT ALL PRIVILEGES ON ${wpconfigdbuser}.* TO ${wpconfigdbuser} IDENTIFIED BY '${dbpass}';" | mysql -uda_admin -p$(cat /usr/local/directadmin/conf/mysql.conf | grep pass | cut -d\= -f2);

 #Download WP
 cd /home/$username/domains/$domain/public_html/
 su -c "/usr/local/bin/wp core download" $username

 #set database details in the config file
 su -c "/usr/local/bin/wp config create --dbname=$wpconfigdbuser --dbuser=$wpconfigdbuser --dbpass=$dbpass --dbhost=localhost" $username

 #Make symlinks for https and configure wp-config.php and rewrite rules
 if [[ $ssl == 'ON' ]]; then
  su -c "/usr/local/bin/wp core install --url=https://$domain/ --admin_user=admin --admin_password=$wpadminpass --title= --admin_email=admin@$domain " $username
  su -c "/usr/local/bin/wp rewrite structure '/%postname%/'" $username
  printf "\n\nADMIN LOGIN CREDENTIALS:\nURL:https://$domain/wp-admin/\nUSERNAME:admin\nPASSWORD:$wpadminpass\n\n"
  if [[ ! -h /home/$username/domains/$domain/private_html ]]; then
   echo "Making a symlink for https..." 
   cd /home/$username/domains/$domain/
   rm -rf private_html
   su -c "ln -s public_html private_html" $username
  fi
 else
  su -c "/usr/local/bin/wp core install --url=http://$domain/ --admin_user=admin --admin_password=$wpadminpass --title= --admin_email=admin@$domain " $username
  su -c "/usr/local/bin/wp rewrite structure '/%postname%/'" $username
  printf "\n\nADMIN LOGIN CREDENTIALS:\nURL:http://$domain/wp-admin/\nUSERNAME:admin\nPASSWORD:$wpadminpass\n\n"
 fi

 #Create .htaccess
 cat << EOF > /home/$username/domains/$domain/public_html/.htaccess
# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress
EOF
chown $username. /home/$username/domains/$domain/public_html/.htaccess
fi

PASUL 2. Plasati scriptul in /usr/local/directadmin/scripts/custom/

Scriptul va trebui să fie plasat in directorul de scripturi custom al DirectAdmin pentru a-l gasi. Va trebui să fiți autentificat  ca utilizator cu drepturi de root prin  consola SSH pentru a accesa acest director.

PASUL 3 & 4 Faceti scriptul executabil si accesibil in DirectAdmin:

chmod 700 /usr/local/directadmin/scripts/custom/domain_create_post.sh
chown diradmin.diradmin /usr/local/directadmin/scripts/custom/domain_create_post.sh

Va puteți acum autentifica in DirectAdmin si sa creati un domeniu de test.

Lasați un anumit timp ca DirectAdmin sa proceseze lista de sarcini, apoi accesati  URL-ul și conectați-vă folosind datele de autentificare furnizate.

Puteti verifica acest log pentru a vedea daca au aparut erori fatale la rularea scriptului. De asemenea, poate fi necesar să asteoptati pana la 2 minute înainte de a încerca să accesați pagina dvs. de autentificare cu drepturi de admin in WordPress, deoarece DirectAdmin poate necesita până la un minut pentru a procesa sarcinile în așteptare.

Acest script va trebui rescris pentru subdomenii dacă doriți ca WordPress să fie instalat și la crearea subdomeniilor. Scriptul va fi rescris folosind path-urile corespunzatoare si va fi denumit „subdomain_create_post.sh”.

Iata scriptul rescris aici, insa cu cateva considerente. In primul rând, nu există nicio variabilă de mediu SSL care să verifice dacă SSL este sau nu acceptat. Deoarece este cel mai bine să se utilizeze https și datorită ușurinței și disponibilității SSL-urilor gratuite datorită Let’s Encrypt, vom presupune că SSL este activat pentru utilizator.

#!/bin/bash
exec 2>/usr/local/directadmin/customscripts.error.log

#set up DB variables
dbpass=$(openssl rand -hex 6) > /dev/null
ext=$(openssl rand -hex 2) > /dev/null
dbuser="wp${ext}"    # do not include the username_ for dataskq here as DA adds this 
wpconfigdbuser="${username}_wp${ext}"
wpadminpass=$(openssl rand -hex 6) > /dev/null

# install wp
if [ -f /home/$username/domains/$domain/public_html/$subdomain/index.php ]; then 
 echo "WARNING: There appears to be an index file already located in this directory, which indicates that an installation is already present! Empty the directory before running the script again."
 exit 
else

 #Disable DAs index.html file
 if [ -f /home/$username/domains/$domain/public_html/$subdomain/index.html ]; then
  mv /home/$username/domains/$domain/public_html/$subdomain/index.html{,.bak}
 fi

 #Create DB
 /usr/bin/mysqladmin -uda_admin -p$(cat /usr/local/directadmin/conf/mysql.conf | grep pass | cut -d\= -f2 ) create ${wpconfigdbuser};
 echo "CREATE USER ${wpconfigdbuser} IDENTIFIED BY '${dbpass}';" | mysql -uda_admin -p$(cat /usr/local/directadmin/conf/mysql.conf | grep pass | cut -d\= -f2 );
 echo "GRANT ALL PRIVILEGES ON ${wpconfigdbuser}.* TO ${wpconfigdbuser} IDENTIFIED BY '${dbpass}';" | mysql -uda_admin -p$(cat /usr/local/directadmin/conf/mysql.conf | grep pass | cut -d\= -f2);

 #Download WP
 cd /home/$username/domains/$domain/public_html/$subdomain/
 su -c "/usr/local/bin/wp core download" $username

 #set database details in the config file
 su -c "/usr/local/bin/wp config create --dbname=$wpconfigdbuser --dbuser=$wpconfigdbuser --dbpass=$dbpass --dbhost=localhost" $username
 su -c "/usr/local/bin/wp core install --url=https://$subdomain.$domain/ --admin_user=admin --admin_password=$wpadminpass --title= --admin_email=$username@$domain " $username
 su -c "/usr/local/bin/wp rewrite structure '/%postname%/'" $username
 printf "\n\nADMIN LOGIN CREDENTIALS:\nURL:https://$subdomain.$domain/wp-admin/\nUSERNAME:admin\nPASSWORD:$wpadminpass\n\n"

 #Create .htaccess
 cat << EOF > /home/$username/domains/$domain/public_html/$subdomain/.htaccess
# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress
EOF
 chown $username. /home/$username/domains/$domain/public_html/$subdomain/.htaccess
fi

Descărcați scriptul în /usr/local/directadmin/scripts/custom/ și asigurați-vă că este denumit în mod corespunzător ‘subdomain_create_post.sh’, apoi faceți următoarele:

chmod 700 /usr/local/directadmin/scripts/custom/subdomain_create_post.sh
chown diradmin.diradmin /usr/local/directadmin/scripts/custom/subdomain_create_post.sh

Apoi puteti testa!

Hook-uri disponibile

Hook-urile sunt adaugate in mod constant la DirectAdmin. Cea mai buna modalitate  de a verifica hook-urile de care aveti nevoie este verificand sistemul de versiuni al DirectAdmin.

Pentru a găsi exemple, puteti consulta numeroasele articole de help care utilizeaza hook-uri.

Daca intampinati probleme in aplicarea instructiunilor de mai sus va rugam sa ne contactati. HostX ofera cele mai rapide servere VPS KVM si va poate oferi asistenta specializata in administrarea DirectAdmin.

Actualizat la 29/07/2026