Sunday, November 06, 2005

server config for Ubuntu linux

그 동안 소규모 게시판과 ftp 서버로 사용하던 fedora core2가 file system 오류로 문제가 생겼다.
겸사겸사 새로나온 fedora core4로 upgrade 하려고 했는데, 막상 설치 단계에서 fedora core4가 첫번째 시디가
읽기 오류가 생기면서 설치가 되지않았다.

주변을 살펴보니 유일한 대안은 몇달전 신청해서 받은 ubuntu hoary hedgehog 시디 뿐이었다.

설치는 무척 쉽게 끝났지만, 다 설치하고 보니 OTL...

ubuntu가 데스크탑용으로 제작된거라 아파치같은 서버 프로그램은 하나도 설치되지 않는 것이 아닌가....
google을 찾아 헤매가며 겨우 관련 프로그램들 설치하고 정상적으로 서비스를 복구했다.

다음에 또 설치할 기회가 있다면 당연히 redhat 계열로 가야겠다고 생각 되지만, 혹시나 하는 마음에 우분투 설치 과정을 정리해 놓기로 했다.

서버의 명칭은 109 이므로
prompt는 109~%, 109~# 와 같이 표시된다.


1. 먼저 루트 계정이 기본적으로 사용되지 않는 우분투에 루트 계정을 활성화
109~%sudo passwd root

2. 루트로 로그인
109~%su -
앞의로의 작업은 모두 루트 계정으로 수행
3. aptget 소스 추가
109# vi /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu/ warty main restricted universe
deb-src http://archive.ubuntu.com/ubuntu/ warty main restricted universe
추가

109# apt-get update
109# apt-get install php
109# apt-get install mysql
109# apt-get install apache2
109# apt-get install vsftpd
109# apt-get install telnetd
109# apt-get install ssh
109# apt-get install squid

참고로 게시판은 GNUboard 4를 사용했다.
그누보드 설치에 관련된 사항은 위의 홈페이지에서 찾을 수 있다.

4. 설치된 apache2와 php가 연동되어 사용될 수 있도록 설정

109# vi /etc/php4/apache/php.ini

register_globals = On


5. 기존 페도라에서 수행되던 서비스 파일 복구

기존에 있던 /var/lib/mysql 내의 모든 db 파일들을 복사하여 DB 복구
또 기존의 /var/www/html/ 밑에 있던 모든 파일들을 /var/www 아래로 복사

우분투의 apache2는 기본 http root 위치가 /var/www로 설정.

이런 복구 작업에서 제일 신경쓰이는 것이 기존 사용자 id와 새 사용자 id가 변경되는 점이다.
uid, gid가 변경되므로 copy를 한 다음에는 일일히 확인한 다음에 chown 명령으로 잡아준다.

6. 인터넷 공유를 위한 dhcp3과 iptables 설정

109# vi /etc/dhcp3/dhcpd.conf

default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name-servers 168.126.63.1;
subnet 192.168.0.0 netmask 255.255.255.224 {
range 192.168.0.2 192.168.0.20;
}


109# vi /etc/init.d/iptables

#!/bin/sh
echo "1" > /proc/sys/net/ipv4/conf/all/forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -A POSTROUTING -o eth0 -t nat -j MASQUERADE
/sbin/iptables -A INPUT -s 192.168.0.0/255.255.255.0 -p tcp -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -j ACCEPT
/sbin/iptables -A FORWARD -o eth1 -j ACCEPT


109# chmod 755 iptables
109# update-rc.d /etc/init.d/iptables defaults

7. ftp 설치

109# apt-get install vsftp

8. 회사 방화벽을 우회해서 접속 가능하도록 telent 접속 포트 변경

109# vi /etc/services

telnet 21/tcp ===> telnet 26/tcp


9. 서비스 시작

109# /etc/init.d/squid start
109# /etc/init.d/apache2 start
109# /etc/init.d/mysqld start

10. 텔텟 접속시 영문을 사용하도록 설정 변경
우분투 설치할 때 한글로 설정을 했더니, putty로 텔넷 접속하니 한글이 정상적으로 나타나지 않는다. 그래서 아예 기본 문자셋을 en_US로 변경.

109~# vi /etc/environment

#LANGUAGE="ko_KR:ko:en_GB:en"
LANGUAGE="en_US:en:ko_KR"ko
#LANG=ko_KR.UTF-8
LANG=en_US


11. 기타 apache2, php4 관련 프로그램의 추가 설치
109~# apt-get install php-devel php-domxml php-gd php-imap php-ldap php-mysql php-pear php-xmlrpc php-rrdtool curl curl-devel perl-libwww-perl ImageMagick

109~#/etc/init.d/apache2 restart

12. user 별 개인 홈 서비스를 위한 설정 변경

109# vi /etc/apache2/apache2.conf

다음 항목을 활성화
# UserDir is now a module
UserDir public_html
UserDir disabled root



AllowOverride FileInfo AuthConfig Limit
Options Indexes SymLinksIfOwnerMatch IncludesNoExec


13. HTTP server에서 한글을 기본 언어로

109# vi /etc/apache2/apache2.conf

LanguagePriority ko en da nl et fr de el it ja no pl pt pt-br ltz ca es sv tw

AddDefaultCharset EUC-KR



14. 개인 홈페이지를 사진 갤러리로 설정하기 위한 php script 설치

먼저 gd library를 활성화 (설치는 좀 전의 apt-get install php-gd로 되어있어야 함)

http://www.jakeo.com/software/fotopholder/index.php 다운 설치

109# cd ./fotopholder25
109# cp ./index.php /home/user/public_html/index.php
109# mkdir /home/user/public_html/_cache
109# chmod 777 /home/user/public_html/_cache

그런 다음 user 홈페이지에 처음으로 접속하면 web browser에서 환경 설정이 시작된다.

환경 설정이 완료되면 /home/user/public_html/_cache 밑에 config.php가 생성된다.

15. 개인 홈페이지 제목 변경

109# vi /home/user/public_html/_cache/config.php

Album_name 설정을 다음과 같이 바꿔주면 각 사용자 id 기준으로 제목이 표시됨
$album_name = substr($_SERVER["PHP_SELF"],2,strlen($_SERVER["PHP_SELF"])-12)."'s Photo gallery"; //The name of your album

16. 기본 설정된 user directory를 새로 생성되는 사용자마다 적용되도록 함

109# cp –r /home/user/* /etc/skel


17. 만일의 file system 오류에 대비해 mysql db의 백업

하루 단위로 db를 백업하므로 .etc/cron.daily 에 해당 스크립트를 넣어두면 매일 새벽 실행됨.
db 사이즈가 크지 않으므로 mysqldump 명령으로 데이터베이스 단위로 백업하는것보다
모든 mysql db를 한꺼번에 그대로 백업하는 것이 효과적일 듯해서...

백업 수행 전에 어제 날짜 파일은 yesterday.db.tar.bz2로 이름을 변경한다.
이렇게 하면 언제나 어제와 오늘자 파일만 백업으로 저장할 수 있다.
어제 날짜의 인식은 시간 설정이 한국시간대인 GMT+9 이고, cron의 실행이 매일 새벽 4시 경에 이루어 지는 점을 이용하여 date -u +%y%m%d 명령을 수행할 경우 universal 시간, 즉 GMT 날짜가 나오는 것을 이용하였다.

109# vi /etc/cron.daily/109dbbackup

#! /bin/bash

if [ -f /data/util/109backup/`date -u +%y%m%d`.db.tar.bz2 ] ; then
mv -f /data/util/109backup/`date -u +%y%m%d`.db.tar.bz2 /data/util/109backup/yesterdata.db.tar.bz2
fi

tar -cvvf /data/util/109backup/`date +%y%m%d`.db.tar /var/lib/mysql/
bzip2 -z /data/util/109backup/`date +%y%m%d`.db.tar
exit 0

18. 만일의 file system 오류에 대비해 웹서버 파일 백업

db 이외의 게시판 파일이나 게시판의 첨부 파일 등은 모두 /var/www 폴더에 저장된다.
사이즈가 무척 크므로 이 파일들은 한 달에 한 번씩 백업하기로 하고 etc/cron.monthly 에 스크립트를 넣어 실행되도록 하였다.
백업 수행 전에 이전에 한 달 전에 백업된 파일의 지우도록 한다.

109# vi /etc/cron.monthly/109wwwbackup

#! /bin/bash

if [ -f /data/util/109backup/*.www.tar ] ; then
rm -f /data/util/109backup/*.www.tar
fi

tar -cvvf /data/util/109backup/`date +%y%m%d`.www.tar /var/www/
exit 0


19. Ddns 서비스를 위한 no-ip 설치

http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz

gzip -d noip-duc-linux.tar.gz
tar xvf noip-duc-linux.tar
cd ./noip-2.1.1
cp ./noip2-linux /usr/local/bin/noip2
cp debian.noip2.sh /etc/init.d/noip2

/usr/sbin/update-rc.d noip2 defaults
/etc/init.d/noip2 start

No comments: