AMP - 윈디하나의 솔라나라
|
/usr/local
에 설치한다. 본 내용대로 하기 위해 솔라리스에 이미 설치되어있는 APM을 삭제해야할 필요는 없다.
# wget https://github.com/nghttp2/nghttp2/releases/download/v1.36.0/nghttp2-1.36.0.tar.xz
# tar xvfJ nghttp2-1.36.0.tar.xz
# cd nghttp2-1.36.0
# ./configure OPENSSL_CFLAGS="-I/usr/local/ssl/include" OPENSSL_LIBS="-L/usr/local/ssl/lib -lssl -lcrypto" --disable-examples 1)
# make
# make install
1) 64bit 로 컴파일하려면 CFLAGS="-m64" CXXFLAGS="-m64"
를 추가한다.
Apache HTTPd 2.4.17
부터 추가된 HTTP/2 를 지원용 모듈인 mod_http2 를 컴파일하기 위해 필요한 라이브러리다.
# wget http://thrysoee.dk/editline/libedit-20181209-3.1.tar.gz # tar xvfz libedit-20181209-3.1.tar.gz # cd libedit-20181209-3.1 # ./configure 1) # make 2) # make install1) 64비트로 컴파일 하려면
CFLAGS="-m64"
를 사용하자.# wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.bz2 # tar xvfj pcre-8.42.tar.bz2 # cd pcre-8.42 # ./configure CFLAGS="-I/usr/local/include"\ --enable-utf \ --enable-unicode-properties \ --enable-pcregrep-libz \ --enable-pcregrep-libbz2 \ --enable-newline-is-anycrlf \ --enable-pcre16 \ --enable-pcre32 \ --enable-jit \ --enable-pcretest-libedit 1) 2) # make # make install1) pcretest에 라인 편집 기능이 필요하지 않다면 이 줄을 제외하고 빌드 해도 된다.
CFLAGS="-m64" LDFLAGS="-m64" CXXFLAGS="-m64"
를 추가하고 빌드 하자.
# wget http://www.zlib.net/zlib-1.2.11.tar.xz
# tar xvfJ zlib-1.2.11.tar.xz
# cd zlib-1.2.11
# CFLAGS="-fPIC" ./configure 1)
# make
# make test
...
*** zlib test OK ***
...
*** zlib shared test OK ***
...
*** zlib 64-bit test OK ***
`test' is up to date.
# make install
1) 64bit 로 컴파일하려면 CFLAGS="-m64"
를 추가한다.
# wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
# tar xvfz libiconv-1.15.tar.gz
# cd libiconv-1.15
# ./configure --prefix=/usr/local --enable-static --enable-shared 1)
# make
# make install
1) 64비트로 컴파일 하려면 CFLAGS="-m64"
를 사용하자.
configure
전에 include/config/ftoption.h
의 FT_CONFIG_OPTION_SUBPIXEL_RENDERING
을 언코멘트 하면 서브픽셀렌더링을 사용할 수 있지만, 기본적으로 비활성화되어있다. 마이크로소프트의 특허때문이다. FreeType & Patents를 읽어보자."/usr/local/include/ft2build.h", line 56: cannot find include file: <freetype/config/ftheader.h>와 유사한 오류가 나면
/usr/local/include/ft2build.h
파일을 지운다. 이 파일은 더이상 사용되지 않으며 /usr/local/include/freetype2/ft2build.h
으로 대체되었다.
# wget https://download.savannah.gnu.org/releases/freetype/freetype-2.9.1.tar.bz2
# tar xvfj freetype-2.9.1.tar.bz2
# cd freetype-2.9.1
# GNUMAKE="gmake" ./configure --with-harfbuzz=no 1)
# gmake
# gmake install
1) 64비트로 컴파일 하려면 CFLAGS="-m64" LDFLAGS="-m64"
를 추가한다.
# wget http://apache.mirror.cdnetworks.com/apr/apr-1.6.5.tar.bz2 # tar xvfj apr-1.6.5.tar.bz2 # cd apr-1.6.5 # ./configure \ --enable-nonportable-atomics \ --enable-threads \ --enable-posix-shm \ --enable-allocator-uses-mmap \ --enable-allocator-guard-pages \ --enable-pool-concurrency-check \ --enable-other-child \ --prefix=/usr/local 1) 3) # make # make install 2) # wget http://apache.mirror.cdnetworks.com/apr/apr-util-1.6.1.tar.bz2 # tar xvfj apr-util-1.6.1.tar.bz2 # cd apr-util-1.6.1 # ./configure --with-apr=/usr/local/bin/apr-1-config \ --with-ldap \ --with-iconv=/usr/local \ --with-openssl=/usr/local/ssl \ --with-crypto=/usr/local/ssl 3) # make # make install1)
--enable-nonportable-atomics
옵션은 이식 가능하지 않은 (운영체제에 특화된) Atomic operations 을 사용하라는 의미다. 사용하는 컴파일러에 따라 작동 방식이 다르다. GCC 4.1 이상에서는 __sync_val_compare_and_swap
빌트인 함수를 사용하며, GCC를 사용하지 않는 솔라리스에서는 atomic_cas_ptr(3C)와 atomic_swap_ptr(3C)를 사용한다./usr/local
에 설치된다.CFLAGS="-m64"
를 사용하자.
# wget https://curl.haxx.se/download/curl-7.64.0.tar.xz # tar xvfJ curl-7.64.0.tar.xz # cd curl-7.64.0 # ./configure \ --without-nss \ --with-ssl=/usr/local/ssl \ --with-nghttp2=/usr/local \ --with-brotli=/usr/local \ --with-libidn2=/usr/local \ --with-ca-fallback 1) 2) 3) ... Host setup: i386-pc-solaris2.11 Install prefix: /usr/local Compiler: cc SSL support: enabled (OpenSSL) SSH support: no (--with-libssh2) zlib support: enabled brotli support: enabled (libbrotlidec) GSS-API support: no (--with-gssapi) TLS-SRP support: enabled resolver: POSIX threaded IPv6 support: enabled Unix sockets support: enabled IDN support: enabled (libidn2) Build libcurl: Shared=yes, Static=yes Built-in manual: enabled --libcurl option: enabled (--disable-libcurl-option) Verbose errors: enabled (--disable-verbose) SSPI support: no (--enable-sspi) ca cert bundle: no ca cert path: no ca fallback: yes LDAP support: enabled (OpenLDAP) LDAPS support: enabled RTSP support: enabled RTMP support: no (--with-librtmp) metalink support: no (--with-libmetalink) PSL support: no (libpsl not found) HTTP2 support: enabled (nghttp2) Protocols: DICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS LDAP LDAPS POP3 POP3S RTSP SMB SMBS SMTP SMTPS TELNET TFTP # make # make install1) 7.43.0 이후 버전부터 nghttp2 라이브러리와 같이 설치하면 HTTP/2를 지원한다.
--with-ca-bundle=/usr/local/ssl/certs/ca-bundle.crt
을 붙여 컴파일해 번들 인증서를 사용할 수 있다.CFLAGS="-R/usr/local/lib -R/usr/local/ssl/lib -m64" LDFLAGS="-R/usr/local/lib -R/usr/local/ssl/lib -m64"
를 추가한다.
mysqlnd
를 사용해 PHP를 설치한다. 따라서 PHP와 MySQL 연동을 위해 MySQL을 설치할 필요는 없다. (MySQL 서버나 MySQL 클라이언트가 필요하지 않다면 MySQL을 설치하지 않아도 된다)공식홈페이지: The Apache HTTP Server Project
아파치에 대한 더 자세한 설명은 윈디하나의 솔라나라: 아파치 웹 서버 (작성중)를 읽어보자.
root@wl ~/src # wget http://apache.mirror.cdnetworks.com//httpd/httpd-2.4.38.tar.bz2 root@wl ~/src # wget https://github.com/FastCGI-Archives/mod_fastcgi/archive/2.4.7.1.tar.gz root@wl ~/src # tar xvfj httpd-2.4.38.tar.bz2 root@wl ~/src # tar xvfz mod_fastcgi-2.4.7.1.tar.gz root@wl ~/src # cd httpd-2.4.38 root@wl ~/src/httpd-2.4.38 # ./configure \ --prefix=/usr/local/apache2 \ --enable-so \ --enable-mods-static=all \ --enable-proxy-http2 \ --enable-proxy-fcgi \ --enable-brotli \ --disable-md \ --with-apr=/usr/local \ --with-apr-util=/usr/local/apr \ --with-pcre=/usr/local \ --with-z=/usr/local \ --with-ssl=/usr/local/ssl \ --with-mpm=event \ --with-nghttp2=/usr/local \ --with-brotli=/usr/local \ --enable-mpms-shared='event prefork worker' 1) 2) 3) root@wl ~/src/httpd-2.4.38 # make root@wl ~/src/httpd-2.4.38 # make install root@wl ~/src/httpd-2.4.38 # cd ../mod_fastcgi-2.4.7.1 root@wl ~/src/mod_fastcgi-2.4.7.1 # cp Makefile.AP2 Makefile root@wl ~/src/mod_fastcgi-2.4.7.1 # make root@wl ~/src/mod_fastcgi-2.4.7.1 # make install1) 모든(all) 모듈을 정적 컴파일 하며, MPM을
event
, prefork
, worker
중 선택 가능하도록 컴파일하며 솔라리스에서는 기본으로 event
를 사용한다. --enable-mods-static=all
대신 --enable-mods-static=reallyall
을 사용하면 정말 모든 모듈을 설치하지만 이 옵션은 추천하지 않는다.CFLAGS="-m64" LDFLAGS="-m64"
를 추가한다.acme.sh를 사용해 설정하는데 acme.sh 와 mod_md 가 서로 호환되질 않아 acme.sh 사용시 오류가 발생한다. 따라서 솔라나라에서는 mod_md 를 비활성화 한다.
root@wl ~/src # wget http://jp2.php.net/get/php-7.2.13.tar.xz/from/this/mirror
root@wl ~/src # tar xvfJ php-7.2.13.tar.xz
root@wl ~/src # cd php-7.2.13
root@wl ~/src/php-7.2.13 # ./configure \
--prefix=/usr/local/php \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-pdo-sqlite=/usr/local \
--with-iconv=/usr/local \
--with-gd \
--with-jpeg-dir=/usr/local \
--with-png-dir=/usr/local \
--with-zlib-dir=/usr/local \
--with-freetype-dir=/usr/local \
--with-openssl=/usr/local/ssl \
--with-openssl-dir=/usr/local/ssl \
--with-sqlite3=/usr/local \
--with-xsl \
--enable-fpm \
--enable-calendar \
--with-curl=/usr/local \
--enable-mbstring \
--enable-mbregex \
--enable-mysqlnd \
--enable-sigchild \
--enable-pcntl \
--enable-wddx \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-sockets \
--enable-soap \
--enable-ftp \
--enable-exif \
--enable-bcmath \
--enable-zip \
--with-pcre-dir=/usr/local \
--with-pcre-regex=/usr/local \
--with-pcre-jit \
--enable-opcache \
--enable-dtrace \
CFLAGS="-m64" LDFLAGS="-m64 " CXXFLAGS="-m64" \
CC="gcc" CXX="g++"
root@wl ~/src/php-7.2.13 # vi ./ext/mbstring/oniguruma/src/euc_jp_prop.c
#include "/export/home/windy/src/php-7.2.12/ext/mbstring/oniguruma/src/regenc.h"
root@wl ~/src/php-7.2.13 # vi ./ext/mbstring/oniguruma/src/sjis_prop.c
#include "/export/home/windy/src/php-7.2.12/ext/mbstring/oniguruma/src/regenc.h"
root@wl ~/src/php-7.2.13 # vi ext/sockets/conversions.c
// 첫번째 줄에
#if defined (__sun) || defined (__sun__)
#define _XPG4_2
#endif
root@wl ~/src/php-7.2.8 # vi ext/sockets/php_sockets.h
#if defined (__sun) || defined (__sun__)
# ifndef CMSG_ALIGN
/* aligning to sizeof (long) is assumed to be portable (fd.o#40235) */
# define CMSG_ALIGN(len) (((len) + sizeof (long) - 1) & \
~(sizeof (long) - 1))
# endif
# ifndef CMSG_SPACE
# define CMSG_SPACE(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + \
CMSG_ALIGN (len))
# endif
# ifndef CMSG_LEN
# define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
# endif
#endif /* Solaris */
root@wl ~/src/php-7.2.13 # make
root@wl ~/src/php-7.2.13 # make install
root@wl ~/src/php-7.2.13 # cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
root@wl ~/src/php-7.2.13 # cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
root@wl ~/src/php-7.2.13 # chmod +x /etc/init.d/php-fpm
root@wl ~/src/php-7.2.13 # vi /etc/init.d/php-fpm
#!/bin/sh 를 #!/bin/bash 로 변경
root@wl ~/src/php-7.2.13 # cp php.ini-development /usr/local/php/lib/
root@wl ~/src/php-7.2.13 # cp php.ini-development /usr/local/php/lib/php.ini 3)
1) 솔라리스에서 _XPG4_2 매크로를 파일의 처음에 넣어준다. 타 운영체제에서는 할 필요 없다.--with-apxs2
와 --enable-fpm
# ./configure \ --with-apxs2=/usr/local/apache2/bin/apxs \ ... # make # make install설치가 완료된 후 httpd.conf 에 FastCGI 설정 대신 아래와 같이 설정해야 한다.
LoadModule php5_module modules/libphp5.so AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
접속 기록이다. 어느 IP에서 언제에 접속했는지만 알면 된다. URL 및 내용에 대한 법률적 로깅의 의무는 없는 것으로 알고 있다. 보관기간은 개인정보보호법, 정보통신망법, 신용정보법, 전자금융거래법 등의 영향을 받는데 보통 6개월이다. 필자는 법률 전문가가 아니므로 자세한 설명은 피하겠다. 필요하다면 법률 자문을 받자. 로그를 저장하는 디스크의 용량을 반드시 확보해 놓아야 한다. 필자가 이런 내용을 써 놓는 이유가, 성능 안나온다고, 디스크 용량이 부족하다고 로그를 꺼놓고 운영하는 경우를 많이 봐왔기 때문이다. 법률로 로깅하도록 정해져 있는거니 로그 끄지 말고 필요하다면 웹서버 증설하자.
root@wl ~ # vi /etc/profile ... LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apache2/lib; export LD_LIBRARY_PATH PATH=$PATH:/usr/local/apache2/bin; export PATH; root@wl ~ # . /etc/profile
root@wl ~ # vi /usr/local/php/lib/php.ini short_open_tag = On expose_php = Off ;max_execution_time = 0 ;max_input_time = -1 memory_limit = 256M error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT display_errors = Off display_startup_errors = Off track_errors = Off html_errors = Off zend.assertions = -1 post_max_size = 24M default_charset = "UTF-8" ;always_populate_raw_post_data = -1 include_path = ".:/usr/local/php/lib/php" extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20151012" enable_dl = On upload_max_filesize = 20M date.timezone = Asia/Seoul date.default_latitude = 37.5780 date.default_longitude = 126.9768 ;session.save_handler = memcache ;session.save_path = "127.0.0.1:11211" ;zend_extension = opcache.so ;opcache.enable = 1 opcache.fast_shutdown=1 curl.cainfo = /usr/local/ssl/certs/ca-bundle.crtPHP-FPM 설정은 php-fpm.conf 에서 한다. 프로세스의 스케줄링을 아래와 같이 지정하자. 부하가 많은 서비스라면 프로세스의 개수를 늘여야 한다.
root@wl ~ # vi /usr/local/php/etc/php-fpm.conf ... root@wl ~ # cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf root@wl ~ # vi /usr/local/php/etc/php-fpm.d/www.conf ;listen = 127.0.0.1:9000 listen = /tmp/php-fpm.sock listen.owner = daemon listen.group = daemon listen.mode = 0666 user = daemon group = daemon pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 pm.max_requests = 500 pm.status_path = /admin/status.php ;security.limit_extensions = .php
root@wl ~ # mkdir /usr/local/apache2/fcgi-bin 1) root@wl ~ # vi /usr/local/apache2/conf/httpd.conf Protocols h2 http/1.1 ... # PHP-FPM via FastCGI Support Configuration Start LoadModule fastcgi_module modules/mod_fastcgi.so 2) <IfModule mod_fastcgi.c> 3) # FastCGIExternalServer /usr/local/apache2/fcgi-bin/php-fpm -host 127.0.0.1:9000 -flush -pass-header Authorization FastCGIExternalServer /usr/local/apache2/fcgi-bin/php-fpm -socket /tmp/php-fpm.sock -flush -pass-header Authorization AddHandler php5-fcgi php Action php5-fcgi /fcgi-bin/php-fpm Alias /fcgi-bin/ /usr/local/apache2/fcgi-bin/ <Location /fcgi-bin/> Require all granted Options ExecCGI SetHandler php5-fcgi </Location> </IfModule> # PHP-FPM via FastCGI Support Configuration End ServerAdmin admin@solanara.net 4) ServerName www.solanara.net:80 4) #Include conf/extra/httpd-mpm.conf #Include conf/extra/httpd-multilang-errordoc.conf #Include conf/extra/httpd-autoindex.conf #Include conf/extra/httpd-languages.conf #Include conf/extra/httpd-userdir.conf #Include conf/extra/httpd-info.conf #Include conf/extra/httpd-vhosts.conf #Include conf/extra/httpd-manual.conf #Include conf/extra/httpd-dav.conf Include conf/extra/httpd-default.conf 5) #Include conf/extra/httpd-ssl.conf 6)1) mod_fastcgi 와 관련해 fcgi-bin 디렉토리를 만든다.
ServerAdmin
(서버 관리자의 메일 주소)과 ServerName
을 정해준다. 정하지 않아도 되지만 아파치 시작시 httpd: Could not determine the server's fully qualified domain name, using xxx.xxx.xxx.xxx for ServerName와 같은 메시지가 나올 수 있다. 만약 도메인이 없다면 IP를 입력해준다. 예)
ServerName 192.168.0.1
conf/extra/httpd-default.conf
에 나와있는 ServerTokens Prod
와 ServerSignature Off
설정은 꼭 넣자.Protocols h2 http/1.1
를 VirtualHost 태그 안에 추가해주면 된다. 자세한 사항은 HTTP/2 guide를 읽어보자.root@wl ~ # /etc/init.d/php-fpm start root@wl ~ # /usr/local/apache2/bin/apachectl start종료는 아래와 같이 할 수 있다.
root@wl ~ # /usr/local/apache2/bin/apachectl stop root@wl ~ # /etc/init.d/php-fpm stop
AMP 스택이 잘 설치되었는지 확인하는 가장 좋은 방법은 PHP의 phpinfo()
를 호출해 결과를 보는 것이다. 아래와 같이 .php 파일을 작성하자.
root@wl ~ # vi /usr/local/apache2/htdocs/phpinfo.php <?php phpinfo(); ?> root@wl ~ #
웹 브라우저를 사용해 http://localhost/phpinfo.php 에 접속해본다. php 정보가 제대로 나오는지 확인한다. 아래와 비슷하게 나와야 한다. (특히 4월 1일에 보면 PHP 로고가 다르게 보인다) 확인되었으면 phpinfo.php파일을 지운다.
root@wl ~ # rm /usr/local/apache2/htdocs/phpinfo.php
RSS ATOM XHTML 5 CSS3 |
Copyright © 2004-2019 Jo HoSeok. All rights reserved. |