라즈베리파이 nginx 로그의 주기를 설정하기

서버에 설치된 데몬마다 로그를 생성하는데, 각 데몬별로 로그 주기를 정할 수 있는 곳이
/etc/logrotate.d이다.

1
2
$ cd /etc/logrotate.d
$ vi nginx

이중 nginx를 vi 에디터로 열어서 다음과 같이 수정하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#/var/log/nginx/*.log {
# weekly
# missingok
# rotate 52
# compress
# delaycompress
# notifempty
# create 0640 www-data adm
# sharedscripts
# prerotate
# if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
# run-parts /etc/logrotate.d/httpd-prerotate; \
# fi \
# endscript
# postrotate
# invoke-rc.d nginx rotate >/dev/null 2>&1
# endscript
#}

/var/log/nginx/*.log {
daily
rotate 365
copytruncate
delaycompress
compress
dateext
notifempty
missingok
}

테스트

1
2
$ logrotate —force /etc/logrotate.d/nginx
$ cd /var/log/nginx

nginx 웹서버를 실행 후 생성되는 로그를 확인해보자.
로그 경로는 nginx 설정에 있다.

라즈베리파이 트랜스미션(transmission) 토렌트 사용하기

라즈베리파이의 특정 폴더에 torrent 파일 업로드 시, 서버에 토렌트 파일을 다운받도록 해보자.

설치

1
sudo apt-get install transmission-daemon

설정

설치 한 후에 자동으로 데몬이 실행되는데, 이를 중지시켜야 한다.
설정 파일을 건드려 줘야 하기 때문이다.

1
2
3
sudo service transmission-daemon stop
cd /etc/transmission-daemon/
sudo vi settings.json

이제 설정 파일 settings.json을 수정해보자.

1
2
3
4
5
6
7
8
9
10
11
"download-dir": "다운로드될 디렉토리", # 이전에 오토마운트 시켰던 외장하드로 지정해도 좋다.
"rpc-password": "원하는 비밀번호", # 자동으로 암호화되어 저장된다.
"rpc-port": 9091, # 기본 포트
"rpc-username": "웹 접속 시 아이디",
"rpc-whitelist-enabled": false, # 외부 등 모든 아이피에서 접근이 가능하게 만든다.
"trash-original-torrent-files": true, # 다운로드 시작 시, 토렌트 파일은 자동 삭제

# 옵션 맨 마지막에 추가한다.
# 토렌트 파일을 앞으로 업로드 할 폴더를 지정한다.
"watch-dir":"토렌트파일을 업로드할 디렉토리",
"watch-dir-enabled":true

실행 및 확인

그리고 이제 데몬을 시작해보자.

1
$ sudo service transmission-daemon start

그리고 http://해당아이피:9091에 웹에서 접속하여 테스트하자

인증 완료 시 토렌트 파일 다운로드 현황을 보여주는 화면이 등장한다.

옵션에서 주었던 watch-dir에 토렌트 파일을 올리면 자동으로 웹에서 실시간 확인이 가능하다.
진정한 파일서버 같은 느낌이 물씬 난다.

라즈베리파이 FTP 서버 구성 (proftpd)

라즈베리파이의 ftp 서버 접근이 가능하도록 구성해보자.

설치

간단한 설치만으로도 기본적인 사용이 가능하다.

1
$ sudo apt-get install proftpd

설정

1
$ sudo vi /etc/proftpd/proftpd.conf

위 명령어로 설정파일을 열어 편집한다.

1
2
3
4
5
# Use this to jail all users in their homes
DefaultRoot ~/external/fileserver

# 주석처리된 DefaultRoot 옵션을 활성화시킨 후 경로를 입력한다.
# 이 때, 물결(~)은 접속한 사용자의 홈 디렉토리를 의미한다.

설정파일에서 DefaultRoot 만 수정 잘해도 특별히 문제가 될 것이 없다. 이 옵션은 일종의 보안을 위해 필요한 것인데, 나중에 이 서버를 주변 친구들이나 다른 사람에게 공개할 때 아무나 내 서버에 접속해서 중요한 파일을 헤집어놓고 다니면서 설정을 바꿔놓는다면 큰 문제가 생길 것이다.

그래서 보안을 위해서는 공개를 위한 디렉토리를 따로 만들어놓고 일반 사용자들은 그 제한된 디렉토리 안에서만 접근할 수 있도록 바꿔야 한다. 사용자의 홈 디렉토리에서 하위 폴더로 이동은 가능하지만 상위 폴더로는 이동이 불가능하다는 점을 활용한다.

위 설정 예시에서는 이전에 외장하드를 auto mount시킨(라즈베리파이 오토 마운트) 것이다.

라즈베리파이 nginx, php-fpm, mysql(mariadb) 설치

php 개발환경을 세팅해보겠다.

nginx 설치

1
2
$ sudo apt-get install nginx
$ sudo service nginx restart

생각보다 설치와 실행이 너무 쉬워서 깜짝 놀랬다.
http://localhost로 접속하여 확인하자.

php7 설치

설치 준비

php7에 대한 정보가 없기 때문에 이를 추가해 주는 과정이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ sudo vi /etc/apt/sources.list

# 아래 줄을 추가한다.
deb http://repozytorium.mati75.eu/raspbian jessie-backports main contrib non-free

# 키서버를 등록해준다.
$ sudo gpg --keyserver pgpkeys.mit.edu --recv key CCD91D6111A06851

gpg: directory '/root/.gnupg' created
gpg: new configuration file '/root/.gnupg/gpg.conf' created
gpg: WARNING: options in '/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring '/root/.gnupg/secring.gpg' created
gpg: keyring '/root/.gnupg/pubring.gpg' created
gpg: "key" not a key ID: skipping
gpg: requesting key 11A06851 from hkp server pgpkeys.mit.edu
sudo gpg --armgpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 11A06851: public key "Mateusz Łukasik <mati75@linuxmint.pl>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
$ sudo gpg --armor --export CCD91D6111A06851 | sudo apt-key add -

업데이트한다.

1
$ sudo apt update -y

php7 설치 (php-fpm)

1
$ sudo apt install php7.0 php7.0-cli php7.0-common php7.0-fpm php7.0-gd php7.0-json php7.0-mcrypt php7.0-mysql php7.0-readline -y

nginx의 소켓 업데이트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ sudo apt-get install php7.0-fpm
$ sudo vi /etc/nginx/sites-available/default
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
#}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

# index index.html index.php index.htm 역시 추가하도록 하자

nginx 설정이 수정되었으므로 서비스 재시작을 한다.

1
$ sudo service nginx restart

php 버전을 확인해본다.
버전 정보가 출력된다면 설치가 잘 된 것이다.

1
2
3
4
5
$ php -v
PHP 7.0.19-1~bpo8+1 (cli) (built: May 12 2017 20:05:12) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.19-1~bpo8+1, Copyright (c) 1999-2017, by Zend Technologies

mysql 설치 (mariadb)

역시 패키지부터 설치해주자.

1
$ sudo apt-get install mariadb-server

root 사용자 비밀번호를 설정하는 창이 나오면 입력하고 한 번 더 입력해준다.

그리고 3306 포트에 대한 방화벽을 열어준다.

1
2
3
$ sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --dport 3306 -j ACCEPT
$ sudo iptables-save

따로 재시작을 해 줄 필요도, 할 수도 없지만 iptables-save 명령어로 방화벽 정책이 저장된 것이다.

root 로 접속 확인 후
‘사용자명’@‘%’ 를 mysql.user 테이블에 추가하여 테이블 권한을 적절하게 주도록 한다.

라즈베리파이 자동 마운트

라즈베리파이에서 외장하드를 연결하여 사용 중인 사용자가 있다면
장치를 자동으로 마운트시키고 싶을 것이다.
이번 글에서는 외부 장치를 auto mount 시키는 방법을 알아보겠다.

장치 확인

우선 장치 확인을 해 본다.

1
2
3
4
5
6
$ sudo blkid

/dev/mmcblk0p1: LABEL="boot" UUID="95E0-9AC4" TYPE="vfat" PARTUUID="f8e97239-01"
/dev/mmcblk0p2: UUID="b105f9a8-f450-4976-8ac8-69053f57bab4" TYPE="ext4" PARTUUID="f8e97239-02"
/dev/mmcblk0: PTUUID="f8e97239" PTTYPE="dos"
/dev/sda1: LABEL="My Passport" UUID="904A19514A193586" TYPE="ntfs" PARTLABEL="My Passport" PARTUUID="d714a0e3-6980-46a0-ae12-bcf81c70f056"

/dev/sda1 에 연결된 외장하드를 연결해 놓았다.
마운트된 장치를 unmount시킨 후에 다음과 같은 명령어로 특정 폴더에 마운트 되도록 한다.

1
2
3
$ cd /
$ sudo mkdir external
$ sudo mount -t ntfs /dev/sda1 /external

auto mount 설정

/etc/fstab을 수정한다.

1
/dev/sda1       /external       ntfs    default         0       0

위 내용을 추가하고 재부팅하여 cd /external을 통해 장치가 올바르게 마운트 되었는지 확인한다.

라즈베리파이 고정 ip 설정

라즈베리파이를 사용하면서 랜선에 직접 연결하면 좋겠지만
그렇지 못하고 공유기의 와이파이를 이용하는 경우, 자동으로 할당되는 아이피를 고정시키고 싶을 것이다.

왜냐하면 우리는 공유기의 포트포워딩(Port Forwarding)을 사용할 것이기 때문이다.

라즈베리파이 아이피 고정

iptime 공유기를 사용한다고 가정한다.
라즈베리파이를 재부팅하였을 때, ip가 변동되지 않도록

1
2
3
4
5
6
7
8
9
10
11
12
13
$ sudo vi /etc/network/interfaces

# 해당 부분을 찾아서 다음과 같이 수정한다.
allow-hotplug wlan0
iface wlan0 inet static
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
wpa-ssid wi-fi 이름
wpa-psk wi-fi 비밀번호
address 192.168.0.18
network 192.168.0.0
netmask 255.255.255.0
gateway 192.168.0.1
broadcast 192.168.0.255

재부팅 후에 ifconfig 명령어를 통해 확인한다.

라즈베리파이 ssh 활성화

원격 또는 모니터 없이 라즈베리파이를 제어하고 싶다면, ssh를 활성화해야 한다.

1
$ sudo raspi-config

위 커맨드를 실행한 후에
Advanced Options 메뉴에 들어가서 ssh -> enable

라즈베리파이 설치 (MacOS)

img 파일 다운로드

라즈베리파이는 우분투(Ubuntu) 기반의 raspbian 이라는 OS를 사용한다.
lite버전은 cli만 사용가능한 버전이다.
http://www.raspberrypi.org/downloads

터미널에서 디스크 마운트 확인

1
$ diskutil list

sd카드에 해당하는 장치를 언마운트 한다.

1
$ diskutil unmountDisk /dev/disk4

img 파일이 있는 곳으로 이동 후 다음과 같은 명령어로 sd카드에 img 설치

1
2
$ cd /path/to/img
$ sudo dd bs=1m if=2017-04-10-raspbian-jessie.img of=/dev/rdisk4

ctrl + t 를 눌러 설치 현황을 확인할 수 있다.

완료되면 명령어 커맨드 대기상태가 된다.

pc에서 sd카드를 언마운트한 후에, 라즈베리파이에 삽입하여 나머지 설치과정을 진행한다.

참조 : http://forteleaf.blogspot.kr/2016/06/3-via-osx.html
다른 방법 : http://giyatto.tistory.com/28 - 인스톨러 활용