PHP 서버 및 아마존 RDS DB 인스턴스 만들기

8408 단어 RDSAWS

입문


지난번 줄거리
VPC에 가상 네트워크 환경을 만들고 Apache 웹 서버와 RDS(MySQL)를 만듭니다.
그리고 AWS 자습서 보면서 전진

데이터베이스 인스턴스 만들기


  • 열기아마존 RDS 콘솔
  • 데이터베이스 만들기 선택
  • 다음과 같이 설정
  • 데이터베이스 생성 방법 선택: 표준 생성 선택
  • 엔진 옵션: MySQL
  • 선택
  • 템플릿: 프레임워크 무료 사용 선택
  • DB 실례 식별자:tutorial-db-instance
  • 호스트 사용자 이름:tutorial_user
  • 비밀번호 자동 생성: 선택 안 함
  • 마스터 비밀번호: 각자 만드세요
  • DB 인스턴스 크기:db.t2.micro
  • 스토리지 - 모든 기본 설정
  • Virtual Private Cloud(VPC): 생성된 VPC 사용
  • 기존 VPC 보안 그룹: 전용 VPC 보안 그룹 선택
  • 가용성 영역: 지정되지 않음
  • 데이터베이스 포트: 3306
  • 첫 번째 데이터베이스 이름:sample
  • 4. 생성된 RDS의 끝점과 포트 번호를 기록합니다.

    EC2 인스턴스 생성 및 네트워크 서버 설치


  • 열기아마존 EC2 콘솔
    2. 시작 인스턴스 선택
  • 단계 2:t2.micro 선택
  • 3단계: 네트워크: 생성된 VPC 선택
  • 단계 3: 서브넷: 생성된 공통 서브넷 선택
  • 단계 3: 공용 IP 자동 할당: 유효
  • 단계 4: 스토리지 추가 - 작업이 필요 없음
  • 단계 5: 태그 추가: 키:Name, 값:tutorial-web-server
  • 단계 6: 보안 그룹:tutorial-securitygroup
  • 단계 7: 설정 없음, 시작 버튼 클릭
  • 기존 키 쌍 또는 새 키 쌍 만들기
  • Apache 네트워크 서버 설치


    공공 서브넷에 네트워크 서버를 구축하고 싶어서 EC2 인스턴스에 접속해 봅니다.사용하는 소프트웨어는 Tera Term입니다.
  • 호스트 이름: 방금 생성된 EC2 인스턴스의 공용 IPv4 주소
  • 사용자 이름:ec2-user
  • 개인 키: 만든 키 쌍 (pem 파일)
  • 이렇게 나와요.

    업데이트 확인
    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 인스턴스가 연결되어 있는지 확인할 수 있습니다.

    좋은 웹페이지 즐겨찾기