Alisson Machado
21 December 2020

Capítulo 3: Configuração de um Serviço

Este capítulo explicará como funciona o sistema de pacotes do Linux, como instalar um pacote, instalar um serviço, configurá-lo e executar a sua primeira aplicação em um servidor LAMP (Linux Apache MySQL PHP). 

 

Estrutura: 

Neste capítulo discutiremos os seguintes tópicos: 

  • Aprendendo a instalar um Pacote 
  • Apt 
  • Instalando o Apache 
  • Configurando seu serviço 
  • Criando um Vhost 
  • Instalação do MySQL 
  • Configuração do serviço 
  • Criando banco de dados e tabelas 
  • Implantando seu aplicativo 
  • Instalação de PHP 
  • Implantando o WordPress


Aprendendo a instalar um Pacote 

Cada Distribuição Linux tem um gerenciador de pacotes por padrão, pode ser yum, apt, zypper, pacman, slackapt ou outro, cada um tem suas próprias particularidades, mas todos foram feitos para o mesmo propósito, instalar pacotes que são basicamente os programas Linux através de um repositório que é distribuído em todo o mundo. 

No primeiro capítulo dei uma breve explicação sobre as Distribuições Linux e algumas diferenças e algumas delas estão nos sistemas de gerenciamento de pacotes, agora vou dar 2 exemplos dos mais famosos gerentes de pacotes. 

 

Distribuições baseadas no Debian como o Ubuntu tem o APT (Advanced Package Tool), ele se conecta a um repositório central como este: http://de.archive.ubuntu.com/ubuntu , que é apenas um servidor web apache e nele sao armazenados os pacotes que podemos escolher e instalar. 

 

Distribuições baseadas em RedHat como o CentOS tem o Yum (Yellow Dog Update Manager), que será substituído em breve pelo DNF (Dandified Yum) que é o novo substituto do Yum, ele também usa um repositório central como: https://dl.fedoraproject.org/pub/epel/7/x86_64/ e também armazenar vários pacotes. 

 

Agora vamos nos concentrar no Debian, que é nosso objetivo aqui, uma vez que estamos trabalhando usando o Ubuntu. 

 

Apt 

Se você executar apenas o comando apt, sem qualquer parâmetro você verá esta saída: 

alisson@devops:~$ apt
apt 1.6.11 (amd64)
Usage: apt [options] command
apt is a commandline package manager and provides commands for
searching and managing as well as querying information about packages.
It provides the same functionality as the specialized APT tools,
like apt-get and apt-cache, but enables options more suitable for
interactive use by default.

Most used commands:
list - list packages based on package names
search - search in package descriptions
show - show package details
install - install packages
remove - remove packages
autoremove - Remove automatically all unused packages
update - update list of available packages
upgrade - upgrade the system by installing/upgrading packages
full-upgrade - upgrade the system by removing/installing/upgrading packages
edit-sources - edit the source information file

See apt(8) for more information about the available commands.
Configuration options and syntax is detailed in apt.conf(5).
Information about how to configure sources can be found in sources.list(5).
Package and version choices can be expressed via apt_preferences(5).
Security details are available in apt-secure(8).

This APT has Super Cow Powers.

 

Portanto, as opções são autoexplicativas, então vamos usá-las na prática. 

Uma coisa interessante é o comando top: 

top - 18:19:11 up 2 days, 2:34, 1 user, load average: 0.04, 0.03, 0.00
Tasks: 92 total, 1 running, 50 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1008816 total, 133020 free, 126512 used, 749284 buff/cache
KiB Swap: 2017276 total, 2016752 free, 524 used. 716548 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28427 alisson 20 0 107988 3460 2448 S 0.3 0.3 0:00.14 sshd
28462 alisson 20 0 42788 3940 3344 R 0.3 0.4 0:00.25 top
1 root 20 0 77992 9104 6680 S 0.0 0.9 0:02.58 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
7 root 20 0 0 0 0 S 0.0 0.0 0:00.55 ksoftirqd/0
8 root 20 0 0 0 0 I 0.0 0.0 0:19.94 rcu_sched

 

Para sair do top, basta pressionar q. Este comando basicamente mostra o estado atual da sua máquina, o estado da memória, cpu, processos em execução e outras informacoes. Há outra versão de topo que é chamada de htop, ele faz exatamente a mesma coisa, porém tem uma interface mais amigavel, assim antes de instalar essa versão, execute o comando:

alisson@devops:~$ sudo su -
[sudo] password for alisson:
root@devops:~#

 

O último comando muda seu usuário atual para o usuário root, até agora estávamos apenas executando o comando sudo antes de cada comando que precisa de mais permissões. Agora que trocamos de usuario não precisamos mais digitar sudo antes de todos os comandos, pois já estamos como administrador, ou pode-se dizer que somos o usuário root. 

 

Normalmente, quando criamos um servidor baseado em uma imagem, o cache local do APT é esta desatualizado, então precisamos limpá-lo e atualizar usando esses comandos: 

root@devops:~# apt clean
root@devops:~# apt update
Hit:1 http://de.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://de.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:3 http://de.archive.ubuntu.com/ubuntu bionic-backports InRelease
Hit:4 http://de.archive.ubuntu.com/ubuntu bionic-security InRelease
Reading package lists... Done
Building dependency tree
Reading state information... Done
65 packages can be upgraded. Run 'apt list --upgradable' to see them.
root@devops:~#

 

Agora você tem o cache local atualizado podemos tentar encontrar o htop e ver se ele está disponível para instalar: 

root@devops:~# apt search htop
Sorting... Done
Full Text Search... Done
aha/bionic 0.4.10.6-4 amd64
ANSI color to HTML converter

htop/bionic,now 2.1.0-3 amd64 [installed,automatic]
interactive processes viewer

libauthen-oath-perl/bionic 2.0.1-1 all
Perl module for OATH One Time Passwords

pftools/bionic 3+dfsg-2build1 amd64
build and search protein and DNA generalized profiles

 

Analisando a última saída, podemos que o htop esta disponível, para instalar o pacote use o comando: 

root@devops:~# apt install htop -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
htop is already the newest version (2.1.0-3).
htop set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 65 not upgraded.
root@devops:~#

 

O pacote está instalado, então basta executar o comando: 

 

 CPU[ 0.0%] Tasks: 29, 28 thr; 1 running

Mem[||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||128M/985M] Load average: 0.07 0.02 0.00
Swp[| 524K/1.92G] Uptime: 2 days, 02:45:09

PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command 28771 root 20 0 32468 4868 3764 R 0.0 0.5 0:00.02 htop 1 root 20 0 77992 9104 6680 S 0.0 0.9 0:02.58 /sbin/init maybe-ubiquity
394 root 19 -1 100M 17652 16796 S 0.0 1.7 0:00.36 /lib/systemd/systemd-journald
420 root 20 0 103M 1852 1664 S 0.0 0.2 0:00.00 /sbin/lvmetad -f
421 root 20 0 45836 4476 2888 S 0.0 0.4 0:00.87 /lib/systemd/systemd-udevd
496 systemd-t 20 0 138M 3256 2744 S 0.0 0.3 0:00.00 /lib/systemd/systemd-timesyncd
491 systemd-t 20 0 138M 3256 2744 S 0.0 0.3 0:00.20 /lib/systemd/systemd-timesyncd
672 systemd-n 20 0 80048 5076 4484 S 0.0 0.5 0:00.19 /lib/systemd/systemd-networkd
696 systemd-r 20 0 70636 4916 4356 S 0.0 0.5 0:00.19 /lib/systemd/systemd-resolved

 

Nesta saída conseguimos ver algumas melhorias, por exemplo, agora temos uma barra que indica a quantidade de memória usada no servidor. É uma boa ferramenta para analisar o estado atual do seu servidor, mas ele não é tão utilizado no sistema de produção porque consome mais memória do que o top tradicional. Portanto, vamos remover este pacote usando o comando: 

root@devops:~# apt remove htop
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
htop ubuntu-server
0 upgraded, 0 newly installed, 2 to remove and 64 not upgraded.
After this operation, 269 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 102467 files and directories currently installed.)
Removing ubuntu-server (1.417.3) ...
Removing htop (2.1.0-3) ...
Processing triggers for mime-support (3.60ubuntu1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...

 

Estes são todos os comandos que você provavelmente usará em seu trabalho diário instalando pacotes no Linux, além dos comandos também temos alguns arquivos importantes que são necessários para instalar alguns pacotes que podem não estar disponíveis nos repositórios oficiais. 

 

O primeiro arquivo importante é /etc/apt/sources.list. 

root@devops:~# cat /etc/apt/sources.list
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.

deb http://de.archive.ubuntu.com/ubuntu bionic main restricted
deb http://de.archive.ubuntu.com/ubuntu bionic-updates main restricted

 

Acima está um exemplo das primeiras entradas das sources.list, estas são as linhas que representam os repositórios remotos onde os pacotes são encontrados, se você quiser adicionar um novo repositório você pode apenas encontrar a respectiva linha e adicionar no final deste arquivo, exemplo: 

deb http://ppa.launchpad.net/canonical-kernel-team/unstable/ubuntu bionic main

 

No início da URL você pode ver que começa com PPA (Personal Packages Archives), esses são repositórios interessantes que não estão incluídos na distribuição por padrão, mas você pode encontrar alguns pacotes que deseja utilizar. 

 

Outro diretório importante é: /var/cache/apt/, no início expliquei que o APT armazena o cache dentro do Linux e se for muito antigo, precisamos limpar e atualizar, nesta pasta também é baixar os pacotes que estão instalados em nosso sistema, por exemplo: 

root@devops:~# apt install htop --download-only
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
htop

0 upgraded, 1 newly installed, 0 to remove and 64 not upgraded.
Need to get 80.0 kB of archives.
After this operation, 221 kB of additional disk space will be used.

Get:1 http://de.archive.ubuntu.com/ubuntu bionic/main amd64 htop amd64 2.1.0-3 [80.0 kB]
Fetched 80.0 kB in 0s (451 kB/s)

Download complete and in download only mode

 

Fizemos apenas o download do pacote sem fazer a instalação dele: 

root@devops:~# ls /var/cache/apt/archives/
htop_2.1.0-3_amd64.deb lock partial

 

Você pode ver o pacote lá, agora se você executar o comando limpo: 

root@devops:~# apt clean
root@devops:~# ls /var/cache/apt/archives/
lock partial

 

O pacote não está mais lá. 

 

Instalação apache 

Instalamos um pacote básico para saber como o apt funciona, agora vamos instalar o Servidor Web Apache que é atualmente o servidor web mais utilizado no mundo, você pode rodar qualquer pagina nele, usa-lo como um Balanceador de Carga, Cache para arquivos estáticos, Proxy para outro servidor web e muitas outras opções que dependem do seu caso de uso. 

 

Para instalar o Apache, use o seguinte comando: 

root@devops:~# apt install apache2 -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.2-0 ssl-cert

 

Se a instalação for bem para você, é possível validar se o apache estiver instalado e em execução usando o seguinte comando: 

root@devops:~# service apache2 status
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Mon 2020-07-06 12:56:38 UTC; 11s ago

Process: 22810 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)


Preste atenção na parte em que diz ativo (executando), ou você também pode usar o comando ss -ntpl.

root@devops:~# ss -ntpl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=694,fd=13))
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1113,fd=3))
LISTEN 0 128 *:80 *:* users:(("apache2",pid=22842,fd=4),("apache2",pid=22841,fd=4),("apache2",pid=22840,fd=4),("apache2",pid=22839,fd=4),("apache2",pid=22838,fd=4),("apache2",pid=22835,fd=4))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1113,fd=4))

Podemos ver o apache correndo na porta 80, com o PID 22848, PID significa identificação do processo. 

 

Em seguida, o servidor está funcionando, vamos verificar o acesso via navegador: 

http://192.168.178.62/ 

 

Essa é a página padrão apache quando o servidor está sendo executado no Ubuntu, geralmente essa página é diferente dependendo do seu sistema operacional. 

 

Agora você pode dizer que você montou um servidor web. No entanto, sabemos que os sites não são feitos apenas de html, existe um monte de processamento backend, muitas vezes em PHP. Mas você pode desenvolver seu site usando qualquer uma das dezenas de linguagens de programação que estão disponíveis.

 

Instalação de PHP 

Esta parte vamos instalar o PHP e criar uma página simples para verificar se o PHP está instalado e quais são os módulos disponíveis para usar com ele. 

root@devops:~# apt install php -y

 

A instalação é simples usando o APT. Quando instalamos o PHP e o Apache, existem muitos módulos apaches que são instalados juntos. Você pode executar o seguinte comando para verificá-los. 

root@devops:~# a2enmod

Your choices are: access_compat actions alias allowmethods asis auth_basic auth_digest auth_form authn_anon authn_core authn_dbd authn_dbm authn_file authn_socache authnz_fcgi authnz_ldap authz_core authz_dbd authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex buffer cache cache_disk cache_socache cern_meta cgi cgid charset_lite data dav dav_fs dav_lock dbd deflate dialup dir dump_io echo env expires ext_filter file_cache filter headers heartbeat heartmonitor http2 ident imagemap include info lbmethod_bybusyness lbmethod_byrequests lbmethod_bytraffic lbmethod_heartbeat ldap log_debug log_forensic lua macro mime mime_magic mpm_event mpm_prefork mpm_worker negotiation php7.2 proxy proxy_ajp proxy_balancer proxy_connect proxy_express proxy_fcgi proxy_fdpass proxy_ftp proxy_hcheck proxy_html proxy_http proxy_http2 proxy_scgi proxy_wstunnel ratelimit reflector remoteip reqtimeout request rewrite sed session session_cookie session_crypto session_dbd setenvif slotmem_plain slotmem_shm socache_dbm socache_memcache socache_shmcb speling ssl status substitute suexec unique_id userdir usertrack vhost_alias xml2enc

Which module(s) do you want to enable (wildcards ok)?

 

Há muitas opções, mas no momento vamos usar a seguinte. 

root@devops:~# a2enmod php7.2
Considering dependency mpm_prefork for php7.2:
Considering conflict mpm_event for mpm_prefork:
Considering conflict mpm_worker for mpm_prefork:
Module mpm_prefork already enabled
Considering conflict php5 for php7.2:

Module php7.2 already enabled

 

O comando a2enmod, habilita o módulo php7.2, que é responsável por integrar o apache e php, quando acessarmos uma página php via navegador, o apache chamará esse módulo que chamará o interpretador do php e executará o código. 

 

Vamos criar uma página simples como exemplo: 

root@devops:~# vim /var/www/html/info.php 
 
<?php 
 
phpinfo(); 
 
?> 

 

Este código é o código mais simples que você pode executar em php para verificar se tudo está em execução. Quando você chamar essa página via navegador, você verá isso. 

 

 

Na mairoia dos casos para executar uma aplicação em um Servidor Web, o PHP e o Apache são suficientes se você apenas quiser publicar informações e disponibilizá-las para serem acessadas em todos os lugares. 

 

No entanto, sistemas completos armazenam e gerenciam dados, para isso, precisamos de um Sistema de Gerenciamento de Banco de Dados, hoje temos varias opcoes de sistemas gerenciadores de banco de dados que podem ser SQL ou NoSQL. 

 

Os mais populares em servidores web são MySQL / MariaDB, então vamos instalá-lo e fazer um teste. 

 

Instalação do MariaDB 

Para instalar o MariaDB execute o seguinte comando: 

root@devops:~# apt install mariadb-server mariadb-client -y

  

Após a instalação concluída, você pode executar o seguinte comando: 

root@devops:~# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 30
Server version: 10.1.44-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

 

Agora estamos dentro do Console MariaDB. 

 

No passado, geralmente usavamos o MySQL, mas depois que o Oracle o comprou, um fork chamado MariaDB foi criado e tornou-se cada vez mais popular, sua API é completamente compatível com o MySQL, então executaremos alguns comandos aqui e você pode usar exatamente o mesmo em um MySQL Server original. 

 

Para criar um banco de dados, você pode executar o seguinte comando: 

MariaDB [(none)]> create database chapter03;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> use chapter03;
Database changed
MariaDB [chapter03]>

 

Você pode ver que criamos um banco de dados chamado capítulo03,sem tabelas. 

MariaDB [chapter03]> show tables;
Empty set (0.00 sec)

 

Podemos criar um executando o seguinte comando: 

MariaDB [chapter03]> create table users( id integer primary key auto_increment, name varchar(50));
Query OK, 0 rows affected (1.77 sec)

 

Acabamos de criar uma tabela com 2 colunas, uma chamada ID, que armazenará números e outra coluna chamada nome, que receberá strings. 

 

Para verificar a estrutura da tabela, podemos usar o seguinte comando: 

MariaDB [chapter03]> desc users;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

 

E agora podemos inserir alguns dados. 

MariaDB [chapter03]> insert into users(name) values('alisson');
Query OK, 1 row affected (2.24 sec)

MariaDB [chapter03]> insert into users(name) values('gabriela');
Query OK, 1 row affected (0.11 sec)

MariaDB [chapter03]> insert into users(name) values('juergen');
Query OK, 1 row affected (0.06 sec)

MariaDB [chapter03]> insert into users(name) values('leonardo');
Query OK, 1 row affected (0.06 sec)

 

Acabei de inserir 4 usuários diferentes, Alisson, gabriela, juergen, leonardo, para demonstrar como podemos ver os dados armazenados em uma tabela. 

MariaDB [chapter03]> select * from users;
+----+----------+
| id | name |
+----+----------+
| 1 | alisson |
| 2 | gabriela |
| 3 | juergen |
| 4 | leonardo |
+----+----------+
4 rows in set (0.00 sec)

 

Observe, que acabei de inserir os nomes e o ID 'e automaticamente incrementado pelo banco de dados, pois o campo foi definido como auto_increment. 

 

Fizemos isso apenas para ter certeza de que o servidor de banco de dados está sendo executado, agora temos uma configuração completa que chamamos de LAMP (Linux Apache MariaDB PHP) e estamos prontos para implantar um aplicativo real. 

 

Para isso usaremos o Wordpress e veremos como funciona. 

 

Deixe o console MariaDB pressionando CTRL+D. 

 

Instalando o Wordpress 

A primeira tarefa é baixar o WordPress no site oficial. 

root@devops:~# wget https://wordpress.org/latest.tar.gz
--2020-07-06 13:51:03-- https://wordpress.org/latest.tar.gz
Resolving wordpress.org (wordpress.org)... 198.143.164.252
Connecting to wordpress.org (wordpress.org)|198.143.164.252|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12238031 (12M) [application/octet-stream]
Saving to: ‘latest.tar.gz’
latest.tar.gz 100%[========================================================================================>] 11.67M 359KB/s in 31s

2020-07-06 13:51:35 (380 KB/s) - ‘latest.tar.gz’ saved [12238031/12238031]

 

 

Agora podemos descomprimir o arquivo dentro da pasta Apache. 

root@devops:~# tar -xf latest.tar.gz -C /var/www/html/
root@devops:~# ls /var/www/html/
index.html index.nginx-debian.html info.php wordpress


Acesse o diretorio do wordpress:

root@devops:~# cd /var/www/html/wordpress/
root@devops:/var/www/html/wordpress# ls
index.php readme.html wp-admin wp-comments-post.php wp-content wp-includes wp-load.php wp-mail.php wp-signup.php xmlrpc.php


Renomeie o arquivo wp-config-sample.php para wp-config.php e edite definindo as informações do banco de dados para o nosso site.

root@devops:/var/www/html/wordpress# mv wp-config-sample.php wp-config.php root@devops:/var/www/html/wordpress# vim wp-config.php
/** The name of the database for WordPress */
define( 'DB_NAME', 'database_name_here' );

/** MySQL database username */
define( 'DB_USER', 'username_here' );

/** MySQL database password */
define( 'DB_PASSWORD', 'password_here' );

/** MySQL hostname */
define( 'DB_HOST', 'localhost' );

/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );

/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

/** Above you can see that the wordpress is already saying to you, where you have the replace the values, then you can edit the file to be like this. */

/** The name of the database for WordPress */
define( 'DB_NAME', 'chapter03' );

/** MySQL database username */
define( 'DB_USER', 'devops' );

/** MySQL database password */
define( 'DB_PASSWORD', 'devops' );

/** MySQL hostname */
define( 'DB_HOST', 'localhost' );


Com todas as credenciais e configuração definidas, temos que criar o mesmo no MariaDB. 

root@devops:/var/www/html/wordpress# mariadb
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.1.44-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use chapter03
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [chapter03]> grant all privileges on chapter03.* to devops@'%' identified by 'devops';
Query OK, 0 rows affected (0.00 sec)

 

Acabamos de criar um usuário chamado devops e concedemos todos os privilégios a todas as tabelas no banco de dados do capítulo03. 

 

Agora você pode acessar via navegador. 

 

http://192.168.178.62/wordpress 

 


Você pode preencher os campos com os seguintes parâmetros: 

 

Site Title: Chapter03

Username: devops

Password: devops

 

E clique em Instalar e terminar, depois disso você poderá clicar em Login. 

 

 

 

Use as mesmas credenciais que você definiu antes e verá a administração da wordpress. 

 

 

Conclusão 

 

Acabamos de configurar a stack mais popular no Linux, usando PHP, Apache e MariaDB. Se trabalha com Webhosting ou como um desenvolvedor web freelancer pode ser muito útil, pois você pode criar os sites usando o WordPress e agora você sabe como configurar e gerenciar o seu servidor, que é apenas um pré-requisito para os próximos capítulos onde vamos automatizar tudo.