리눅스용 윈도우 하위 시스템(WSL) Ubuntu 앱으로 로컬 웹서버

MS가 Windows System for Linux(WSL. 리눅스용 윈도우 하위 시스템)를 발표하면서 윈도우에 리눅스를 품었고, 몇 번의 관련 윈도우 패치를 거치면서 Microsoft Store에 Ubutu 앱을 배포하였죠.

저는 윈도우 노트북을 사용하고 있고, Wamp 또는Xampp 로 로컬 웹서버(apache2, php, mysql)를 구성하고, ssh 접속은 Putty와 Pageant를 이용하였습니다.
이번에 WSL을 적용하고 Ubuntu 앱으로 apache2, php7.0 MaiaDB를 설치하여 윈도우 노트북에 로컬 웹서버를 구성하여 사용해 보았습니다.

  • 편리한 ssh 콘솔 접속
  • 리눅스 기반의 실제 서버와 똑같은 로컬 작업 환경

간단한 후기 겸 팁 몇가지 남깁니다.

 

윈도우 탐색기에서 리눅스가 설치된 폴더로 접근할 수 없습니다.

윈도우 하위시스템 리눅스(이하 WSL) 즉, Ubuntu 앱에서 윈도우 폴더에 접근할 수 있지만, 윈도우 탐색기에서는 리눅스 폴더는 접근할 수 없습니다. 이때 사용하는 명령어는 cd mnt 입니다. cd /mnt/c 로 C 드라이브의 폴더에 접근하여 파일의 복사,이동,삭제… 등 모든 리눅스 명령어가 가능해 집니다. rm -fr 명령어는 매우 조심해야겠죠? ^^

 

 

Apache2 문서 루트 경로

웹서버로 apache를 설치했다면 문서 루트는 /var/www 입니다. 그런데 윈도우 탐색기에서 리눅스 폴더인 /var/www는 접근할 수 없기 때문에 윈도우에서 사용하는 에디터에서 곤란해 집니다. 이는 심볼릭 링크로 해결합니다.

아래는 아파치 설정에서 문서 루트를 /var/www/html/projects 로 설정하고, 실제 그 폴더 위치는 내 컴퓨터의 C:/projects 인 경우입니다. 저는 로그 파일 위치까지 같은 곳으로 설정했습니다.

 

ln -s /mnt/c/projects /var/www/html/projects

 

 

이제 C:/projects에서 에디터로 로컬 파일 작업하면 됩니다. Git 저장소 위치도 당연히 동일하겠죠.

테스트겸 <?php phpinfo(); ?> 파일을 작성해 호출해 보았습니다. 리눅스에서 파일 위치는 /var/www/html/projects/index.php 이지만, 내 컴퓨터에서 실제 위치는 C:/projects/index.php 입니다.

 

 

Ubuntu 앱 실행시 apache와 mysql 실행 스크립트

현재 WSL은 자동 실행이 지원되지 않는다고 합니다. 이후 패치한다는… 따라서 윈도우에서 Ubuntu 앱을 실행할때 apache와 mysql을 수동으로 실행해 주어야 합니다. 아래의 스크립트를 참고하세요. 저는 startserver.sh 파일로 파일명을 만들고  apache와 mysql을 실행합니다.

 

#!/bin/sh
#run apache
echo 'Starting Apache'
echo | sudo -S apachectl start > /dev/null && echo 'Apache Started'
echo 'starting Mysql'
echo | sudo -S service mysql start > /dev/null && echo 'Mysql Started'

$SHELL

 

ssh 간단 접속. putty와 pageant에서 해방.

윈도우에서 ssh 접속하려면 보통 다음의 단계를 거칩니다.

  1. PuTTYgen으로 pem 파일을 ppk로 바꾸기.(이 글의 4.서버접속 참고)
  2. Pageant 실행해서 [add key]로 ppk 로딩.
  3. Putty 실행해서 접속

Ubunth 앱은 cli 환경이기에 ssh 접속이 타이핑으로 진행됩니다. 윈도우에서 ppk를 사용하지 않고도 pem 키파일 그대로 사용합니다. 명령어는 다음과 같습니다. 맥이나 리눅스에서 하는 방법 그대로 입니다.

ssh -i abcd.pem ubuntu@12.34.56.78

(ssh -i 폴더전체경로/암호키파일명.pem 서버사용자명@서버IP주소)

 

한가지 더!!!

저는 관리 중인 서버가 10개가 넘습니다. 전부 다 외우고 있지도 못하지만 긴 타이핑이 귀찮습니다. ssh abcd 를 타이핑하는 것만으로 접속해 보겠습니다. 방법은 윈도우나 맥이나 똑같습니다.

Ubuntu 앱을 실행하면 현재 위치는 당연히 /home/user명 이겠죠.

  1. .ssh 폴더에 config 파일을 만들고 440 퍼미션을 줍니다.(chmod 440 config)
  2. pem 파일을 적당한 위치에 저장하고 400 퍼미션을 줍니다. (chmod *.pem)

다음은 config 파일 내용으로 abcd서버와 efgh서버의 예입니다.

Host abcd
HostName 12.34.56.78
User ubuntu
IdentityFile ./keys/abcd.pem

Host efgh
HostName 34.56.78.90
User ec2-user
IdentityFile ./keys/abcd.pem

 

참고로..

  • 저는 pem 키파일을 keys 폴더를 만들어 복사했지만, 만약 .ssh 폴더에 둔다면 경로는 ./.ssh/abcd.pem 이겠죠. ~/.ssh/abcd.pem으로 적어도 의미는 비슷합니다.
  • .ssh 폴더는 숨김 폴더라서 ls 명령어에 -a 옵션을 붙여야 폴더가 보입니다. (ls -la)
  • Host는 기억하기 편한 도메인명을 사용하면 좋겠죠.
  • User는 위의 경우 ubuntu는 우분투를 설치한 서버이고, ec2-user는 아마존 리눅스를 설치한 서버의 예입니다.
  • HostName은 ip 대신 도메인명을 넣으면 더 편하겠죠.

이제 Ubuntu 앱을 실행 후 ssh abcd 타이핑으로 서버에 접속합니다.

ssh abcd

 

———————————————————————–
이상. 이후 패치되거나 사용 후기가 더 생기면 추가하겠습니다.
———————————————————————–

아래 내용은 WSL 설치와 관련된 내용이며 이미 많은 포스트가 있으니 구글링이 도움이 되겠고, MS의 공식 페이지 Windows Subsystem for Linux Documentation 로 대신합니다. 중요 사항 체크를 위해 스샷 몇 장만 남깁니다.

윈도우 10의 Microsoft Store에 정식 등록된 Ubuntu, openSUSE, Fedora 중에서 Ubuntu를 설치합니다. 저의 경우 대부분 서버를 AWS에서 Ubuntu 14 및 16, Amazon Linux로 구성하였기에 실제 서버와 로컬 개발 환경을 동일하게 구성하고자 하는 목적입니다.

 

 

 

  • Ubuntu 앱은 2017년 10월을 기준으로 Windows 10 버전 16215.0 이상의 64비트 윈도우에만 설치 가능합니다.
  • Windows 기능에서 Linux용 Windows 하위 시스템(WSL)을 체크합니다.

 

 

베타 버전때와는 달리 Microsoft Store에서 Ubuntu 앱을 선택해서 다운 설치하면 됩니다. 재부팅을 거치고 ubuntu 앱을 실행하면 이제 윈도우 10 속의 리눅스를 사용할 수 있습니다.

저는 Ubuntu16에 apache2, maria-db, php7로 로컬 웹서버를 위한 구성을 하고 phpmyadmin까지 설치하였습니다. 개발 환경은 각자의 선택이겠죠.

 

apt-get update

apt-get upgrade

apt-get install apache2

apt-get install php

apt-get install libapache2-mod-php7.0 php-mcrypt php-mbstring php-gd php-crul php-xml

apt-get install mariadb-server

apt-get php-mysql

apt-get phpmyadmin

 

 

Leave a Reply

Your email address will not be published.