În cadrul acestui tutorial o să discutăm despre modul în care putem pregăti într-o manieră cât mai ușoară un mediu de execuție pentru o aplicație PHP ce folosește MySQL ca și bază de date.
Pentru pregătirea mediului de execuție o să folosim utilitarul Vagrant și hypervisorul VirtualBox.
VirtualBox este o aplicație ce ne permite să virtualizăm o mașină fizică (un computer). Cu ajutorul său, putem să creăm o mașină virtuală după specificațiile oferite de noi, ce va conține un sistem de operare izolat de sistemul de operare al mașinii gazdă. Mai multe detalii pot fi găsite în tutorialul VirtualBox - noțiuni introductive.
Vagrant este un sistem de configurare, distribuție și virtualizare a mediilor de lucru, dezvoltare și publicare. El permite prin o mulțime de aplicații externe, configurarea, aprovizionarea și distribuirea ușoară a mașinilor virtuale, cu scopul de a standardiza și ușura pregătirea unui mediu pentru dezvoltarea sau publicarea unei aplicații sau a obține accesul la unelte necesare lucrului, disponibile doar pe anumite sisteme de operare. Mai multe detalii pot fi găsite în tutorialul Vagrant - Noțiuni introductive.
Pentru pregătirea mediului de execuție o să avem nevoie de un fișier de configurare (fișierul Vagrantfile
) și o serie de scripturi care să se ocupe de pregătirea mediului de execuție.
# Alegem un director de lucru cât mai convenabil
~ $ mkdir -p ~/tehnologii-web/tuxy-bot
~ $ cd ~/tehnologii-web/tuxy-bot
# Facem o copie locală a depozitului de cod labs
~ $ git clone https://github.com/alexcoman/labs
# Copiem din depozitul de cod fișierele de interes
~ $ cp -r labs/web/unelte/vagrant/webserver/. .
# Ștergem depozitul de cod
~ $ rm -rf labs
Acum în directorul curent ar trebui să avem următoarea structură de directoare:
.
├── provision
│ ├── nginx
│ │ ├── conf.d
│ │ │ └── sauce.conf
│ │ ├── fastcgi_params
│ │ ├── koi-utf
│ │ ├── koi-win
│ │ ├── mime.types
│ │ ├── nginx.conf
│ │ ├── scgi_params
│ │ ├── uwsgi_params
│ │ └── win-utf
│ ├── nginx.sh
│ ├── php.ini
│ └── vagrant.sh
├── README.md
└── Vagrantfile
Înainte de a trece la pasul următor, va trebui să verificăm dacă fișierul de configurare Vagrantfile
conține specificațiile pe care ni le dorim (de exemplu: numărul de procesoare, adresa ip etc).
api_version = '2'
provider = 'virtualbox'
box = 'hashicorp/precise64'
hostname = 'webserver'
ip_address = '192.168.50.210'
ram = '1024'
cpus = '2'
Vagrant.configure(api_version) do |config|
config.vm.define "webserver" do |webserver|
end
config.vm.box = box
config.vm.host_name = hostname
config.vm.network :private_network, ip: ip_address
config.vm.provider :virtualbox do |virtualbox|
virtualbox.name = hostname
virtualbox.memory = ram
virtualbox.cpus = cpus
end
config.vm.provision "shell" do |setup|
setup.path = "provision/vagrant.sh"
setup.privileged = true
end
config.vm.provision "shell" ,run: "always" do |setup|
setup.path = "provision/nginx.sh"
setup.privileged = true
end
end
După ce am descărcat și modificat după caz toate fișierele de care avem nevoie, putem să pregătim mediul de execuție pentru aplicația dorită.
Pentru a începe pregătirea mediului de execuție putem folosi comanda vagrant up
:
~ $ vagrant up
==> webserver: Adăugăm sursa de pachete pentru PHP5.
==> webserver: + echo 'Adăugăm sursa de pachete pentru nginx.'
==> webserver: Adăugăm opțiunile dorite pentru serverul de mysql.
==> webserver: Instalăm pachetele dorite
==> webserver: Configurăm serverul web.
==> webserver: Deschidem portul 80.
==> webserver: Repornim serviciile.
==> webserver: Am terminat.
După ce execuția comenzii anterioare s-a finalizat putem observa că au fost create două directoare noi:
.
├── .log
│ ├── nginx-access.log
│ ├── nginx-error.log
│ └── php-access.log
└── .www
.www
care va conține aplicația dumneavoastră.logs
care va conține fișierele de logPentru a ușura interacțiunea cu serverul web putem adăuga o nouă intrare în fișierul /etc/hosts
.
sudo echo "192.168.50.210 webserver.local" >> /etc/hosts
Pregătim un script PHP de test:
~ $ echo "<?php echo 'OK.'; ?>" > .www/index.php
~ $ chmod 755 .www/index.php
Trimitem o cerere HTTP către serverul web.
~ $ wget http://webserver.local/
Resolving webserver.local (webserver.local)... 192.168.50.210
Connecting to webserver.local (webserver.local)|192.168.50.210|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’
(488 KB/s) - ‘index.html’ saved [3]
Verificăm dacă răspunsul este cel așteptat.
~ $ cat index.html
OK.