The Pursuit of Happyness

반응형

1. install apache, mysql, php

sudo apt-get install tasksel

sudo tasksel install lamp-server


2. install oracle

apt-get install alien

alien -i oracle-xe-11.2.0-1.0.x86_64.rpm


3. edit TNS

vi /u01/app/oracle/product/11.2.0/xe/network/admin/tnsnames.ora


4. install php-pear

apt-get install php-pear php5-dev build-essential unzip libaio1


5. install oci

alien -i oracle-instantclient12.1-basic-12.1.0.1.0-1.x86_64.rpm 

alien -i oracle-instantclient12.1-devel-12.1.0.1.0-1.x86_64.rpm 

pecl install oci8


6. edit environment variable

echo ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe/ >> /etc/environment


7. edit php configuration

echo extension=oci8.so >> /etc/php5/apache2/php.ini

echo extension=oci8.so >> /etc/php5/cli/php.ini


8. edit apache2 envvars

vi /etc/apache2/envvars

# add this line 

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe


9. restart apache

sudo /etc/init.d/apache2 restart

or

sudo service apache2 restart


참고자료

https://help.ubuntu.com/community/ApacheMySQLPHP

https://help.ubuntu.com/community/PHPOracle

http://kogentadono.com/2011/11/02/installing-oci8-on-ubuntu/



반응형

반응형

현재 사용중인 SWAP 메모리 확인

more /proc/swaps


SWAP 메모리로 사용할 파일 생성 (파일당 1GB)

cd /var/tmp

dd if=/dev/zero of=swapfile1 bs=1024 count=1048576

dd if=/dev/zero of=swapfile2 bs=1024 count=1048576


SWAP 영역으로 설정

/sbin/mkswap -c -v1 /var/tmp/swapfile1

/sbin/mkswap -c -v1 /var/tmp/swapfile2


SWAP 파일 사용시작

/sbin/swapon /var/tmp/swapfile1

/sbin/swapon /var/tmp/swapfile2


바뀐 SWAP 메모리 확인

more /proc/swaps


시작시 SWAP 메모리가 적용이 되도록 설정
vi /etc/rc.d/rc.sysinit

아래 라인을 검색
swapon -a

다음 내용을 같은 줄에 추가
swapon /var/tmpswapfile1 swapon /var/tmp/swapfile2

결과는 다음과 같음
swapon -a swapon /var/tmpswapfile1 swapon /var/tmp/swapfile2


반응형

반응형

CENTOS 6.4 / PHP 5.3.3

VBbulletin 사용 도중 서버 이전 후 메일이 발송되지 않는 문제가 발생해서 원인을 찾아보니,

로그에 아래와 같은 경고 메시지가 뜨면서 발송이 되지 않고 있었음.


Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://smtp.google.com (Permission denied) in /xxxx.php on line xx


원인

대부분의 경우 리눅스 보안설정 SELinux 에서 httpd 에서 네트워크 커넥션을 허용하지 않는 경우이다.


해결책

커맨드 프롬프트에서 다음과 같이 입력 

setsebool httpd_can_network_connect=1

(혹시 setsebool이 path가 결려있지 않은 경우 /usr/sbin/setsebool 을 이용)





반응형

반응형

1. 하드 디스크 연결 확인

> lsblk

새로 장착된 하드 디스크의 이름을 확인한다. 

ex) sdb


2. 하드 디스크 파티션 생성

> fdisk /dev/[하드 디스크 이름]

ex) fdisk /dev/sdb


fdisk 상에서의 커맨드

p : 파티션 정보 보기

n : 새 파티션 생성

e : extended

p : primary partition

파티션 아이디 입력 [1-4]

first cylinder : [시작 Cylinder]

last cylinder : [파티션에 사용할 사이즈 or 마지막 Cylinder] ex) 20G

w : 저장 후 종료

q : 저장하지 않고 종료


3. 하드 디스크 포맷

> mkfs -t [파일 시스템] /dev/[하드 디스크 이름 + 파티션 아이디]

ex) mkfs -t ext4 /dev/sdb (단일 파티션인 경우)

mkfs -t ext4 /dev/sdb1


4. 하드 디스크 마운트

마운트 할 폴더를 미리 지정한다.

ex) /home

> mount /dev/[하드 디스크 이름] [마운트 할 폴더]

ex) mount /dev/sdb /home

cf. unmount 는 umount 명령어를 사용한다.

ex) umount /home


5. 부팅시 자동 마운트

/etc/fstab 파일을 수정해서 필요한 내용을 추가한다.

<file system> : 마운트 하려는 파티션 이름 - 하드 디스크 변경이 잦은 경우 UUID=xxx 식으로 적어 주는 편이 안전함. UUID는 lsblk -f 명령어로 확인이 가능하다. 

UUID는 하드 디스크 이름을 아는 경우 

blkid /dev/[하드 디스크 이름]

ex) blkid /dev/sdb

하드 디스크 이름을 모르는 경우

ls -l /dev/disk/by-uuid/

명령어로 확인이 가능하다.


<dir> : 마운트 하려는 위치

<type> : 타입 혹은 파일 시스템

<options> : 파티션 옵션, 잘 모르면 defaults 를 적어준다. (자세한 옵션은 http://linux.die.net/man/8/mount 에서 Mount Option 부분을 참조)

<dump> : dump utility 로 백업할지를 결정 (0 : 끄기)

<pass> : fsck에 의해 파일 시스템을 체크할 순서 (0 : skip), root 파티션에 1을 적는다.

ex)

/dev/sdb        /home        ext4        defaults        0        0




반응형

반응형

PHP mail 보내기 - 파일첨부하기 / 이미지 보여주기

기본적인 메일 보내는 방법은 아래 링크 참고하세요.

http://shineum.tistory.com/56


1. 파일 첨부하기

$mail->AddAttachment("첨부파일 경로 혹은 파일 리소스", "첨부파일 이름");    //  해당 경로의 파일을 지정한 파일 이름으로 첨부


2. 메일에 이미지를 보여주기

- 보여줄 이미지를 유니크한 키를 사용해서 embeded image 로 추가를 해준다.

- embeded 할때 지정한 유니크 키를 src 태그를 사용해서 이미지 링크로 걸어준다.

$mail->AddEmbeddedImage("첨부파일 경로 혹은 파일 리소스", "유니크 키1");

$mail->AddEmbeddedImage("첨부파일 경로 혹은 파일 리소스", "유니크 키2");

$mail->MsgHTML("

<p><img src='cid:유니크 키1'></p>

<p><img src='cid:유니크 키2'></p>

");







반응형

반응형


1. 먼저 소스 설치시 필요한 모듈을 설치합니다. (install modules) 

이미 설치된 모듈은 건너 뛰어도 상관 없습니다.

> yum install wget pcre pcre-devel make


2. 최신 아파치 소스를 다운로드 받습니다. (download httpd source from this link)

http://httpd.apache.org/download.cgi

> wget http://URL/httpd-NN.tar.gz


3. 압축을 적당한 폴더에 압축을 풀어 둡니다. (extract source code)

> tar zxvf httpd-NN.tar.gz

> cd httpd-NN/srclib


4. 필요한 경우 apr, apr-util 소스를 다운로드 받아서 srclib 폴더에 풀어 둡니다. (download apr and apr-util source from this link)

http://apr.apache.org/


> wget http://URL/apr-NN.tar.gz

> wget http://URL/apr-util-NN.tar.gz


5. 압축을 풀고 폴더 이름을 다음과 같이 변경합니다. (extract source code on srclib folder and change folder name)

> tar zxvf apr-NN.tar.gz

> mv apr-NN apr

> tar zxvf apr-util-NN.tar.gz

> mv apr-util-NN apr-util


4. 이제 컴파일 해서 설치를 하게 되는데 경로는 "/usr/local/httpd" 에 설치하도록 하겠습니다. (install to "/usr/local/httpd")

> cd ..

> ./configure --prefix=/usr/local/httpd --with-included-apr

> make

> make install


5. 아파치 서버에 필요한 설정을 변경합니다. (configuration)

> vi /user/local/httpd/conf/httpd.conf


6. 다음과 같이 아파치를 실행합니다. (run)

> /user/local/httpd/bin/apachectl -k start





반응형

반응형


import java.util.Properties;


import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;


public class GmailSMTP

{

    public static void sendMail(String account, String auth, String to, String subject, String msg, boolean isSSL, boolean isHtml)

    {

        final String username = account;

        final String password = auth;


        String mailFrom = username;

        String mailTo = to;


        Properties props = new Properties();

        props.put("mail.smtp.auth", "true");

        props.put("mail.smtp.host", "smtp.gmail.com");


        if (isSSL)

        {

            props.put("mail.smtp.socketFactory.port", "465");

            props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

            props.put("mail.smtp.port", "465");

        }

        else

        {

            props.put("mail.smtp.starttls.enable", "true");

            props.put("mail.smtp.port", "587");

        }


        Session session = Session.getInstance(props, new javax.mail.Authenticator()

        {

            protected PasswordAuthentication getPasswordAuthentication()

            {

                return new PasswordAuthentication(username, password);

            }

        });


        try

        {

            Message message = new MimeMessage(session);

            message.setFrom(new InternetAddress(mailFrom));

            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mailTo));

            message.setSubject(subject);


            if (isHtml)

                message.setContent(msg, "text/html");

            else

                message.setText(msg);


            Transport.send(message);

        }

        catch (MessagingException e)

        {

            throw new RuntimeException(e);

        }

    }

}

 


ps. mail.jar 가 필요함


반응형

반응형


PHPMailer 에 대한 새로운 사용법을 새로운 포스트에 남겨두었습니다. 참고하세요.


1. 다음 링크에서 필요한 모듈을 다운로드 받는다. (PHPMailer)

http://code.google.com/a/apache-extras.org/p/phpmailer/

개발자가 코드를 github 로 옮겼습니다. 아래 링크에서 다운로드 받으세요..

=> https://github.com/PHPMailer/PHPMailer

 

2. 다운로드 받은 파일을 적당한 경로에 압축을 푼다.

ex)

/var/www/html/inc/PHPMailer

 

3. 메일 보낼 코드 작성

/var/www/html/mailSample.php

 

<?php

require_once("inc/PHPMailer/class.phpmailer.php");

 

$mail = new PHPMailer(true);

$mail->IsSMTP();

try {

  $mail->Host = "smtp.gmail.com";    // email 보낼때 사용할 서버를 지정

  $mail->SMTPAuth = true;              // SMTP 인증을 사용함

  $mail->Port = 465;                        // email 보낼때 사용할 포트를 지정

  $mail->SMTPSecure = "ssl";        // SSL을 사용함

  $mail->Username   = "GMAIL ACCOUNT";    // Gmail 계정

  $mail->Password   = "PASSWORD";            // 패스워드

 

  $mail->SetFrom('from email address', 'Display Name'); // 보내는 사람 email 주소와 표시될 이름 (표시될 이름은 생략가능)

  $mail->AddAddress('to email address', 'Display Name'); // 받을 사람 email 주소와 표시될 이름 (표시될 이름은 생략가능)

  $mail->Subject = 'Email Subject';        // 메일 제목

  $mail->MsgHTML("Email Content");    // 메일 내용 (HTML 형식도 되고 그냥 일반 텍스트도 사용 가능함)

 

  $mail->Send();                                // 실제로 메일을 보냄

  echo "Message Sent OK<p></p>\n";

} catch (phpmailerException $e) {

  echo $e->errorMessage(); //Pretty error messages from PHPMailer

} catch (Exception $e) {

  echo $e->getMessage(); //Boring error messages from anything else!

}

?>

 

 

 

반응형

반응형

웹서버로 많이 사용하는 Apache-Tomcat 에서 tomcat 기본적으로 8080 포트에서 동작하는데,

기본 웹서버 포트인 80 포트로 동작시키기 위해서는 mod_proxy mod_jk 이용해서 포트를 연결해 줘야 한다.

 

mod_proxy mod_jk 장단점은 다음과 같다.

@ mod-proxy

- 장점

                1. 추가 모듈이 따로 필요 없다.  (Apache 2.2 이상에서는 mod_proxy, mod_proxy_http, mod_proxy_ajp, mod_proxy_balancer 모두 포함되어 있다.)

                2. http, https 혹은 AJP 사용가능

- 단점

                1. mod_proxy_ajp 8K+ 크기의 패킷을 지원하지 않는다.

                2. 기본 load balancer 사용한다.

                3. Domain model clusterig 지원하지 않는다.

@ mod_jk

- 장점

                1. 향상된 load balancer

                2. 향상된 node failure detection

                3. 패킷 사이즈의 AJP 지원

- 단점

                1. 별도의 모듈을 설치해야 한다.

 

위의 내용은 아래 링크에서 가져온 내용임.

 https://community.jboss.org/people/mladen.turk/blog/2007/07/16/comparing-modproxy-and-modjk

 


@ mod_proxy 설정

                1. Apache 설치되어 있으면 별다른 설치는 필요없다.

                2. 설정

httpd.conf

 

                    ProxyPass /app http://127.0.0.1:8080/app

                    ProxyPassReverse /app http://127.0.0.1:8080/app

 

 

@ mod_jk 설정

                1. Httpd Developer 버전을 준비한다. (yum install httpd-devel)

                2. Connector 모듈을 다운로드 한다.  (http://tomcat.apache.org/connectors-doc/)

                3.  설치

 

                    cd native/

                    ./configure --with-apxs=/usr/sbin/apxs

                    make

                    sure make install

 

                4. 설정

httpd.conf

 

                    LoadModule jk_module modules/mod_jk.so


                   <IfModule jk_module>

                         JkWorkersFile  conf.d/workers.properties

                         JkMountFile  conf.d/uriworkermap.properties

                         JkShmFile  logs/mod_jk.shm

                         JkLogFile  logs/mod_jk.log

                         JkLogLevel  info

                         JkLogStampFormat  "[%a %b %d %H:%M:%S %Y] "

                    </IfModule>

 

 workers.properties

 

worker.list=ajp

worker.ajp.port=8009

worker.ajp.host=localhost

worker.ajp.type=ajp13

worker.ajp.lbfactor=1

worker.ajp.socket_timeout=60


uriworkermap.properties

 

/*.do=ajp

/*.jsp=ajp

/*.js=ajp

/*.gif=ajp

/*.jpg=ajp

/*.css=ajp



반응형

반응형

Cached memory purge

@ Check memory status with top command

> top


@ purge cached memory

> sync

> echo 3 > /proc/sys/vm/drop_caches


반응형