lightsail 로 서버 이전 후기

계속 사용해오던 cloudv의 가상서버에서 aws의 새로운 서비스인 lightsail로 이전했다.

굳이 웹호스팅을 쓰지 않고 가상서버로 구성해서 사용하는 것은 git 저장소도 한몫했는데 일단 혼자서 사용하다보니 뭐하러 이런걸 해야하나…라는 회의감과 그럴거면 차라리 github에서 사람들과 같이 코드를 만들고 올리고 하는게 더 낫겠다는 생각이 들었기 때문이었다. 그래서 차라리 웹데이터들은 더 저렴한 lightsail로 이전하고 git 데이터들은 github.com 으로 이전하기로 했다.

lightsail은 사용해보니 그냥 흔히 알고있는 가상서버다. 우리나라에서는 이미 많이 서비스하고 있는.

그런데 가격이 생각보다 싸다. 내 경우에는 월 5달러의 제일 저렴한 리눅스 서버로 골랐다. 메모리 512MB에 20GB의 디스크다. 디스크야 어차피 git 데이터가 github로 넘어간 이상 많이 필요치 않았지만, 너무 적은 메모리와 알 수 없는 cpu 성능 때문에 고민을 했다. 고민 끝에 최대한 메모리를 적게 쓰도록 아파치를 쓰지 않고 nginx로 쓰기로 했다.

그리고 어차피 방문객이 많지도 않고 방문객이 많으면 인스턴스를 늘리면 끝이니까.

bitnami의 여러 스택이 있었는데 사용하기 편하게 wordpress 스택을 선택하려 했지만 이 경우에는 멀티사이트를 만들기에 불편할 것 같아서 그냥 nginx 스택을 선택하고 직접 설정해서 아내의 홈페이지와 내 블로그 두개를 설치했다. nginx 설정 파일이 익숙치 않아서 약간 헤매었지만 금방 적응했다. bitnami류의 패키지 시스템이 마음에 들지 않았지만 직접 써보니 생각보다 괜찮았다. 멀티앱/멀티사이트간 여러 설정 파일들이 서로 꼬이지 않게 잘 정리되어 있었다. (물론 그런 이유로 인해 뭔가 하나 고치려면 한참 경로를 타고 들어가야 한다는건 불편하다.)

여튼 그렇게 설치하고 아파치에서 nginx로 변경했는데 와우… 속도가 생각보다 괜찮았다. 내가 아파치로 혼자 가상서버를 쓰는 것보다 훨씬 빨랐다.

접속방법에서 약간의 불편함은 있지만 어차피 접속할 일도 별로 없고… 게다가 1TB의 트래픽은 트래픽 걱정할 필요는 아예 없을만큼 정말 여유로웠다.

며칠간 여러 데이터들을 이전해본 후기

  1. 생각보다 속도가 빠름.
    도쿄 리전이고 가상서버에다가 메모리도 겨우 512MB라서 느릴 것으로 예상했지만 기존 서버보다 훨씬 빠른 느낌. 아파치와 엔진엑스의 차이인지도…
  2. 시간대 재설정 필요함.
    설치하게 되면 서버 시간을 한국에 맞춰야한다. ( https://gist.github.com/dongbum/1673616e33fb331ff8e876ee62216988 으로 저장해둔다.)
  3. 설정파일 트리구조를 잘 파악해둘 것.
    엔진엑스에 익숙치 않거니와 구조가 좀 복잡하긴하다.
  4. DNS 응답 속도가 아주 빨라짐.
    BIND나 PowerDNS로 네임서버를 직접 구성해서 썼었는데 그렇게 쓰는것보다 lightsail에서 제공하는 DNS의 응답속도가 훨씬 속도가 빨랐다. 거의 100배 정도.
  5. lightsail의 DNS는 Route 53과 약간 다름.
    lightsail에서도 300만 쿼리까지는 무료로 DNS를 제공해주는데 사용하기는 너무 편하게 되어있지만 기능적인 면에서는 Route 53 보다는 떨어진다.
  6. 512MB의 메모리로도 충분함.
    가장 저렴한 512MB 메모리의 인스턴스로도 블로그와 몇가지 개인서비스를 운영하는데에는 차고 넘치는 느낌이다.
  7. 사용상 몇가지 불편함이 있음.
    bitnami 패키지의 특성인지 보안을 위해 암호 같은게 어렵게 설정되어 있어서 약간 불편함. 암호를 일일히 바꾸고 쓰기보다는 그냥 쓰기로 결정했다.

CentOS 7에 plexpy 설치

plex 서버를 잘 사용 중인데 plexpy라는게 있다고 한다. 대강 보니 모니터툴 같은데 일단 리눅스에서 plexpy 를 설치해본다. 인터넷에 있는 몇몇 문서들은 도커를 이용한 설치를 예시로 하고 있는데 내 서버들은 아직 도커를 쓰지 않으므로 그냥 설치하는 것으로.

리눅스는 CentOS 7. plexpy 홈페이지에 들어가 InstallGuide 문서를 읽어본다.

https://github.com/JonnyWong16/plexpy/wiki/Installation

GIT을 이용하여 소스 코드를 다운 받는다.

git clone https://github.com/JonnyWong16/plexpy.git

[root@localhost source]# git clone https://github.com/JonnyWong16/plexpy.git
 Cloning into 'plexpy'...
 remote: Counting objects: 15652, done.
 remote: Total 15652 (delta 0), reused 0 (delta 0), pack-reused 15652
 Receiving objects: 100% (15652/15652), 77.18 MiB | 2.67 MiB/s, done.
 Resolving deltas: 100% (8905/8905), done.
 [root@localhost source]#

설치문서에는 /opt 에 설치하는 것을 예로 들고 있지만 이 경로를 난 좋아하지 않으므로 /usr/local/plexpy 에 설치할 예정.

다운 받은 내용을 /usr/local/plexpy 로 이동한다.

[root@localhost source]# mv plexpy /usr/local/
 [root@localhost source]# cd /usr/local/plexpy
 [root@localhost plexpy]#

plexpy.py를 실행하면 StandAlone 으로 실행하는 것 같지만 난 데몬서비스가 더 좋으므로 관련 문서를 읽어본다.

https://github.com/JonnyWong16/plexpy/wiki/Install-as-a-daemon

리눅스인 경우 다음의 문서를 읽어보라고 한다.

https://github.com/JonnyWong16/plexpy/blob/master/init-scripts/init.systemd

보여지는 스크립트 파일 내용을 vi 를 이용해 plexpy.service 파일로 입력한다.

파일 안에 있는 /opt 로 시작하는 경로들을 나에게 맞도록 /usr/local q로 시작하도록 수정한 다음 저장한다. 실행 유저과 그룹도 plexpy 로 변경.

.service 파일은 보통 /lib/systemd/system 에 저장한다고 하니 그곳으로 옮겨주고 스크립트를 재로딩한 다음, 제대로 읽혀지는지 테스트해본다.

[root@localhost plexpy]# mv plexpy.service /lib/systemd/system
 [root@localhost plexpy]# systemctl daemon-reload
 [root@localhost plexpy]# systemctl status plexpy.service
 ● plexpy.service - PlexPy - Stats for Plex Media Server usage
 Loaded: loaded (/usr/lib/systemd/system/plexpy.service; disabled; vendor preset: disabled)
 Active: inactive (dead)
 [root@localhost plexpy]#

서비스를 시작한다.

[root@localhost plexpy]# systemctl start plexpy.service
 Job for plexpy.service failed because the control process exited with error code. See "systemctl status plexpy.service" and "journalctl -xe" for details.
 [root@localhost plexpy]#

 

에러가 난다. 에러메시지대로 status 명령을 입력해본다.

[root@localhost plexpy]# systemctl status plexpy.service
 ● plexpy.service - PlexPy - Stats for Plex Media Server usage
 Loaded: loaded (/usr/lib/systemd/system/plexpy.service; disabled; vendor preset: disabled)
 Active: failed (Result: exit-code) since 화 2017-09-12 14:24:11 KST; 1min 10s ago
 Process: 23144 ExecStart=/usr/local/plexpy/PlexPy.py --quiet --daemon --nolaunch --config /usr/local/plexpy/config.ini --datadir /usr/local/plexpy (code=exited, status=217/USER)

9월 12 14:24:11 localhost.localdomain systemd[1]: Starting PlexPy - Stats for Plex Media Server usage...
 9월 12 14:24:11 localhost.localdomain systemd[1]: plexpy.service: control process exited, code=exited status=217
 9월 12 14:24:11 localhost.localdomain systemd[1]: Failed to start PlexPy - Stats for Plex Media Server usage.
 9월 12 14:24:11 localhost.localdomain systemd[1]: Unit plexpy.service entered failed state.
 9월 12 14:24:11 localhost.localdomain systemd[1]: plexpy.service failed.
 [root@localhost plexpy]#

 

설치 문서를 읽어보니 환경설정에 대한 내용을 하나도 실행 안한 것이었다.

유저를 추가하고 권한을 준다.

[root@localhost plexpy]# adduser --system --no-create-home plexpy
 [root@localhost plexpy]# chown plexpy:plexpy -R /usr/local/plexpy
 [root@localhost plexpy]#

 

이제 다시 시작해보면 에러가 나지 않는다.

[root@localhost plexpy]# systemctl start plexpy.service
 [root@localhost plexpy]#

 

서비스를 자동실행으로 등록한다.

[root@localhost plexpy]# systemctl enable plexpy.service
 Created symlink from /etc/systemd/system/multi-user.target.wants/plexpy.service to /usr/lib/systemd/system/plexpy.service.
 [root@localhost plexpy]#

 

웹브라우저로 서버의 8181 포트를 열어보면 다음과 같은 화면이 나온다. 이제부터는 웹에서 설정!

그런데 막상 설치해서 보니까 이게 뭐… 딱히 모니터링이라 하기도 애매하고… 어디다 써야할지는 잘 모르겠다. 아파치에 같이 물릴려고 했는데 귀찮아서 그냥 쓰는 것으로.

redmine 설치 + passenger 모듈 설치시 에러

새로 설치된 서버에서 레드마인을 설치하다가 알게 된 사실.

레드마인에 Passenger 모듈을 이용해 아파치와 연동하려고 했다.

패신저 모듈을 설치하고 명령을 내렸는데…

c++ -o buildout/support-binaries/UstRouterMain.o  -Isrc/agent -Isrc/cxx_supportlib -Isrc/cxx_supportlib/vendor-copy -Isrc/cxx_supportlib/vendor-modified -Isrc/cxx_supportlib/vendor-modified/libev -Isrc/cxx_supportlib/vendor-copy/libuv/include -D_REENTRANT -I/usr/local/include -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-long-long -Wno-missing-field-initializers -feliminate-unused-debug-symbols -feliminate-unused-debug-types -fvisibility=hidden -DVISIBILITY_ATTRIBUTE_SUPPORTED -Wno-attributes -ggdb -DHAS_ALLOCA_H -DHAVE_ACCEPT4 -DHAS_SFENCE -DHAS_LFENCE -DPASSENGER_DEBUG -DBOOST_DISABLE_ASSERTS -std=gnu++11 -Wno-unused-local-typedefs -DHASH_NAMESPACE="__gnu_cxx" -DHASH_MAP_HEADER="<hash_map>" -DHASH_MAP_CLASS="hash_map" -DHASH_FUN_H="<hash_fun.h>" -c src/agent/UstRouter/UstRouterMain.cpp
c++: internal compiler error: 죽었음 (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
rake aborted!
-----------------------------------------------
Your compiler failed with the exit status 4. This probably means that it ran out of memory. To solve this problem, try increasing your swap space: https://www.digitalocean.com/community/articles/how-to-add-swap-on-ubuntu-12-04
/usr/local/share/gems/gems/passenger-5.0.30/build/support/cplusplus.rb:41:in `run_compiler'
/usr/local/share/gems/gems/passenger-5.0.30/build/support/cplusplus.rb:102:in `compile_cxx'
/usr/local/share/gems/gems/passenger-5.0.30/build/support/cplusplus.rb:160:in `block in define_cxx_object_compilation_task'
Tasks: TOP => apache2 => buildout/support-binaries/PassengerAgent => buildout/support-binaries/UstRouterMain.o
(See full trace by running task with --trace)

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

It looks like something went wrong

메시지와 함께 에러. 메모리가 부족하니 스왑메모리 용량을 늘리라는 메시지인데 스왑메모리 용량을 늘리는 작업을 하기에는 너무나 번거롭고… 어떻게 해야하나 고민중. Thin 서버를 쓰는 방향을 생각 중이다.

추가.

passenger-install-apache2-module 명령을 내려서 실행하다보면 다음과 같은 메시지가 있다.

Your system does not have a lot of virtual memory

Compiling Phusion Passenger works best when you have at least 1024 MB of virtual
memory. However your system only has 993 MB of total virtual memory (993 MB
RAM, 0 MB swap). It is recommended that you temporarily add more swap space
before proceeding. You can do it as follows:

  sudo dd if=/dev/zero of=/swap bs=1M count=1024
  sudo mkswap /swap
  sudo swapon /swap

See also https://wiki.archlinux.org/index.php/Swap for more information about
the swap file on Linux.

If you cannot activate a swap file (e.g. because you're on OpenVZ, or if you
don't have root privileges) then you should install Phusion Passenger through
DEB/RPM packages. For more information, please refer to our installation
documentation:

  https://www.phusionpassenger.com/library/install/apache/

Press Ctrl-C to abort this installer (recommended).
Press Enter if you want to continue with installation anyway.

읽어보면 메모리가 부족하다는 경고와 메모리 부족시 해결하는 방법과 작업실행 중단을 권고하는 메시지이다. 처음에는 이 메시지를 무시하고 계속 설치했기에 문제가 일어났었다.

구글에 검색해봐도 뾰족한 방법이 없기에 안내 메시지에 따라서 실행해봤다.

[root@localhost redmine-3.3.1]# free -h
              total        used        free      shared  buff/cache   available
Mem:           993M        566M         80M         56M        346M        233M
Swap:            0B          0B          0B
[root@localhost redmine-3.3.1]# ll /dev/zero
crw-rw-rw- 1 root root 1, 5 10월 18 15:42 /dev/zero
[root@localhost redmine-3.3.1]# dd if=/dev/zero of=/swap bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 2.11671 s, 507 MB/s
[root@localhost redmine-3.3.1]# mkswap /swap
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=0678c873-6899-4c19-b208-e2d69ed55bac
[root@localhost redmine-3.3.1]# swapon /swap
swapon: /swap: insecure permissions 0644, 0600 suggested.
[root@localhost redmine-3.3.1]# free -h
              total        used        free      shared  buff/cache   available
Mem:           993M        566M         66M         56M        359M        235M
Swap:          1.0G          0B        1.0G
[root@localhost redmine-3.3.1]#

실행하고 나니 0바이트였던 스왑메모리가 1기가로 지정되었다. 다시 passenger-install-apache2-module 명령을 내리면 아까와 같은 경고메시지는 없어지고 컴파일이 순조롭게 진행되었다.

GCC 최적화 옵션

GCC로 컴파일하던 중 spdlog 라이브러리에서 컴파일시 -O3 옵션을 사용하는 것을 보고 궁금증이 생겨 찾아보았다.

GCC 최적화 옵션에 대해 자세하게 설명되어 있는 페이지.

http://jinynet9.tistory.com/113

* 커널 컴파일 시 최적화 옵션 -O2만 사용하는 이유
커널은 인라인 함수를 많이 사용하고 있다. -O3 최적화는 컴파일러가 판단해서 인라인을 인라인이 빠른 것은 인라인으로, 함수가 빠른 것은 함수로 바꿔버린다. 커널은 최적화된 수행 속도를 위해 의도적으로 인라인 함수를 사용하고 있어서 컴파일러에 의해서 자의적으로 함수로 바뀌는 것을 막기 위해 -O2 옵션을 사용한다.

커널 컴파일은 아니지만 최적화 옵션을 -O2 로 변경했다. 컴파일 옵션을 변경하고 -O3일 때와 파일 크기를 비교해보았는데 거의 차이가 나지 않았다. 앞으로도 -O2로 사용하면 될듯하다.

MicroServer를 재설정

집에 설치한 서버에 CentOS 7을 설치해서 썼었지만 다시 6 버전으로 돌아가기로 결정.

7 버전에 적응하려 했지만 6을 쓰던 습관으로 계속 쓰기에는 너무나 불편한게 많아 가장 익숙한 시스템으로 이동했다.

 

Transmission 데몬을 계속 쓰다가 rtorrent를 쓰려고 했는데 속도는 rtorrent가 훨씬 좋았지만 문제점이 많았다.

  1. 다운로드 완료 디렉토리와 다운로드 진행중 디렉토리를 개별로 설정할 수 없어서 하드디스크를 나누어서 사용할 수 없다는 점
  2. 파일질라에서 sftp로 접속해서 다운로드된 파일을 이동하려 하니 오류 나면서 이동이 안됨. SSH로 접속해서 이동시켜야함.
  3. Transmission GUI 툴 같은 편리한 툴이 없어서 ruTorrent를 이용해 웹브라우저로 접속해서 토렌트 파일을 업로드 해야한다는 점.

사실상 속도가 빠르다는 점 하나 빼고는 모든 면이 Transmission에 비해 안 좋기 때문에 그만 사용하기로 결정.

 

주말에 시간을 내어 다시 CentOS 6.7 버전으로 설치하고 디스크 마운트하고 각종 프로그램을 재설치 했다.

PLEX에서 다음검색에이전트 설치

PLEX 서버 설치 후 영화 추가시 데이터를 자동으로 가져오기 위해 다음검색 에이전트를 설치했다.

https://forums.plex.tv/discussion/comment/486302

에서 다음 검색 에이전트를 다운로드한다.

https://github.com/hojel/DaumMovie.bundle 에서 master.zip 파일을 다운로드 받을 수 있다. 리눅스에서는 wget 명령어를 이용하여 한번에 받을 수 있으므로 더 편리하다.

다운로드 파일을 unzip master.zip 명령으로 압축을 풀고, 폴더명을 DaumMovie.bundle-master 에서 DaumMovie.bundle 로 변경한다. (폴더명을 바꾸지 않으면 PLEX 서버에서 인식되지 않으므로 반드시 변경해야한다.

변경한 후 PLEX 서버를 systemctl restart plexmediaserver 명령으로 재시작해준다.

다시 웹관리자에 접속하여 설정 -> 서버 -> 에이전트 항목에 가보면 Daum Movie 라는 항목이 생겨있다.

K-026

밑의 Local Media Asstes (Movies) 의 체크박스를 활성화해주면 끝. (이게 되어있지 않다면 자막이 나오지 않는다고 한다.)

나머지 TV 쇼나 아티스트 앨범에 가서도 같은 작업을 반복해주면 된다.

이 작업을 하고 나면 영화나 TV쇼가 추가되면 자동으로 데이터를 가져오게 된다.

HP MicroServer Gen8

독일의 컴퓨터유니버스(http://www.computeruniverse.net)에서 직구한 마이크로서버 Gen8이 도착했다.

우리나라 가격으로는 35만원 정도인데 컴퓨터유니버스를 이용하면 배송비 모두 포함 27만원 정도가 든다. 단 거의 3주에 가까운 시간을 기다려야 했으니…. 직구를 처음해보는 나로써는 무진장 답답했다. 컴퓨터유니버스에서 독일우체국까지는 금방간다. 그런데 거기서 한국으로 오기까지 거의 열흘가까이가 걸렸다. 한국에 온 다음에는 2일인가 3일만에 도착.

여튼 무사히 도착했으니 박스 뜯으며 개봉.

img_1155

박스 크기가 거의 라면 박스 크기.

img_1156

내부에는 종이를 구겨서 완충재로 넣어놨다. 그덕분에 다행히 박스는 아주 깨끗한 모습으로 도착.

img_1157

상자를 열고 컴퓨터를 꺼낸다. 전원케이블 2개가 들어있다. 생각보다 컴퓨터가 무겁다.

img_1160

기본사양은 하드디스크가 들어있지 않기 때문에 따로 준비한다. 운영체제용으로는 얼마전 RMA 받은 히타치 500기가 하드디스크, 데이터 저장용으로 웨스턴디지털 4TB 하드디스크, 토렌트 돌릴 용도로 무상분양 받은 삼성 250GB 하드디스크를 캐디에 조립한다.

img_1158

서버 뒤의 핸드스크류를 돌린 다음 뚜껑을 뒤로 밀어서 연다. 옆쪽에 메모리 슬롯이 보이고 2GB ECC 메모리가 꽂혀있다. 미리 준비한 삼성 PC12800 ECC 8GB 메모리 2개를 꽂아서 16기가 메모리를 장착했다.

img_1161

작업방에 두고 세팅 중… 아내가 아주 오래전에 쓰던 모니터와 키보드도 연결했다. iodd를 연결해서  CentOS 설치. (이럴 때 느끼지만 정말 iodd는 잘 산 것 같다.) 운영체제는 CentOS 7을 설치했다. 6버전대가 익숙하긴한데 공부도 할겸 개인용도니까 7 버전으로 처음 설치.

처음 시동하면 지혼자 몇번 꺼졌다켜졌다 계속 반복한다. 일종의 초기화 과정으로 생각하고 가만히 내버려두면 된다.

내가 제일 중요하게 생각했던 소음 문제.

사용해보니 부팅시에는 굉장히 소음이 큰데 부팅이 완료되면 소음이 적다. 일반적인 사무실에서 조용할 때 나는 컴퓨터 소리 정도? 그냥 사무실이라고 생각하면 쓸 수 있을 것 같다. 하지만 집안에서라면 좀 어려울 것 같다. 집안에 아무런 전자기기나 TV도 작동하지 않는 조용할 때에는 소음이 들린다.

리눅스에서 4TB 하드디스크 파티션하고 포맷하는 방법

CentOS 7을 설치하고 가지고 있는 하드디스크들을 장착하고 파티셔닝을 진행했다.

500GB 하드디스크와 250GB 하드디스크는 fdisk 명령어로 파티션을 나누고 mkfs.xfs 명령어로 포맷하고 마운트하니 제대로 인식되고 사용 가능했다. 그런데 새로 구입한 4TB 하드디스크도 같은 방법으로 파티셔닝하고 파일시스템 생성 후 마운트하니 2TB로 잡혔다.

왜 이런가 찾아보다가 발견.

hdd

내용은 이 디스크는 4TB이며 parted를 이용하라는 말이다.

parted 사용법은 다음 링크를 참조했다.

parted를 통해서 무사히 파티셔닝을 마쳤다.

아파치에서 특정 도메인에 대한 페이지를 모두 포워딩하기

아파치 웹서버에서 가상호스트를 설정하여 운영하던 중에 특정 가상호스트로 들어오는 모든 요청을 특정도메인의 특정페이지로 넘길 때의 설정 방법이다.

가상호스트 설정 파일에서 다음의 내용을 입력한다.

<VirtualHost *:80>
 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^(request.domain.com) [NC]
 RewriteRule ^(.*)$ http://target.domain.com/target_page.jsp [R,L]
</VirtualHost>

지정된 도메인으로 오는 모든 요청이 지정된 페이지로 다 전환되어 버린다.