root@namuwiki:~# apt-get update && apt-get safe-upgrade
}}}
====== LAMP 스택 설치 ======
초보자라면 nginx의 rewrite 설정에 질려버리게 될 것이다. 초보자가 만드는 웹 사이트에 엄청난 트래픽이 몰리지는 않을 테니 아파치 웹 서버를 사용하는 것이 편하다. 설치도 한 줄로 끝난다. 다음은 Apache 웹 서버, MySQL 서버, PHP 5.6을 한 번에 설치하는 명령어이다.
{{{#!html root@namuwiki:~# apt-get install lamp-server^
}}}
nginx의 설정이 아파치에 비해 많이 어렵진 않다. 참고자료가 상대적으로 적지만 부실한 정도는 아니다. 결국 선택의 문제다. 다만 .htaccess문제 때문에 아래 워드프레스 설치시에는 nginx보다 아파치가 유리한 건 사실이다.
====== 워드프레스 설치 ======
* 웹 서버의 루트 디렉토리로 이동.
위의 방법으로 설치했다면 웹 서버의 루트 디렉토리는 /var/www/html이다. 또는 /var/www이거나. 배포판별로 다르다. 설정에서 이 기본값을 바꿀 수 있다.
{{{#!html root@namuwiki:~# cd /var/www/html
}}}
* 워드프레스를 다운로드한 후 압축을 푼다. 참고로 영문버전으로 깔리는데 설치 후 수정하면 된다.
{{{#!html root@namuwiki:/var/www/html# wget https://wordpress.org/latest.tar.gz
root@namuwiki:/var/www/html# tar zxvf latest.tar.gz
}}}
* (옵션) 폴더 이름을 변경한다.
변경하지 않아도 상관은 없으나 변경하지 않으면 블로그 주소가 더러워질 수 있다. wp로 변경한다.
{{{#!html root@namuwiki:/var/www/html# mv wordpress wp
}}}
* 폴더의 소유주 설정
웹 서버가 파일에 제대로 접근할 수 있도록 폴더(wp)의 소유주를 웹 서버 유저로 변경한다. 옵션 -R은 하위 폴더와 파일들에도 적용한다는 의미이다. 위 방법대로 설치했다면 웹 서버 유저의 이름은 www-data이다.
{{{#!html root@namuwiki:/var/www/html# chown -R www-data:www-data wp
}}}
* 인덱스 파일 수정
nano 또는 vi를 이용하거나 sftp로 접근하여 웹 서버 루트에 있는 기본 인덱스 문서(index.html)의 내용을 모두 지우고 아래의 내용을 넣는다.
{{{#!html <meta http-equiv="refresh" content="0;url=/wp" />
}}}
아니면 설정파일에서 웹 루트 디렉토리를 /var/www/html/wp로 수정하거나, wp디렉토리의 내용을 /var/www/html 아래로 다 이동한다. 사실 위 방법보단 버츄얼호스트 기능을 이용하는 게 좋은데 자기 소유 도메인이 없으면 사용할 수 없는 방법이므로 생략한다.
====== 워드프레스 설정 ======
이제 웹 브라우저를 이용하여 서버의 주소로 접속하면 [[GUI]]가 나올 것이다.
주소를 모르면 서버에서 ifconfig 치면 주소 나온다. [[공유기]] 아래에서 돌린 경우 DMZ 설정을 해줘야 외부에서 접속가능하니 참고.
데스크톱 리눅스를 서버로 개조해 사용하는 사용자는 그냥 간단하게 http://localhost라고 치면 된다.
=== Under [[Microsoft Windows|Windows]] ===
* 윈도우는 접근 장벽이 가장 낮은[* 어디까지나 [[사용자 경험]] 상으로만. 윈도 서버 OS의 가격은 클라이언트용 윈도 가격과 자릿수부터 다르다. 대략 120~140만원대.] 운영 체제중 하나다. 모든 설정을 GUI로 할 수 있어서 진입장벽이 낮고, 따라서 누구나 쉽게 서버를 운영할 수 있다. 리눅스 콘솔만 보면 현기증이 나는 사람이면 이걸 추천한다. 하지만 아무것도 모르고 따라만 하는 사람이라면 자료가 많은 리눅스를 추천한다. 윈도우 쪽은 자료가 리눅스에 비해 적다.
* Windows는 마소의 [[IIS]]를 사용 할 수 있다. 퍼포먼스도 상당히 좋은 편에다 GUI도 지원되므로 서버 지식은 있는데 콘솔 쓸 자신이 없으면 이걸 쓰자. 성능 자체도 좋고 콘솔을 쓸 필요가 거의 없어 관리가 쉬워 기업에서도 많이 쓴다.
* Windows Server 계열에서는 FTP를 기본적으로 지원하지만 Windows 계열에서는 파일질라를 사용해 보자
* 블로그를 만들 것이라면 웹서버를 설치해야 한다. XAMPP와 같은 Apache, PHP, MySQL을 한꺼번에 설치해주는 프로그램도 많이 있으니 활용해보도록 하자. 그 다음에는 설치형 블로그인 텍스트큐브, 워드프레스 등을 깔아줘야 하는데, 그건 자신의 상황, 서버상황에 따라 설치해주어야 한다.
* 보안을 고려해서 운영체제를 선택해야 한다. 지원기간이 다소 남아있는 [[Windows Server 2012|2012]]나 [[Windows Server 2012 R2|2012 R2]]를 사용하든지, 지원기간이 형식적으로만 존재하는 [[Windows Server 2019|2019]]를 사용하도록 하자. [[Windows Server 2008 R2]] 이하의 Windows Server 계열 운영체제는 지원기간이 끝나 보안이 취약한 상태다. 이런 PC에 외부용 포트를 열어버리면 1분도 안 되어 뚫린다고 할 정도다. 따라서 보안 지원기간이 끝난 운영체제는 공유기 밑에서만 돌려야 한다. 그리고 Windows 7 이하의 각종 개인용 윈도우 역시 서버용으로는 적합하지 않다.
* 학생 자격이 유지되는 기한 이내라면 [[Azure for Students]]에서 [[Windows Server 2016]]를 무료로 다운가능하니 참고하자. 에디션 중에 라이선스 값이 제일비싼 데이터센터 제품키를 제일 먼저 확보해 두도록 하자[* 서버 2016부터는 라이선스 정책이 프로세서상 라이선스에서 코어 당 라이선스로 변경된 관계로 매우 비싸졌다.].
* 학생은 Azure for Students에서 Server 계열의 운영체제를 무료로 다운가능하고, 학생이 아니어도 반년간 무료로 체험해볼 수 있다.
* 상업용으로 사용할 경우 크랙을 사용하면 큰 법적 위험부담을 안게 된다. 다만, 개인적으로 크랙을 쓰는 것에 대해서는 MS는 2019년 기준 별도의 법적 조치를 취하고 있지 않는 편이다.
* 외부에서 접속이 안되는 경우가 있는데, 그건 공유기나 Windows 방화벽 등에서 따로 설정을 해야한다.
* 방화벽이 귀찮다고 꺼버리는 것은 매우 위험한 행동이다. 윈도우 방화벽 자체는 그닥 좋진 못하지만 없는 것 보단 낫다.[* 만일에 아직까지도 상위 윈도우 서버로 업그레이드를 하기가 여의치 않은 상황이라 당분간 윈도우 2K를 써야만 한다면 [[:파일:Windows 2000 방화벽 설정방법.jpg|TCP/IP 필터링과 IPSEC 설정방법]]을 참고해서 기본 방화벽 기능을 활성화 해야한다.] 네트워크 상단에 물리 방화벽을 달아 두거나 서드파티 방화벽을 쓸 생각이 아니라면 끄지 말아야 한다. 방화벽의 기본은 전부 막고 사용하는 서비스만 열어두는 것이다.
* 윈도우의 파일시스템인 NTFS는 파일명의 대소문자를 구분하지 않는다. aaaa.file / Aaaa.file / aAAa.file 이 윈도우에서는 모두 같은 파일명으로 처리되지만, *nix 계열에서는 모두 다른 파일이다. 신규서버라면 신경 쓸 것 없지만, 마이그레이션 하는 경우에는 대소문자에 따른 파일명 겹침을 주의해야 한다. 복사하는 도중에 파일을 덮어쓰겠냐는 확인창이 뜨고, 무심코 [[예스맨#s-2|네 해버리면]] 망한다.
==== [[IIS]] (인터넷 정보 서비스, Internet Information Service) ====
* 서버를 조립하고, 컴퓨터에 OS를 설치했다면 일단 원격 데스크톱을 사용할 수 있게 하자. Windows 키+Pause Break를 누르면 시스템 정보가 뜨는데, 고급 시스템 설정으로 들어가서(XP라면 건너뛰자.) 원격 탭으로 들어가자. 이후 원격 데스크톱 프레임에서 이 컴퓨터에 대한 원격 연결 허용으로 바꾸면 된다. 집에 있는 컴퓨터가 모두 Windows 비스타나 7 이상이라면 네트워크 수준 인증도 체크하자. 보안성이 강화되지만, XP 이하에선 접속할 수 없다.
* FTP나 웹 서버를 구축하려면 일단 인터넷 정보 서비스를 설치해야 한다. 프로그램 및 기능에 들어가서(XP는 프로그램 추가/제거) Windows 기능 켜기/끄기(XP는 Windows XP에 기능 추가)를 선택하고 인터넷 정보 서비스 찾아서 +를 누른 다음 FTP 서버나 WWW 서비스와 웹 관리 도구를 체크하자.
* FTP 서버를 추가해보자. 사이트에서 오른쪽 클릭을 한 다음 FTP 사이트 추가를 누르면 대화상자가 뜬다. 사이트 이름은 대충 정하고, 경로는 공유하려는 디렉토리를 설정한다.
바인딩에서는 자기 네트워크의 IP 주소와 맞는 IP로 설정한다. SSL은 사용 안함으로 하자.
인증 항목은 둘 다 선택. 권한 설정은 입맛대로 하자. 모든 익명사용자-읽기로 하면 누구든 FTP를 볼 수 있다. 아래에 계정을 입력해서 계정과 비밀번호를 사람만 들어오게 할 수도 있으니 열심히 응용해보자.
이렇게 한 다음 ftp:// 아까 설정한 ip 주소로 들어가면 정상적으로 접속이 된다.
* Windows에서 탐색기에서도 서버의 파일을 볼 수 있도록 해보자. 서버 컴퓨터에서 공유하려는 폴더를 오른쪽 클릭→공유 탭으로 가서 고급 공유를 누르자. 공유 이름과 권한은 적절하게 정하자. 특정 PC에서는 내용 변경이 가능하도록 할 수도 있다.
클라이언트에서는 네트워크 드라이브 연결을 해서 공유한 항목을 탐색기에서 볼 수 있다. 네트워크 드라이브 연결을 눌러서 \\서버 컴퓨터의 이름\\공유한 폴더를 입력하고 계정과 암호를 적절하게 입력하면 끝.
* 공유기를 쓴다면, IP 주소를 반드시 고정해야 한다.[* 대부분의 공유기가 NAT + DHCP 환경이다. 서버의 내부 IP가 변경된다면 포트포워딩 설정을 다시 해야 한다. 서버의 경우 기억하기 쉽도록 192.168.0.100이나 192.168.0.200등으로 만들어 두자.] ipTime 공유기를 기준으로 한다. 네트워크 관리→내부 네트워크 설정에서 수동 IP 할당 설정을 하자. 서버 컴퓨터의 IP 주소를 보고 체크하여 추가를 누르면 끝.
* 이렇게 열심히 만들었지만 공유기 밖의 네트워크에서는 접속할 수 없다. 공유기가 있는 네트워크 내에서만 쓸 것이라면 상관 없겠지만, 그렇지 않은 경우가 있으니 일단 설정하도록 하자.
NAT→포트포워드 설정으로 가서 정의된 리스트에서 FTP를 설정, 서버 컴퓨터의 IP를 입력하고 추가하자. 이렇게 하면 외부에서 ftp://공유기의 내부 IP 주소를 입력하는 것으로 FTP 서버에 접근이 가능하다.
* 24시간 내내 켜둘 것이라면 별 상관 없겠지만, 그렇지 않은 경우를 대비해 WOL을 설정하자. 컴퓨터는 절대로 절전 모드로 들어가서는 안 된다. 절전 모드에 들어가지 않도록 하자. 전원 설정에서 절전 모드와 최대 절전 모드까지 걸리는 시간을 모두 없음으로 설정하자.
장치 관리자에서 네트워크 어댑터을 확장하고, 어댑터를 더블클릭하자. 전원 관리에서 첫번째 항목과 두번째 항목을 체크한다. 고급 항목에서 Wake on LAN이나 WOL은 일단 다 사용으로 하고 보자.[* 단, 사용중인 컴퓨터가 어느 제조업체이냐에 따라서는 이 방법 그대로 먹히지 않을수도 있으므로 해당 제조업체의 [[RTFM|메뉴얼을 참고해서]] 설정하면 된다.]
공유기에서 보안 기능→공유기 접속 관리에서 원격 관리 포트를 사용하게 하고, 원하는 포트를 입력하자.
특수기능→WOL에서 서버 컴퓨터의 MAC 주소를 쳐서 추가하면 끝.
==== [[FileZilla]] FTP Server ====
[[https://filezilla-project.org/download.php?type=server|#]]
[[Microsoft Windows|윈도우]]에서 가장 많이 쓰이고 검증된 [[FTP]] 클라이언트인 Filezilla의 서버 애플리케이션. 가벼우며 설정도 쉽고 표준을 제대로 지원한다. 접속량이 많아도 상당히 잘 버텨낸다.
윈도우 환경에서 백그라운드 서비스로 작동시킬 수 있으며, 서비스로 작동되기 때문에 FileZilla Server Interface라는 원격 서버접속 앱을 제공한다. 물론 여러 서버를 관리한다던가 하는 게 아니라면 그냥 켜고 OK버튼만 누르면 된다.
==== 기타 프로그램 ====
[[Autoset]], APMSetup은 웹서버 구축과 데이터베이스 구축, PHP 문법 설치 등등을 원터치로 해결해 주는 프로그램이었다. 웹 서버를 설정하기 위해서 필요한 자질구레한 것들을 저 프로그램이 알아서 다 해주기 때문에 관련 지식이 전혀 없는 사람도 데이터베이스가 필요한 프로그램(ex:[[설치형 블로그]])을 굴리는 웹서버를 만들 수 있다는 장점이 있다. 여기 있는 대로 하면 개인 FTP 서버가 완성된다.
2020년 이후에는 두 프로그램 모두 지원이 중단되었기 때문에 사용을 권장하지 않는다. 보안 취약점에 노출되어 악성코드에 감염되거나 개인정보가 유출될 수 있다. 특히 APMSetup은 과거 공식 홈페이지 도메인을 [[랜섬웨어]] 개발자가 매입해 버렸기 때문에 단순 설치만으로도 랜섬웨어 감염 위험이 있다. [[https://m.blog.naver.com/checkmal/221130133104|#]]
=== Under [[macOS]] ===
기존에 애플이 판매하던 서버 제품으로는 [[Mac Pro]] Server, [[Mac mini]] Server 제품들과 1U [[랙마운트]] 수납형 서버인 Xserve가 있었으나 2012년을 기점으로 전부 단종되었으며 서버처럼 쓰라고 내놓는 제품은 2019년형 [[Mac Pro]] 랙마운트(5U) 제품 뿐이나 기업이나 일반인이나 대부분 Mac Mini 를 서버처럼 쓰는 경우가 대다수다[* 맥 프로의 경우 랙마운트 제품은 부피도 부피지만 그정도 가격대면 Dell EMC나 Lenovo, 휴렛 팩커드의 전용 서버 블레이드를 구매 가능할 정도로 가격이 비싼지라 서버로 쓰겟다고 맥 프로 블레이드를 구매하는건 수지타산이 맞지 않으며 일반적인 회사들에서도 큰 규모를 갖출 필요가 없고 가격도 저렴한 Mac Mini를 대충 굴리는 경우가 많으며 이마저도 최신 버전에서는 확장성이 매우 제한되는지라 채용처가 더 줄어드는 중이다. ] Xserve는 중고품을 이베이 등지에서 원래 가격의 1% 이하로[* 2010년에 $15,000 가량 하던 사양의 제품을 $100 정도에 구매하는 것이 가능하다.] 업어올 수도 있으며 스펙도 아직 꽤나 좋은 편이나, 1U 크기의 특성상 엄청나게 시끄러워서 개인의 경우 지하실이 딸린 단독주택이 없으면 시도하지 않는 것이 정신건강에 이롭다.
[[해킨토시]]는 아직 문제가 많은 편이다.
OS X Server가 엄청 까이긴 하나 잘 쓰면 뛰어난 서버로 활약한다. 애플 전용 환경에서는 매우 뛰어난 서버가 될 수 있다.
* 1. "시스템 환경설정"에 들어간다.
* 2. "공유"를 누른다.
* 3. "웹 공유"에 체크하고 창을 닫는다.
* 4. [[PROFIT!]]
맥 앱스토어에서 'macOS Server' 애플리케이션을 다운로드 받으면 아주 기본적인 지식만 있어도 클릭 몇 번으로 각종 서비스 서버를 설정할 수 있을 정도로 매우 간단하다. 웹 서버 데몬을 올리는건 클릭 몇 번이면 가능하다. 다만 여기에 [[도메인]]을 물려준다거나 하는 설정은 별도로 해야 한다.
맥도 유닉스 계열 OS이기 덕분에 리눅스 서버처럼 터미널로 운영할 수 있다. OS X Server는 이것을 GUI로 정리한 것일 뿐이다. 세밀한 설정은 터미널로만 변경할 수 있으니 주의하자. 또한 리눅스에 익숙한 유저는 오히려 윈도우 서버보다 친밀감을(?) 느낄 수 있다.
또한 애플 클라이언트 환경에서 유용한 기능이 돋보인다. 서버가 업데이트 캐시에 미리 다운받은 패키지를 사용해서 인터넷 연결 없이도(!) 클라이언트 업데이트가 가능하다.[* 모든 애플 기기에 적용된다. 즉, 아이폰도 사용할 수 있다.] 개인용 OS를 기반으로한 서버의 장점이다. [[그리드 컴퓨팅]] 기능도 있는데 이것을 사용하는 [[Final Cut Pro]]와 컴프레서 같은 프로그램은 간단하게 작업속도를 향상시킬 수 있다.
그러나 macOS Server 애플리케이션이 업데이트를 거듭할 때마다 기능이 줄어들고 있어 사용자들의 반발이 이만저만이 아니다. 맥 앱스토어의 별점은 폭락한 지 오래고 기존 사용자들도 리눅스 등으로 이주하는 상황. 설상가상으로 기능이 아예 빠지는 것이기 때문에 터미널로도 접근할 수 없다. 전부 애플 제품 전용 기능들이었기 때문.
=== [[DIY|서버 프로그램을 직접 만들기]] ===
만들려는 서버가 웹 서버라면 웹용 서버 라이브러리를 가져다 쓰면 된다. 고부하를 견딜 수는 없지만 보통 이들 서버 소프트웨어는 클라우드 환경에서 로드 밸런서의 지원을 상정하기 때문에 별 문제가 되지 않는다.
그러나 클라우드 서비스에서 제공하는 부하 분산 및 보안 지원을 받지 않고 '''직접''' [[TCP/IP]]의 깊숙한 곳까지 건드리려 한다면 그때는 이야기가 확 달라진다. 네트워크 전문 지식을 가진 고급 [[프로그래머]]가 필요해지는데 전 세계를 다 뒤져도 이만큼의 네트워크 프로그래밍이 가능한 사람은 흔치 않다.
네트워크같은 비동기 병렬처리를 구현할 때 C/C++은 생산성이 크게 떨어진다. [* 단, 이는 어떻게 구현하는가에 따라 달려있다. 비동기 프로그래밍을 지원받지 않고 직접 비동기 처리를 구현한다면, 버그도 많고 생산성도 최악일 것이다. 그러나 별도의 비동기 프로그래밍 라이브러리를 (예를 들면, Boost.Coroutine이 있다.) 사용한다면 비동기 프로그래밍을 지원받을 수 있기 때문에 큰 문제는 아니다. C++20부터는 아애 비동기 프로그래밍에 대한 지원이 표준 라이브러리에 추가될 예정이다.] 과거에는 언어의 종류가 한정적이어서 C/C++을 주로 사용했지만, 현대에는 [[Go(프로그래밍 언어)|Go 언어]]나 [[Erlang]]같이 비동기 네트워크 프로그래밍을 직접 지원하는 언어도 있고, 이러한 언어를 사용해서 생산성을 높일 수 있다. 굳이 서버 소프트웨어를 자작해야 한다면 네트워크 프로그래밍을 지원하는 언어 및 프레임워크를 반드시 고려하자. 2년 분의 작업량이 한 달로 줄어드는 기적을 볼 수도 있다.[* 그러나 OSI레이어의 3레벨 아래쪽의 저수준 네트워크 스택을 개발할 때는 C언어가 올바른 선택이다. 이쯤 가면 기계제어의 영역에 들어가기 때문이다.]
타인이 만들어 놓은 '''충분히 검증된''' 프로그램이 있다면 가능한 가져다가(또는 사다가) 쓰는 게 나은 선택이다. 이미 존재하는 프로그램을 다시 비슷하게 만드는 행동은 취미나 학습, 연구개발 등의 목적이 아니라면 가치가 무의미한 삽질에 불과하다.
참고로 직접 서버 프로그램을 만들거나 라이브러리를 이용하는 것의 장점은 '''활용도가 무궁무진'''하다는 것이다.
다음은 유명한 서버 라이브러리이다.
* Node.js: express
=== 운영체제의 선택 ===
[[Ubuntu]]나 [[CentOS]]등의 [[Linux|리눅스]]를 쓴다면, 복잡한 프로그램 필요없고 그냥 LAMP패키지 찾아서 설치 누르면 끝이다. [[Linux|리눅스]]는 원래가 서버에 최적화된 OS이다. 따라서 서버용으로 사용할 때의 강력함과 편의성은 타의 추종을 불허한다. 덤으로 극강의 안정성까지 갖추고 있다. 명령어 한 줄[* 우분투의 경우 apt-get -y install lamp-server^]로 끝이다. 홈페이지 찾아가서 다운받을 필요 없이 리눅스는 알아서 패키지를 인터넷에서 찾아서 다운받고 설정하고 설치까지 끝낸다. 제대로 운영하려면 설정파일을 만져야 한다지만 그건 윈도우쪽도 마찬가지. 물론 설치 끝난 이후에 들어가는 수고는 둘 다 비슷비슷하다. 오히려 익숙한 윈도우 환경에서 탐색기와 메모장 켜놓고 작업하는 게 이후 유지보수 측면에서 나을 수도 있다.
윈도에서는 XAMPP 등은 클릭 몇 번이면 끝나지만, 홈페이지 가서 다운로드 하는 과정이 필요하다.--그냥 'IIS+PHP+마리아DB'를 쓰자.--
== [[서버리스 아키텍처|서버 구축 없이 서버 만들기]] ==
[include(틀:상세 내용, 문서명=서버리스 아키텍처)]
== 서버와 속인주의 및 속지주의 ==
법적으로, [[사이버 범죄]]를 수사할 때 서버의 소재 국가에 따라서 어느 나라 법을 적용하느냐가 달라지며 이것도 [[속지주의]]의 일종이다. [[나무위키]]는 서버와 운영사가 해외에 위치해 있어 사이트에 대해서는 일반적으로 대한민국 법률을 적용할 수 없다. 하지만 작성자가 대한민국 국민이거나 대한민국에 있다면 작성자에 대해서는 한국 법률이 적용된다.
해당국의 동의 없이 국외에 서버가 있는 사이트에 대해 직접적으로 수사한다면 문제가 될 수 있다. 상대국에서는 정당한 수사가 아니라 [[해킹]]으로 간주한다. 또한 사이트 운영사가 서버 소재지의 법적 요건을 무시한 채 한국 수사당국에 정보를 제공한다면 서버 소재지의 개인정보 보호법에 저촉될 수 있다.
[[분류:컴퓨터]][[분류:네트워크]]