lightsail wordpress [pool wordpress] server reached pm.max_children setting (25) warninng




트래픽은 큰 차이가 안나는데 갑자기 cpu 사용량이 치솟으면서 사이트가 먹통이 되는 현상이 발생하였다. 

그 당시는 외부에서 발표중이여서 서버 재부팅으로 그 순간을 넘겼는데 그 후 같은 현상이 반복되서 원인 파악에 들어갔다. 


php-fpm 에러로그 파일 위치

/opt/bitnami/php/var/log/php-fpm.log


php-fpm 세팅 파일 위치

/opt/bitnami/php/etc/php-fpm.conf




bitnami@ip:/opt/bitnami/php/etc$ sudo cat /opt/bitnami/php/var/log/php-fpm.log

[15-May-2020 12:52:48] WARNING: [pool wordpress] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 3 idle, and 13 total children

[15-May-2020 12:52:56] WARNING: [pool wordpress] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 14 total children

[15-May-2020 12:53:00] WARNING: [pool wordpress] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 18 total children

[15-May-2020 12:53:03] WARNING: [pool wordpress] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 22 total children

[15-May-2020 12:53:07] WARNING: [pool wordpress] server reached pm.max_children setting (25), consider raising it

[15-May-2020 12:56:03] WARNING: [pool wordpress] server reached pm.max_children setting (25), consider raising it

[16-May-2020 06:16:58] WARNING: [pool wordpress] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 3 idle, and 13 total children

[16-May-2020 06:17:07] WARNING: [pool wordpress] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 3 idle, and 14 total children

[16-May-2020 06:17:08] WARNING: [pool wordpress] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 3 idle, and 15 total children

[16-May-2020 07:52:26] WARNING: [pool wordpress] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 2 idle, and 21 total children

[16-May-2020 07:52:29] WARNING: [pool wordpress] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 2 idle, and 23 total children

[16-May-2020 07:52:34] WARNING: [pool wordpress] server reached pm.max_children setting (25), consider raising it



워드프레스 pool쪽에서 문제가 생긴듯하다. 



참고로 php-fpm에서 사용하는 설정 파일(conf) 찾는법 


bitnam$ ps aux | grep php-fpm

root      3476  0.0  0.2 146396  9340 ?        Ss   08:20   0:01 php-fpm: master process (/opt/bitnami/php/etc/php-fpm.conf)

daemon    3477  0.6  0.6 153868 25196 ?        S    08:20   4:15 php-fpm: pool wordpress

daemon    3478  0.6  0.6 154064 25380 ?        S    08:20   4:09 php-fpm: pool wordpress



해당 설정파일을 가면 마지막에 두 개의 pool 설정 파일을 include 하고 있다. 




bitnam$ tail /opt/bitnami/php/etc/php-fpm.conf


include=/opt/bitnami/apps/wordpress/conf/php-fpm/pool.conf


include=/opt/bitnami/apps/phpmyadmin/conf/php-fpm/pool.conf


워드프레스 쪽의 설정 파일을 확인해본다. 


bitnami@ip$ cat /opt/bitnami/apps/wordpress/conf/php-fpm/pool.conf

[wordpress]

listen=/opt/bitnami/php/var/run/wordpress.sock

include=/opt/bitnami/php/etc/common-dynamic.conf

include=/opt/bitnami/apps/wordpress/conf/php-fpm/php-settings.conf

include=/opt/bitnami/php/etc/environment.conf

pm=dynamic




여기서 다시 common-dynamic.conf를 include하고 있다. 

다시 그 파일 설정으로 들어가면 common.conf 파일을 include하고 있다. 

common.conf 파일까지 가야지 드디어 


bitnami$ cat /opt/bitnami/php/etc/common-dynamic.conf

include=/opt/bitnami/php/etc/common.conf

pm=dynamic

pm.max_children=5

pm.start_servers=2

pm.min_spare_servers=1

pm.max_spare_servers=3


include=/opt/bitnami/php/etc/bitnami/common.conf




bitnami$ cat /opt/bitnami/php/etc/bitnami/common.conf

;

; Bitnami PHP-FPM Configuration

; Copyright 2019 Bitnami.com All Rights Reserved

;

; Note: This file will be modified on server size changes

;

pm.max_children=25

pm.start_servers=4

pm.min_spare_servers=4

pm.max_spare_servers=10

pm.max_requests=5000



각각의 옵션 설명은 아래 설정 파일의 설명을 참고하면 된다. 


; Choose how the process manager will control the number of child processes.

; Possible Values:

;   static  - a fixed number (pm.max_children) of child processes;

;   dynamic - the number of child processes are set dynamically based on the

;             following directives. With this process management, there will be

;             always at least 1 children.

;             pm.max_children      - the maximum number of children that can

;                                    be alive at the same time.

;             pm.start_servers     - the number of children created on startup.

;             pm.min_spare_servers - the minimum number of children in 'idle'

;                                    state (waiting to process). If the number

;                                    of 'idle' processes is less than this

;                                    number then some children will be created.

;             pm.max_spare_servers - the maximum number of children in 'idle'

;                                    state (waiting to process). If the number

;                                    of 'idle' processes is greater than this

;                                    number then some children will be killed.

;  ondemand - no children are created at startup. Children will be forked when

;             new requests will connect. The following parameter are used:

;             pm.max_children           - the maximum number of children that

;                                         can be alive at the same time.

;             pm.process_idle_timeout   - The number of seconds after which

;                                         an idle process will be killed.

; Note: This value is mandatory.





pm.max_children 수를 50으로 증가시키고 php-fpm을 재시작해서 변경 사항을 반영한다. 


sudo /opt/bitnami/ctlscript.sh restart php-fpm







그런데 이 포스팅을 작성하면서 cpu 사용량이 조금씩 상승하고 있어서 아파치 접속 로그를 확인해봤더니 

아래와 같이 존재하지 않는 경로를 요청하는 수상한 ip들이 보여서 검색해보니 최근에 스팸 등으로 블랙리스트에 신고된 아이피였다. 


https://cleantalk.org/blacklists/173.212.194.14



bitnami$ tail -f /opt/bitnami/apache2/logs/access_log


173.212.194.14 - - [17/May/2020:00:22:28 +0900] "GET /product-tag/med/?product_orderby=popularity&product_count=24&product_view=grid&product_order=asc HTTP/1.1" 301 -

173.212.194.14 - - [17/May/2020:00:22:47 +0900] "GET /?product_orderby=popularity&product_count=24&product_view=grid&product_order=asc HTTP/1.1" 200 22179




이것만은 원인은 아니겠지만 그래도 원인 중 하나일 것 같아서 워드프레스 보안 플러그인 설정 변경도 해야겠다. 




php-fpm status 쉽게 확인하는 법




; By default the status page output is formatted as text/plain. Passing either

; 'html', 'xml' or 'json' in the query string will return the corresponding

; output syntax. Example:

;   http://www.foo.bar/status

;   http://www.foo.bar/status?json

;   http://www.foo.bar/status?html

;   http://www.foo.bar/status?xml

;

; By default the status page only outputs short status. Passing 'full' in the

; query string will also return status for each pool process.

; Example:

;   http://www.foo.bar/status?full

;   http://www.foo.bar/status?json&full

;   http://www.foo.bar/status?html&full

;   http://www.foo.bar/status?xml&full

; The Full status returns for each process:

;   pid                  - the PID of the process;

;   state                - the state of the process (Idle, Running, ...);

;   start time           - the date and time the process has started;

;   start since          - the number of seconds since the process has started;

;   requests             - the number of requests the process has served;

;   request duration     - the duration in µs of the requests;

;   request method       - the request method (GET, POST, ...);

;   request URI          - the request URI with the query string;

;   content length       - the content length of the request (only with POST);

;   user                 - the user (PHP_AUTH_USER) (or '-' if not set);

;   script               - the main script called (or '-' if not set);

;   last request cpu     - the %cpu the last request consumed

;                          it's always 0 if the process is not in Idle state

;                          because CPU calculation is done when the request

;                          processing has terminated;

;   last request memory  - the max amount of memory the last request consumed

;                          it's always 0 if the process is not in Idle state

;                          because memory calculation is done when the request

;                          processing has terminated;

; If the process is in Idle state, then informations are related to the

; last request the process has served. Otherwise informations are related to

; the current request being served.

; Example output:

;   ************************

;   pid:                  31330

;   state:                Running

;   start time:           01/Jul/2011:17:53:49 +0200

;   start since:          63087

;   requests:             12808

;   request duration:     1250261

;   request method:       GET

;   request URI:          /test_mem.php?N=10000

;   content length:       0

;   user:                 -

;   script:               /home/fat/web/docs/php/test_mem.php

;   last request cpu:     0.00

;   last request memory:  0

;

; Note: There is a real-time FPM status monitoring sample web page available

;       It's available in: /bitnami/lamp73stack-linux-x64/output/php/share/php/fpm/status.html

;

; Note: The value must start with a leading slash (/). The value can be

;       anything, but it may not be a good idea to use the .php extension or it

;       may conflict with a real PHP file.

; Default Value: not set

;pm.status_path = /status






그리고 응답이 늦어지는 상황을 좀 더 모니터링 하기 위해 slowlog를 설정한다


; The log file for slow requests

; Default Value: not set

; Note: slowlog is mandatory if request_slowlog_timeout is set

;slowlog = log/$pool.log.slow


; The timeout for serving a single request after which a PHP backtrace will be

; dumped to the 'slowlog' file. A value of '0s' means 'off'.

; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)

; Default Value: 0

;request_slowlog_timeout = 0



최종 변경사항들은 아래와 같다. 


pm.status_path = /status

slowlog = log/$pool.log.slow

request_slowlog_timeout = 0




참고: https://www.tecmint.com/enable-monitor-php-fpm-status-in-nginx/


https://stackoverflow.com/questions/15465333/php-fpm-processes-monitoring-profiling


https://docs.bitnami.com/aws/apps/wordpress-pro/configuration/configure-phpfpm-processes/


https://www.php.net/manual/en/install.fpm.configuration.php

lightsail로 워드프레스 사이트 시작하기- 6) 디스크 증설하기


라이트세일로 워드프레스 사이트 시작하기


6) 디스크 증설하기



서비스를 운영하다보니 이미지 업로드가 많아지면서 어느샌가 디스크가 부족해졌다. 

얼추 보았을때는 aws lightsail console에서 아래에 있는 버튼 하나로 

디스크를 추가할 수 있는 걸로 보인다.  








실제로 디스크를 추가하면 instance에 부착까지는 

아래 과정을 통해 한번에 된다. 










그런데 df -h를 하면 새로 추가한 디스크가 나오지 않는다 

아래 링크를 확인하면 디스크 포맷부터 mount를 스스로 해야 한다고 친절하게 알려준다(...)


나 이거 봤어. 서버 세팅 혼자 하던 시절...


예전에 물리 서버 혼자 운영할때도 다 했는데 

aws도 마찬가지구나(...)



https://lightsail.aws.amazon.com/ls/docs/en_us/articles/create-and-attach-additional-block-storage-disks-linux-unix



작업내용 


새로 mount할 디스크를 기존 디스크와 같은 형태의 파일시스템으로 포맷합니다. 

이떄 꼭 새로 붙이는 디스크가 비어있는지 확인해야합니다. 

디스크 내용이 들어있으면 포맷하지 마세요!


$ df -h

Filesystem      Size  Used Avail Use% Mounted on

udev            2.0G     0  2.0G   0% /dev

tmpfs           396M   11M  385M   3% /run

/dev/xvda1       78G   43G   35G  56% /

tmpfs           2.0G     0  2.0G   0% /dev/shm

tmpfs           5.0M     0  5.0M   0% /run/lock

tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup

/dev/loop0       29M   29M     0 100% /snap/amazon-ssm-agent/2012

/dev/loop2       18M   18M     0 100% /snap/amazon-ssm-agent/1566

/dev/loop1       97M   97M     0 100% /snap/core/9436

/dev/loop3       97M   97M     0 100% /snap/core/9665

tmpfs           396M     0  396M   0% /run/user/1000


lsblk로 mount 정보 확인 

$ lsblk

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

xvda    202:0    0   80G  0 disk

└─xvda1 202:1    0   80G  0 part /

xvdf    202:80   0  256G  0 disk

loop0     7:0    0 28.1M  1 loop /snap/amazon-ssm-agent/2012

loop1     7:1    0 96.5M  1 loop /snap/core/9436

loop2     7:2    0   18M  1 loop /snap/amazon-ssm-agent/1566

loop3     7:3    0   97M  1 loop /snap/core/9665


새로 mount할 디스크 파일 타입 확인 

$ sudo file -s /dev/xvdf

/dev/xvdf: data


기존에 mount되어있는 디스크 파일 타입 확인합니다. ext4를 사용하고 있네요. 

$ sudo file -s /dev/xvda1

/dev/xvda1: Linux rev 1.0 ext4 filesystem data, UUID=9bd74952-5d49-4ac3-8b92-6491cf32a505, volume name "cloudimg-rootfs" (needs journal recovery) (extents) (large files) (huge files)



새로운 디스크도 ext4타입으로 포맷합니다. 이떄 꼭 새로 붙이는 디스크가 비어있는지 확인해야합니다. 

디스크 내용이 들어있으면 포맷하지 마세요!


$ sudo mkfs -t ext4 /dev/xvdf

mke2fs 1.42.13 (17-May-2015)

Creating filesystem with 67108864 4k blocks and 16777216 inodes

Filesystem UUID: 1fba4148-faac-4675-a772-87a67e1b9d6d

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,

        4096000, 7962624, 11239424, 20480000, 23887872


Allocating group tables: done

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done




새로 포맷한 디스크의 파일 타입을 확인하고 마운트를 실행한다. 




새로 포맷한 디스크의 파일 타입 확인. 

$ sudo file -s /dev/xvdf

/dev/xvdf: Linux rev 1.0 ext4 filesystem data, UUID=1fba4148-faac-4675-a772-87a67e1b9d6d (extents) (large files) (huge files)


마운트할 위치에 디렉토리를 생성하고 

$ sudo mkdir /data


sudo mount device_name mount_point 로 mount를 실행한다. 

$ sudo mount /dev/xvdf /data


df -h로 잘 마운트 되었는지 확인한다. 

$ df -h

Filesystem      Size  Used Avail Use% Mounted on

udev            2.0G     0  2.0G   0% /dev

tmpfs           396M   11M  385M   3% /run

/dev/xvda1       78G   48G   30G  62% /

tmpfs           2.0G     0  2.0G   0% /dev/shm

tmpfs           5.0M     0  5.0M   0% /run/lock

tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup

/dev/loop0       29M   29M     0 100% /snap/amazon-ssm-agent/2012

/dev/loop2       18M   18M     0 100% /snap/amazon-ssm-agent/1566

/dev/loop1       97M   97M     0 100% /snap/core/9436

/dev/loop3       97M   97M     0 100% /snap/core/9665

tmpfs           396M     0  396M   0% /run/user/1000

/dev/xvdf       252G   60M  239G   1% /data




새로운 디스크 포맷할때 왠지 걱정되서 기존 서버 백업도 해두고 그랬는데 

그냥 별문제없이 금방 끝났네요. 


이렇게 디스크 증설이 별 문제없이 마무리되었습니다. 








lightsail로 워드프레스 사이트 시작하기 - 1) 인스턴스 생성하기



라이트세일로 워드프레스 사이트 시작하기 



1) instance 생성




라이트세일(lightsail)은 아마존에서 제공하는 가상 서버로 

aws ec2에 비해 제공하는 기능도 한정적이긴한데 

그냥 간단히 워드프레스 사이트 하나만들기에는 좋다. 




라이트세일 장점 


1. 확장성 : 가볍게 시작해서 사용자가 늘면 언제든지 확장이 가능하다. 

2. 낮은 가격: 그리고 최고 사양으로 해도 월 160불로 ec2에 비해 확실히 저렴하다. 

3. 편리함 : 워드프레스가 당장 설치되어 나오고 백업, 알림 등 클릭 한번으로 설정이 가능하다. 



라이트세일 단점 


1. 설정의 한계: 방화벽 같은 설정도 포트는 열 수 있는데 ip 대역별로 설정은 할 수 없다. 

2. bitnami 만의 설정방식이 존재  : 이건 단점이라기 보다는 미리 깔아놓은 워드프레스를 사용하다 보니

 기존에 사용하던 설정 방식을 사용못하고 적응해야 하는 시간이 필요하다. 

처음에는 편한데 중간에 한번 문제 있으면 골치아픔. 

3. 확장성이 있긴 하지만 ec2보다는 확장이 용이하지는 않음. 

예를 들어 상위 플랜으로 가려면 스냅샾을 떠서 인스턴스를 따로 띄우고 세팅을 해야 하는데 꽤 번거로움. 


그래도 싸고 편하니까 라이트세일로 새로운 워드프레스 사이트를 하나 더 추가해보기로 한다. 

  


 




라이트세일 사이트 이동하기






여기서 오른쪽의 Create Instance 버튼을 클릭한다. 




지역은 한국을 선택하고 리눅스를 선택하고 워드프레스를 선택하면 

워드프레스 자동으로 설치되어 제공된다. 







가격대를 선택한다. 가장 낮은 가격은 월 $3.5불로 메모리 512MB, 20기가 저장공간으로 

일반적인 워드프레스 웹사이트면 이정도도 충분하다. 


사용하다 필요하면 언제든지 용량을 늘리거나 상위 플랜으로 옮길수 있다. 














다만 여기서 문제가 되었던 것이 

 이미 한국에 운영하고 있는 라이트세일 인스턴스가 두 개 있었다. 

그런데 라이트세일 인스턴스를 2개 밖에 못만든다고 에러가 나온다.


하나는 운영중이지만 하나는 안쓰고 있는 것이라 중단해봤는데도 에러 메세지는 동일하다. 


혹시해서 다른 지역(도쿄)를 선택하니 문제 없이 생성이 된다. 

각 지역당 인스턴스 2개 제한인 것 같다. 


유저당 13개 지역 * 2개 = 총 26개의 라이트세일 인스턴스를 생성할 수 있다. 

왜 이런 제한을 두었는지는 의미를 잘 모르겠지만 

그래도 생성이 되었으나 이제 사이트에 접속해본다. 



인스턴스가 생성되면 아래와 같은 화면이 나온다. 







인스턴스를 클릭해서 들어가면 아래와 같이 public ip를 확인할 수 있다. 


아래와 같이 웹사이트에 public ip를 입력하면 아래와 같은 화면 나온다. 



https://public IP/







이제 워드프레스 설정을 할 수 있는데 길어져서 다음 포스팅에 이어서 설명하겠다. 


































워드프레스 라이트세일 wp-signup redirect 이슈 (https://53.**.**.**.xip.io/wp-signup.php?new=mydomain.com)






워드프레스 라이트세일 wp-signup redirect 이슈 




aws 라이트세일로 멀티사이트 워드프레스(multisite wordpress)를 설치했습니다. 

도메인 provider에 고정 주소도 설정하고 https 까지 적용이 잘 되었는데 

이상하게 자꾸 아래와 같은식으로 wp-signup.php 로 redirect로 되는 것입니다 ㅠㅠ



https://53.**.**.**8.xip.io/wp-signup.php?new=mydomain.com


일단 아래 설정 파일들을 다 확인해보고 온갖 삽질을 하다 간단하게 해결이 되었습니다 ㅠㅠ 


vi /opt/bitnami/apps/wordpress/conf/httpd-prefix.conf


vi /opt/bitnami/apps/wordpress/htdocs/wp-config.php



Bitnami 설정 툴인 bnconfig를 사용하면 ip나 도메인 설정을 간단하게 변경할 수 있다고 합니다. 
원칙적으로 Bitnami 어플리케이션은 boot time에 ip 주소나 도메인주소(hostname)을 업데이트 한다고 되어있습니다. 
그렇지만 나중에 수동적으로 변경할 경우 사용할 수 있는 툴이라고 합니다. 
사용법은 --machine_hostname 뒤에 ip 주소나 도메인 주소를 입력하면 됩니다. 

아래와 같이 새로운 도메인을 bnconfig를 사용하여 변경하니
이제  정상적으로 새로운 주소로 워드프레스 접속이 가능합니다. 

bitnami:/opt/bitnami/apps/wordpress$ sudo ./bnconfig --machine_hostname mydomain.com



참고 : 


https://seoulrain.net/2018/05/13/lightsailprimarydomainerror/


https://docs.bitnami.com/aws/faq/configuration/configure-custom-domain/


https://docs.bitnami.com/virtual-machine/faq/configuration/use-bnconfig/




아마존 클라우드 (AWS) 시작하기 6 - apache php mysql 설치하기


참고: http://luckyyowu.tistory.com/105

 

 

 OS : Ubuntu 14.04

 

이제 기본 환경 설정이 완료되었으니 실제로 APM (apache + php + mysql)을 설치해본다.

 

1. 서버 정보와 기존 패키지들을 업데이트 한다.

 

#sudo apt-get update

 

패키지 설치정보가 있는 서버 정보를 업데이트 한다.

 

#sudo apt-get upgrade

 

기존에 설치되어 있는 패키지들을 업데이트 한다.

 

 

 

 

upgrade중에 아래와 같은 메세지가 나오면서 설치가 멈추었다.

(A new version of /boot/grub/menu.lst is available, but the version installed currently has been locally modified)

검색해보니 세번째 메뉴로 차이점을 보고 별 문제 없으면 

install the package maintainer's version을 선택하면 되는 듯 하다.

 

(참고: http://unix.stackexchange.com/questions/113732/a-new-version-of-configuration-file-etc-default-grub-is-available-but-the-vers)

 

 

 

 

일단 install the package maintainer's version을 선택하고

혹시 나중에 이슈있을 때를 대비하여 diff 결과도 저장해두었다.

 

 

2. 아파치를 설치한다.

 

#sudo apt-get install apache2 

 

 

아파치를 문제없이 설치되고 설치 과정 중에 자동으로 아파치 서비스가 실행된다.

 

3. php를 설치한다.

 

 

#sudo apt-get intall php5

 

 

 

 

4. mysql server와 client를 설치한다.

 

#sudo apt-get install mysql-server

 

mysql DB 구동을 위해 mysql-server를 설치한다.

설치 과정에 아래 스크린샷과 같이 root 암호를 입력한다.

나중에 phpmyadmin 설정할때 지금 설정한 root 암호를 입력해야 한다.

 

#sudo apt-get install mysql-client

 

mysql 접속을 위해 mysql-client 도 설치해준다.

 

php와 mysql을 설치하다 보면 설치 중간중간 알아서

아파치도 다시 재시작해 주어 꽤 편리하다

 

 

 

 

#sudo apt-get install php5-mysql

 

mysql과 php를 연동시키는 패키지도 설치한다.

#sudo apt-get install phpmyadmin

 

web mysql 관리 툴인 phpmyadmin도 설치한다.

설치중 몇가지 확인 창이 뜨는데 첫번째 웹 서버 자동 설정에서

apache2를 선택하도록 한다.

스페이스를 눌러 제대로 *가 뜨는 것을 확인해야 한다.

 

 그냥 엔터 누르고 지나갔다가 나중에 http 404 에러가 나와서

 phpmyadmin 다시 설정하지 않으려면 ㅠㅠ

 

db구성을 dbconfig-common으로 설정하겠냐고도 물어보는데

수동으로 설정하거나 이미 DB가 설치되어 구성되어 있는 경우 아니면

그냥 dbconfig-common으로 설치하면 된다.

 

중간에  mysql 설정할때 넣었던 root 비밀번호도 입력하면 설치 완료.

 

 

 

 

 

 

 

 

 

이제 모든 설치가 끝이 났다.

이제차례대로  apache, php, mysql이 제대로 설치되었나 확인해보자.

 

5. 아파치 설치 확인

 

 

http://ip주소(고정 ip또는 aws 도메인 이름)

을 입력하여 아래와 같이 나오면 apache설정이 제대로 된 것이다.

 

 

 

 

 

 

 

 

 

 

 

6. php 설치 확인

 

 

아래와 같이 대충 test.php를 만들어서 제대로 출력되나 확인해본다. 



 <?php echo "hello"; ?>

 

기본적으로 /var/www/html/의 소유자는 root로 되어있어 

파일 수정할때마다 sudo 하기 귀찮아 sudo chown ubuntu -R /var/www/hml로 

폴더 소유자를 ubuntu 로 수정한다.

 

ubuntu@ip-**:/var/www$ ll
total 12
drwxr-xr-x  3 root root 4096 Apr  2 04:56 ./
drwxr-xr-x 13 root root 4096 Apr  2 04:56 ../
drwxr-xr-x  2 root root 4096 Apr  2 05:29 html/

 

 

 

 

ubuntu@ip-**:/var/www$ sudo chown ubuntu -R /var/www/html
ubuntu@ip-**:/var/www$ ll
total 12
drwxr-xr-x  3 root   root 4096 Apr  2 04:56 ./
drwxr-xr-x 13 root   root 4096 Apr  2 04:56 ../
drwxr-xr-x  2 ubuntu root 4096 Apr  2 05:29 html/

 

 

7. phpmyadmin 설치 확인 


http://고정 ip 또는 aws domain/phpmyadmin으로 접속해서 

제대로 작동하나 확인해본다. 


그런데 위에 이야기한 것 같이 apache2를 phpmyadmin으로 설정하는 부분을 패스해서 

HTTP 404 "Not Found" 에러가 나서 결국 sudo dpkg-reconfigure -plow phpmyadmin으로 

phpmyadmin을 아래와 같이 재설정 하니 문제없이 phpmyadmin으로 접속이 가능했다. 



모든 설치가 제대로 된 것을 확인 완료하였다. 



 

 


부록. phpmyadmin재설정 방법



 

 

Once phpMyAdmin is installed point your browser to http://localhost/phpmyadmin to start using it. You should be able to login using any users you've setup in MySQL. If no users have been setup, use admin with no password to login.

Should you get a 404 "Not Found" error when you point your browser to the location of phpMyAdmin (such as: http://localhost/phpmyadmin) the issue is likely caused by not checking the 'Apache 2' selection during installation. To redo the installation run the following:

 sudo dpkg-reconfigure -plow phpmyadmin

Then select Apache 2 for the webserver you wish to configure.

 

 

참고: https://help.ubuntu.com/community/phpMyAdmin

 





 


 


 

 

 


  • 2015.07.16 16:52 ADDR 수정/삭제 답글

    비밀댓글입니다

아마존 클라우드 (AWS) 시작하기 4 - putty 접속하기

 

 이전글 : 아마존 웹 서비스 시작하기 3 - 보안그룹 정책과 고정 IP 설정하기  


참조:


http://trend21c.tistory.com/1295 

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/managing-users.html



인스턴스 개인키를 다운로드 받았으면 이제 putty 접속 설정을 해봅시다. 

우선 아래 사이트에서 putty와 puttygen을 다운로드 받습니다. 


http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html


 

 

 

PUTTYGEN은  인스턴스를 생성할 때 만든 PEM(Private Enhanced Mail) 파일을

PUTTY에서 SSH에서 접속 시 사용하는 PPK 파일로 변환하는 프로그램입니다. 


 

 

 




Putty Key Generator를 실행하고 conversion - import key를 클릭하여

 인스턴스를 생성할때 만들어진 pem 파일을 선택합니다. 


save private key를 클릭하면 

putty에서 사용하는 PPK파일이 생성됩니다. 

앞으로 putty로 접속 할 때 이 파일을 사용하니 잘 저장해 둡시다. 


key passphrase 는 옵션으로 이 필드를 입력하면 

putty로 접속시 이 필드 값을 추가로 입력해야 합니다. 

보안상으로 좀 더 강력해지나 fileziller를 사용시 

key passphrase 값이 적용된 ppk파일은 사용할 수 없으니

fileziller를 사용할 계획이 있으면 이 값을 입력하지 않는 것이 좋다. 


 



 

 키를 잘 저장했으면 putty를 실행합니다. 



Host Name에 계정@elastic ip를 입력합니다. 

포트는 기본 포트 22를 사용합니다. 


기본 계정 이름은 사용하는 운영체제에 따라 다릅니다. 

아래 운영 체제 별 기본 계정을 사용하시면 됩니다. 





  • For an Amazon Linux AMI, the user name is ec2-user.

  • For a RHEL5 AMI, the user name is either root or ec2-user.

  • For an Ubuntu AMI, the user name is ubuntu.

  • For a Fedora AMI, the user name is either fedora or ec2-user.

  • For SUSE Linux, the user name is root.

  • Otherwise, if ec2-user and root don't work, check with the AMI provider.



 


 

왼쪽 메뉴에서 Connection-SSH-Auth에서 기본 옵션을 그대로 두고

Priave key file for authentication 에서 위에서 생성한 ppk파일을 입력합니다. 


 




그리고 오픈을 클릭하면 아래와 같은 검은창이 뜨면서 인스턴스에 SSH 접속을 성공하였습니다.  

위에서 passthrase 암호를 입력했으면 추가로 입력이 필요하고 

입력하지 않았으면 한번에 로그인이 됩니다. 


 




그럼 다음번에는 ftp 프로그램으로 aws에 접속하는 방법을 알아보겠습니다.




아마존 클라우드 (AWS) 시작하기 3 - 보안그룹 정책과 고정 IP 설정하기





이전글 :  아마존 웹 서비스 시작하기 - 인스턴스 생성하기 




참고: http://trend21c.tistory.com/1294

http://pyrasis.com/book/TheArtOfAmazonWebServices/Chapter06

http://blog.mygentle.com/2013/09/aws-free-tier.html


APM을 설치하기 전에 보안그룹 설정을 하고 고정 IP를 할당받아 둡니다.

보안 설정 및 고정 IP는 지역별로 설정 가능합니다.  




- 포트 관리 


1. 왼쪽 메뉴에서 security check 를 클릭합니다. 






2. 인스턴스를 생성할때 받은 자신의 그룹 ID를 선택하고 아래 INBOUND 탭을 클릭



현재는 SSH 포트만 열려있습니다. 


3. EDIT 버튼을 누르고 나온 화면에서 ADD Rule을 클릭합니다.  



4. HTTP, HTTPS 규칙을 추가합니다.





HTTP, HTTPS 포트가 열린 것을 확인할 수 있습니다. 




- 고정 IP 할당 



인스턴스가 생성되면 공인 IP를 할당받게 됩니다. 이 주소는 인스턴스가 실행되고 있는 경우메만 유효하고

인스턴스가 중단되거나 다시 실행되면 IP 주소가 변경되게 됩니다. 

도메인과 IP 주소를 연결하여 사용하려면 고정된 IP 주소가 필요합니다. 

AWS는 이렇게 고정된 IP를 elastic IP 메뉴로 관리하고 있습니다. 



1. 왼쪽 메뉴에서 Elastic IPs를 선택합니다. 




2.  Allocate New Address를 클릭하여 새로운 고정 IP를 받아옵니다. 







문제없이 새로운 고정 IP가 생성되었습니다. 


3. 생성된 인스턴스와 고정 IP 연결하기 




고정 IP를 생성하면 Release address 와 Associate Address 버튼이 활성화 됩니다. 

그중 Associate Address 버튼을 클릭하여 기존에 생성된 인스턴스와 고정 IP를 연결합니다. 


버튼을 누르면 나오는 창에서 Instance를 클릭하면 자동으로 생성된 인스턴스가 검색됩니다. 

그 인스턴스를 클릭하고 Associate 버튼을 누르면 끝!


개인정보를 보호하기 위해 죄다 모자이크처리 되어있지만

 각각의 값이 입력되어 제대로 연결된 것을 확인 할 수 있습니다. 





여기서 요금 관련 주의 사항 


- 한 서버당 elastic IP 하나는 무료입니다. 


- 한 서버당 elastic IP 두개 이상부터는 유료입니다. 


- Elastic IP를 할당받고 인스턴스에 할당하지 않으면 유료입니다. 

(고정 IP를 받아놓고 사용하지 않는 케이스를 막기 위해서인듯..)

첫 한시간동안은 무료, 이후 시간당 0.005달러 


- Elastic IP를 인스턴스에 할당한 상태에서 해당 인스턴스를 Terminate시켜도 

Elastic IP는 할당이 해제된 채로 계속 남아있습니다. 

Elastic IP를 따로 Release 해주어야 요금이 부과되지 않습니다. 












 

아마존 클라우드(AWS) 시작하기 2 - instance 생성하기

...



이전글 : 아마존 클라우드(AWS) 시작하기 1 - AWS 가격 확인과 계정 가입하기

참고: http://trend21c.tistory.com/1293

 

 

아마존 웹 서비스 계정을 생성했으니 이제 EC2로 불리우는

아마존 클라우드 vitual server instance를 생성해보자.

 

 


 

전체 메뉴에서 EC2를 누르면 아래 관리 화면으로 들어간다.

설정하기 앞서서 맨위 메뉴의 오른쪽에서 지역을 설정한다.

 

Asia Pacific 중에서 도쿄를 선택하였다.

 

 

 

 

 

 

지역설정 후 관리 화면의 중앙에 있는 Launch Instance 버튼을 클릭한다.

 

1. AMI 선택하기  

 

Amazon Machine Image(AMI)는 운영체제와 어플리케이션 서버, 

어플리케이션들을 포함하는 하나의 템플릿을 의미한다.  

 

왼쪽 메뉴의 quick start를 선택하면 2단계로 인스턴스 설정을 할 수 있으니 quick start를 선택하고

본인이 희망하는 운영체제를 클릭하여 다음 단계로 넘어간다.

 

 

 

2. 인스턴스 타입을 선택한다.

 

각 인스턴스별로 성능이 나와있으니 확인하고 인스턴스 타입을 선택한다.

더 좋은 성능이 있더라도 일단 무료로 AWS를 사용하는 것이 목적이기 때문에 t2.micro를 선택하였다.

 

성능 추가나 보안 그룹 설정등 추가로 입력하고 싶은 사항이 없으면

여기서 Review and Launch를 클릭하여 곧바로 인스턴스를 띄우도록 한다.


 


 

 

 

 

3. 리뷰 화면에서 보안 키 (private key)를 저장하고 lanuch 한다.


 

 

 

 

 

AWS를 접속하기 위해서는 public key - private key pair가 필요하는데

여기서 개인키는 본인이 로컬에 저장하고 있어야 한다.

 

Lauch 버튼을 클릭하면 아래와 같이 key pair를 설정하는 창이 뜨는데  

아래 create a new key part를 선택하고 key pair name을 본인이 원하는 이름으로 입력하고

download key pair를 클릭하면 개인키를 로컬에 다운로드 받을 수 있다.


 

주의) 

여기서 다운로드 받은 개인키는 재발행이 되지 않고

한번 분실하면 기존 인스턴스에 접속을 할 수 없으니 

꼭 안전한 곳에 잘 저장해두도록 한다!

 


 


 

 

 

4. Launch instance

 

개인키를 저장하고 launch instances 버튼을 누르면 인스턴스가 제대로 설정되었다는 안내가 뜬다.


 

view instance를 누르거나 EC2 메뉴로 가면 인스턴스가 생성되어

 running단계로 제대로 작동하고 있는 것을 확인할 수 있다.






 

다음은 보안그룹 설정과 고정 ip 발급에 대해 이야기하겠다.

..


아마존 클라우드 (AWS) 시작하기 1 - AWS 가격 확인와 계정 가입하기



 


아마존 웹 서비스(AWS)는 클라우드에서 컴퓨팅 파워의 규모를 자유재로 변경할 수 있는 웹 서비스이며

현재 사용자들에게 가입후 12개월간 무료로 AWS를 직접 사용할 수 있는

 Free Usage Tier 서비스를 제공하고 있다. 



제공하는 기능은 대략 아래와 같다. 





EC2(Elastic Compute Cloud) 

 윈도우/리눅스 t2.micro 인스턴스(1기가 메모리) 를 한 달동안 750시간 사용 


저장공간 - 5기가


관계형 데이터베이스 - DB 인스턴스를 한달동안 750시간 사용 


noSQL - 25기가의 저장공간, 한 달동안 200백만건의 요청 사용 






무료임에도 많은 성능을 제공하고 있다 +_+ 


그러나 무료 기간은 1년이니 

1년후 유료변환후 사용비용을 알아볼 필요는 있다. 


가격정보 : http://aws.amazon.com/ko/ec2/pricing/


On demand instance 요금 




on demand instance는 말 그대로 사용한대로 요금이 부과된다. (할인없음) 

예약 인스턴스를 사용하면 용량 예약 기능 및 기간 약정 할인 서비스를 제공한다. 

1년, 3년 기간으로 약정할 수 있는데 물론 약정 기간이 길어질수록 할인폭도 커진다. (최대 75%)

그리고 당연하게도 전체 선결제를 할 경우가 가장 할인폭이 크다. 



예시 ) m3.medium 예약 인스턴스 가격 




각 서비스별로 on demand와 가장 할인폭이 큰 선결제로 가격을 비교해보자. 

 

기준 지역은 도쿄이고 한달 30일 환율 1000원 가정하니

한달에 내야할 돈이 대략 아래와 같이 나온다.

사실 on demand 가격은 좀 비싼 감이 있었는데

3년 선결재로 하니 나름 쓸만한 가격인것 같다.

on demand 비용이 비쌀 수록 할인율도 커지기 때문에

3년 계약 약정일 경우 m3.medium이 t2.medium 보다 더 비용이 저렴하기도 하다.

 

예약 인스턴스가 상대적으로 비용이 낮게 들어간다고 해도 

한번 미리 결재해두면 사용량이 줄어도 계속 비용을 지불해야 하는 단점도 있으니

자신의 서비스에 맞는 요금 서비스를 선택하는 것이 가장 중요할 것 같다.

 

 

아마존 인스턴스별/이용 기간별 월 사용료   

 

 

instance on demand(h) 1년(h) 3년(h) on demand(M) 1년(M) 3년(M)
t2.micro $0.020 $0.014 $0.009 ₩14,400 ₩10,368 ₩6,768
t2.small $0.040 $0.029 $0.019 ₩28,800 ₩20,736 ₩13,536
t2.medium $0.080 $0.058 $0.038 ₩57,600 ₩41,400 ₩27,072
m3.medium $0.101 $0.056 $0.037 ₩72,720 ₩40,320 ₩26,568
m3.large $0.203 $0.114 $0.074 ₩146,160 ₩82,224 ₩53,136
m3.xlarge $0.405 $0.229 $0.147 ₩291,600 ₩165,096 ₩105,624

 

 

그나저나 도쿄가 속도가 더 빠를 것 같아 도쿄 선택했는데

미국이 인스턴스 비용은 더 싼 것 같다.

속도 차이가 별로 안난다면 미국 지역을 사용하는 것도 나쁘지 않는 것 같다.

 



요금 체계도 확인했으니 이제 서비스를 시작하기 위해

아래 사이트에 접속하여 계정 가입을 진행해보자. 

http://aws.amazon.com/ko/free/












새 사용자입니다. 를 클릭하고 새 계정을 생성해보자. 




contact information에서 주소 및 전화번호 등을 입력한다. 



payment information에서는 사용 가능한 신용카드 정보를 입력한다. 

실제로 사용 가능한지 확인하기 위해 1 달라가 결재되나

결재 완료 후 다시 취소가 되니 걱정은 안해도 된다.  





Identify verification 단계 


 입력한 전화번호로 실제로 전화 인증을 하게되므로 지금 사용가능한 전화번호를 입력해야 한다. 

일단 국가 코드에서 한국을 선택하고 전화번호를 입력한다. 

전화번호에서는 맨앞의 0을 빼고 입력해야 한다고 하나 전체 입력해도 별 문제 없었던 듯. 


번호를 입력하고 call me now를 클릭하면 실제로 전화가 오면서

화면에 핀넘버가 표시된다. 


전화를 받아서 핀번호를 입력해주면 끝인데

 

전화기를 못찾아서 fail

앞에 국가코드에서 한국을 수정안해서 fail

전화를 받았는데 클릭이 안되서 fail ㅠㅠ


세번 실패했더니 12시간후에 다시 하라고 에러 메세지가 뜬다 

하하 그래서 결국 12시간 후에 함 ㅠㅠ 










다음 계획 지원 단계


가입창이 한글과 영어 두개 언어가 왔다갔다 하는건 

내가 12시간후에 다시 가입신청을 해서이다 -_-; 


유료인 지원 서비스들이 있지만 원하는건 무료이므로 기본을 선택하고 넘어간다. 



가입이 완료되었다. 

관리 콘솔 시작을 누르면 아마존 웹 서비스에서 사용할 수 있는 

많은 서비스들을 확인할 수 있다. 


하나하나 확인하고 설정해보는 것도 재밌을 것 같다 +_+