반응형

Python과 Django

장고는 파이썬용 오픈소스 웹 개발 프레임워크로 웹 개발을 간단하고 쉽게 만든느 것이 목적이다. 장고는 동적 관리 인터페이스, 캐시 프레임워크, 단위 테스트 같은 특징을 포함하고 있다. 장고서버와 nginx를 uWSGI로 연동합니다.

 

uWSGI

uWSGI 모듈은 nginx와 애플리케이션이 uwsgi 프로토콜로 통신하게 해준다. uwsgi 프로토콜은 WSGI(Web Server Gateway Interface)에서 파생됐습니다.

 

SCGI

SCGI는 Simple Common Gateway Interface의 약자로 CGI 프로토콜의 변종이며 FastCGI와 유사하다. SCGI 인터페이스와 모듈은 Apache, IIS, Java, Cherokee등 다양한 소프트웨어 프로젝트에서 발견할 수 있습니다.

 

Python과 Django 설치 및 설정

  • yum install python3 python3-devel
  • yum install python3-pip
  • pip3 install django~=2.2.0
  • pip3 install uwsgi
  • django-admin startproject test_project
  • cd test_project/
  • uwsgi --socket :9000 -p 5 --module test_project.wsgi &
  • ps aux | grep uwsgi

참고

uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

 

반응형
반응형

PHP와 nginx의 연동 

FastCGI를 사용해 PHP를 nginx와 연동해 보려고 합니다. 기본적으로 PHP는 FastCGI 프로코콜을 지원합니다.PHP는 스크립트를 처리하며 nginx와 socket으로 연동할 수 있습니다. 바로 PHP-FPM으로도 알려진 FastCGI 프로세스 관리자를 사용하면 됩니다.

PHP-FPM

PHP 프로세스를 관리하는 스크립트로서 nginx의 요청을 받은 후 스크립트를 수행합니다. 
  • PHP의 자동 데몬 프로세스화(백그라운드 프로세스로 전환)
  • chroot로 격리된 환경에서 스크립트를 수행
  • 로그개선, IP주소제한, Pool분리등

PHP 설치 및 빌드

공식문서 : www.php.net/manual/en/install.unix.nginx.php

다운로드 및 압축을 푼다

  • yum install libevent-devel libxml2-devel
  • wget www.php.net/distributions/php-7.4.14.tar.gz
  • tar xzf php-7.4.14.tar.gz

빌드과정을 수행한다

  • ./configure --enable-fpm --with-mysqli
    • 에러 발생 시 .. No package 'sqlite3' found
      • sudo yum -y install sqlite-devel 
  • make
  • make install

기본설정 파일을 복사한다

  • cp php.ini-development /usr/local/php/php.ini
  • cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
  • cp sapi/fpm/php-fpm /usr/local/bin

보안을 위해 php.ini 파일을 수정한다

  • vim /usr/local/php/php.ini
  • cgi.fix_pathinfo=0

php-fpm.conf 파일을 수정한다

vi /usr/local/etc/php-fpm.d/www.conf
  • user = www-data
  • group = www-data

php-fpm 실행

 /usr/local/sbin/php-fpm -c /usr/local/etc/php.ini --pid /usr/local/var/run/php-fpm.pid --fpm-config=/usr/local/etc/php-fpm.d/www.conf -D
  • -c /usr/local/etc/php.ini    #PHP 구성파일의 경로지정
  • --pid /usr/local/var/run/php-fpm.pid    #초기화 스크립트에서 프로세스를 제어하는 데 유용한 PID 파일의 경로지정
  • --fpm-config=/usr/local/etc/php-fpm.d/www.conf    #PHP-FPM이 특정 구성파일을 사용하도록 강제지정
  • -D    #PHP-FPM을 데몬화

Nginx 설정 수정

user www-data;

http {
	server {
    	listen 80;
        server_name localhost;
        
        location / {
            root html;
            index index.php index.html index.htm;
        }
        
        location ~* \.php$ {
            fastcgi_index   index.php;
            fastcgi_pass    127.0.0.1:9000;
            include         fastcgi_params;
            fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param   SCRIPT_NAME $fastcgi_script_name;
            fastcgi_param   PATH_INFO $fastcgi_script_name;
        }
    }
}

Nginx 실행

/usr/local/nginx/sbin/nginx  또는 /usr/local/nginx/sbin/nginx -s reload

 

반응형
반응형

설정 버전 상세 확인

다음의 명령을 통해 상세한 버전 및 모듈에 대해서 확인 가능합니다.

/usr/local/nginx/sbin/nginx -V

 

설정 파일 테스트

설정 파일의 유효성을 테스트를 통해 잘못된 부분이 없는지 확인합니다.

/usr/local/nginx/sbin/nginx/ -t

 

운영중일 때 교체하는 법 1

새 파일을 생성 후 테스트 하고, 교체 후 업데이트 하도록 합니다. master 프로세스의 PID 변경없이 가능합니다.

  • /usr/local/nginx/sbin/nginx -t -c /home/anybody/test.conf
  • cp -i /home/anybody/test.conf /usr/local/nginx/conf/nginx.conf
  • /usr/local/nginx/sbin/nginx -s reload

 

운영중일 때 교체하는 법 2

새 파일을 생성 후 테스트 하고, 교체 후 kill 명령어를 수행합니다.

  • /usr/local/nginx/sbin/nginx -t -c /home/anybody/test.conf
  • cp -i /home/anybody/test.conf /usr/local/nginx/conf/nginx.conf
  • master 프로세스의 PID를 확인한다.
  • kill -USR2 {PID} 명령으로 master 프로세스에게 USR2(12)-시그널을 보낸다.
  • kill -WINCH {PID} 명령으로 master 프로세스에게 WINCH(28)- 시그널을 보낸다.
  • kill -QUIT {PID} 명령으로 master 프로세스에게 WINCH(28)- 시그널을 보낸다.

 

반응형
반응형

설정 파일 목록

Centos에 nginx를 설치하게되면 /usr/local/nginx/conf에 설정파일들이 위치하게 됩니다.

파일명 설명
nginx.conf 웹 서버의 기본 구성
mime.types 파일 확장자와 연관된 MIME 타입의 목록
fastcgi_params Fast CGI 관련 구성
proxy.conf 프록시 관련 구성
sites.conf nginx로 제공되는 웹 사이트(v호스트) 구성, 도메인 단위로 분리하기를 권장

 

Base-Module

nginx는 기본적으로 master 프로세스와 worker 프로세스로 동작하기 때문에 기본적인 동작과 설정은 이해할 필요가 있습니다. nginx의 기본적인 기능들을 정의하도록 지시어를 제공하고 크게 3가지로 분류합니다.

  • core-module : 프로세스 관리나 보안같은 필수 기능 및 지시어로 이루어져있다.
    • master_process {on|off};
    • thread_pool {name} threads={number} max_queue={number};
    • worker_processes {number | auto};
  • event-module : 네트워크 기능의 내부 동작 방식을 구성한다.
    • use {select | poll | epoll | kqueue | rtsig | /dev/poll | eventport}
  • configuration-module : 구성을 외부 파일에서 가져와 포함시킨다.

 

꼭 확인해야 할 설정값들

  • user root root;
    • 파일시스템 전체 권한을 nginx에 부여하기 때문에 보안상 취약함
  • worker_processes 1;
    • 멀티코어 환경에서 CPU의 코어1개로 실행됨을 의미한다. auto로 하거나 코어수에 맞춘다.
  • worker_priority 0;
    • 시스템의 다른 프로세스 실행순서를 고려하여 설정하라. -20~19  사이로 설정 가능하며, 커널프로세스가 -5의 우선순위를 갖기 때문에 더 낮은 값은 설정하면 안 된다.
  • log_not_found on;
    • 404 errors 로그를 남길 것인지 아닌지 지정한다. 쓸데없는 로그가 남을 수 있기 때문에 주의해야 한다.
  • worker_connections 1024;
    • worker 프로세스의 수와 함께 서버가 동시에 수용할 수 있는 연결 수를 결정한다. worker당 연결수이다.

 

기본 nginx.conf 예시

더보기

http {

    include mime.types;

    default_type application/octet-stream;

    sendfile on;

    keepalive_timeout 65;

    server {

        listen 80;

        server_name localhost;

        location / {

            root html

            index index.html index.htm

        }

        error_page 500 502  503 504 /50x.html;

        location = /50x.html {

            root html;

        }

    }

}

 

 

반응형
반응형

 

필수 구성요소 설치

간단하게 yum install nginx 명령어로 설치가능합니다. 그러나 직접 nginx 설치 파일을 다운로드 받았을 때는 다음의 라이브러리들을 먼저 설치해야 합니다.

  • yum groupinstall "Development Tools"
  • yum install pcre pcre-devel
  • yum install zlib zlib-devel
  • yum install openssl openssl-devel

 

nginx 다운로드

다음의 페이지에서 원하는 버전을 찾아 다운로드하고 압축을 풀어줍니다.

http://nginx.org/en/download.html

  • wget http://nginx.org/download/nginx-1.18.0.tar.gz
  • tar zxf nginx-1.18.0.tar.gz

 

설치 및 설정

참고로 configure 명령을 통해 여러가지 옵션을 줄 수 있습니다.

  • nginx-1.18.0/configure 
  • nginx-1.18.0/make
  • nginx-1.18.0/make install

 

실행 및 종료

Centos에서는 /usr/local/nginx/ 디렉토리에 설치가 완료되어 실행 가능합니다.

참고로 대부분의 유닉스 계열 시스템에서 프로세스는 root 계정으로 TCP 소켓 포트를 열 수 있다. 

  • 실행
    • /usr/local/nginx/sbin/nginx 
    • sudo nginx
  • 종료1 : /usr/local/nginx/sbin/nginx -s stop (TERM 시그널을 사용하여 강제로 종료한다)
  • 종료2 : /usr/local/nginx/sbin/nginx  -s quit (QUIT 시그널을 사용하여 안전하게 종료한다)

 

실행 후 확인

  • 브라우저로 호스트에 접근하여 welcome 페이지를 확인한다.
  • ps -ef | grep nginx 로 프로세스를 확인한다.
반응형
반응형

Java Web Services API 개념 되새기기


 최근 몇 년 사이에 웹서비스 개발과 관련되어 인터넷의 URI 를 나타내는데 REST-API 라는 architechural 구조를 가진 개념이 많이 사용되고 있다. Java-Spring 기반의 사용자들은 Spring-MVC 를 사용하거나 Spring with jersey 의 조합으로 REST-API 서비스들을 만들어 오고 있었다. 이렇게 개발만하다 보니 왜 spring 과 jersey 를 사용하게 되었지도 잊어버리고 (ㅡ,.ㅡ ... ) 그래서 정리를 해 보려고 한다. 


 Java Web Service API 의 주요한 2가지 개념이 있다. JAX-RS 와 JAX-WS 이다. 자바 웹 서비스 애플리케이션 코드를 작성하는 두가지 방법이 있는데 바로 잘 아는 Restful 과 SOAP 이다. 이 두개의 주요 API들은 JavaEE6 부터 웹서비스 애플리케이션 개발을 위해 자바 표준으로 정의 되어 있다.


JAX-RS 는 RESTful 웹서비스를 위한 것이며, JAX-RS 애플리케이션을 생성하기 위해 현재 사용중인 주요한 2가지 구현으로는 Jersey 와 RESTeasy 가 있다. (Apache CFX, Restlet 도 있다.)

JAX-WS 는 SOAP 웹서비스를 위한 것이며, JAX-WS를 코드로 작성하는 두가지 방법으로 RPC 와 Document 형태가 있다.


 REST 와 SOAP 의 차이를 표를 통해서 나타내면 다음과 같다.

REST 

SOAP

  Architecural style

 Protocol

 REST stands for REpresentational State Transfer

 Simple Object Access Protocol

 REST can use SOAP web services because it is a concept 

 and can use any protocol like HTTP, SOAP.

 SOAP can't use REST because it is a protocol.

 REST use URI to expose business logic.

 SOAP use service interfaces to expose the business logic. 

 REST does not define too much standards like SOAP.

 SOAP defines standards to be strictly followed. 

 REST permits different data format such as Plain text, HTML, 

 XML JSON etc...  

 SOAP permits XML format data only.


 이러한 차이와 과거로부터 현재까지 SOAP 에서 REST로 변화?하게된 흐름을 이해한다면 더 나은 REST-API 개발을 이끌어 낼 수 있을 것이다.


ref) https://www.javatpoint.com/web-services-tutorial

반응형
반응형


* 예전 블로그 복사 - http://blog.daum.net/7dbwnckd/7972581 


아래와 같은 에러는...

 

심각: Error reading tld listeners java.lang.NullPointerException
java.lang.NullPointerException
 at org.apache.log4j.Category.isEnabledFor(Category.java:746)
 at org.apache.commons.logging.impl.Log4JLogger.isTraceEnabled(Log4JLogger.java:327)
 at org.apache.catalina.startup.TldConfig.tldScanResourcePaths(TldConfig.java:581)
 at org.apache.catalina.startup.TldConfig.execute(TldConfig.java:282)
 at org.apache.catalina.core.StandardContext.processTlds(StandardContext.java:4307)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4144)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
 at org.apache.catalina.core.StandardService.start(StandardService.java:448)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)

 

-------------------------------------------------------------------------------------------------

log4j 1.2.x버전과 1.3.x버전을 쓰실 때 
현재 배포된 commons-logging-1.1.jar파일과 문제를 일으켜
웹 컨테이너 리로딩 시 불필요한 Exception이 발생합니다.
Apahce site에서 확인 한 결과
[1.0.4 Release - 16 Jun 2004]
"The 1.0.4 release of commons-logging is a service release containing support for both the 1.2.x and 1.3.x series of Log4J releases. "
log4j 1.2.x와 1.3.x를 commons-logging-1.0.4에서 지원합니다.
원래는 1.0.4 이상에서도 지원 한다고 되어 있는데
commons-logging-1.1과 commons-logging-1.1.1에서는 위와 같은 문제가 발생하고 있습니다.

-------------------------------------------------------------------------------------------------

는 내용을 알게 되었다.

반응형
반응형


* 예전 블로그 복사 - http://blog.daum.net/7dbwnckd/1616463


java.lang.UnsupportedClassVersionError

 

(Unsupported major.minor version 49.0)

 

 

 

이 에러는 자바의 컴파일 버전이 충돌이 나서이다.

 

하위버전의 클래스파일을 상위버전이 읽어들일때는 상관없지만

 

상위버전의 클래스파일을 하위버전이 읽어올때는 위와 같은 에러를 낸다

 

 

< 에러 상세코드 >


version 50.0   컴파일 버전 : 1.6

version 49.0   컴파일 버전 : 1.5

version 48.0   컴파일 버전 : 1.4

 

해결책>>

 

내텀퓨터 ->속성 -> 고급-> 환경변수에서

 

자바의 버전을 알맞게 셋팅한다.

 

즉... 상위 버전에서 컴파일된 파일들은 모두 자신이 현재 쓸려고 하는 하위버전대로 다시 컴파일 하여야 한다.

반응형
반응형


* 예전 블로그 복사 -  http://blog.daum.net/7dbwnckd/1616449


/conf/catalina/localhost/ContextName.xml 을 넣어야 잘 돈다. Root에서는 다시 해 보겠음.

 

 


<Context path="/framework" docBase="${catalina.home}/webapps/framework" debug="5" reloadable="true" crossContext="true">

 <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_dbwnckd_log." suffix=".txt" timestamp="true"/>

 <Resource name="jdbc/dbwnckd" auth="Container" type="javax.sql.DataSource"/>

 <ResourceParams name="jdbc/dbwnckd">
  <parameter>
  <name>factory</name>
  <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
  </parameter>

  <!-- Maximum number of dB connections in pool. Make sure you
  configure your mysqld max_connections large enough to handle
  all of your db connections. Set to 0 for no limit.
  -->
  <parameter>
  <name>maxActive</name>
  <value>100</value>
  </parameter>

  <!-- Maximum number of idle dB connections to retain in pool.
  Set to -1 for no limit.  See also the DBCP documentation on this
  and the minEvictableIdleTimeMillis configuration parameter.
  -->
  <parameter>
  <name>maxIdle</name>
  <value>30</value>
  </parameter>

  <!-- Maximum time to wait for a dB connection to become available
  in ms, in this example 10 seconds. An Exception is thrown if
  this timeout is exceeded.  Set to -1 to wait indefinitely.
  -->
  <parameter>
  <name>maxWait</name>
  <value>10000</value>
  </parameter>

  <!-- MySQL dB username and password for dB connections  -->
  <parameter>
  <name>username</name>
  <value>root</value>
  </parameter>
  <parameter>
  <name>password</name>
  <value>admin</value>
  </parameter>

  <!-- Class name for the old mm.mysql JDBC driver - uncomment this entry and comment next
  if you want to use this driver - we recommend using Connector/J though
  <parameter>
  <name>driverClassName</name>
  <value>org.gjt.mm.mysql.Driver</value>
  </parameter>
  -->

  <!-- Class name for the official MySQL Connector/J driver -->
  <parameter>
  <name>driverClassName</name>
  <value>com.mysql.jdbc.Driver</value>
  </parameter>

  <!-- The JDBC connection url for connecting to your MySQL dB.
  The autoReconnect=true argument to the url makes sure that the
  mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
  connection.  mysqld by default closes idle connections after 8 hours.
  -->
  <parameter>
  <name>url</name>
  <value>jdbc:mysql://localhost:3306/test?autoReconnect=true</value>
  </parameter>
 </ResourceParams>
</Context>

반응형
반응형


* 예전 블로그 복사 - http://blog.daum.net/7dbwnckd/1616426


이번에 다시 sql과 연동을 시도하면서 새로운 문제에 부딪히게 되었는데~

 

예전 처럼(Tomcat 5.0) 시도하면 Tomcat 시작 시 Warning이 뜨게 된다.

 

따라서 다른 방법으로 시도해야 하는데~

 

바로... 아래와 같다.

 

 

* 각각의 context밑의 web.xml의 설정

 

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <description>
      JSP 2.0 Examples.
    </description>
    <display-name>JSP 2.0 Examples</display-name>


 <resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/dbwnckd</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>


</web-app>


* 각각의 context밑의 context.xml의 설정

 

<Context path="" docBase="emergency" debug="5" reloadable="true" crossContext="true">

 <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_emergency_log." suffix=".txt" timestamp="true"/>
 
 <Resource name="jdbc/dbwnckd" 
   auth="Container" 
   type="javax.sql.DataSource"
   maxActive="100" 
   maxIdle="30" 
   maxWait="10000"
     username="root" 
     password="admin" 
     driverClassName="com.mysql.jdbc.Driver"
     url="jdbc:mysql://localhost:3306/mysql?autoReconnect=true"/>
      
   <WatchedResource>WEB-INF/web.xml</WatchedResource>

 

</Context>

 

반응형
반응형


1. yum install httpd 를 실행한다.



완료.!!


2. httpd 를 동작한다.


3. 버전도 확인해 본다.


4. /etc/httpd/conf/httpd.conf 에서 설정 변경.


반응형

+ Recent posts