PHP 서버 및 아마존 RDS DB 인스턴스 만들기
입문
지난번 줄거리
VPC에 가상 네트워크 환경을 만들고 Apache 웹 서버와 RDS(MySQL)를 만듭니다.
그리고 AWS 자습서 보면서 전진
데이터베이스 인스턴스 만들기
열기아마존 RDS 콘솔
EC2 인스턴스 생성 및 네트워크 서버 설치
열기아마존 EC2 콘솔
2. 시작 인스턴스 선택
Apache 네트워크 서버 설치
공공 서브넷에 네트워크 서버를 구축하고 싶어서 EC2 인스턴스에 접속해 봅니다.사용하는 소프트웨어는 Tera Term입니다.
업데이트 확인
yum은 패키지 관리 시스템의 명령이다
-y는 모든 질문에
$ sudo yum update -y
PHP 패키지를 사용하여 Apache 네트워크 서버 설치$ sudo yum install -y httpd php php-mysqlnd
네트워크 서버 시작$ sudo service httpd start
Apache가 설치되어 있으므로 브라우저 주소 표시줄에 Apache의 EC2 인스턴스가 포함된 공용 IPv4DNS를 입력하면 Apache 테스트 페이지가 표시됩니다.Apache 네트워크 서버 구성
chkconfig 명령을 사용하여 시스템이 부트될 때마다 네트워크 서버를 시작하도록 구성
sudo chkconfig httpd on
Apache 웹 서버에 대한 파일 액세스 구성ec2-user가 아파치 웹 서버의 기본 루트 디렉터리에 있는 파일을 관리하기 위해/var/www 디렉터리의 소유권과 접근 허가를 변경합니다.
$ sudo groupadd www
ec2-user 사용자를 www 그룹에 추가했습니다.$ sudo usermod -a -G www ec2-user
한 번 로그아웃$ exit
다시 로그인, 그룹 명령을 사용하여 www 그룹의 존재 여부를 확인합니다$ groups
ec2-user adm wheel systemd-journal www
/var/www 및 하위 디렉터리의 디렉터리 접근 허가를 수정하고 그룹의 쓰기 접근 허가를 추가하며 나중에 만든 하위 디렉터리의 그룹 ID를 설정합니다.명령 보충
chmod 파일에 대한 권한 설정 명령
2775가 뭐예요?내 생각에 이것은 파일 권한 것 같다.
또한findfolderName-type d에서 로프 디렉터리를 검사하고 -exec에서 검색 결과에 대해 명령을 실행합니다.
[ec2-user ~]$ sudo chmod 2775 /var/www
[ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} +
아까와 마찬가지로 각 파일에 대해 반복적으로 액세스 허가를 변경하고 그룹의 쓰기 액세스 허가를 추가합니다.[ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} +
※ 동작을 확인하기 위해 권한을 느슨하게 설정합니다.전용 사용자를 만들어야 하는데 사랑을 끊었어요.DB 인스턴스에 Apache 웹 서버 연결
다음 명령을 실행합니다
[ec2-user ~]$ cd /var/www
[ec2-user ~]$ mkdir inc
[ec2-user ~]$ cd inc
inc라는 dbinfo.inc 디렉터리에서 새 파일을 만들고 편집합니다.[ec2-user ~]$ nano dbinfo.inc
dbinfo에 데이터베이스 실례 연결에 필요한 정보를 적은 파일입니다.쓰면 저장해.<?php
define('DB_SERVER', 'db_instance_endpoint');
define('DB_USERNAME', 'tutorial_user');
define('DB_PASSWORD', 'master password');
define('DB_DATABASE', 'sample');
?>
※ 테스트용이기 때문에 dbinfo에 비밀번호를 적었습니다.축소된 권한을 따로 만든 사용자를 토대로 환경 변수 등에서 읽어야 했지만 사랑을 끊었다.디렉터리를/var/www/html로 변경
이/var/www.html는 문서 루트 디렉토리 라고 하는데 HTML 파일의 배치 장소로 사용할 수 있다.
[ec2-user ~]$ cd /var/www/html
SamplePage.php 만들기nano SamplePage.php
다음 코드 추가<?php include "../inc/dbinfo.inc"; ?>
<html>
<body>
<h1>Sample page</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>ADDRESS</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>ADDRESS</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;
}
?>
웹 브라우저에서 열면http://EC2 instance endpoint/SamplePage.php
DB 인스턴스가 연결되어 있는지 확인할 수 있습니다.
Reference
이 문제에 관하여(PHP 서버 및 아마존 RDS DB 인스턴스 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/udonnamerou/items/28c0b7aad954d92cbc4b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)