2015년 11월 19일 목요일
install apache2 + tomcat8, use mod_jk on amazon - ec2
출처 : http://www.serveridol.com/2015/02/03/how-do-i-install-mod_jk-on-apache-2-4-webserver/
How do I install mod_jk on Apache 2.4 webserver
1. yum install httpd24
2. yum install mod24_ssl
3. yum install gcc*
4. install tomcat-connectors-1.2.40
# wget http://apache.bytenet.in/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.40-src.tar.gz
# tar -zxvf tomcat-connectors-1.2.40-src.tar.gz
# cd tomcat-connectors-1.2.40-src
# cd native
# ./configure --with-apxs=/usr/bin/apxs
# make && make install
5. create file .conf
cat /etc/httpd/conf.d/jk.conf
------------------------------
LoadModule jk_module /etc/httpd/modules/mod_jk.so
JkWorkersFile /etc/httpd/conf.d/workers.properties
JkShmFile /var/log/httpd/mod_jk.shm
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
------------------------------
6.create file
touch /var/log/httpd/mod_jk.shm /var/log/httpd/mod_jk.log
6. create file
cat workers.properties
------------------------------
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
7. edit /usr/local/Apache_Tomcat/conf/server.xml
8. /etc/httpd/conf.d/javahost.conf
ServerName test.com
ServerAlias www.test.com
DocumentRoot /home/test/public_html
DirectoryIndex index.html
Alias / /home/test/public_html
JkMount /*.jsp worker1
JkMount /* worker1
2015년 11월 17일 화요일
AWS Xshell을 이용한 최초 로그인 방법
AWS 접속은 개인 사용자에게 무료 라이센스로 배포하고 있는 Xshell 을 이용했다.
URL : http://www.netsarang.co.kr/download/free_license.html
다운로드 후 설치하고, AWS에 등록한 EC2 정보를 이용하여 로그인 한다.
사용자 이름은 ec2-user로 입력 후, root로 로그인 가능하게 변경하면 된다.
아래 정보 중 호스트에 Public IP 또는 Pulic Domain 을 입력하여 접속한다.
AWS EC2 생성 중 만든 키 파일(pem)을 이용하여 사용자 키를 등록, Public Key 방식으로 접속한다.
URL : http://www.netsarang.co.kr/download/free_license.html
다운로드 후 설치하고, AWS에 등록한 EC2 정보를 이용하여 로그인 한다.
사용자 이름은 ec2-user로 입력 후, root로 로그인 가능하게 변경하면 된다.
아래 정보 중 호스트에 Public IP 또는 Pulic Domain 을 입력하여 접속한다.
AWS EC2 생성 중 만든 키 파일(pem)을 이용하여 사용자 키를 등록, Public Key 방식으로 접속한다.
AWS(Amazon Web Service) 1년간 무료 계정 이용하기.
AWS 는 회사에서 많이 써 왔는데, 개인이 무료로 1년간 사용할 수 있어
계정을 새로 만들고 EC2 / RDS를 설정했다.
사용은 1년간만 무료이며 그 후에 EC2 등 이 남아 있으면 비용이 청구되니 반드시 삭제나 shutdown으로 해 놓아야 한다.
URL : http://aws.amazon.com/ko/free/
아래는 신규 무료로 사용할 수 있는 내용이다.
계정을 새로 만들고 EC2 / RDS를 설정했다.
사용은 1년간만 무료이며 그 후에 EC2 등 이 남아 있으면 비용이 청구되니 반드시 삭제나 shutdown으로 해 놓아야 한다.
URL : http://aws.amazon.com/ko/free/
아래는 신규 무료로 사용할 수 있는 내용이다.
* EC2는 여러 개 사용해도 되며 단, 월 단위 사용 시간 만큼은 오버되서는 안된다.
* EC2가 서버라고 생각하면 된다. 서버의 크기(성능)는 t2.micro 만 무료이다.
* S3 는 스토리지 서비스이고,
* RDS는 Database 서비스 이다.
* Dynamo DB 는 memcached 와 비슷한 역할을 하며 메모리에 데이터를 기억 시킨다.
참고 : http://nosqlguide.com/key-value-store/redis-vs-riak-vs-memcached-vs-dynamodb-a-nosql-comparison/
이번 목적은 테스트 장비용으로 사용할 예정이다.
설치 가능한 OS는 AMI라고 하는데, AWS에서 만들어진 것을 사용하면 된다.
가입은 화면 위쪽에 무료 계정 생성 버튼을 클릭하여 보유하고 있는 EMAIL 계정을 이용하여 만들 수 있다.
* EC2가 서버라고 생각하면 된다. 서버의 크기(성능)는 t2.micro 만 무료이다.
* S3 는 스토리지 서비스이고,
* RDS는 Database 서비스 이다.
* Dynamo DB 는 memcached 와 비슷한 역할을 하며 메모리에 데이터를 기억 시킨다.
참고 : http://nosqlguide.com/key-value-store/redis-vs-riak-vs-memcached-vs-dynamodb-a-nosql-comparison/
이번 목적은 테스트 장비용으로 사용할 예정이다.
설치 가능한 OS는 AMI라고 하는데, AWS에서 만들어진 것을 사용하면 된다.
가입은 화면 위쪽에 무료 계정 생성 버튼을 클릭하여 보유하고 있는 EMAIL 계정을 이용하여 만들 수 있다.
2015년 9월 8일 화요일
[PHP] 프로그램 중복 실행 방지
crontab 에 스케줄을 등록해 놓고, 반복해서 프로그램을 실행하다 보면 중복 실행이 되지 않게 해 줘야 하는데, 간단하게 프로그램에서 하는 방법을 설명한다. 예) $nExecuteNumber = 9; // convert mov => mp4 $mExistFile = '/home/account/footage_convert_mp4_' . $nExecuteNumber . '.chk'; if(file_exists( $mExistFile )) { exit; } 중략 ... # insert last line, delete file extend "chk". shell_exec( sprintf("rm -rf %s", $mExistFile) ); 에러가 발생해 중간에서 실행이 멈추는 경우가 발생하면 사용하지 않아야 한다. 이런 경우는 아래 쉘 스크립트를 이용하여 중복 실행을 방지하는 방법은 쉘 스크립트를 이용하여 중복방지를 참조하기 바란다.
앤트맨이란 영화를 보고 나서.
앤트맨이라 영화를 한다기에 별 기대를 하지 않고 봤는데, (이전에 봤던 앤트맨 이란 영화와 내용을 별 다르지 않을 것으로 봤다.) 이전에 봤던 영화와는 다르게 유머코드도 재법 있고, 어벤져스와 역이는 내용도 다소 흥미있는 내용이였다. 유머를 담당하고 있는 마이클 페나(Michael Pena) 이란 배우가 이전과는 다른 재미있는 케릭터로 나온 것도 재미 있었다. 마벨 유니버스 라인... 다음 개봉하는 시빌 워도 기대가 된다. 걍 추억하기 위해 사진 한 컷. 마이클 더글라스(Michael Douglas) 와 폴 러드(Paul Rudd) 사진 한장.
라벨:
마이클 더글라스,
앤트맨,
폴 러드,
antman,
Michael Douglas,
Michael Pena,
Paul Rudd
[shell script]서버간 파일 복사를 위한 scp 사용법
linux 상에서 파일을 복사하는 방법 cp 를 주로 사용하는데,
서버 간에 파일을 복사하려면 scp 라는 명령어를 사용하여 복사를 한다.
예) root>scp ./*.php 192.168.0.1:/home/account/php/lib/ 설명) "scp"란 명령어를 사용하여 현재 디렉토리에 있는 "php"란 확장자를 가진 파일을 192.168.0.1 이란 서버의 해당 디렉토리에 옮기는 예제이다. 명령어를 실행하면 파일을 복사할 서버의 권한이 있는지 체크하기 위해 "root"의 패스워드를 물어본다.
2015년 9월 6일 일요일
[memcache] 서버구성 (memcached)
memcached 서버구성 http://memcached.org/ 필요 패키지 설치 [root@localhost ~]# yum install libevent-devel [root@localhost ~]# tar -zxvf memcached-1.x.x.tar.gz [root@localhost ~]# cd memcached-1.x.x [root@localhost ~]# ./configure --with-libevent=/usr/lib64/ [root@localhost ~]# make && make test && make install [root@localhost ~]# vi /etc/memcached.conf -------------------------------------------- # run as a daemon -d # user to run daemon nobody/apache/www-data -u nobody #Memory a usar -m 512 # default port -p 11211 #max simultaneous connections -c 9216 # only listen locally #-l 127.0.0.1 -------------------------------------------- 실행스크립트 및 데몬스크립트 [root@localhost ~]# touch /etc/init.d/memcached [root@localhost ~]# chmod +x /etc/init.d/memcached ------------------------------------------------------------------------ #!/bin/bash # # memcached This shell script takes care of starting and stopping # standalone memcached. # # chkconfig: - 80 12 # description: memcached is a high-performance, distributed memory # object caching system, generic in nature, but # intended for use in speeding up dynamic web # applications by alleviating database load. # processname: memcached # config: /etc/memcached.conf # Source function library. . /etc/rc.d/init.d/functions PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/local/bin/memcached DAEMONBOOTSTRAP=/usr/local/bin/start-memcached DAEMONCONF=/etc/memcached.conf NAME=memcached DESC=memcached PIDFILE=/var/run/$NAME.pid [ -x $DAEMON ] || exit 0 [ -x $DAEMONBOOTSTRAP ] || exit 0 RETVAL=0 start() { echo -n $"Starting $DESC: " daemon $DAEMONBOOTSTRAP $DAEMONCONF RETVAL=$? [ $RETVAL -eq 0 ] && touch $PIDFILE echo return $RETVAL } stop() { echo -n $"Shutting down $DESC: " killproc $NAME RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f $PIDFILE return $RETVAL } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart|reload) stop start RETVAL=$? ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac exit $RETVAL ------------------------------------------------------------------------ [root@localhost ~]# touch /usr/local/bin/start-memcached [root@localhost ~]# chmod +x /usr/local/bin/start-memcached ------------------------------------------------------------------------------ #!/usr/bin/perl -w # start-memcached # 2003/2004 - Jay Bonci# This script handles the parsing of the /etc/memcached.conf file # and was originally created for the Debian distribution. # Anyone may use this little script under the same terms as # memcached itself. use strict; if ($> != 0 and $< != 0) { print STDERR "Only root wants to run start-memcached.\n"; exit; } my $etcfile = shift || "/etc/memcached.conf"; my $params = []; my $etchandle; # This script assumes that memcached is located at /usr/bin/memcached, and # that the pidfile is writable at /var/run/memcached.pid my $memcached = "/usr/local/bin/memcached"; my $pidfile = "/var/run/memcached.pid"; # If we don't get a valid logfile parameter in the /etc/memcached.conf file, # we'll just throw away all of our in-daemon output. We need to re-tie it so # that non-bash shells will not hang on logout. Thanks to Michael Renner for # the tip my $fd_reopened = "/dev/null"; sub handle_logfile { my ($logfile) = @_; $fd_reopened = $logfile; } sub reopen_logfile { my ($logfile) = @_; open *STDERR, ">>$logfile"; open *STDOUT, ">>$logfile"; open *STDIN, ">>/dev/null"; $fd_reopened = $logfile; } # This is set up in place here to support other non -[a-z] directives my $conf_directives = { "logfile" => \&handle_logfile }; if (open $etchandle, $etcfile) { foreach my $line (<$etchandle>) { $line =~ s/\#.*//go; $line = join ' ', split ' ', $line; next unless $line; next if $line =~ /^\-[dh]/o; if ($line =~ /^[^\-]/o) { my ($directive, $arg) = $line =~ /^(.*?)\s+(.*)/; $conf_directives->{$directive}->($arg); next; } push @$params, $line; } } unshift @$params, "-u root" unless (grep $_ eq '-u', @$params); $params = join " ", @$params; if (-e $pidfile) { open PIDHANDLE, "$pidfile"; my $localpid = ; close PIDHANDLE; chomp $localpid; if (-d "/proc/$localpid") { print STDERR "memcached is already running.\n"; exit; } else { `rm -f $localpid`; } } my $pid = fork(); if ($pid == 0) { reopen_logfile($fd_reopened); exec "$memcached $params"; exit(0); } elsif (open PIDHANDLE,">$pidfile") { print PIDHANDLE $pid; close PIDHANDLE; } else { print STDERR "Can't write pidfile to $pidfile.\n"; } ------------------------------------------------------------------------------ # /etc/init.d/memcached restart Shutting down memcached: [ OK ] Starting memcached: [ OK ] 데몬 확인 [root@localhost ~]# ps ax | grep memcach 14688 pts/0 Sl 0:00 /usr/local/bin/memcached -u root -u nobody -m 512 -p 11211 -c 9216 client (web서버) memcache 모듈 설치 # wget http://pecl.php.net/get/memcache-2.2.4.tgz # tar xzfv memcache-2.2.4.tgz # cd memcache-2.2.4 # phpize # ./configure --enable-memcache # make # make install # vi /usr/local/apache/conf/php.ini extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20060613/" extension=memcache.so [Session] ; Handler used to store/retrieve data. ;session.save_handler = files session.save_handler = memcache session.save_path = "tcp://192.168.0.101:11211" <--- memcached 서버 IP 저장 후 apache restart
2015년 7월 31일 금요일
혹시 video tag를 이용하여 로딩하는데, 첫화면이 뭉게지거나 깨진다면 "canplaythrough" 이벤트 속성에 프로그램을 하면 PC 성능이 않 좋을수록 기다리는 시간은 오래 걸리지만, 좀 더 나은 결과를 얻을 수 있다. (maybe can not load first shot, you can use "canplaythrough" instead "canplay" in video tag.)
$(document).ready(function() { document.body.focus(); $("#jquery_jplayer_1").jPlayer({ ready: function () { $(this).jPlayer("setMedia", { title: "제목", m4v: mMpegSrc, poster: "/images/footage/video_error.jpg" }); }, canplaythrough: function() { $("#jquery_jplayer_1").jPlayer("play"); $.wait( function(){ if(mTimes == 1) { $("#jquery_jplayer_1").jPlayer("stop"); $("#jquery_jplayer_1").jPlayer("play"); mTimes = 0; } }, 80 ); /* $("#jquery_jplayer_1").jPlayer("stop"); setTimeout(function () { $("#jquery_jplayer_1").jPlayer("play"); }, 500); */ }, swfPath: '/js/plugin/jquery.jPlayer', preload: "auto", supplied: "m4v", size: { width: "640px", height: "360px", cssClass: "jp-video-360p" }, smoothPlayBar: true, keyEnabled: true, remainingDuration: true, toggleDuration: true, }); $.wait = function( callback, seconds){ return window.setTimeout( callback, seconds); } });
참조 (below from) : http://cafe.naver
나만의 콘트를, 첫 시작을 위한 몇 가지 마크업과 스타일
콘트롤의 세가지 구성요소 :
-재생/정지 버튼
-0부터 증가하는 타이머
-음소거/음소거 해제 버튼
재생/정지와 음소거/음소거 해제 버튼의 텍스트는 text-indent속성을 이용해 화면에서 제거된다.
하나의 CSS 스프라이트 이미지가 이처럼 다양한 버튼의 상태(재생,정지,음소거,음소거 해제)를 표시하기 위한배경 이미지로 이용된다.
CSS클래스는 서로 다른 상태를 나타내는 데 사용된다. 이러한 클래스는 자바스크립트를 이용해 추가되거나 삭제
컨트롤 래퍼 요소에는 절대위치absolute를 사용하고 비디오의 하단을 덮도록 배치
컨트롤의 기본 불투명도를 50%로 설정하지만 마우스를 위에 올리면 불투명도는 100%로 증가
기본값으로 컨트롤의 래퍼요소는 hidden이라는 class로서, disply:none으로 설정되고 이것은 자바스크립트에 의해 제거된다.
미디어요소 API소개
var videoE1 = $('video')[0],
playPauseBtn = $('#playPause'),
vidControls = $('#controls'),
muteBtn =$("muteUnmute'),
timeHolder =$('#timer');
1.콘트롤 속성 제거
videoE1.removeAttribute("controls"); //ie9이하 지원안함
2.콘트롤 속성 보이게
videoE1.addEventListener('canplaythrought',function() {
vidControls.removeClass("hidden");
}, false);
비디오재생과 중지
canplaythrought 이벤트가 발생하면 콜백 함수가 작동한다.
비디오의 오디오 트랙에 대한 음소거및 음소거 해제
비디오 재생이 끝났을 때의 반응
비디오 재생에 따른 시간 업데이트
미디어 요소 API의 추가적인 기능
-이벤트
-속성
오디오는 어떤가?
접근가능한 미디어
http://w3schools.com/html5/html5_ref_av_dom.asp
HTML5 Audio/Video Methods
Method | Description |
---|---|
addTextTrack() | Adds a new text track to the audio/video |
canPlayType() | Checks if the browser can play the specified audio/video type |
load() | Re-loads the audio/video element |
play() | Starts playing the audio/video |
pause() | Pauses the currently playing audio/video |
HTML5 Audio/Video Properties
Property | Description |
---|---|
audioTracks | Returns a MultipleTrackList object representing available audio tracks |
autoplay | Sets or returns if the audio/video should start playing as soon as its loaded |
buffered | Returns a TimeRanges object representing the buffered parts of the audio/video |
controller | Returns the MediaController object representing the current media controller of the audio/video |
controls | Sets or returns if the audio/video should display controls (like play/pause etc.) |
crossOrigin | Sets or returns the CORS settings of the audio/video |
currentSrc | Returns the URL of the current audio/video |
currentTime | Sets or returns the current playback position in the audio/video (in seconds) |
defaultMuted | Sets or returns if the audio/video is muted by default |
defaultPlaybackRate | Sets or returns the default speed of the audio/video playback |
duration | Returns the duration of the current audio/video (in seconds) |
ended | Returns if the playback of the audio/video has ended or not |
error | Returns a MediaError object representing the error state of the audio/video |
initialTime | Returns the initial play position of the audio/video |
loop | Sets or returns if the audio/video should start over again when finished |
mediaGroup | Sets or returns a the group the audio/video belongs to (used to link multiple audio/video elements) |
muted | Sets or returns if the audio/video is muted or not |
networkState | Returns the current network state of the audio/video |
paused | Sets or returns if the audio/video is paused or not |
playbackRate | Sets or returns the speed of the audio/video playback |
played | Returns a TimeRanges object representing the already played parts of the audio/video |
preload | Sets or returns if the audio/video should be loaded when the page loads |
readyState | Returns the current ready state of the audio/video |
seekable | Returns a TimeRanges object representing the seekable parts of the audio/video |
seeking | Returns if the user is currently moving/skipping to a new position in the audio/video |
src | Sets or returns the current source of the audio/video element |
startOffsetTime | Returns a Date object representing the current time offset |
textTracks | Returns a TextTrackList object representing the available text tracks |
videoTracks | Returns a VideoTrackList object representing the available video tracks |
volume | Sets or returns the volume level of the audio |
HTML5 Audio/Video Events
Event | Description |
---|---|
abort | Fires when the loading of an audio/video is aborted |
canplay | Fires when the browser can start playing the audio/video |
canplaythrough | Fires when the browser can start playing the audio/video to the end without stopping for buffering |
durationchange | Fires when the duration of the audio/video has been changed |
emptied | Fires when the current playlist is empty |
ended | Fires when the current playlist is ended |
error | Fires when an error occurred during the loading of an audio/video |
loadeddata | Fires when the browser can start playing the audio/video for the first time |
loadedmetadata | Fires when the browser has received durations, dimensions and text tracks are ready for the audio/video |
loadstart | Fires when the browser starts looking for media data |
pause | Fires when the audio/video has been paused |
play | Fires when the audio/video has been started or is no longer paused |
playing | Fires when the audio/video is ready to play after having been paused or stopped for buffering |
progress | Fires when the browser is getting media data |
ratechange | Fires when the playing speed of the audio/video is changed |
seeked | Fires when the user is finished moving/skipping to a new position in the audio/video |
seeking | Fires when the user starts moving/skipping to a new position in the audio/video |
stalled | Fires when the browser is trying to get media data, but data is not avaliable |
suspend | Fires when the browser is intentionally not getting media data |
timeupdate | Fires when the current playback position has changed |
volumechange | Fires when the volume has been changed |
waiting | Fires when the video stops because it needs to buffer the next frame |
...
피드 구독하기:
글 (Atom)