WordPress pe Ubuntu server 18.04 LTS și LAMP

    De la o vreme încoace, serverul pe care era găzduiesc această pagină se cam „bâlbâia” în sensul că apăreau numeroase problemuțe – nimic critic, doar deranjant – în ceea ce privește update-urile WordPress ori ale modulelor. De ceva vreme serverul rula pe Ubuntu 18.04 LTS, care a ajuns și el la o oarecare maturitate. Cel mai deranjant era că nu mai reușeam reînnoirea certificatului SSL, indiferent de strategia aplicată. Am ajuns la concluzia că este necesară o reinstalare „pe curat” datorită evoluției platformei WordPress – chestia aia cu blocks și multe altele ce țin de o bucătărie mai intimă a acesteia. În același timp, îmi doream să upgradez și configurația mașinii HP Proliant Microserver Gen8, în sensul trecerii la stocare pe un RAID SSD în loc de un singur HDD. Upgrade care, implicând ceva bănuți, va mai dura. Așa că am scos de la „naftalină” un bătrân FujitsuSiemens M470-2 Workstation cu Xeon 6 core și 8 GB RAM pe care am montat un RAID software cu 2 x HDD.

    Mai jos o să găsiți descrisă – mai pe scurt – procedura de instalare a WordPress pe această mașină, având implement „by default” un certificat digital de la Let’s Encript. Nu m-am atins de configurărirle serverului DNS, ale routerului ori de cele ale registrarului RoTLD.

Deci începem și „scrim” frumos pe o hârtiuță:

  • IP intern:  xxx.xxx.xxx.xxx   && Valoarea este o bălărie! Dacă nu te-ai prins,
  •                                               &&  nu mai pierde timpul și alege rubrica de
  •                                              &&  pescuit.
  • IP extern: yyy.yyy.yyy.yyy  && IP-ul public fix
  • Nume domeniu: domeniu.ro   && Numele domeniului
  • Nume server: server_web  && Numele mașinii pe care ai instalat serverul
  • Nume bază de date SQL: wp_database
  • Utilizator bază de date: wp_user
  • Parolă wp_user: wp_pass   && Nu vă zgârciți la caractere!
  1. Instalat Ubuntu 18.04 LTS

Important:

a) Instalați Ubuntu cu IP fix. IP-ul este din clasa de adrese private (ex: 192.168.9.99 în loc de xxx.xxx.xxx.xxx). Cum vă configurați routerul ca să redirecționeze (ATENȚIE ! Este musai ca și portul 80 să fie accesibil din exterior, altfel nu veți putea obține/reînnoi certificatul SSL) porturile 80 și 443 către mașina care găzduiește serverul, este treaba voastră, nu mă bag.

b) Instalați SSH server-ul implicit al Ubuntu că poate o să vreți să vă accesați serverul și de pe alt computer.

c) Recomand să instalați mc (Midnight Commander), un progrămel care funcționează asemănător cu bătrânul Norton Commander. Editorul va fi ales dintre nano și vi la prima editare.

  • $ sudo apt install mc

d) După instalare, login pe mașină, și:

  • $ sudo -s                     && asta numai dacă nu vreți să scrieți tot timpul
  •                                    &&  „sudo” în linia de comandă
  • $ nano /etc/hosts

 Acolo ar trebui să aveți ceva de genul:

127.0.0.1 localhost

yyy.yyy.yyy.yyy server_web

 * The following lines are desirable….

 …………

Trebuie să completați linia cu IP-ul extern în locul liniei existente (127.0.1.1 server_web va deveni yyy.yyy.yyy.yyy server_web). Dacă nu facem această modificare, este posibil ca la comanda apache2ctl configtest să primiți un mesaj de eroare.

2. Instalare și activare Firewall ufw (adică, mai pe înțeles, Uncomplicated Firewall), că net-ul este plin de oameni răi:

  • $ apt install ufw
  • $ nano /etc/default/ufw
  • $ ufw default deny incoming
  • $ ufw default allow outgoing
  • $ ufw allow ssh  && asta ca să puteți accesa serverul via SSH
  • $ ufw allow 10000  && asta dacă aveți de gând să folosiți și Webmin
  • $ ufw enable  && fiți SIGURI că ați dat ultimele două comenzi înainte
  •                       &&  de activare, altfel, în cazul în care accesați serverul
  •                       &&  via SSH, veți pierde conexiunea cu serverul.
  • $ ufw status numbered
  • $ ufw status verbose

3. Instalare LAMP (Linux, Apache2, MySQL, PhP)

  • $ apt update
  • $ get-apt upgrade  && dacă este cazul

3.0. Instalare Apache 2

Începem cu… începutul:

  • $ apt install apache2                  
  • $ ufw app list                              

Care afișează:

Available applications:

  Apache

  Apache Full

  Apache Secure

  OpenSSH

 

 

 

 

 

 

  • $ sudo ufw allow in “Apache Full”   && permite tot traficul pe
  •                                                       &&  porturile 80 și 443

Acum dacă tastăm adresa http://domeniu.ro , ar trebui să vedem ceva de genul:

…ceea ce înseamnă că serverul Apache chiar funcționează.

  • 3.1. Instalare MySQL
  • $ apt install mysql-server   && Instalare MySQL
  • $ mysql_secure_installation  && Securizăm
  •                                               && instalarea MySQL
  •                                               && și ăspundem cu Y/y la toate celelalte
  •                                               && întrebări.

Acum este momentul să pregătim baza de date pentru a fi folosită de către WordPress. Nu uitați să puneți ; la finalul fiecărei comenzi.

  • $ mysql -u root -p

CREATE DATABASE wp_database DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

GRANT ALL ON wp_database.* TO ‘wp_user’@’localhost’ IDENTIFIED BY ‘wp_pass’;

FLUSH PRIVILEGES;

EXIT;

Am cam terminat cu baza de date și începem cu PhP

3.2. Instalare PhP

  • $ apt install php libapache2-mod-php php-mysql   && Instalare PhP 

Întrucât suntem interesați ca prioritar să fie accesate fișierele php și nu cele html, o să facem treaba asta prin mutarea lui „index.php” în fața lui „index.html” în fișierul dir.conf:

  • $ nano /etc/apache2/mods-enabled/dir.conf

Salvăm și închidem nano. Este timpul să repornim Apache2:

  • $ systemctl restart apache2
  • $ systemctl status apache2

Acum butonăm setarea Virtual Hosts prin crearea directorului și acordarea de drepturi asupra acestuia:

  • $ mkdir /var/www/domeniu.ro
  • $ chown -R $USER:$USER /var/www/domeniu.ro
  • $ sudo chmod -R 755 /var/www/domeniu.ro

Pentru testarea funcționării PhP, creem o pagină simplă pe care o vom șterge ulterior:

  • $ nano /var/www/domeniu.ro/index.html

<html>

    <head>

        <title>Bine ai venit pe domeniu.ro!</title>

    </head>

    <body>

        <h1>Bravo!  Server block domeniu.ro functioneaza!</h1>

    </body>

</html>

  • $ nano /etc/apache2/sites-available/domeniu.ro.conf

<VirtualHost *:80>

    ServerAdmin webmaster@localhost

    ServerName domeniu.ro

    ServerAlias www.domeniu.ro

    DocumentRoot /var/www/domeniu.ro

    ErrorLog ${APACHE_LOG_DIR}/error.log

    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Salvăm și închidem.

  • $ a2ensite domeniu.ro.conf           && autorizăm site-ul
  • $ a2dissite 000-default.conf
  • $ apache2ctl configtest  && Aici răspunsul ar trebui să fie „Syntax OK”
  • $ systemctl restart apache2
  • $ nano /var/www/domeniu.ro/info.php
  • $ rm /var/www/domeniu.ro/info.php && Dacă funcționează ștergem
  • $ systemctl status apache2  && Verifică iarăși Apache2

4. Instalare SSL cu Certbot

  • $ add-apt-repository ppa:certbot/certbot
  • $ apt install python-certbot-apache
  • $ apache2ctl configtest  && Răspunsul TREBUIE să fie „Syntax OK”
  • $ systemctl reload apache2
  • $ ufw status
  • $ certbot –apache -d domeniu.ro -d www.domeniu.ro
  • $ certbot renew –dry-runpawor  && Verificăm funcționarea pentru reînnoire

Pregătim instalarea WordPress:

  • $ apt update
  • $ apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip          && Pachete suplimentare necesare pentru funcționarea WP
  • $ systemctl restart apache2
  • $ nano /etc/apache2/sites-available/domeniu.ro.conf

<Directory /var/www/domeniu.ro/>

    AllowOverride All

</Directory>

  • $ sudo a2enmod rewrite
  • $ sudo apache2ctl configtest
  • $ sudo systemctl restart apache2

5. Instalare WordPress

  • $ cd /tmp
  • $ curl -O https://wordpress.org/latest.tar.gz
  • $ tar xzvf latest.tar.gz
  • $ touch /tmp/wordpress/.htaccess
  • $ cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php
  • $ mkdir /tmp/wordpress/wp-content/upgrade
  • $ cp -a /tmp/wordpress/. /var/www/domeniu.ro
  • $ chown -R www-data:www-data /var/www/domeniu.ro
  • $ find /var/www/domeniu.ro/ -type d -exec chmod 750 {} \;
  • $ find /var/www/domeniu.ro/ -type f -exec chmod 640 {} \;

Următoarea comandă este chiar critică și înainte de a o da, fiți siguri că știți bine de tot să folosiți copy & paste ori că aveți multă răbdare și atenție ca să copiați caracter cu caracter conținutul dintre ghilimele.

  • $ curl -s https://api.wordpress.org/secret-key/1.1/salt/             

Comanda o să afișeze ceva de genul:

define(‘AUTH_KEY’,   ‘g2!u!YBB(k$wxTQn!aaR<@/!GG2^+fLqfXB-4cE~p~mb{;@o<X-+}Lfhp@- )7z]’);

define(‘SECURE_AUTH_KEY’,  ‘On=s !);,j-%9g(Uw@1phe-Gs7Fd%[.%HT2G@icvhBIr+@}TB[YGzK^H~+;c/8h’);

define(‘LOGGED_IN_KEY’,    ‘rwhG{mt@/03Ec:!<c*8+|(?-}EXt09+E9gkB:Y7*b96i%M0[_{{1~A4{&*2e9ziq,’);

define(‘NONCE_KEY’,        ‘|LrvX%1Z2H,=Q;jc-Qxb .Z]9(;-%6H94=H:N+spB ~-H[=gm9a$$f,u._#<O$Ihv’);

define(‘AUTH_SALT’,        ‘f4{S+B}rI|VyF&)!H70=}rK=[q|>nNf+EL&rDttE Szav“ZD/>$|i._(7xB/j:y’);

define(‘SECURE_AUTH_SALT’, ‘4^3g+Fd.+BYby4c>;12Zp5&|28* -dPHWYGWbr]h[eDY4KdpSi+=.p-i|wLfR,a,Tp’);

define(‘LOGGED_IN_SALT’,   ‘MBQ-<WG[py?LGH3N|1W4efG78ql:9hvk||T4u2^/Ne0e-pJk%,|~VosNn-rkG5zD+o’);

define(‘NONCE_SALT’,       ‘L72}fYAy|.0[60SoUNDt>%H:2>+Q[-0kY%=m?iLlI?nW{&Vf,hWB1@DCd)5bUZZ+’);

  • $ sudo nano /var/www/domeniu.ro/wp-config.php
define(‘DB_NAME’, ‘wp_database’);

define(‘DB_USER’, ‘wp_user’);

define(‘DB_PASSWORD’, ‘wp_pass’);

……..

define(‘AUTH_KEY’,   ‘g2!u!YBB(k$wxTQn!aaR<@/!GG2^+fLqfXB-4cE~p~mb{;@o<X-+}Lfhp@- )7z]’);

define(‘SECURE_AUTH_KEY’,  ‘On=s !);,j-%9g(Uw@Kphe-Gs7Fd%[.%HT2G@icvhBIr+@}TB[YGzK^H~+;c/8h’);

define(‘LOGGED_IN_KEY’,    ‘rwhG{mt@/03Ec:!<c*8+|(?-}EXt09+E9gkB:Y7*b96i%M0[_{{1~A4{&*2e9ziq,’);

define(‘NONCE_KEY’,        ‘|LrvX%1Z2H,=Q;jc-Qxb .Z]9(;-%6H94=H:N+spB ~-H[=gm9a$$f,u._#<O$Ihv’);

define(‘AUTH_SALT’,        ‘f4{S+B}rI|VyF&)!H70=}rK=[q|>nNf+EL&rDttE Szav“ZD/>$|i._(7xB/j:y’);

define(‘SECURE_AUTH_SALT’, ‘4^3g+Fd.+BYby4c>;gZp5&|28* -dPHWYGWbr]h[eDY4KdpSi+=.p-i|wLfR,a,Tp’);

define(‘LOGGED_IN_SALT’,   ‘MBQ-<WG[py?LGH3N|1W4efGOql:9hvk||T4u2^/Ne0e-pJk%,|~VosNn-rkG5zD+o’);

define(‘NONCE_SALT’,       ‘L72}fYAy|.0[60SoUNDt>%H:2>+Q[J|kY%=m?iLlI?nW{&Vf,hWB1@DCd)5bUZZ+’);

………

define(‘FS_METHOD’, ‘direct’);                  && se adaugă la final

Salvăm și închidem.

De acum, din browser, tastăm https://domeniu.ro, și mai departe s-au ocupat băieții de la WordPress, așa că… ENJOY!

Nessy – OCT 2019