WSL Ubuntu + XAMPP 설치·설정 & 트러블슈팅 — 대화 정리 (Dark Mode, Tistory)
WSL2 Ubuntu에서 XAMPP(PHP+MariaDB)를 설치·설정하며 겪은 이슈와 해결책을 Q&A 형식으로 정리했습니다. (Dark Mode)
목차
WSL Ubuntu 시스템에 XAMPP(PHP + MariaDB)를 구성하려면?
두 가지 경로가 있음: (1) WSL Ubuntu 내부에 XAMPP 설치(권장), (2) Windows에 XAMPP 설치 후 WSL에서 접근.
# systemd 활성화
sudo nano /etc/wsl.conf
[boot]
systemd=true
# PowerShell에서
wsl --shutdown
# XAMPP 설치 (버전은 공식 사이트에서 다운로드 링크주소 확인:변경될 수 있음.)
wget https://downloads.apachefriends.org/xampp/xampp-linux-x64-8.2.x-0-installer.run
chmod +x xampp-linux-x64-8.2.x-0-installer.run
sudo ./xampp-linux-x64-8.2.x-0-installer.run
# 시작/중지/상태
sudo /opt/lampp/lampp start
sudo /opt/lampp/lampp stop
sudo /opt/lampp/lampp status
웹 루트: /opt/lampp/htdocs
. DB 보안 스크립트(/opt/lampp/lampp security
) 실행 후 계정/권한 구성.
MySQL 외부 접속 허용 & 포트 확인
# /opt/lampp/etc/my.cnf
[mysqld]
bind-address = 0.0.0.0
# 재시작
sudo /opt/lampp/lampp restart
# 계정/권한
/opt/lampp/bin/mysql -u root -p
CREATE USER 'dev'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydb.* TO 'dev'@'%';
FLUSH PRIVILEGES;
# 포트 확인
SHOW VARIABLES LIKE 'port';
vhost 설정 후 접근 거부(403)
- 샘플 dummy vhost 제거
- <Directory>에
Require all granted
,AllowOverride All
,Options Indexes FollowSymLinks
- 인덱스 파일 없고
-Indexes
면 403 - 심볼릭 링크 부모 폴더에 실행권(x) 필요
sudo /opt/lampp/bin/httpd -S
tail -n 200 /opt/lampp/logs/error_log
dummy-host.example.com 경고
<VirtualHost *:80>
ServerName localhost
DocumentRoot "/opt/lampp/htdocs"
<Directory "/opt/lampp/htdocs">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName myapp.local
DocumentRoot "/opt/lampp/htdocs/myapp/public"
<Directory "/opt/lampp/htdocs/myapp/public">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
vhost 예시 점검
<VirtualHost *:80>
ServerName myapp
DocumentRoot "/opt/lampp/htdocs/myapp"
</VirtualHost>
# C:\Windows\System32\drivers\etc\hosts
127.0.0.1 myapp.local myapp
<VirtualHost *:80>
ServerName myapp.local
ServerAlias myapp
DocumentRoot "/opt/lampp/htdocs/myapp"
<Directory "/opt/lampp/htdocs/myapp">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
DirectoryIndex index.php index.html
</Directory>
</VirtualHost>
httpd -S 매칭 확인
매칭은 정상. 403이면 인덱스/권한/.htaccess 문제.
namei -l 권한 이슈
sudo chmod 755 /home/myuser # 간단
sudo chmod 711 /home/myuser # 보수적
sudo setfacl -m u:daemon:x /home/myuser
sudo setfacl -m u:daemon:rx /home/myuser/projects
sudo setfacl -R -m u:daemon:rx /home/myuser/projects/www
80포트 기본 루트를 myapp으로
<VirtualHost *:80>
ServerName localhost
ServerAlias 127.0.0.1 myapp myapp.local
DocumentRoot "/opt/lampp/htdocs/myapp"
<Directory "/opt/lampp/htdocs/myapp">
Require all granted
DirectoryIndex index.php index.html
</Directory>
</VirtualHost>
PHP 세션 Permission denied
sudo mkdir -p /opt/lampp/var/sessions
sudo chown daemon:daemon /opt/lampp/var/sessions
sudo chmod 1733 /opt/lampp/var/sessions
# php.ini
session.save_path = "/opt/lampp/var/sessions"
# 또는
sudo mkdir -p /home/myuser/projects/sessions
sudo chgrp daemon /home/myuser/projects/sessions
sudo chmod 2770 /home/myuser/projects/sessions
sudo setfacl -m u:daemon:rwx /home/myuser/projects/sessions
sudo chmod 711 /home/myuser
sudo chmod 711 /home/myuser/projects
PHP 8 Optional parameter 경고(PHP 8.x부터 함수 파라미터 순서 검사를 강화)
// 잘못된 예
function sendSomething($send_email = false, $title, $body = '') { ... }
// 수정
function sendSomething($title, $body = '', $send_email = false) { ... }
PHP 에러를 localhost-error.log에 기록
# php.ini
log_errors = On
# error_log를 비우면 vhost ErrorLog로 기록
# vhost에서 강제
php_admin_flag log_errors On
php_admin_value error_reporting E_ALL
php_admin_flag display_errors Off
php_admin_value error_log "/opt/lampp/logs/localhost-error.log"
DB 접속 Access denied
// mysqli
$mysqli = new mysqli('127.0.0.1', 'user', 'password', 'mydb', 3306);
// PDO
$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=mydb;charset=utf8mb4',
'user','password',[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION]);
# 권한
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydb.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
설치된 PHP에서 Deprecated 숨기기
# php.ini
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
display_errors = Off
log_errors = On
error_log = /opt/lampp/logs/php_error_log
'개발환경' 카테고리의 다른 글
Docker (2) | 2025.08.11 |
---|---|
Sublime Text2 - Package Control 설치하기 (0) | 2016.04.13 |
난중읽기] git 관련 (0) | 2013.10.06 |