Ubuntu에 WordPress 설치하기 – Apache, MySQL, PHP부터 백업까지
이 글은 Ubuntu 26.04 LTS 서버에 Apache, MySQL, PHP를 설치하고 WordPress를 구축하는 전체 과정을 정리한 가이드입니다. WP-CLI 설치, rclone 백업, Cloudflare Tunnel 설정까지 포함합니다.
환경 정보: Ubuntu 26.04 LTS / 커널 7.0.0-15-generic / PHP 8.5.4 / MySQL 8.4.8 / Apache 2.4.66
1. 필수 패키지 설치
WordPress를 운영하려면 웹서버(Apache), 데이터베이스(MySQL), 서버 사이드 언어(PHP)가 필요합니다. PHP 확장 모듈도 함께 설치합니다.
1-1. Apache + MySQL + PHP 한 번에 설치
sudo apt install -y apache2 mysql-server php8.5 php8.5-mysql php8.5-xml php8.5-curl php8.5-mbstring php8.5-gd php8.5-zip
Reading package lists… Done
Building dependency tree… Done
apache2 is already the newest version (2.4.66-2ubuntu2.1).
mysql-server is already the newest version (8.4.8-0ubuntu1).
php8.5 is already the newest version (8.5.4-0ubuntu1.1).
php8.5-mysql is already the newest version (8.5.4-0ubuntu1.1).
php8.5-xml is already the newest version (8.5.4-0ubuntu1.1).
php8.5-curl is already the newest version (8.5.4-0ubuntu1.1).
php8.5-mbstring is already the newest version (8.5.4-0ubuntu1.1).
php8.5-gd is already the newest version (8.5.4-0ubuntu1.1).
php8.5-zip is already the newest version (8.5.4-0ubuntu1.1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
2. 서비스 시작
설치한 Apache와 MySQL 서비스를 시작하고, 부팅 시 자동 시작되도록 설정합니다.
sudo systemctl enable --now apache2 mysql
Synchronizing state of apache2.service with SysV service script…
apache2.service is enabled.
Synchronizing state of mysql.service with SysV service script…
mysql.service is enabled.
서비스 상태를 확인합니다:
systemctl is-active apache2 mysql
active
active
3. MySQL 데이터베이스 생성
WordPress가 사용할 데이터베이스와 사용자를 생성합니다.
sudo mysql -e "CREATE DATABASE IF NOT EXISTS wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
sudo mysql -e "CREATE USER IF NOT EXISTS 'wpuser'@'localhost' IDENTIFIED BY '********';"
sudo mysql -e "GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';"
sudo mysql -e "FLUSH PRIVILEGES;"
(출력 없음 – 정상 완료)
데이터베이스가 생성되었는지 확인합니다:
sudo mysql -e "SHOW DATABASES;"
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| sys |
| wordpress |
+——————–+
4. WordPress 다운로드 및 설치
WordPress 최신 버전을 다운로드하고, 웹 디렉토리에 설치합니다.
cd /tmp
curl -O https://wordpress.org/latest.tar.gz
sudo tar -xzf latest.tar.gz -C /var/www/html/
sudo chown -R www-data:www-data /var/www/html/wordpress
sudo chmod -R 755 /var/www/html/wordpress
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 25.1M 100 25.1M 0 0 45.2M 0 0:00:00 0:00:00 –:–:– 45.2M
설치 결과를 확인합니다:
ls -la /var/www/html/wordpress/wp-config*.php
-rwxr-xr-x 1 www-data www-data 3339 Aug 12 2025 /var/www/html/wordpress/wp-config-sample.php
-rwxr-xr-x 1 root root 3769 Jun 1 09:26 /var/www/html/wordpress/wp-config.php
5. wp-config.php 설정
샘플 파일을 복사하고, 데이터베이스 접속 정보를 설정합니다.
cd /var/www/html/wordpress
sudo cp wp-config-sample.php wp-config.php
sudo sed -i "s/database_name_here/wordpress/" wp-config.php
sudo sed -i "s/username_here/wpuser/" wp-config.php
sudo sed -i "s/password_here/********/" wp-config.php
$ grep -E “DB_NAME|DB_USER|DB_PASSWORD” /var/www/html/wordpress/wp-config.php | head -3
define( ‘DB_NAME’, ‘wordpress‘ );
define( ‘DB_USER’, ‘wpuser‘ );
define( ‘DB_PASSWORD’, ‘********’ );
6. 보안 Salt 추가
WordPress 인증 토큰에 사용되는 고유한 Salt 키를 생성합니다. WordPress.org API에서 자동으로 생성할 수 있습니다:
curl -s https://api.wordpress.org/secret-key/1.1/salt/
define(‘AUTH_KEY’, ‘고유한 랜덤 문자열‘);
define(‘SECURE_AUTH_KEY’, ‘고유한 랜덤 문자열‘);
define(‘LOGGED_IN_KEY’, ‘고유한 랜덤 문자열‘);
define(‘NONCE_KEY’, ‘고유한 랜덤 문자열‘);
define(‘AUTH_SALT’, ‘고유한 랜덤 문자열‘);
define(‘SECURE_AUTH_SALT’, ‘고유한 랜덤 문자열‘);
define(‘LOGGED_IN_SALT’, ‘고유한 랜덤 문자열‘);
define(‘NONCE_SALT’, ‘고유한 랜덤 문자열‘);
생성된 내용을 wp-config.php의 기존 Salt 부분에 붙여넣으면 됩니다.
7. Apache 가상호스트 설정
WordPress 디렉토리를 Apache의 기본 사이트로 설정합니다.
7-1. 가상호스트 파일 생성
sudo nano /etc/apache2/sites-available/wordpress.conf
<VirtualHost *:80>
DocumentRoot /var/www/html/wordpress
<Directory /var/www/html/wordpress>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
7-2. 사이트 활성화 및 Apache 재시작
sudo a2ensite wordpress.conf
sudo a2dissite 000-default.conf
sudo a2enmod rewrite
sudo systemctl restart apache2
Enabling site wordpress.
Site 000-default disabled.
Enabling module rewrite.
To activate the new configuration, you need to run:
systemctl restart apache2
7-3. 동작 확인
curl -s -o /dev/null -w "%{http_code}" http://localhost
200 ← HTTP 200 OK, WordPress가 정상 응답합니다

8. WP-CLI 설치 (보너스)
WP-CLI는 WordPress를 터미널에서 관리할 수 있는 커맨드라인 도구입니다. 플러그인 설치, 업데이트, 데이터베이스 관리 등을 명령어 한 줄로 처리할 수 있습니다.
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
% Total % Received % Xferd Average Speed Time
100 11.2M 100 11.2M 0 0 28.5M 0 0:00:00
설치를 확인합니다:
wp --info
OS: Linux 7.0.0-15-generic x86_64
Shell: /bin/bash
PHP binary: /usr/bin/php8.5
PHP version: 8.5.4
php.ini used: /etc/php/8.5/cli/php.ini
MySQL binary: /usr/bin/mysql
MySQL version: mysql Ver 8.4.8-0ubuntu1 for Linux on x86_64 ((Ubuntu))
WP-CLI root dir: phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI phar path: phar:///usr/local/bin/wp
WP-CLI version: 2.12.0

9. rclone 설치
rclone은 클라우드 스토리지(Google Drive, Dropbox 등)와 파일을 동기화하는 도구입니다. WordPress 백업을 클라우드에 자동 업로드할 때 사용합니다.
sudo apt install -y rclone
Reading package lists… Done
rclone is already the newest version (1.74.2).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
설치를 확인합니다:
rclone version
rclone v1.74.2
– os/version: ubuntu 26.04 (64 bit)
– os/kernel: 7.0.0-15-generic (x86_64)
– os/type: linux
– os/arch: amd64
10. 자동 백업 스크립트
WordPress 파일과 데이터베이스를 자동으로 백업하고, rclone으로 클라우드에 업로드하는 cron 스크립트입니다.
10-1. 백업 스크립트 생성
sudo nano /usr/local/bin/wp-backup.sh
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=”/tmp/wp-backup”
WP_DIR=”/var/www/html/wordpress”
mkdir -p $BACKUP_DIR
# 데이터베이스 백업
mysqldump -u wpuser -p’********’ wordpress > $BACKUP_DIR/db_$DATE.sql
# WordPress 파일 백업 (wp-content만)
tar -czf $BACKUP_DIR/files_$DATE.tar.gz -C $WP_DIR wp-content
# rclone으로 클라우드 업로드
rclone copy $BACKUP_DIR remote:wp-backups/ –max-age 1h
# 7일 이상된 로컬 백업 삭제
find $BACKUP_DIR -type f -mtime +7 -delete
echo “[$DATE] Backup completed” >> /var/log/wp-backup.log
10-2. 실행 권한 부여 및 cron 등록
sudo chmod +x /usr/local/bin/wp-backup.sh
sudo crontab -e
0 3 * * * /usr/local/bin/wp-backup.sh
11. Cloudflare Tunnel 설정
Cloudflare Tunnel을 사용하면 포트포워딩 없이도 외부에서 로컬 WordPress에 접속할 수 있습니다. 도메인 없이 임시 URL로 빠르게 테스트할 수도 있습니다.
11-1. cloudflared 설치
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o /tmp/cloudflared.deb
sudo dpkg -i /tmp/cloudflared.deb
Selecting previously unselected package cloudflared.
Setting up cloudflared (2026.5.2) …
cloudflared version 2026.5.2 (built 2026-05-27-10:38 UTC)
11-2. Quick Tunnel 실행 (임시 URL)
cloudflared tunnel --url http://localhost:80
2026-06-01T01:30:00Z INF Thank you for trying Cloudflare Tunnel
2026-06-01T01:30:00Z INF Requesting new quick Tunnel on trycloudflare.com…
2026-06-01T01:30:01Z INF +———————————————————–+
2026-06-01T01:30:01Z INF | Your quick Tunnel has been created! Visit it at (it may take some time to be reachable): |
2026-06-01T01:30:01Z INF | https://jarank.com |
2026-06-01T01:30:01Z INF +———————————————————–+
2026-06-01T01:30:01Z INF Cannot determine default configuration path
2026-06-01T01:30:01Z INF Connection registered connIndex=0 ip=198.41.192.xxx
12. wp-config.php 프록시 HTTPS 설정
Cloudflare Tunnel을 통해 HTTPS로 접속하면, WordPress 내부에서는 HTTP로 동작하기 때문에 리다이렉트 루프가 발생할 수 있습니다. 이를 방지하려면 wp-config.php에 프록시 설정을 추가해야 합니다.
sudo nano /var/www/html/wordpress/wp-config.php
/* Cloudflare Tunnel: trust proxy headers */
if (isset($_SERVER[“HTTP_X_FORWARDED_PROTO”]) && $_SERVER[“HTTP_X_FORWARDED_PROTO”] === “https”) {
$_SERVER[“HTTPS”] = “on”;
}
이 코드를 추가하면 Cloudflare Tunnel이 보내는 X-Forwarded-Proto: https 헤더를 WordPress가 인식하여 HTTPS 환경으로 정상 동작합니다.

13. 서비스 요약 + 경로 정리
서비스 상태 한눈에 보기
| 서비스 | 상태 | 버전 | 관리 명령어 |
|---|---|---|---|
| Apache | active | 2.4.66 | sudo systemctl status apache2 |
| MySQL | active | 8.4.8 | sudo systemctl status mysql |
| PHP | installed | 8.5.4 | php -v |
| WP-CLI | installed | 2.12.0 | wp --info |
| rclone | installed | 1.74.2 | rclone version |
| cloudflared | installed | 2026.5.2 | cloudflared version |
주요 경로 정리
| 경로 | 설명 |
|---|---|
/var/www/html/wordpress/ |
WordPress 설치 디렉토리 |
/var/www/html/wordpress/wp-config.php |
WordPress 설정 파일 (DB 접속, Salt, 프록시 설정) |
/var/www/html/wordpress/wp-content/ |
테마, 플러그인, 업로드 파일 |
/etc/apache2/sites-available/wordpress.conf |
Apache 가상호스트 설정 |
/etc/php/8.5/ |
PHP 설정 디렉토리 (cli/php.ini, apache2/php.ini) |
/usr/local/bin/wp |
WP-CLI 실행 파일 |
/usr/local/bin/wp-backup.sh |
자동 백업 스크립트 |

자주 쓰는 명령어
# Apache 재시작
sudo systemctl restart apache2
# MySQL 재시작
sudo systemctl restart mysql
# WordPress 플러그인 업데이트 (WP-CLI)
wp --path=/var/www/html/wordpress plugin update --all
# WordPress 코어 업데이트 (WP-CLI)
wp --path=/var/www/html/wordpress core update
# Cloudflare Tunnel 실행 (포그라운드)
cloudflared tunnel --url http://localhost:80
# 수동 백업 실행
sudo /usr/local/bin/wp-backup.sh