AWS SERIES: DAY … NINE: (building) A SIMPLE WEB APP FOR EMAIL FORM-or-registering-data
Antes de escrevermos o código da nossa aplicação, precisamos fazer os últimos ajustes na máquina primeiro, executando um punhado de comandos no terminal. Dito isso, reproduza os seguintes passos:
netstat -ltun

sudo systemctl stop mariadb
sudo systemctl disable mariadb
sudo systemctl status mariadb

Ei Victor, o que está fazendo? 😨 Tirando do ar o banco de dados?! 😡 A aplicação não vai funcionar assim … Calma aí, meu jovem! Respire fundo, conte até 10 … isso mesmo. E então? A raiva passou? 😬 hehehe Voltando: lembre-se que o nosso banco de dados (RDS) não está nessa instância em particular, a web-server apache. E sim, localizado na database-1. Esse que mostrei há pouco, é aquele pacote mysql inicialmente baixado como mero exemplo, em outro post dessa série. Portanto, fiquem tranquilos e sossegados, pois o nosso sistema irá funcionar perfeitamente (ou pelo menos, essa é a ideia 😅)
Superado tal conflito, vamos para a aplicação propriamente, sendo esta dividida em duas partes, ou na prática, dois arquivos. Acompanhe comigo, e entenderá do que estou falando:
cd /var/www/
ls -l
mkdir usuarios
cd usuarios/
vi dbinfo.usuarios CTRL-C + CTRL-V em https://raw.githubusercontent.com/vicrlda/web-apps/main/dbinfo.usuarios <?php define('DB_SERVER', 'database-1.clfc3s1ufnut.us-east-2.rds.amazonaws.com'); define('DB_USERNAME', 'admin'); define('DB_PASSWORD', 'hackme01'); define('DB_DATABASE', 'usuarios'); ?> :wq
Muito bem, aí vem a segunda parte (arquivo) … Continue comigo:
cd ..
ls
cd html/
vi index.php
CTRL-C + CTRL-V em https://raw.githubusercontent.com/vicrlda/web-apps/main/index.php
<?php include "../usuarios/dbinfo.usuarios"; ?> <html> <body> <h1>VALIDE AQUI ... php + mysql-server</h1> <?php /* Connect to MySQL and select the database. */ $connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD); if (mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error(); $database = mysqli_select_db($connection, DB_DATABASE); /* Ensure that the EMPLOYEES table exists. */ VerifyEmployeesTable($connection, DB_DATABASE); /* If input fields are populated, add a row to the EMPLOYEES table. */ $employee_name = htmlentities($_POST['NAME']); $employee_address = htmlentities($_POST['ADDRESS']); if (strlen($employee_name) || strlen($employee_address)) { AddEmployee($connection, $employee_name, $employee_address); } ?> <!-- Input form --> <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST"> <table border="0"> <tr> <td>NAME</td> <td>E-MAIL</td> </tr> <tr> <td> <input type="text" name="NAME" maxlength="45" size="30" /> </td> <td> <input type="text" name="ADDRESS" maxlength="90" size="60" /> </td> <td> <input type="submit" value="Add Data" /> </td> </tr> </table> </form> <!-- Display table data. --> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td>ID</td> <td>NAME</td> <td>E-MAIL</td> </tr> <?php $result = mysqli_query($connection, "SELECT * FROM EMPLOYEES"); while($query_data = mysqli_fetch_row($result)) { echo "<tr>"; echo "<td>",$query_data[0], "</td>", "<td>",$query_data[1], "</td>", "<td>",$query_data[2], "</td>"; echo "</tr>"; } ?> </table> <!-- Clean up. --> <?php mysqli_free_result($result); mysqli_close($connection); ?> </body> </html> <?php /* Add an employee to the table. */ function AddEmployee($connection, $name, $address) { $n = mysqli_real_escape_string($connection, $name); $a = mysqli_real_escape_string($connection, $address); $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');"; if(!mysqli_query($connection, $query)) echo("<p>Error adding employee data.</p>"); } /* Check whether the table exists and, if not, create it. */ function VerifyEmployeesTable($connection, $dbName) { if(!TableExists("EMPLOYEES", $connection, $dbName)) { $query = "CREATE TABLE EMPLOYEES ( ID int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(45), ADDRESS VARCHAR(90) )"; if(!mysqli_query($connection, $query)) echo("<p>Error creating table.</p>"); } } /* Check for the existence of a table. */ function TableExists($tableName, $connection, $dbName) { $t = mysqli_real_escape_string($connection, $tableName); $d = mysqli_real_escape_string($connection, $dbName); $checktable = mysqli_query($connection, "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'"); if(mysqli_num_rows($checktable) > 0) return true; return false; } ?> :wq
Quase lá, vamos agora testar essa nova página web que acabamos de criar dentro do servidor. Para isso, acesse no browser via ip público. Ex: 18.217.239.63


E vejam só, temos um sistema que cadastro o nome do usuário e seu email correspondente 🙃 Pronto Victor! Quer dizer que é somente isso?! Então valeu, falou e até mais! Nananinanão 🤚🛑 caro expectador, ainda não. Teremos que gerar uma nova imagem customizada para servir de template em casos de necessidade ou até mesmo urgência … Caso contrário, e não fazendo isso, você terá que repetir todas essas etapas uma por uma novamente 🙁 E quando se está com pressa, em ambientes de PRODUÇÃO, e com o chefe atrás de você no telefone falando com o cliente que está reclamando da queda, acredite em mim: não vai melhorar ou ajudar em nada ter que refazer tudo de novo. Sendo assim, desligue a máquina para garantir a integridade dos dados e antes de criar o novo TEMPLATE como imagem.
sudo shutdown -h now


>_ CONTINUA …
Até a próxima! 👋
>_ REFERÊNCIAS:
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html