[보관함:] 업무 레시피들

  • SSH Remote Forwarding으로 개발 서버를 임시 노출하기

    개발 서버는 내부 네트워크 안에 있어 외부에서는 접속이 불가하다. 그러나 가끔 외부 네트워크에 노출해야만 하는 경우가 발생한다. 이 때 SSH 터널링으로 외부에 있는 서버를 경유하여 내부로의 접근이 가능하게 할 수 있다. 다음 스텝을 따라해 보자.

    원격 서버에 접속할 때 포워딩할 포트를 지정한다. 여기서는 12000번이라고 가정한다. 만약 원격 서버도 공유기 같은 장비에 물려 있다면 12000번으로 포트 포워딩이 가능한지 확인한다.

    원격 서버에 /etc/ssh/sshd_config 파일을 여러 아래 설정이 있는지 확인한다.

    GatewayPorts clientspecified

    없다면 추가하고 sshd 서버를 재시작하자.

    이제 로컬 서버에서 원격 서버로의 접속을 시도한다. 만약 로컬 서버가 localhost:8000 에서 돌고 있다고 가정하면 아래처럼 연결한다.

    ssh -p <ssh_port> -NR 0.0.0.0:12000:localhost:8000 <server_address>Code language: CSS (css)

    다른 예로, 만약 로컬 서버가 특정 도메인으로, https를 사용한다면 이렇게 할 수 있겠다.

    ssh -p <ssh_port> -NR 0.0.0.0:12000:<local_domain>:443 <server_address>Code language: CSS (css)

    이렇게 하고 https://<server_address>:12000 으로 접속하면 로컬 서버에 접속한 것처럼 동작한다. 물론 원격 서버를 거쳐 우회하는 것이기 때문에 속도는 살짝 느릴 것이다.

    또한 웹 서버의 도메인이 싹 바뀌는 효과가 있기 때문에, 워드프레스 같은 앱을 돌릴 때는 wp-config.php에서 미리 WP_HOME, WP_SITEURL 상수를 미리 지정해야 할 것이다.

    SSH 접속은 일정 시간이 지나면 끊어질 수 있다. 영속적인 접속을 유지하려면 autossh 같은 툴을 사용하면 된다. autossh를 설치, 명령을 ssh로 넣던 것을 autossh로 변경하면 된다.

    autossh -p <ssh_port> -NR 0.0.0.0:12000:<local_domain>:443 <server_address>Code language: CSS (css)
  • Heartbeat 주기 설정하기

    Heartbeat Control 같은 플러그인이 있지만, 굳이 플러그인까지 쓸 필요 없다. 간단한 몇 줄의 코드로 주기 설정이 가능하다.

    우선, heartbeat가 어떻게 동작하는지 간단하게 설명한다. heartbeat는 특정 관리자 페이지 접속시 브라우저와 주기적으로 통신한다. 이 주기는 자바스크립트의 setTimeout() 함수로 구현되며, 기본값은 관리자 페이지에 포커스가 있을 때 15초, 해당 페이지에서 포커스를 잃었을 때 120초로 설정된다. 이 120초는 하드코딩되어 있어 값을 변경하기 어렵지만 포커스가 있을 때 15초는 비교적 손쉽게 변경 가능하다.

    우선 heartbeat을 완전히 없애는 방법이다. 그다지 추천하지는 않지만 개발환경에는 그럭저럭 고려해 볼만할 것이다.

    add_action( 'admin_init', function () {
    	if ( wp_script_is( 'heartbeat', 'registered' ) ) {
    		wp_deregister_script( 'heartbeat' );
    	}
    } );

    heartbeat을 변경하되, 주기를 설정하려면 다음처럼 하면 된다.

    add_action( 'admin_init', function () {
    	// 5, 10, 15, 30, 60, 120, 'long-polling'
    	$script = "jQuery(document).ready(function () {wp.heartbeat.interval(20)});";
    	wp_add_inline_script( 'post', $script );
    	wp_add_inline_script( 'inline-edit-post', $script );
    	add_action( 'customize_controls_enqueue_scripts', function () use ( $script ) {
    		wp_add_inline_script( 'heartbeat', $script );
    	} );
    }, 100 );
    
    add_filter( 'heartbeat_settings', function ( $settings ) {
    	$settings['interval'] = 20;
    	return $settings;
    } );

    wp.heartbeat.interval(20) 부분과 $settings['interval'] = 20; 부분의 20은 heartbeat의 주기를 20초로 설정하라는 부분이다. 적절히 변경해서 사용하면 될 것이다. 당연히 이게 불편하면 플러그인으로 대체해도 무방하다.

  • 최근 N 개의 파일을 남기고 모두 삭제

    아래처럼 실행:

    ls -tp | grep -v '/$' | tail -n +6 | tr '\n' '\0' | xargs -0 rm --
    # 이 예제는 최근 5개를 남기고 삭제. N+1을 입력해야 함.

    출처: Stack Overflow

  • 파이어폭스 고정 탭 유지

    방법1: StartupApps 확장 설치.

    방법2: Reddit 에 설명한 대로 about:config 에서 browser.sessionstore.restore_pinned_tabs_on_demand 값을 true 로 설정.

  • 워드프레스 플러그인 번역

    ‘wp i18n make-pot’ 명령을 이용해서 만들 수 있는데, XDEBUG 사용시 에러가 난다.

    좀 더 예전부터 사용했던 레시피는 이렇게 한다.

    1. http://i18n.svn.wordpress.org/tools/ 여기 리포지터리를 체크아웃한다.
    2. 이 곳에 보면 makepot.php 파일이 있다.
    3. 다음처럼 명령을 준다: php makepot.php wp-plugin [디렉토리] [.pot 파일 경로]

    예시:

    cd /path/to/plugin
    php /path/to/tools/makepot.php wp-plugin . ./languages/lang.pot

    PoEdit을 이용하는 방법도 있으나, 이 방법의 장점은 플러그인 헤더까지 번역문으로 넣어준다는 것이다.