Windows 10의 WSL (Ubuntu 18.04)에서 Nginx, MySQL, PHP 7.3을 설치하고 새로운 Drupal9의 개발 환경을 구성해 보려고 합니다.
먼저 리눅스 배포판을 갱신하고 업데이트 합니다.
sudo apt-get update && sudo apt-get upgrade
sudo apt install nginx
sudo service nginx start
이제 리눅스나 윈도우의 인터넷 브라우저를 띄우고 http://localhost 를 접근하면 Nginx Welcome 페이지를 볼 수 있습니다. 윈도우에서 접근이 가능한 이유는 WSL을 위한 Hyper-V Virtual Ethernet Adapter를 사용하고 있기 때문이죠.
sudo apt install mysql-server
sudo usermod -d /var/lib/mysql/ mysql
sudo service mysql start
작성 시점(2020-10-04)에서 설치 시 문제가 발생합니다. WSL의 버그로 보여지며 이것을 해결하기 위해서는 아래 Troubleshooting에서 확인합니다.
mysql의 root에는 기본적인 패스워드가 없습니다. 패스워드 설정을 다음과 같이 진행합니다.
sudo mysql_secure_installation ## 패스워드 설정
이때 VALIDATE PASSWORD PLUGIN을 최초에 물어보는데 no를 하고 패스워드를 입력합니다. 로컬 환경에는 필요 없기 때문이죠. 😏
Drupal 9은 최소한 PHP 7.3버전의 환경을 요구합니다. 다음과 같이 설치합니다.
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php7.3 php7.3-fpm php7.3-mysql php7.3-curl php7.3-json php7.3-mbstring php7.3-xml php7.3-bcmath
sudo service php7.3-fpm start
이제 필요한 준비가 완료 되었습니다. 필요시 다음과 같은 내용을 ~/.bashrc나 ~/.zshrc에 넣어 터미널 시작 시 서버를 시작시킬 수 있습니다.
sudo /etc/init.d/nginx start
sudo /etc/init.d/php7.3-fpm start
sudo /etc/init.d/mysql start
PHP-FPM서비스를 사용할 수 있도록 다음과 같이 수정합니다.
sudo vi /etc/nginx/sites-available/default
다음 내용을 찾아서 변경합니다.
server {
index index.php index.html index.htm index.nginx-debian.html;
...
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# Make sure unix socket path matches PHP-FPM configured path above
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
# Prevent ERR_INCOMPLETE_CHUNKED_ENCODING when browser hangs on response
fastcgi_buffering off;
}
...
}
서버를 다시 시작합니다.
sudo service nginx restart
다음과 같이 PHP 정보를 띄우도록 테스트 합니다.
sudo vi /var/www/html/info.php
<?php
phpinfo();
?>
이제 info.php를 인터넷 브라우저에서 실행해봅니다.
이제 서버에서 LEMP가 뿌리는 로그를 다음 파일을 통해 확인하면서 디버깅 할 수 있습니다.
MySQL: /var/log/mysql/error.log
Nginx: /var/log/nginx/error.log
PHP: /var/log/php7.3-fpm.log
PHP-FPM은 성능을 이유로 로깅을 위한 설정이 기본적으로 비활성화 상태일 수 있습니다. 다음 파일에서 활성화 합니다.
sudo vi /etc/php/7.3/fpm/pool.d/www.conf
catch_workers_output = yes ## 코멘트 해제
sudo nano /etc/php/7.2/fpm/php-fpm.conf
log_level = notice ## 로그레벨 범위를 지정
## 설정을 적용하기 위해 재시작
sudo service php7.3-fpm reload
WSL을 사용하는 경우 myql을 시작하려고 할 때 다음과 같은 에러 발생
╰─❯ sudo service mysql start
* Starting MySQL database server mysqld
No directory, logging in with HOME=/
mkdir: cannot create directory ‘//.cache’: Permission denied
다음과 같이 해결합니다.
## /etc/profile.d/wsl-integration.sh 파일 편집
# Check if we have HOME folder
if [ "${HOME}" = "/" ]; then
return
fi
WSL_INTEGRATION_CACHE=$HOME/.cache/wslu/integration`
...
가끔 시작하지 못하는 경우 윈도우에서 이미 mysql이 구동중일 수 있습니다. 윈도우 혹은 리눅스의 포트번호를 변경합니다.
Ubuntu-18.04의 WSL에서는 다음과 같은 에러가 발생할 수 있습니다.
Cannot open /proc/net/unix: No such file or directory
/var/log/mysql/error.log
를 살펴보면 WSL에서는 AIO 인터페이스가 지원되지 않는 경우를 확인할 수 있습니다.
/etc/mysql/conf.d/no_native_aio.conf을 생성하고 다음과 같이 작성해 둡니다.
[mysqld]
innodb_use_native_aio = 0
이제 mysql을 구동시켜 봅니다.
sudo service mysql start
참고: https://stackoverflow.com/questions/39281594/error-1698-28000-access-den...
WSL에서는 UNIX 소켓 구현에 버그가 있는 듯 합니다. 따라서 mysql의 auth_socket을 기본적으로 인증을 사용하고 있는데 다음과 같이 변경해야 합니다.
$ sudo mysql -u root # 최초에는 sudo를 사용해 접근해야 함
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------------------+
| User | plugin |
+------------------+-----------------------+
| root | auth_socket |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
$ sudo mysql_secure_installation ## 암호를 다시 설정하기
"If you would thoroughly know anything, teach it to other."
- Tryon Edwards -