fullmoon's bright IT blog

[AWS workshop] 웹 사이트를 구축하기 (1) 단일 인스턴스 웹 호스팅 본문

STUDY

[AWS workshop] 웹 사이트를 구축하기 (1) 단일 인스턴스 웹 호스팅

휘영청 2021. 8. 26. 15:30
728x90

 

안녕하세요 휘영청입니다.

 


웹호스팅 스터디를 한번 해보겠습니다!

 

단일과 고가용성으로 해보겠습니다!

 

회사 다니면서 진작에 했었어야 했는데

 

맞으면서 배워서(?)

 

매일 블로그 목표로 하는 김에 정리하는 걸로

 

AWS를 접하는 초보자에게 진짜 추천하는 Workshop

 

추천별점 : ❤❤❤❤❤

 


 

 

[Architecture]

 

 

 

[작업 순서]

  • CloudFormation template으로 VPC 구성
  • Amazon RDS로 database 구성 
  • EC2 instance > Wordpress website 설치 
  • 간단한 Wordpress를 설치한 EC2를 정적 파일은 S3 bucket으로 보내기 
  • Sample Page 확인

1. CloudFormation template으로 VPC 구성

Cloudformaion template으로 기본적인 인프라 구성을 합니다.

 

준비된 템플릿으로 파일을 업로드합니다.

 

new-vpc.template
0.03MB

 

Stack name : vpc-stack

Amazon VPC Parameters

  Number of Availability Zone : 2

  Availability Zones : us-east-1a , us-east-1b

 

[Next] 를 가차없이 누른 후

스택생성하기!

power 생성중

 

 

2. Amazon RDS로 database 구성 

 

RDS > Create Database

 

Choose a database creation method : Standard create / Easy create

Configuration :  Mysql

DB instance size : Free tier ( 가장 싼 t2. micro 사용해서 그런가봄)

DB instance identifier : wordpress01

Master username : admin

Master password : admin12!

Confirm password : admin12!

 

Connectivity

Virtual private cloud (VPC) : 생성했던 VPC stack

VPC security group : Choose existing / Create new > 그룹이름은 db-sg로 함 

 

Initial database name 까지 추가

 

 

 

3. EC2 인스턴스 시작

 

맨날 하던거라서 빠르게

Amazon Machine Image (AMI) : Amazon Linux 2 AMI (HVM), SSD Volume Type

Instance Type : t2.micro

Network : vpc-stack

Subnet :  PublicSubnet0

 

✔ 제가 반드시 하는 설정!

❌❌❌❌종료는 무조건 종료로 하고 종료 방지 설정하기❌❌❌❌

 

태그에 Name  : wordpress 설정하고

보안그룹도 설정

Security group name :  public-instance-sg

For Source :  My IP

 

사실 미리 보안그룹을 만들어도 되긴해요 (저는 이거 추천)

My IP로 Mysql/Aurora랑 HTTP도 등록해야하거든요 할때 한번에 허자!

 

이유는 인스턴스에서 웹페이지랑 db를 접속해야하는데 포트를 뚫어줘야하니까!

 

 

그리고 db-sg 보안 그룹 인바운드에서도 mysql / 

custom 쭉 - 내리다보면 'public-instance-sg' 있어요 추가해주세요

 

public-instance-sg 에서 db쪽으로 접속하지만 반대로 인스턴스로도 보내야하니까 인바운드 추가해주는거에요

보통 인스턴스에 보안그룹 자체를 해놓으면 편해요 

 

* RSA 에 ED25519도 생겼군요?

마지막으로 Keypair 무조건 새로 만들고 다운로드

 

그 후 Launch instance !

 

 

4. Wordpress Setting

 

각자의 방법으로 접속하세요 !

저는 MobaXterm 으로 접속.

 

 

먼저 Apache랑 Mysql 설치 

sudo yum install -y httpd
sudo yum install -y mysql

 

컴퓨터에서 MySQL의 환경 변수를 설정합니다. 

나의 endpoint : wordpress01.clpmipqca15k.us-east-1.rds.amazonaws.com

export MYSQL_HOST=<your-endpoint>
export MYSQL_HOST=wordpress01.clpmipqca15k.us-east-1.rds.amazonaws.com

확인 방법 : RDS > Databases > 생성한 데이터베이스 클릭하면 아래 endpoint

 

 

사용자 이름과 암호를 바꾸고 다음 명령을 실행하여 wordpress 데이터베이스에 연결

mysql --user=admin --password=admin12! wordprss

❌비번이 보여서 노출주의!

 

WordPress용 새 DB 생성 및 권한 부여

CREATE USER 'wordpress' IDENTIFIED BY 'wordpress-pass';
GRANT ALL PRIVILEGES ON wordpress.* TO wordpress;
FLUSH PRIVILEGES;
Exit

WordPress 모듈을 다운로드하고 압축 풀기

wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz

 

WordPress 폴더로 이동하여 기본 구성 파일을 백업

cd wordpress
cp wp-config-sample.php wp-config.php

 

nano는 말고 vi 좋아하니까 vi로 

vi wp-config.php

20 line

// ** MySQL settings - You can get this info from your web host ** //
/** 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' );
Visit this link copy the content in the page and replace the following

DB_NAME: 'wordprss' (오타남ㅋㅋㅋ)

DB_USER: 'wordpress'

DB_PASSWORD: 'wordpress-pass'

DB_HOST: your RDS endpoint

 

 

51 line

define('AUTH_KEY',         'baV~C%AXpIv!(#}27EJBH+5EdWp1hT(;~e,]FaeuNmyakU|G<rlG,L>(Le|wnsp7');
define('SECURE_AUTH_KEY',  '@?6Cz VIajd:v[AS%hi.jbttZ?IrvLFr*3 xE 6Hfka_tB|-b(hqi<CW9<.aDz>+');
define('LOGGED_IN_KEY',    'qs9>byq?{@TNBb*f_tP4LzO|mPke+6g`*?IjF`|^>~f-_x-~z^d,,)_R]jd9%y3H');
define('NONCE_KEY',        'M]mTw+&CJVzUH<+e?MdB-31?@$V&=!bklQ1~uwu]>k?O$]R~365u,[MX/p7xvNJL');
define('AUTH_SALT',        '3Ke>`3p5f6rc-??f,VD:uRb~3uHJh2!%b)WpKRolN7|:#NBoVPi<,gxFo6t>q|hE');
define('SECURE_AUTH_SALT', 'XLXbkzDH8[mD%`2QO.T8Qq4/pp-WJnW&M!%.=m6EUV9hO +(q`I/7u&@[_T^mb+0');
define('LOGGED_IN_SALT',   '2=SKzWII5vX6Dw/p2~HOYZm/dET*0-_NUB9|?B[7:@AHL(k_eBZ?iC@mf(|itz4*');
define('NONCE_SALT',       'T8Zc{W,>(|x0V?cd=4?m+H(` Q3K3H5HTuy:!~L``+II-ABS-348zaWm%U>B>cXI');

여기 부분에 추가

define( 'AUTH_KEY',         'put your unique phrase here' );
define( 'SECURE_AUTH_KEY',  'put your unique phrase here' );
define( 'LOGGED_IN_KEY',    'put your unique phrase here' );
define( 'NONCE_KEY',        'put your unique phrase here' );
define( 'AUTH_SALT',        'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT',   'put your unique phrase here' );
define( 'NONCE_SALT',       'put your unique phrase here' );

바로 아래 추가

/** to allow 'W3TC' plugin write the configuration data into DB */
define( 'W3TC_CONFIG_DATABASE', true );
/** to allow https in WordPress, will be used in lab 2/
$_SERVER['HTTPS'] = 'on';

 

wordpress 배포

sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
sudo yum install php-xml 
cd /home/ec2-user
sudo cp -r wordpress/* /var/www/html/
sudo chown -R apache:apache /var/www/html

 Apache 웹 서버 호스팅을 시작

sudo service httpd start
sudo systemctl restart php-fpm

 

 

5. 웹사이트를 방문하여 WORDPRESS 설정 구성하기

 

5.1 IAM 설정

 

IAM 에서 사용자를 추가 후 권한 설정 부여, .csv 파일을 다운받습니다.

 

User Name : wordpress-user

Console password : Wordpress-user12! (Programmatic access & AWS Management Console access 둘 다 ✔)

 

Permissions : CloudFrontFullAccess 및 AmaoznS3FullAccess 추가

반드시 .csv 파일 다운로드 !

 

 

5.2 Wordpress CDN 설정

 

[Error 발생]

퍼블릭 IP주소 접속을 을 하려고 했는데 안들어가짐ㅋㅋ

삽질해보니까 

원인 1.

wp-config.php 에서 DB_NAME 오타 안 고침 ㅋㅎ

 

원인 2. 

wordpress 계정 만들때  wordprss 디비에 대한 권한이 없는 거 같다.

mysql -h wordpress01.clpmipqca15k.us-east-1.rds.amazonaws.com -u wordpress -p

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)

엔드포인트로 들어가서 보니까 wordpress가 없어서 ..

아 이러니까 안보이지!!!

mysql -h wordpress01.clpmipqca15k.us-east-1.rds.amazonaws.com -u admin -p

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordprss           |
+--------------------+
5 rows in set (0.00 sec)

하하 잘보이네 그럼 권한을 줘야겠네

GRANT에서 권한 주기

그리고 wordpress DB의 모든 테이블에 privileges 모든 권한을 줘버리자!

GRANT ALL privileges ON wordprss.* TO wordpress@'%' IDENTIFIED BY 'wordpress-pass';

엣 안되네 버전이 안맞나 (안되면 버전 의심)

GRANT ALL privileges ON wordprss.* TO wordpress@'%'
flush privileges;

플러시!!!!!!!!!

그리고 다시 확인

ㅠㅠㅠ 지저스

 

해결되었다. 다음 진행

일단 admin / admin12! 로 걍 접속 해서 관리자 페이지를 확인합니다.

메뉴 [플러그인] > [새로 추가] > w3 total cache 검색 > 지금 설치 > 활성화 버튼 까지 클릭

 

메뉴 [performance (성능)] >  General Setting > 스크롤 쭉 > CDN 

CDN Type은 S3 에서! 저장 누름

메뉴 [performance (성능)] > CDN > Configuration: Objects section > Access key ID and Secret key 입력

다운받은 .csv에 있어요 

S3 입력 > 만든 S3 있어도 되고 아니면 그냥 새로 만들어도 됨. 

안되면 퍼블릭 권한 열어봐요

 

Save all settings.

CDN에 Upload custom files하고 내보내기

 

 

5.3 Sample page 확인

 

 

이렇게 쉬운걸 삽질하는 나 한참 멀었구나

 

❌❌❌ 자원삭제는 꼭 하세요 

728x90