Skip to main content

윈도우 mongoose에 php7 사용해보기

정말 간단하게 윈도우 로컬에서 PHP로 해야할 작업이 있어서 찾아보았습니다.

usbwebserver를 쓸려고 했는데 크기가 더 작은 녀석이 있네요…

mongoose 웹서버 입니다.

물론 .. 나름 구동방식에 있어서 장단점은 있지만 로컬에서 혼자 개발하는 용도로는 최적인 것 같습니다.

다운로드 링크는 다음주소에 있습니다.

https://code.google.com/archive/p/mongoose/

5.0이 최신이긴하지만… php가 잘 작동하지 않습니다.

mongoose_download

4.1 버전을 다운로드 합니다. 물론 이 속에 들어있는 PHP 버전은 5.x 입니다.

압축을 풀어보면 다음과 같은 파일이 있습니다. web_root 에 php프로그램을 저장합니다.
moongoose_files
mongoose.exe를 실행하면 윈도우 트레이에 아이콘이 뜨고 localhost:8080으로 브라우저로 접속해 볼수 있습니다.
그대로 써도 상관은 없지만 php의 extension이 다 빠진 상태라 난감합니다. ㅋㅋ -ㅅ-) sqlite3 정도 되는 수준….

이제 mongoose를 쓸만하게 만들어 볼겁니다.

1. http://www.php.net에가서 php7 윈도우 버전 바이너리를 받아옵니다. 받아온 파일은 mongoose하위폴더에 php7으로 위치 시킵니다.
php5ts.dll과 php-cgi.exe는 php5 버전임으로 삭제 합니다.
대략 폴더/파일이 다음과 같은 모양이 됩니다.
mongoose_files2

2. mongoose.conf 파일을 편집합니다. (html도 추가해주고 php-cgi.exe 경로도 넣어주고 …. )
내장된 설정창에서도 변경이 가능하지만 절대경로로 들어가버려서 폴더 위치를 옴기면 설정이 변경되어 버립니다.
(다음과 같이 상대경로로 잡아두면 cd, usb등에 넣어다닐때 편리합니다.)

cgi_pattern **.cgi$|**.pl$|**.php$|**.html$
cgi_interpreter php7/php-cgi.exe
listening_ports 8080,8081s
document_root web_root
ssl_certificate ssl_cert.pem
url_rewrite_patterns /xy=web_root\index.php

3. php.ini 파일을 생성합니다. 물론 mongoose 폴더에 같이 둡니다. 간단하게 필요한 extenstion 들만 추가해서 간단하게 만듭니다.
이것저것 필요한 설정들을 넣어주도록 합니다. 이 내용은 php7 폴더에 있는 php.ini-dest 등을 참고해주세요.

date.timezone = "Asia/Seoul"

extension_dir = "./ext"
extension=php_gd2.dll

그러면 최종적으로 파일들은 이렇게 됩니다.
mongoose_files3

4. 해도되고 안해도 되는 php파일정리
이렇게 해주면 용량이 매우 줄어듭니다. -ㅅ-)
mongoose_files4

mongoose-php7

이렇게 해서 외장하드에서 관리하는 포토겔러리를 만들었습니다.
자세한 소스는 다음에 ….. -ㅁ-)
아직 정리가 되지 않음….

Ubuntu16에서 apache2,php7 설치하기

Ubuntu16에서 apache2,php7 설치하기

우분투 서버는 처음 써봤습니다. -ㅅ-);;

제가 설치했던 방법을 기록해 봅니다. 클라우드 서버를 개설하더라도 하드웨어 준비는 하지 않겠지만

설치는 해야하지 않겠습니까 -ㅅ-)!!!

Ubuntu 16 – server가 먼저 설치되어있다는 가정하에 시작합니다.

지금까지 사용했던 centos나 amazone linux에서는 yum을 사용했었으나

ubuntu에서는 apt-get을 사용합니다. ubuntu를 사용하다보니 적응 안되는 부분도 조금씩 있긴 합니다만…

(관리자 권한을 위해 sudo를 쓴다든지…. )

1. root 권한으로 실행
Ubuntu는 로그인하면 사용자로 로그인 되기 때문에 관리자 권한을 얻어야지만 설치 명령을 실행할 수 있습니다.
다음 커멘드를 입력 후 로그인 중인 계정의 비밀번호를 입력하면 root를 사용하 실 수 있습니다.

# sudo su - 

2. 서버 업데이트
다음 명령을 통해 패키지 리스트를 갱신합니다. 현재 배포중인 최신버전의 패키지들을 설치할 수 있습니다.

# apt-get update

그리고 그 최신버전 패키지들에 맞게 설치된 패키지들을 버전업합니다.

# apt-get upgrade

3. Apache2 설치
yum 과 비슷하게 다음과 같은 명령으로 간단하게 설치됩니다.

# apt-get install apache2 

4. Apache2 모듈 설정 on/off
Apache2 모듈 설정을 합니다. 필요한 모듈은 추가해주고 필요없는 모듈은 제거합니다.

모듈의 활성화

# a2enmod rewrite headers

모듈의 비활성화

# a2dismod -f autoindex

apache2 설정은 /etc/apache2에서 하게 되는데 위의 명령을 통해서 conf-availble 폴더에서 conf-enable 폴더로
링크가 걸리는것 같습니다. (mod도 마찬가지)

5. PHP7 설치
Ubuntu 16부터는 패키지에 기본적으로 PHP7이 적용되어있습니다.
PHP5를 설치할 수도 있겠지만… 장기적으로 볼때 PHP업그레이드를 통해 지원 받을 수 있는 기간이 PHP7이 최신버전이니 더 길겠죠…
아직도 php.net에 가보면 버그픽스들이 올라옵니다.

다음 명령을 통해 PHP7.0.x 를 설치합니다.

# apt-get install php

그리고 추가적으로 필요한 모듈을을 설치합니다.

# apt-get install php-mysql php-xmlrpc php-xml php-curl php-gd php-pear

설치가능한 모듈 리스트는 다음 명령으로 확인 가능합니다.

# apt-cache search php-

리스트중 필요한 기능들을 설치하실 수 있습니다.

6. Apache2 – PHP7 연동 모듈을 설치합니다.

# apt-get install libapache2-mod-php7.0

7. 서버 시작
서버를 시작합니다.

# service apache2 start

/var/html 폴더에 phpinfo.php 파일을 만들고 http://호스트/phpinfo.php 를 브라우저로 호출해봅니다.
php7-0-8

일단은 여기까지 정도면 클라우드 서버에 사용하기에 적합할 것입니다. -ㅅ-)b
(DB는 별도서버로 PaaS방식으로 사용하는게 안정적이라… )

기타. VirtualHost 구성방법 – http://webdir.tistory.com/213

여담) 그동안 설치를 안해봐서 그런지 …. -_-; 뭔가 생소해졌다.

예고) 다음번에는 조만간 클라우드 서버에서 서버 세션공유 관련된 글을 게시해보겠습니다. ㄷㄷㄷ

Fabric을 이용한 서버관리/배포 (스크립트)

배포 스크립트를 만들어 보도록 합시다.

Fabric은 하나의 서버에 이외에도 여러개의 서버에 동시에 배포할 수 있습니다.

AWS와 같은 서버에 서버의 환경을 조정하거나 소스 코드를 배포하기 위해서 참 좋은 프로그램 입니다.

예를 들면 10대의 서버가 있는데 소스를 배포 후 OS업데이트를 실행하고, 동시에 reboot가 가능하게 되는 것입니다.

생각보다는 쉽고 단순합니다. ^^

무조건 따라 해보시면 감이 잡힐 겁니다.

Fabric은 파일명이 고정입니다. 특정한 폴더 혹은 프로젝트에 [fabfile.py] 파일을 작성합니다.

from fabric.api import env,run

#접속할 host에 대한 접속정보
env.user = 'root'
env.hosts = ['myhost1.com','myhost2.com']
env.key_filename=['keyfile.pem']

#task 각각의 서버에 커맨드를 실행함
def update():
    run("yum update")

def ls():
    run("ls -al")

저장된 파일의 경로에서 fab ls 를 실행해보면, 지정된 호스트에서 각각 명령이 실행 되는 것을 확인 할 수 있습니다.

D:\Python\Python_work\pytest>fab ls
[teracle.com] Executing task 'ls'
[teracle.com] run: ls -al
[teracle.com] Login password for 'root':

물론 스크립트데로 fab update를 실행하여 각 서버의 업데이트도 진행 할 수 있습니다. 동시에 2가지 task를 실행할 수도 있고요. viagra 100 prix. fab update ls 처럼요…

서버 내부에서 rsync등을 이용하여 원하시는 작업을 처리 할 수도 있습니다.

이제 배포 스크립트를 봅시다. ^^
서버에 파일을 올리기 위해서는 put을 사용합니다.
로컬에 있는 특정 경로의 파일을 각각의 서버의 특정경로로 배포 할 수 있습니다.

from fabric.api import *

env.user = 'root'
env.hosts = ['myhost1.com','myhost2.com']
env.key_filename=['keyfile.pem']

def deploy():
    run('mkdir -p /home/my_account/public_html')
    put('local_source/public_html', '/home/my_account/public_html')

응용한다면 개발 환경으로 부터 운영으로 편리하게 배포 할 수 있으실 겁니다.

마지막으로 Rule을 사용하면, 각 서버의 역할 그룹을 지정하여 배포를 사용할 수도 있습니다.
(DB서버에 배포할 것들과 웹서버의 배포할 것들을 구분한다던지…)

자세한 내용은 공식 사이트를 참고하세요…
http://docs.fabfile.org/en/1.10/

Fabric을 이용한 서버관리/배포 (윈도우에서 설치)

오늘은 천을 써보도록 합시다.
(Fabric을 구글 검색해보니 섬유 패턴 무늬만 잔뜩 나오더군요 … 쿨럭.. )

Fabric의 용도는 여러대의 서버관리 또는 여러군데의 서버에 동시 배포를 할 수 있습니다.
주요 기능은 SSH를 이용하여 remote shell command 및 파일 업로드/다운로드 등을 지원한다고 합니다.

리눅스에서의 설치는 매우 간편하지만….

$ yum install fabric

윈도우에서의 설치는 좀 까다로운 편입니다. — 뭔가 설치할게 많습니다.

(1)우선은 Phthon을 설치해야합니다. 2.7버전을 설치해주세요 — https://www.python.org
설치시에 PATH를 걸어주세요. (프롬프트 어디서든지 사용할 수 있음으로 걸어주는게 편합니다. ㅠ_ㅠ) )

(2)pip도 설치해야 합니다. — https://pip.pypa acheter viagra pharmacie france.io/en/stable/
pip는 패키지 다운로드의 기능을 합니다.
다음 주소에서 pip 설치 파일을 다운로드 합니다.
https://bootstrap.pypa.io/get-pip.py

그런후 프롬프트에서 다운로드 받은 파일을 실행하면 설치가 완료 됩니다.

d:\> python get-pip.py 

(3) 이제 feblic을 설치해봅시다. 다음 명령을 차례대로 실행합니다.

d:\> pip install paramiko
d:\> pip install fabric

설치중 문제가 생긴다면, Microsoft Visual C++ Compiler for Python 2.7를 설치해보세요..
http://www.microsoft.com/en-us/download/details.aspx?id=44266

프롬프트에서 fab 라고 실행하여 다음과 같이 나타나면 설치를 성공한 것입니다.

d:\> fab --version
Fabric 1.10.2
Paramiko 1.15.2

다음에는 실제로 fabric을 사용해보도록 하겠습니다. ;;

SSL 인증서를 AWS에 세팅 해보자

오랜만에 글을 적네요..

요전에 만들었던 CSR을 이용하여 우여곡절 끝에 … SSL 인증서를 발급 받았습니다.

아파치에서 세팅한다면 mod_ssl을 활성화 시키고(빌드를 하던 모듈을 빌드하여 추가하던 해야 합니다. -_- )

어쨌든 업체로 부터 다음과 같은 인증서를 발급 받았습니다. 키 종류별로 주석의 모양이 다릅니다.

-----BEGIN CERTIFICATE-----
6789EpTCCA42gAwIBAgISESF+1234+XNPdN/2hRSjMA0GCSqGSIb3DQEBBQUA
MC4xETA123456oTCEFscGhhU1NMMRkwFwYDVQQDExBBbHBoY123412323231y
1234531MDkwMjE3MjMzMloXDTE2MDkwMjE3MjMzMlowQj21231231322RG9t
....중략....
5g3SoL111111232312341JM9ATmVBMzB7F3tmElBdvxYXJ2/NFQBAwJPhqU=
-----END CERTIFICATE-----

AWS에서는 EC2서버에 직접적으로 웹 세팅을 하고 Security Group에서 443포트를 열어서 사용해도 되지만…

LoadBalancer를 이용하여 좀더 간편하게 설정 할 수 있습니다.
(LoadBalancer는 스위칭 장비로서 여러개의 서버를 사용하여 부하를 분산할 때 사용됩니다. )

세팅하는 위치는 EC2의 LoadBalancers 메뉴로 이동후 생성되어있는 LoadBalancer에서 Listeners 탭을 클릭합니다.
(없을시는 LoadBalancer를 새로 작성.. 물론 접속할 서버도 할당해야합니다.)
elb

여기서 edit를 클릭후 https(Secure HTTP)를 추가합니다.
elb02

추가된 곳 뒤쪽에 Change를 클릭하여 인증서를 추가 할 수 있습니다.(443포트를 80으로 포워딩 하는듯..)
elb03

Private Key에 이전에 서버에서 만든 개인키를 넣습니다.
Public Key Certificate에 업체로 부터 발급받은 인증서를 넣습니다.
Certificate Chain에는 인증서 발급 업체의 키를 넣습니다. CA인증서 합니다. 오류가 날때는 생략해도 됩니다.
(!!?? 대행 업체의 키가 아니며… 발급 업체 입니다. 특정 기기에서 오류가 나면 홈페이지에서 찾아서 넣어줘야합니다.)

설정후 브라우저에서 확인해보면 잘 동작합니다. ^^

ssl002