대부분의 서버 업체에서는 클릭 몇 번으로 쉽게 워드프레스를 설치 할 수 있습니다. 원하는 버전으로 설치 가능하도록 간편 설치 없이 LEMP로 워드프레스를 설치 하는 방법을 정리합니다. 그리고 워드프레스 설치 중 생길 수 있는 문제 상황에 대한 해결 방법까지 정리합니다.
LAMP- Linux, Apache, MySQL, PHP
LEMP- Linux, NGINX[Engine x] , MySQL, PHP

라이트 세일 APP + OS 옵션 기본 워드프레스는 Apache서버로 설치, nginx는 OS가 Debian 12으로 설치
OS를 Ubuntu 22.04로 하며 LEMP로 설치하기 위해서는 OS만 설치 한 후에 나머지 요소를 설치하며 진행해야 합니다.
그래서 OS only에 있는 Ubuntu 22.04로 인스턴스를 생성해서 작업을 진행합니다.
워드프레스 설치 환경
서버: Lightsail 5달러 플랜
OS: Ubuntu 22.04
PHP: 8.3.10
NGINX: 1.18.0
mariadb: 10.6.18
우분투 기본 설정
비밀번호 설정
Ubuntu 22.04 설치 시 root 계정이 ubuntu로 되어있음
sudo su -
passwd ubuntu
우분투 패키지 업데이트 업그레이드
sudo apt update
sudo apt upgrade
nginx 설치
sudo apt-cache policy nginx
sudo apt-get update
sudo apt-get install nginx
nginx -v #설치 버전 확인
문제 없이 설치가 된 후 브라우저에서 Public IP로 접속하면 Welcome nginx 라는 화면을 볼 수 있습니다.
기본적으로 nginx가 보여주는 첫 화면은 /var/www/html/ 디렉터리 안에 있는 html파일 또는 PHP파일이 화면에 보여집니다.
nginx에서 /etc/nginx/sites-available/default 파일 내에 있는 내용에 의해 PHP파일 또는 html파일을 실행하게 됩니다.
/etc/nginx/sites-enabled/ 과 /etc/nginx/sites-available/ 는 가상 호스팅 설정 파일을 포함하는 디렉토리
nginx 종료 실행 재시작
sudo service nginx stop
sudo service nginx start
sudo service nginx restart
아파치가 실행되는 경우 아파치 종료하고 삭제
sudo service --status-all #아파치 실행중인지 확인
sudo service apache2 stop
sudo apt-get remove apache2*
sudo apt-get --purge remove apache2*
sudo apt-get autoremove
sudo service apache-htcacheclean stop
sudo apt-get remove apache*
sudo apt-get --purge remove apache*
sudo apt-get autoremove
sudo apt update
sudo apt upgrade
PHP 설치
pHP 8.3 설치
sudo apt-get update
sudo apt-cache policy php #설치 가능한 버전 없으면 레포지토리 추가 필요
#레포지토리 추가
sudo apt-get install ca-certificates apt-transport-https software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php8.3-fpm
sudo apt-get install php8.3-cli php8.3-curl php8.3-gd php8.3-mysql php8.3-mbstring zip unzip
sudo apt-get install php8.3-zip php8.3-xmlrpc php8.3-gd php8.3-curl php8.3-intl php8.3-imagick php8.3-bcmath php8.3-memcached php8.3-mysql
sudo service php8.3-fpm start
php -v # 설치된 PHP 버전 확인
systemctl restart php8.3-fpm
/lib/systemd/systemd-sysv-install enable php8.3-fpm
php 버전 설정, 필요 업는 버전 삭제
sudo update-alternatives --config php #다른 버전 설치된게 있는지 확인 번호 누르고 엔터 누른게 default로 설정됨
sudo apt-get remove php5.6 #필요없는 버전 삭제
sudo apt-get remove php5.6-* #필요없는 버전의 모듈까지 삭
설치 후 php 버전 확인
nginx 설정 파일 수정
파일 권한 + 사용자 수정
sudo chgrp ubuntu /etc/nginx/sites-available/default
sudo chmod 664 /etc/nginx/sites-available/default
nginx가 php파일을 해석하기 위한 설정 파일의 권한 변경
vi sudo /etc/nginx/site-available/default #vi로 파일 열어서 내용 수정
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html ;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
}
location ~ /\.ht {
deny all;
}
}
파일 내용을 다음과 같이 수정
root 경로는 php파일 또는 html파일을 찾을 경로
index 경로안에 어떤 파일을 먼저 읽을지 설정
server_name 부분에는 도메인 써주면됨
sudo service nginx restart
nginx 재시작
mariadb 설치 및 DB 생성
sudo apt-cache policy mariadb-server
sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,arm64,i386,ppc64el] https://ftp.harukasan.org/mariadb/repo/10.3/ubuntu xenial main'
sudo apt update
apt install mariadb-server mariadb-client -y #mariadb 설치
service mysql status #동작 확인
/lib/systemd/systemd-sysv-install enable mariadb #동작 안하는 경우 enable시켜준다
mysql_secure_installation #Y N Y Y Y Y
sudo apt install mariadb-server
service mysql status
sudo apt-cache policy php8.3-mysql
sudo apt-get install php8.3-mysql
mysql -u root -p
db 추가
CREATE DATABASE db_wp;
CREATE USER user_wp@localhost;
SET PASSWORD FOR user_wp@localhost=PASSWORD("password");
GRANT ALL PRIVILEGES ON db_wp.* TO user_wp@localhost IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
exit
워드프레스 설치
cd /var/www/html; curl -O https://wordpress.org/latest.tar.gz;
tar xzvf latest.tar.gz
sudo mv ./wordpress/* ./
cp wp-config-sample.php wp-config.php
sudo vi wp-config.php
파일 내용 수정
define('DB_NAME', 'db_wp');
define('DB_USER', 'user_wp');
define('DB_PASSWORD', 'password');
define('AUTH_KEY', 'your unique phrase here');
define('SECURE_AUTH_KEY', 'your unique phrase here');
define('LOGGED_IN_KEY', 'your unique phrase here');
define('NONCE_KEY', 'your unique phrase here');
define('AUTH_SALT', 'your unique phrase here');
define('SECURE_AUTH_SALT', 'your unique phrase here');
define('LOGGED_IN_SALT', 'your unique phrase here');
define('NONCE_SALT', 'your unique phrase here');
https://api.wordpress.org/secret-key/1.1/salt
위에 사이트에 들어가서 key를 받아서 입력
chown -R www-data:www-data /var/www/html
여기까지 하면 아이피로 접속하면 워드프레스 초기 설정 화면이 나옴
ssl 적용
sudo apt update -y
sudo apt install certbot python3-certbot-nginx -y
sudo ufw status
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
sudo certbot --nginx -d example.com -d www.example.com
sudo certbot renew --dry-run
방화벽 룰 추가
lightsail의 경우 Networking – IPv4 Firewall 에서 add rule – https 추가
이미지로 보는 전체 설치 과정

staticIP 설정

방화벽 규칙 추가


DNS 설정에 static IP를 넣어서 설정
비밀번호 설정
sudo su –
passwd ubuntu
nginx 설치
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx
nginx -v
PHP 8.3 설치
sudo apt-get install php8.3-fpm
그냥 설치 했는데 안되어서 레포지토리 등록 후 다시 설치
sudo apt-get install ca-certificates apt-transport-https software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php8.3-fpm
sudo apt-get install php8.3-cli php8.3-curl php8.3-gd php8.3-mysql php8.3-mbstring zip unzip
sudo apt-get install php8.3-zip php8.3-xmlrpc php8.3-gd php8.3-curl php8.3-intl php8.3-imagick php8.3-bcmath php8.3-memcached php8.3-mysql
마리아디비 설치
apt install mariadb-server mariadb-client -y
service mysql status
sudo mysql_secure_installation #Y N Y Y Y Y
sudo mysql -u root -p
DB 생성
CREATE DATABASE db_wp;
CREATE USER user_wp@localhost;
SET PASSWORD FOR user_wp@localhost=PASSWORD(“password”);
GRANT ALL PRIVILEGES ON db_wp.* TO user_wp@localhost IDENTIFIED BY ‘password’;
FLUSH PRIVILEGES;
exit
워드프레스 설치
cd /var/www/html; sudo curl -O https://wordpress.org/latest.tar.gz;
sudo tar xzvf latest.tar.gz
sudo mv ./wordpress/* ./
sudo rm -rf ./wordpress/
sudo cp wp-config-sample.php wp-config.php
sudo vi wp-config.php
define(‘DB_NAME’, ‘db_wp’);
define(‘DB_USER’, ‘user_wp’);
define(‘DB_PASSWORD’, ‘password’);
define(‘AUTH_KEY’, ‘your unique phrase here’);
define(‘SECURE_AUTH_KEY’, ‘your unique phrase here’);
define(‘LOGGED_IN_KEY’, ‘your unique phrase here’);
define(‘NONCE_KEY’, ‘your unique phrase here’);
define(‘AUTH_SALT’, ‘your unique phrase here’);
define(‘SECURE_AUTH_SALT’, ‘your unique phrase here’);
define(‘LOGGED_IN_SALT’, ‘your unique phrase here’);
define(‘NONCE_SALT’, ‘your unique phrase here’);
수정 후
cd /etc/nginx/site-available/
sudo vi default
# Virtual Host configuration for a WordPress site
# HTTP 서버 리스닝 설정
server {
listen 80; # IPv4를 위한 HTTP 포트 80 리스닝
listen [::]:80; # IPv6를 위한 HTTP 포트 80 리스닝
server_name domain.com www.domain.com; # 도메인명 설정
# 에러 로그와 엑세스 로그 경로 설정
error_log /var/log/nginx/domain_error.log; # 에러 로그 파일
access_log /var/log/nginx/domain_access.log; # 엑세스 로그 파일
# WordPress에서 큰 파일 업로드를 허용
client_max_body_size 256M;
# 웹 루트 디렉토리 및 인덱스 파일 설정
root /var/www/domain; # 웹 컨텐츠를 저장할 디렉토리
index index.php; # 인덱스 파일 설정
# 특정 리다이렉트 규칙 : 선택사항
rewrite ^/wp-content/uploads/edd/(.*)\.zip$ / permanent;
# 주 URL 처리 규칙
location / {
try_files $uri $uri/ /index.php$is_args$args; # 정적 파일 또는 index.php로 요청 처리
}
# PHP 파일 처리
location ~ \.php$ {
try_files $uri =404; # 존재하지 않는 PHP 파일에 대해 404 반환
fastcgi_split_path_info ^(.+\.php)(/.+)$; # PHP 경로 정보 분할
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # PHP-FPM 소켓으로 전달
fastcgi_index index.php; # fastcgi 인덱스 파일 설정
include fastcgi.conf; # fastcgi 관련 추가 설정 포함
}
# .user.ini 파일 접근 차단
location ~ ^/\.user\.ini {
deny all; # 모든 접근 차단
}
# robots.txt 파일에 대한 로그 설정 비활성화
location = /robots.txt {
access_log off; # 접근 로그 끄기
log_not_found off; # 찾을 수 없음 로그 끄기
}
# wp-config.php 파일 접근 차단
location = /wp-config.php {
deny all; # 모든 접근 차단
}
# 업로드된 PHP 파일 접근 차단
location ~* /(?:uploads|files)/.*\.php$ {
deny all; # 모든 접근 차단
}
# 특정 파일 타입 접근 차단
location ~* ^/wp-content/.*\.(txt|md|exe|sh|bak|inc|php|pot|po|mo|log|sql)$ {
deny all; # 모든 접근 차단
}
# 숨김 파일 및 버전 관리 시스템 파일 접근 차단
location ~ /\.(ht|svn)? {
deny all; # 모든 접근 차단
}
# xmlrpc.php 파일 접근 차단
location = /xmlrpc.php {
deny all; # 모든 접근 차단
}
# 정적 파일 캐시 및 로그 설정
location ~* ^.+\.(flv|pdf|avi|mov|mp3|wmv|m4v|webm|aac|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|webp|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
expires max; # 캐시 만료 시간 최대로 설정
add_header Pragma public; # 캐시 제어 헤더 추가
add_header Cache-Control "public"; # 캐시 제어 헤더 추가
access_log off; # 접근 로그 끄기
log_not_found off; # 찾을 수 없음 로그 끄기
}
# 폰트 파일에 대한 CORS 설정
location ~* \.(eot|ttf|woff|woff2)$ {
add_header Access-Control-Allow-Origin *; # 모든 출처에서 폰트 접근 허용
}
# 파비콘 아이콘에 대한 로그 설정 비활성화
location = /favicon.ico {
log_not_found off; # 찾을 수 없음 로그 끄기
access_log off; # 접근 로그 끄기
}
}
입력 후 nginx 재시작
sudo service nginx restart
sudo apt update -y
sudo apt install certbot python3-certbot-nginx -y
sudo certbot –nginx -d example.com -d www.example.com
sudo vi /var/www/html/wp-config.php
define(‘WP_HOME’,’http://example.com’);
define(‘WP_SITEURL’,’http://example.com’);
추가 후 저장
워드프레스에 완벽하게 ssl이 적용된 것을 확인 가능
certbot이 알아서 /etc/nginx/site-available/default 파일에 ssl 규칙추가
http:example.com
http:www.example.com
https://example.com
https://www.example.com
네 가지 접속시 항상 https://example.com으로 나옴
못쓴거 폴더 권한 파일 권한 변경
1 thought on “워드프레스 설치 방법 (LEMP)”