Ubuntu 24.04 LTS 에서 웹서버(NGINX + PHP-FPM + MySQL) 구성하기
이 글을 통해 Ubuntu 24.04 LTS 운영체제에서 NPM(Nginx+PHP+MySQL) 웹서버를 구축하는 방법에 대해 설명하도록 하겠습니다.
일반 사업체 및 실무 서비스에서 사용할 수 있는 안정적인 구축 방법을 설명 하겠습니다.
라엘이의 한마디 : 내 어플리케이션이 최신의 환경에서 구동이 힘들 것 같다면, 기존 OS에서 Ubuntu Pro를 구독하세요. Stable상태를 유지하는 가장 저렴한 방법입니다.
* 리눅스 명령어 환경으로 접속하는 방법을 모른다면 이 글로 이동하세요.
리눅스 명령어 환경으로 원격 접속하는 방법 : https://blog.lael.be/post/7574
* 리눅스 설치 후 기초 원격접속 설정을 하려면 이 글로 이동하세요.
리눅스 서버 ssh 원격접속 설정하기 : https://blog.lael.be/post/7678
* VI 에디터(리눅스 편집기) 사용하는 방법 : https://blog.lael.be/post/7321
* Ubuntu 클라우드 서버호스팅을 찾는 중이라면 https://blog.lael.be/post/44 글로 이동하세요.
* 서버에 파일을 업로드하고 싶다면 Filezilla 를 사용해보세요. https://filezilla-project.org/
Filezilla 가짜 사이트가 있으니, 반드시 공식 사이트에서만 다운받으세요.
* 유료 도메인을 구매 하려면 https://blog.lael.be/post/6357 글로 이동하세요.
* Ubuntu Pro 구독에 대한 자세한 설명은 여기에 : https://blog.lael.be/post/11772
LTS 란 무엇인가?

* LTS 버전이란? Long Term Support 의 약자입니다. Ubuntu Canonical Group에서 10년간의 패키지 유지보수, 업데이트를 제공합니다.
개별 소프트웨어의 버그나, 보안상의 문제가 생기면 (해당 소프트웨어의 Lifetime이 끝났을지라도) Ubuntu Canonical Group 에서 유지보수를 제공합니다.
현재 무료 리눅스 배포판 중에서 10년 업데이트를 지원하는 운영체제는 Ubuntu 뿐입니다.
* 왜 10년 업데이트? Kiosk나 기타 Embeded 기기에서 제품설계 및 구축 운용까지 몇년(1~4년)이 걸립니다. 제품 출시 후 얼마지나지 않아 운영체제의 업데이트가 중단된다면 문제가 생기겠죠.
요즘에는 응용소프트웨어 분야에서도 이와 같이 LTS 라는 용어를 사용하는 추세입니다. 큰 변화 없이(코어의 major 버전번호 변함없음) 업데이트 유지보수를 장기간 제공합니다. 이 경우, 소프트웨어를 도입하려는 고객이 늘어나고, 3rd party software 가 늘어나는 장점이 있습니다.

< Ubuntu 유지보수 제공 현황표 >
참고 : Ubuntu Support - https://en.wikipedia.org/wiki/Ubuntu#Releases
TIP : 역할이 다른, 다수의 서버를 구축할 때, 모든 서버의 운영체제(OS) 버전을 동일하게 구성하는 것이 좋습니다. 관리 이슈가 발생할 확률이 크게 줄어듭니다.
Ubuntu 개발사에서는 운영체제OS(BaseOS)에 대한 10년간의 업데이트를 지원합니다.
다만, 기본 제공되는 앱스토어인 APT 저장소는 5년은 기본 지원하고, 나머지 5년은 Ubuntu Pro 라는 구독에 가입해야 소프트웨어 업데이트를 사용할 수 있습니다.
구독하지 않으면, APT 저장소의 5년 유지보수의 마지막 버전으로 설치됩니다. (OS 수명이 다할 때까지 그 버전으로 사용가능)
Ubuntu Pro 구독은, 개인은 5개 서버까지 무료이고, 기업은 유료입니다.
Ubuntu Pro를 사용하지 않으면, 5년 이후의 APP 소프트웨어의 업데이트는 서버관리자의 몫입니다.
일부 클라우드 호스팅에서 Ubuntu Pro 구독 옵션을 제공할 수도 있고, https://linuxpatch.com/ 처럼 업데이트를 관리하는 프로그램을 사용해도 됩니다.
“관리자”는 “관리”를 해야됨!!
Ubuntu Pro 구독에 대한 자세한 설명은 여기에 : https://blog.lael.be/post/11772
쉽게 말해서, 지금 보고 있는 블로그 글의 내용은 2034년 4월까지는 유효합니다.
2034년 1월에 Ubuntu 24.04 Server 이미지를 다운받아서 설치하고, 이 글의 설명대로 입력하면 정상적으로 웹서버 구축이 진행될 것입니다.
서버가 아직 준비되지 않았다면?
서버가 아직 준비되지 않은 경우 VULTR 라는 클라우드 업체를 추천합니다. (또는 AWS)
싸고 빠르고, 있을 것 다 있습니다. 그리고 서울 리전을 지원합니다.
VULTR : https://www.vultr.com/
자동 백업 (Automatic Backups) 또한 매우 권장됩니다. Enable 해주세요.


직접 PC에 설치해서 쓰고 싶다면?
남는 PC에 OS를 직접 설치하는 방법도 있지만, OS설치를 학습하고 싶은 것이 아니라면, 되도록 클라우드 서버 사용을 권장드립니다.
클라우드 서버를 사용하면, 클릭 몇 번, 5분 이내에 서버가 생기며 많은 관리 이점이 있습니다.
Ubuntu 공식 사이트 : https://ubuntu.com/download/server

Server 를 다운받으세요. (파일크기 약 3GB)
Desktop 을 설치해서도 서비스가 가능합니다. (파일크기 약 6GB)
Desktop = Server + 바탕화면(X server) + 브라우저(firefox) + 기타 데스크탑용 프로그램 (디스크/폰트/네트워크 관리 프로그램등)
Server 버전에서 이것저것 설치해서 Desktop 처럼 쓰는 것은 쉽지만, Desktop 설치한 후에 이것저것 지워서 Server 처럼 구성하는 것은 어렵습니다. (괜한 도전 하지 마시고, 반드시 Server 를 설치하세요)
설치에 상당한 시간이 소요되니, 다시 말하지만 클라우드 서버를 이용하는 것을 추천합니다.
Ubuntu 24.04 LTS - Desktop 리뷰 - https://blog.lael.be/post/12519
서버에 접속해주세요.
Mac의 경우 터미널, Windows의 경우 Powershell, 또는 기타 다른 도구나, 클라우드 업체에서 제공하는 Web Console / System manger session manger 등으로 접속할 수도 있습니다.
이 글의 모든 단계는 root 권한으로 진행합니다. root 사용자가 아니라면 root 로 전환해야 합니다.
1) root 사용자 권한으로 전환
서버의 최고관리자(root)로 로그인합니다. 우리는 서버를 이용하는 것을 넘어서, 서버를 조작할 예정이기 때문에 최고관리자(root) 권한이 필요합니다.
이미 root 계정으로 로그인 했다면 이 단계를 건너 뛸 수 있습니다.
일반적으로, Linux OS 설치 후 사용하는 최초의 계정은 root 이거나, root 명령어를 사용할 수 있는 sudo 사용자 입니다.
- 자신의 계정이 sudo 명령어를 사용할 수 있는지 확인
# id

사용하고 있는 계정이 sudo 그룹에 속해 있으면 sudo 명령어를 사용할 수 있습니다.
- 관리자급 명령어(sudo)를 사용해서 root 계정으로 강제 로그인
# whoami
위 명령어 (whoami) 의 결과가 root 가 아니라면 아래의 명령어를 실행
# sudo su -l root

su 명령어는 다른 계정으로 로그인하는 명령어이다. sudo 를 앞에 붙이면 root 권한으로 실행되며, root 는 다른 계정 로그인시 비밀번호를 묻지 않기 때문에, 바로 로그인이 됩니다.
root 쉘 색상 변경
cp /etc/skel/.bashrc /root/.bashrc
이 명령어 실행 후에, 서버에 다시 접속해 주세요.
조금 더 서버 사용이 쉬워집니다.
2) 쉘 기본 언어값 변경 (국내 일부 클라우드업체 및 직접 운영체제를 설치를 한 경우)
대부분의 경우, 영어로 설치되기 때문에, 영어인 경우에는 이 단계(2번)을 건너 뛰어도 됩니다.
서버 운영 중에 문제가 발생했을 때 구글 검색을 할 수 있게 하는 기초 작업입니다.
쉘의 기본 언어값을 영어로 변경합니다.
시스템의 변화가 생기는 것은 아니며, 오직 쉘 메세지만 영어로 바뀝니다.
qwerty 라고 입력해봅시다. 반드시 qwerty 라고 입력하세요.
(참고 : 의미없는 명령어이며 무조건 에러가 발생합니다. 에러메세지 테스트 용도임.)
# qwerty
# echo $LANG

영어가 아닐 경우 다음 명령어를 사용하여 변경.
# vi /etc/default/locale
LANG=en_US.UTF-8
이런 작업을 하지 않도록, 서버 OS는 한국어로 설치하지 않기를 권장함.
3) 시스템 정보 확인
먼저, 이 서버의 사양 및 상태(Spac / Status)를 확인해 보도록 하자.
아래에 몇가지 서버 정보 확인 명령어를 적어두었으니, 나중에 서버 장애가 생겼을 때 이러한 명령어를 사용해 문제의 원인을 파악할 수 있어야 한다.
한번씩 입력해 보는 것을 추천함.
설치된 운영체제 버전 정보 확인
# lsb_release -a

참고로 우분투 24.04 버전의 코드네임인 Noble Numbat 은 호주에 서식하는 다람쥐 같이 생긴 동물입니다.
CPU 모델 확인
일부 가상 서버의 경우 model name 을 숨기는 경우도 있다.
# cat /proc/cpuinfo | grep "model name" | head -1
CPU 코어수 확인
# cat /proc/cpuinfo | grep "processor" | wc -l
시스템 메모리 정보 확인
# free -m
Mem 항목의 total 부분을 보면 된다.
Mem 은 실제 메모리, Swap 은 가상 메모리(디스크파일 기반의 메모리 확장).
비 필수적인 캐시 메모리를 정리하기
# sync && echo 3 > /proc/sys/vm/drop_caches
일반적으로는 OS가 캐시메모리를 관리하기 때문에 굳이 사용할 필요없지만, Server Administrator 라면 알아두면 좋다. 위 명령어 입력 후 free -m 명령어를 다시 입력해보자.
디스크 파티션 확인
# lsblk
아래쪽의 Type 이 disk, part 인 것의 항목을 확인해보자. 디바이스 이름이 sda인지, vda인지, nvme0n1인지 알아만 두자.
디스크 파티션 확인 (fdisk)
# fdisk -l
결과 화면이 약간 어려울 수 있으니 그냥 한번 읽어보고 넘어가도록 하자.
디스크 여유 공간 확인
# df -h
Mounted on 가 (/) 인 것의 Size, Used, Avail, Use 를 확인해 두도록 하자. 디스크가 가득 차면 실행 중인 어플리케이션에 심각한 문제를 줄 수 있다.
Filesystem 이 tmpfs 는 메모리(RAM) 공간을 파일시스템으로 사용하는 것이고, efivarfs 는 메인보드 펌웨어(NVRAM) 공간을 사용하는 것이다.
/dev/ 부분만 살펴볼 것.
서버 가동 중에도 디스크의 용량을 늘릴 수 있습니다.
https://blog.lael.be/post/7735 글로 이동해서 빠르게 눈으로만 쓱 한번 보세요.
최종 부팅 시간 확인 (아직 timezone 세팅 전이라, GMT 시간으로 표시될 수 있음)
# who -b
서버 부하량, 부팅 시간, 서버 접속자 확인
# w
시스템 서비스 확인
# systemctl list-unit-files
STATE 항목을 보세요.
b (back), spacebar (next), q (quit) 를 사용해 탐색합니다.
키보드 arrow 버튼으로도 탐색 가능.
자동 실행 목록에 등록된 시스템 서비스 확인
# systemctl list-unit-files --state=enabled
운영체제가 부팅될 때 시스템 서비스로서 실행되는 프로그램의 목록을 확인해보자.
네트워크 확인
# ip link show
랜카드가 몇개인지, 활성화(state UP)인지 알 수 있다. lo 랜카드는 loopback 특수목적 랜카드 이다.
# ip address show
실제 네트워크 설정을 알 수 있다.
네트워크 설정 확인
# cat /etc/netplan/50-cloud-init.yaml
서버 로그인 기록 확인 - 시간순
# last
서버 로그인 기록 확인 - 사용자순
# lastlog
위의 명령어들을 지금 한번씩 실습해 본다면, 나중에 큰 도움이 될 것이다.
4) 운영체제 보안 설정 강화
제가 추천하는 보안 설정 입니다.
설정하지 않아도 이용에 문제는 없지만, 설정한다고 해서 손해보지는 않습니다.
# wget https://raw.githubusercontent.com/laelbe/linux-simple-scripts/refs/heads/main/_server_tools/ubuntu.2404.simplesecurity.sh -O /root/ubuntu.2404.simplesecurity.sh
# bash /root/ubuntu.2404.simplesecurity.sh
chmod: cannot access 오류 메세지가 표시될 수도 있는데, 무시해주세요. 정상적인 메세지 입니다.
5) 시스템 시간 설정하기 - TimeZone
시간 설정이란, 절대적인 시간(timestamp) 및 표시되는 형태(timezone) 설정을 말한다.
먼저 timezone 을 설정하고, 그 다음 timestamp 를 설정할 것이다.
TimeZone 설정하기
이것을 하지 않으면 서버에서 구동하는 많은 프로그램들의 표기 기준 시간이 GMT가 됩니다. (한국과 9시간 차이나는 영국기준시간으로 설정됨)
- 데비안 패키지 재설정 TimeZone Data 를 실행한다.
#dpkg-reconfigure tzdata
GUI 환경이 나올 텐데, 순서대로 Asia - Seoul 을 선택하면 된다. a 엔터 s 엔터를 누르면 관련 위치로 이동한다. (또는 키보드 화살표로 탐색)
잘못 선택했을 경우, 위의 명령어를 다시 실행하면 된다.


dpkg-reconfigure 를 사용할 수 없는 환경(예를 들자면 docker ubuntu)이라면 아래의 명령을 실행하세요. (동작은 완전히 동일함)
# ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
현재 시간 확인
# date
6) 시스템 시간 설정하기 - 네트워크 동기화
시스템이 과부하되면 시스템 시간이 아주 조금씩 지연됩니다.
따라서 시간이 일정하게 유지되도록, 주기적으로 시간을 교정하는 프로그램을 실행하는 것이 좋습니다.
Ubuntu OS설치시 기본적으로 설정되고, 항상 잘 동작하기 때문에 확인하는 명령어만 살펴보고 가겠습니다.
# timedatectl
# timedatectl timesync-status

아마도 NTP service : active, 그리고 Server 는 169.254.169.123 (AWS의 경우) 또는 ntp.ubuntu.com (공식 이미지 직접 설치 및 대부분의 경우) , time.constant.com (일부 클라우드) 일 것입니다.
네트워크 시간 동기화는 32second ~ 34min 8second(2048초) 주기로 이루어질 것입니다.
네트워크 망 분리 등의 이슈를 처리하기 위해서 NTP를 차단할 경우, 시간오류가 발생할 수 있으니, 이런 경우에는 적절히 대응책을 마련하시기 바랍니다.
관련 설정 확인
# cat /etc/systemd/timesyncd.conf
로그 확인
# service systemd-timesyncd status

[OutBound UDP 123] 포트를 사용합니다.
* timedatectl timesync-status 입력시 오류가 발생할 경우
Failed to query server: The name org.freedesktop.timesync1 was not provided by any .service files
일부 클라우드에서 커스텀 한 Ubuntu 의 경우 시간 동기화 프로그램을 systemd-timesyncd 대신 chrony 로 동작하게 바꾸어 두었습니다.
Ubuntu 공식 이미지는 여전히 systemd-timesyncd 를 사용하고 있지만, AWS 에서는 chrony 로 동작하도록 커스텀 된 Ubuntu이미지를 배포하고 있으니, 다음의 명령어를 사용하여 확인해 봅시다.
(AWS Ubuntu 의 경우, 22.04 이후 버전부터 chrony 로 변경됨. quickstart 말고, market place 에 있는 ubuntu는 다를 수 있음)
# chronyc sourcestats -v

참고로 NTP 서버에 접속하기 위해서는 방화벽에서 [Outbound UDP 123] 포트를 열어주어야 합니다.
(단, AWS Ubuntu 24.04 (quickstart/ubuntu-24.04)일 경우에는 NTP가 169.254.169.123 로 설정되어 있고, 이 경우에는 아웃바운드 허용설정 없어도 됨)
* 사용가능한 안정적인 NTP 서비스 (2025년 현재) (NTP Server List)
- ntp.ubuntu.com
- time.aws.com
- 1.time.constant.com
- 2.time.constant.com
- 3.time.constant.com

7) 시스템 메모리 크기를 확인하고 가상 메모리 설정하기
리눅스에 swap 이라는 가상메모리 설정이 있습니다. 이것을 설정하면 실제 메모리 공간보다 더 많은 공간을 사용할 수 있습니다.
이것은 과거에 기술적, 금액적 문제로 인해 서버의 메모리 용량이 부족하던 시절에 쓰던 방식입니다.
하드웨어 가격 하락으로 인해 한동안 swap을 설정하지 않는 것이 트랜드가 되었다가, 최근에 클라우드 서버 보급으로 소형 서버가 주로 사용되면서, 다시 swap을 설정하는 추세입니다.
이것을 설정하면 서버의 메모리가 부족한 상황이 되면, swap을 사용하면서 서버 요청을 잘 처리하게 됩니다.
swap을 사용할 때 cpu를 조금 더 사용하게 되므로, 과도한 swap 을 사용하지 마시고 적절히 사용하세요.
무조건 1GB를 설정하고, 나중에 조정하는것을 추천합니다. 이 작업은 서버의 재부팅을 필요로 하지 않으며, 실시간으로 적용됩니다.
메모리 사용량 확인 (이미 SWAP이 설정되어 있는지 확인)
# free -m
하단의 Swap 이 이미 설정되어 있을 경우, 이 단계를 건너 뛰세요. 아마도 이미 적절한 용량으로 설정되어 있을 것입니다.
!! 이미 Swap 이 설정되어 있을 경우, 이 단계를 건너 뛰세요 !! 클라우드 사업자가 이미 적절한 값으로 설정해 두었기 때문.
SWAP 추가 스크립트를 사용하여 서버에 1GB 의 가상 메모리 설정하기
1 대신 원하는 숫자로 변경해도 되지만 변경하지 않는걸 추천합니다.
# wget -q https://raw.githubusercontent.com/laelbe/linux-simple-scripts/main/_server_tools/add_swapfile -O /root/add_swapfile
# bash /root/add_swapfile 1
# free -m
스크립트 파일 살펴보기 : https://raw.githubusercontent.com/laelbe/linux-simple-scripts/refs/heads/main/_server_tools/add_swapfile
swap 추가 후 제거를 원하면 소스코드를 보고, 적절히 작업하세요. (swapoff, fstab 제거, swap파일제거)
1. /etc/fstab 내용을 보고 swap 파일 확인 및 관련줄 삭제 (fstab 파일은 부팅할 때 한번 읽혀짐)
2. swapoff swapfile_path
3. rm swapfile_path
저의 경우는 되도록 swap을 설정하는 편이며, 주로 disk full 같은 critical한 상황에서 swap을 빠르게 지워서 긴급조치를 취하는 용도로 사용합니다.
8) 현재 운영체제에 설치되어 있는 프로그램 최신버전 패치
기억하세요! 어떠한 운영체제를 설치하든 (윈도우 포함) 가장 먼저 해야 할 일은 업데이트 입니다.
APT 목록 갱신
APT란 Advanced Packaging Tool 을 뜻합니다.
우리는 apt 라는 우분투에 내장된 프로그램을 이용해서 프로그램을 쉽게 설치/제거 할 수 있습니다.
애플 앱스토어, 구글 플레이스토어 같은 것이라 생각하시면 됩니다. Ubuntu 의 APT 스토어!
이 우분투 스토어(Ubuntu repository)는 우분투 개발팀에 의해서 운영되며, 10년간의 OS 업데이트와, 5년간의 소프트웨어 업데이트를 지원합니다.
즉, Ubuntu 24.04 의 공식APT는 2029년 5월까지 무료로 지원됩니다. 그 이후 2029/05 ~ 2034/04 까지는 APT는 유지는 되지만 2029/05 까지의 업데이트로만 남아 있습니다. (특별한 경우 외엔 업데이트 안됨)
2029/05 부터는 프로 구독(Pro subscription)을 해야 합니다.
패키지 목록 갱신 (스토어 항목 새로고침)
# apt update
현재 운영체제에 설치되어있는 프로그램 최신버전 패치
# apt upgrade
설치 중 일부 프로그램 설정파일을 초기화 할것인지 물어볼 수도 있는데 기본값인 Keep Local Version 을 선택한다. (미리 선택되어 있으므로 Enter 만 누르면 된다.)
설치, 제거, 업데이트 과정중에 생긴 찌꺼기 파일이 있으면 제거.
# apt autoremove
아주 가끔씩 찌꺼기 파일이 생긴다. 지우지 않아도 기능상의 문제는 없다. 하지만 디스크 공간을 차지하고 있을 것이다.
위의 명령어를 개인서버라면 생각날 때마다, 회사 서버라면 월 1회 이상 실행해주세요.
재부팅
# reboot
소프트웨어가 변경되었을 경우에는 어쩌면 재부팅 한번 해두는게 좋을 수 있습니다.
재부팅 후 다시 접속해주세요.
다시 업데이트 시도
# apt update # apt upgrade # apt autoremove
추가 업데이트를 할 것이 없기 때문에, 화면 출력이 짧으면 정상입니다.
내가 사용하는 방화벽 확인하기
이 글을 쓰고 있는 2025년 기준, 네트워크 방화벽을 지원하지 않는 클라우드 업체가 없기 때문에, OS방화벽 대신, 클라우드 방화벽(firewall 또는 security group이라고 부름)을 사용하는 것을 권장합니다.
그런데, 일부 클라우드 업체들이 OS의 방화벽을 미리 설정해두는 경우가 있어서 설명을 하도록 하겠습니다.
(공식 Ubuntu 이미지에는 기본적으로 OS 방화벽이 설정되어 있지 않음. 꺼져 있음.)
물론, 집에서 직접 OS를 설치했을 경우, 공유기가 방화벽 역할을 합니다. 실제로 공유기 관리자 로그인하면 관련 기능도 있습니다.
iptables 방화벽
모든 리눅스는 iptables 방화벽을 사용합니다.
그런데 iptables 관련 명령어가 너무 어려워서, 쉽게 사용하기 위한 ufw (Uncomplicated Firewall) 라는 관리툴이 개발되었습니다.
https://ko.wikipedia.org/wiki/UFW

UFW는 위의 그림과 같이 동작합니다. ufw 는 iptables를 쉽게 사용할 수 있도록 도와주는 프로그램일 뿐입니다.
“iptables 는 사용하지 말아야할 레거시 명령어이며, ufw는 새로운 세대의 멋진 명령어이다!” 라고 접근하시면 안되고, 동작을 이해하고 상황에 맞는 명령어를 쓰시면 됩니다.
1) iptables, ufw 둘 다 사용하지 않는 것을 추천함
2) 그래도 널리 쓸 수 있는 iptables 를 추천 (모든 종류의 리눅스에서 동작함)
3) ufw 기본세팅이 되어있다면 ufw 를 추천
현재 방화벽 상태 확인
# iptables -nL

< AWS Ubuntu : Ubuntu 공식 설치 초기 상태 그대임 >

< 일부 클라우드 호스팅은 clean install 임에도 어떠한 값이 입력되어 있다 >
살펴보니까, VULTR 클라우드와 Oracle 클라우드 머신은 기본적으로 어떠한 IPTABLES 정책이 미리 설정되어 있더라. 이 경우, 기본값은 두고 클라우드 방화벽을 설정하세요.
ufw 상태 확인 (반드시 위와 같이 ufw 관련 화면이 보였을 경우에만 진행한다)
AWS나, Linode, DigitalOcean 같은 업체에서는 ufw 를 설정해두지 않았으니, 이 경우, 이 단계를 건너뛰도록 하자.
# ufw status
# ufw allow 80
# ufw allow 443
반대 명령어는
# ufw delete allow 80

웹서버는 22, 80 443 포트만 허용되어 있으면 된다.
추가설정은 정신 건강에 해로우니 하지 말 것.
그런데 위 처럼 클라우드 방화벽을 쓸 수 있는 환경에서는 굳이 ufw를 사용하지 않는 것을 추천합니다.
ufw 비활성화
아래의 명령어를 입력해서 ufw를 비활성화 하시고, 클라우드 네트워크 방화벽을 사용하세요!!
# ufw disable

서버 OS 에서의 방화벽을 사용하지 않기 때문에, 반드시 클라우드 방화벽을 설정하세요!!
SSH 는 TCP 22 이며 반드시 내 IP 만 허용해야 합니다.
HTTP는 TCP 80 입니다. HTTPS 는 TCP 443 입니다.
혹시나 OS 소프트웨어 방화벽을 설정해야할 상황이라면 다음 글을 참고 - https://blog.lael.be/post/7982
9) Nginx 설치
Nginx 웹서버를 설치해 봅시다. nginx 는 버전이 빠르게 올라가기 때문에, 공식 저장소에서 설치하도록 하겠습니다.
또한 nginx 공식 저장소에서 Ubuntu 의 OS LifeCycle 보다 더 오래 지원을 해주기 때문에, nginx 공식 저장소에서 nginx 소프트웨어를 설치/관리 하는 것을 추천합니다.
Nginx 공식 저장소 추가
nginx 공식 저장소 repository key 다운로드
# curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
다운받은 repository key 유효성 검사
# gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
nginx 저장소를 로드하도록 구문 추가
# echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
/usr/share/keyrings/nginx-archive-keyring.gpg 파일과 /etc/apt/sources.list.d/nginx.list 파일이 생성됩니다.
저장소 패키지 목록 업데이트
# apt update
패키지 설치 정보 확인
# apt info nginx

nginx 설치
# apt install nginx

nginx 실행
# service nginx start
또는 OS를 재부팅 하면 nginx 가 자동으로 켜진다.
nginx 상태 확인
# service nginx status
설치된 nginx 버전 확인
# nginx -v
![]()
글 작성 현재 nginx version: nginx/1.29.0 가 설치되어 있다.
여러분의 버전은 이것보다 더 높을 것이다. (본문 가이드대로 설치하면, 항상 최신 버전이 설치됨!)
nginx 실제 접속 확인
웹브라우저에서 서버의 아이피를 입력해서 접속해 보기
방화벽에서 TCP 80 포트가 Open 되어 있어야 합니다.
웹 브라우저에 내 서버의 IP 입력

우리는 Nginx 에서 PHP를 연결할 것이기 때문에, PHP 에서 필요한 3가지 변수를 추가로 선언해 주어야 한다.
선언하지 않으면 짧은주소를 사용하는 PHP소프트웨어가 동작하지 않을 수 있다.
추가되는 변수
- $_SERVER[‘SCRIPT_FILENAME’]
- $_SERVER[‘PATH_TRANSLATED’]
- $_SERVER[‘PATH_INFO’]
# cat /etc/nginx/fastcgi_params
# echo 'fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/fastcgi_params # echo 'fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;' >> /etc/nginx/fastcgi_params # echo 'fastcgi_param PATH_INFO $fastcgi_path_info;' >> /etc/nginx/fastcgi_params
# cat /etc/nginx/fastcgi_params

이제 잘 동작합니다. 마지막으로 몇가지 보안 설정을 해줍시다.
nginx https 사용을 위해 기본 인증서 설치
# apt install ssl-cert
보안 설정
nginx 기본 환경설정 파일 확인
# cat /etc/nginx/nginx.conf
nginx 프로세스 사용자를 www-data 로 변경
# sed -i 's/^user[[:space:]]\+nginx/user www-data/' /etc/nginx/nginx.conf
nginx 버전 정보 감추기
# sed -i 's/#gzip\s*on;/gzip on;\n root \/usr\/share\/nginx\/html;\n server_tokens off;/g' /etc/nginx/nginx.conf
일부 보안 패치 (한번에 드래그해서 붙여넣기 및 엔터 해보세요)
chmod 700 /etc/nginx/ chmod 600 /etc/nginx/nginx.conf chmod 600 /etc/nginx/conf.d/* chmod 710 /var/log/nginx chmod 710 /usr/share/nginx/html chgrp www-data /var/log/nginx chgrp www-data /usr/share/nginx/html
설정 마무리를 기념하며 nginx 재시작
# service nginx restart

nginx 설치 및 세팅이 끝났습니다.
10) PHP 설치
PHP 소프트웨어는 매우 오랜 역사를 가지고 있고, 검증되어서 취약점의 거의 없습니다. 혹시나 알려지지 않은 취약점이 발생하더라도 Ubuntu Security Team 에 의해 Zero-day patch 가 이루어지니 안심하시고 사용하시면 됩니다.
언어 자체는 안전하나, 소프트웨어나 사람이 취약할 수 있습니다.
Ubuntu 개발팀에서는 NodeJS, JAVA, Go 등은 Application(universe) 으로 취급하고 관리하고 있습니다.
반면, PHP 는 Infra(main) 로 취급하여 관리하고 있습니다. 그만큼 더 신경 쓰고 있고, 비용 절약에도 도움이 됩니다.
자세한 글은 Ubuntu Pro - https://blog.lael.be/post/11772 - 글을 참고하세요.

# apt install php8.3-fpm
php-common php8.3-cli php8.3-common php8.3-opcache php8.3-readline 패키지가 함께 설치됩니다.
PHP-FPM 은 PHP 를 실행하는 어플리케이션 서버 입니다.
Nginx 프로그램이 php 파일의 위치를 PHP-FPM 에게 전달하면, PHP-FPM 이 실행하고 Nginx 프로그램에게 결과를 반환하는 원리입니다.
- 설치된 PHP 버전 확인
php8.3-cli 가 함께 설치되었기 때문에, 콘솔에서 php 명령어를 실행 할 수 있습니다.
# php -v

글을 작성하는 현재 설치된 버전은 PHP 8.3.6 이며, 여러분의 버전은 이것보다 높을 것이다. (물론 주기적으로 업데이트 명령어인 apt update 및 apt upgrade 를 해주면 최신의 상태를 유지할 수 있다.)
기타 널리 사용되는 PHP모듈을 설치한다.
각 모듈의 설명은 생략한다. 대부분의 PHP 웹 소프트웨어가 필요로 하는 모듈들이다.
# apt install php8.3-mbstring php8.3-gd php8.3-curl php8.3-xml php8.3-bcmath php8.3-mysql php8.3-zip php8.3-gmp
- Composer 설치 (PHP 패키지 의존성 관리 프로그램)
# apt install composer
더 설치하고 싶은 PHP 모듈이 있다면 아래 명령어 입력 후 선택하여 설치하면 된다.
# apt-cache search php- | grep ^php8.3- | grep module
PHP 설치는 끝났으며, 다음으로 몇가지 추가적인 설정을 진행해보자.
PHP Default timezone 설정하기
PHP의 date 함수에서 사용할 기본 Timezone 을 설정합니다.
php의 date 함수는 date_default_timezone_set 선언이 있다면 이 타임존을 기준으로 표시하고, 없다면 지금 설정할 파일의 타임존을 기준으로 사용합니다.

동일한 작업을 2개의 파일에 적용해 주어야 합니다.
설정 검사
# cat /etc/php/8.3/fpm/php.ini | grep timezone # cat /etc/php/8.3/cli/php.ini | grep timezone
다음의 치환 명령어를 사용해서 default timezone 을 Asia/Seoul 로 변경
# sed -i 's/;date.timezone =/date.timezone = Asia\/Seoul/g' /etc/php/8.3/fpm/php.ini # sed -i 's/;date.timezone =/date.timezone = Asia\/Seoul/g' /etc/php/8.3/cli/php.ini
설정 검사
# cat /etc/php/8.3/fpm/php.ini | grep timezone # cat /etc/php/8.3/cli/php.ini | grep timezone

설정 적용을 위하여 php-fpm 재시작.
# service php8.3-fpm restart
php 설치 및 세팅이 끝났습니다.
간단한 PHP 실행 (현재 시간을 출력하기)
# php -r "echo date('Y-m-d H:i:s');"
작업의 분기점 (DB 호스팅을 이용할 것인가?)
결론부터 말하자면, DB호스팅을 이용하는 것이 항상 좋습니다.
DB호스팅이 해주는 것들
- 주기적인 데이터 백업
- DB 옵션 설정 변경이 쉬움
- 장애 발생시 자동 복구
- 소프트웨어 자동 업데이트
DB호스팅의 단점

DB호스팅의 단점이라면 조금 비싼 가격입니다. 가장 저렴하게 선택했을때, 월 30달러입니다.
DB서버 관리에 자신이 없다면, 반드시 DB호스팅을 사용하세요. 많은 부분을 커버해 줍니다.
DB호스팅 업체 VULTR : https://www.vultr.com/
당신이 사업을 한다면 DB호스팅은 반드시 한국 리전에 있는 것을 선택하세요.
국내법을 따르거나 ISMS등 감사 받을 때 DB가 해외에 있다면 문제가 생길 수 있습니다. (개인정보 저장을 국내에 하는지가 중요)
개인적으로, VULTR DB호스팅 쓰다가 나중에 익숙해지면 AWS RDS 로 이전하는 것을 추천합니다.
DB 호스팅을 이용하지 않고, 직접 구축하기로 마음먹었다면, 다음의 10번을 진행해주세요.
DB 호스팅을 이용하기로 결정했다면 다음의 MySQL 설치 단계를 건너뛰고, 실제 구축 테스트 단계 항목로 이동하세요.
10) MySQL 직접 설치
만약, DB 서버를 웹서버와 별도의 서버로 운영하시려면, 위의 모든 단계를 거친 후, nginx 와 php 설치 단계를 건너뛰고 이 단계를 진행하면 됩니다.
설치 소스정보 확인
# apt info mysql-server

MySQL 명령어 클라이언트 프로그램 설치 - DB호스팅을 사용하더라도 이 프로그램은 설치해주세요.
# apt install mysql-client
위의 패키지를 설치하면 console 환경에서 mysql 명령어를 사용할 수 있게 된다.
MySQL 서버 설치
# apt install mysql-server
설치된 버전 확인
# mysqladmin version

MySQL 8.0.41 버전이 설치되었습니다. (여러분의 버전은 이것보다 같거나, 더 높을 것입니다.)
기본적으로 MySQL 의 root 사용자는 auth_socket 인증을 사용하도록 설정되어 있으며, 따라서 리눅스 root 사용자는 비밀번호 입력없이 MySQL root 사용자로 로그인 할 수 있습니다.
SSO 로그인 같은 것입니다. [리눅스의 root] -> [mysql root]
현재 설치된 mysql 서버의 사용자 목록 조회
만약, mysql 쉘 상태에서 빠져나오려면 exit 엔터 입력하세요.
# mysql SELECT `Host`, `User`, `plugin`, `authentication_string` FROM `mysql`.`user`;
추가적으로, auth_socket 이 설정된 `user`는 비밀번호 설정이 되지 않습니다. 서버 외부적으로 관리할 때에는 root 이외의 사용자를 생성해주세요.

< MySQL 8.0 초기 사용자 테이블 >
최고관리자 계정 생성
최고관리자 계정을 생성해 봅시다. 이 계정은 사용자 관리, 서버 관리 용도로만 사용해야 하며, 웹서비스나 기타 프로그램에서는 절대로 사용하면 안됩니다.
mysql 쉘에서 실행하세요.
-- myroot@localhost 사용자 생성 (비밀번호 포함)
CREATE USER 'myroot'@'localhost' IDENTIFIED BY '비밀번호 (여기 바꿔주세요)';
-- root 계정과 동일한 권한 부여
GRANT ALL PRIVILEGES ON *.* TO 'myroot'@'localhost' WITH GRANT OPTION;
만약 생성한 계정의 비밀번호가 기억이 나지 않거나, 기타 다른 문제가 생겼다면, 똑같이 myroot2 계정을 만들어서 로그인 한 후 조치를 취하세요.

exit
MySQL 8.0 부터 바뀐 설정 기본 값 살펴보기 : https://dev.mysql.com/blog-archive/new-defaults-in-mysql-8-0/
설정 기본 값이 이미 적절하게 구성되어 있으므로 그대로 사용하면 됩니다.
추가적으로 변경을 원하는 값이 있다면, 다음의 명령어를 사용하여 값을 변경할 수 있습니다.
# vi /etc/mysql/mysql.conf.d/mysqld.cnf
혹시나, vi 에디터 나가는 명령어는 :wq! 입니다. nano 에디터의 경우 컨트롤x .
또는 저 파일은 그대로 두고 커스텀 설정만 따로 할 수도 있습니다. (이 방식을 추천함)
# vi /etc/mysql/conf.d/mycustom.cnf
[mysqld] slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 5 log_output = FILE,TABLE skip-log-bin
서버의 데이터베이스 목록 확인하기
# mysql
show databases;
exit;

MySQL Server 설치가 끝났습니다.
⬆️ 여기까지는 서버 구축
⬇️ 여기부터는 사용 예제
별도의 글로 작성해야 하는데, 그냥 이어서 작성 하겠습니다.
대신, 글 번호는 다시 1번부터 시작합니다.
NPM 실제 구축 사용 예시
앞서 구축했던 Nginx + PHP + MySQL (NPM)을 사용하는 실습을 해 봅시다.
phpmyadmin 이라는 php 언어를 사용하는 mysql 관리 프로그램을 실행해 볼 것입니다.
wordpress 라는 php 언어를 사용하는 blogging software 를 구축해 볼 것입니다.
1) 도메인 준비하기
보유한 도메인 주소가 있다면 그 도메인을 사용하세요.
도메인 주소를 보유하지 않았다면, https://domains.cloudflare.com/ (추천) 이나 https://www.hosting.kr/ 에서 구입하세요.
AWS를 사용 예정이거나 사용 중이라면 https://aws.amazon.com/ 또한 추천합니다.
다만, 국내 업체는 단가가 터무니 없이 높거나, whois privacy 같은 것을 무료 지원하지 않기 때문에 되도록 해외 업체에서 구매하는 것을 권장합니다.
유료 도메인 구매 및 DNS 설정 과정은 생략합니다.
이 글에서는 별다른 도메인 구매 없이, 무료 도메인 서비스인 https://sslip.io/ 를 사용하여 진행하도록 하겠습니다.
| no | 도메인주소 | 도메인에 연결되는 IP | |----|-------------------------------------|----------------------| | 1 | 158.247.199.114 | 158.247.199.114 | | 2 | 158-247-199-114.sslip.io | 158.247.199.114 | | 3 | mysite1-158-247-199-114.sslip.io | 158.247.199.114 | | 4 | mysite2-158-247-199-114.sslip.io | 158.247.199.114 | | 5 | myapp1.158-247-199-114.sslip.io | 158.247.199.114 | | 6 | blog.158-247-199-114.sslip.io | 158.247.199.114 |
위의 표 규칙을 이해한 다음, 당신의 서버 IP에 맞게 적절한 도메인 주소를 결정해주세요.
이 예제에서는 두개의 도메인 사이트를 생성할 예정입니다.
- 158-247-199-114.sslip.io - phpmyadmin 설치
- blog.158-247-199-114.sslip.io - WordPress 설치
2) nginx 기본 사이트 설정
기본 사이트 : 어떠한 명시적 조건에 해당하지 않는 사이트.
- nginx 환경설정 생성기 : https://npm-config-generator.lael.app/default?option=message
여러 요구사항별로, 글을 작성하면 내용이 너무 길어지기 때문에 생성기를 만들었습니다.

파일을 다운받아서 적절한 위치에 업로드 해주세요.

nginx 설정 검사
nginx -t
따로 적지는 않을건데, 설정 검사는 생각날 때마다 수시로 해주세요.
nginx 다시 불러오기
service nginx reload
다시 웹브라우저를 사용해서 접속해 봅니다. (인증서 유효성 오류가 발생하면서) “WEB” 또는 “WEB SSL”이 표시되면 정상입니다.
3) 사용자 추가
사용자를 생성합니다. root 사용자는 환경을 구성하는 시스템사용자 입니다. 사이트 구동을 위해서는 일반 사용자를 등록해야 합니다.
원하시는 아이디가 있다면 그것으로 입력하세요. 선호하는 아이디가 없으면 myuser1 으로 하세요.
비밀번호 입력 후, 엔터를 여러번 입력하세요. (정확히는 엔터 7번)
#adduser myuser1
참고로, 반대동작을 하는 계정삭제 명령어는 (계정을 삭제하고 홈디렉토리도 삭제함) 아래와 같습니다.
#userdel -r myuser1 (!!주의!! 삭제할 때에만 입력)

nginx 프로그램을 사용할 수 있도록 권한 부여 (웹 사용자 생성시마다 해주셔야 합니다. 사용자당 1번)
chgrp www-data /home/myuser1
4) 소프트웨어 프로그램을 업로드할 폴더 생성
root 사용자에서 myuser1 사용자로 로그인 전환
#su -l myuser1
root 사용자는 최고 권한을 가지고 있기 때문에 비밀번호 없이 로그인 전환 됩니다.
원하는 웹사이트 도메인으로 폴더 생성
이 예제에서는 두개의 도메인 사이트를 생성할 예정입니다.
- 158-247-199-114.sslip.io - phpmyadmin 설치
- blog.158-247-199-114.sslip.io - WordPress 설치
# mkdir 158-247-199-114.sslip.io # mkdir blog.158-247-199-114.sslip.io

사용자 로그아웃하여 root 로 다시 돌아오기
# exit
5) PHP-FPM 설정
php pool 폴더로 이동
# cd /etc/php/8.3/fpm/pool.d
목록 확인
# ls
www.conf 라는 기본 pool 파일이 있는데, 지워도 되긴하는데 그냥 두어도 무해하므로 그냥 두는것을 권장합니다.

- nginx 환경설정 생성기 : https://npm-config-generator.lael.app/phpfpm
위의 3번에서 생성한 사용자 아이디를 입력하세요.

이 글의 예제에서는 myuser1 이라는 사용자를 생성했기 때문에, myuser1 을 입력하겠습니다.
설정파일을 다운받아서 /etc/php/8.3/fpm/pool.d/ 위치에 넣어주세요.

php8.3-fpm 새로고침
# service php8.3-fpm reload
6) nginx 실제 웹 사이트 설정
우리는 HTTPS 사이트를 생성할 예정이기 때문에 다음의 무료인증서 발급 프로그램을 설치해야 합니다.
무료 인증서 발급 프로그램 certbot 설치
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
이제 nginx 환경설정 생성기를 이용해서 사이트를 구축해 봅시다.
- nginx 환경설정 생성기 : https://npm-config-generator.lael.app/nginx
첫번째 사이트(158-247-199-114.sslip.io) 생성
위의 생성기를 열고 적절한 값을 입력해 주세요. 요즘(2025년) 트랜드는 HTTPS만 운영하는 추세입니다.
요즘의 Modern Browser는 프로토콜 없이 URL만 입력할 경우, HTTPS 우선으로 접속을 시도합니다. (따라서 HTTPS, 443 만 오픈해도 서비스 운영에 지장이 없음)
여러분의 요구사항에 맞추어서 설정하세요.

사이트 설정 파일을 다운받아서 지정된 경로에 저장해 주세요.
nginx 새로고침
# service nginx reload
올바르게 접속이 가능한지 확인
본인의 도메인 주소를 입력하세요.
인증서 유효성 오류가 발생하면서, 웹 브라우저가 접속을 막을텐데, 적절히 접속해주세요.
웹 브라우저가 강력하게 막을 경우, 시크릿창을 사용해 접속해야 할 수도 있습니다.
https://158-247-199-114.sslip.io/

이렇게 표시되면 정상입니다. 접속이 안되거나 WEB SSL 이라는 메세지가 나오면, 무언가 잘못한 것이니 다시 살펴보세요.
사이트 설정이 잘 되었으므로 certbot 프로그램에게 인증서 발급 요청
certbot certonly --nginx
certbot 프로그램이 /etc/nginx/nginx.conf 파일을 읽고 적절히 동작할 것입니다.

별도로 웹루트에 파일을 생성하지는 않고, nginx.conf 파일을 잠깐 수정해서 인증 토큰을 발급 받습니다.
certbot 프로그램의 동작로그는 /var/log/letsencrypt/letsencrypt.log 에 기록됩니다.
발급된 인증서 목록들 확인
# certbot certificates
인증서 갱신 프로그램 확인
# service snap.certbot.renew status
인증서 갱신 프로그램 실행 주기 확인
# systemctl cat snap.certbot.renew.timer
OnCalendar 값이 2개 나올 것인데, 그렇게 하루에 2번 (한국시간 기준) 자동 갱신 시도 합니다.
인증서 갱신 연습 (시뮬레이션)
# certbot renew --dry-run
사이트 설정 파일을 수정해서 다시 적용해 주세요. (이제 유효한 인증서 파일이 있기 때문)

nginx 새로고침
# service nginx reload
내 사이트 다시 접속해 보기
https://158-247-199-114.sslip.io/
올바른 보안 인증서가 설정 되었기 때문에, 웹 브라우저가 경고 메세지 표시나 차단하지 않을 것입니다.
지금까지의 구성이 올바르게 되어 있는지 테스트
https://www.ssllabs.com/ssltest/index.html
SSL 테스트 서비스입니다.
본인의 도메인 주소를 입력하여 테스트를 진행해주세요.

제 글 내용대로 설정하면 A+ 나올 것인데, 적절히 수정해서 A 등급 이상만 나와도 서비스 운영에 지장은 없습니다.
여기가 서버 설치 영역이고,
여기서 부터는 어플리케이션 설치를 진행하겠습니다.
방금 구축한 이 사이트에서는 phpmyadmin 을 설치할 예정입니다.
이제 myuser1(생성한) 사용자로 로그인하세요.
만약 그새 사용자 비밀번호를 잊어버렸다면, root 사용자가 비밀번호를 리셋 할 수 있습니다.
root 사용자가 myuser1 사용자 비밀번호 리셋 (비밀번호를 잊어버렸을 경우에만)
# passwd myuser1
사용하시는 적절한 개발툴을 사용해서 myuser1 사용자로 로그인 해주세요.

웹루트로 이동
# cd 158-247-199-114.sslip.io
phpmyadmin 다운로드
공식 사이트는 여기 : https://www.phpmyadmin.net/
글 쓰고 있는 현재, 최신 Stable 버전은 5.2.2 이기 때문에, 이 버전을 설치하겠습니다.
# wget https://files.phpmyadmin.net/phpMyAdmin/5.2.2/phpMyAdmin-5.2.2-all-languages.zip -O dbmyadmin.zip.lock
다운받은 파일을 압축 해제하고, 이름 바꾸고, 다운받은 파일 삭제
# unzip dbmyadmin.zip.lock && mv phpMyAdmin-5.2.2-all-languages dbmyadmin && rm dbmyadmin.zip.lock
phpmyadmin 기본 환경설정
# mv dbmyadmin/config.sample.inc.php dbmyadmin/config.inc.php
dbmyadmin/config.inc.php 파일을 다음과 같이 수정해 주세요.
<?php
declare(strict_types=1);
$cfg['blowfish_secret'] = 'WZPxo7QGpAos3sbB}p660OuO]md7{d01';
$cfg['ShowDatabasesNavigationAsTree'] = FALSE;
$cfg['FirstLevelNavigationItems'] = 200;
$cfg['MaxNavigationItems'] = 200;
$cfg['NavigationDisplayLogo'] = FALSE;
$cfg['NavigationWidth'] = 300;
$cfg['SendErrorReports'] = 'never';
$i = 0;
// 접속할 서버 수 만큼 추가하세요.
// localhost 인 경우. 즉, phpmyadmin 이 설치된 서버에 mysql-server가 설치된 경우.
$i++;
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['ssl'] = FALSE;
// 그 외 대부분
$i++;
$cfg['Servers'][$i]['host'] = 'my-db-hosting1.vultrdb.com';
$cfg['Servers'][$i]['ssl'] = TRUE;
$cfg['Servers'][$i]['port'] = 16751;
$i++;
$cfg['Servers'][$i]['host'] = 'my-db-hosting2.vultrdb.com';
$cfg['Servers'][$i]['ssl'] = TRUE;
$cfg['Servers'][$i]['port'] = 3306;


웹브라우저에서 주소를 적절히 입력하여 phpmyadmin 접속
아마도 주소는 https://your-domain/dbmyadmin/ 일 것입니다.

MySQL 최고 관리자 계정으로 로그인
- 이 글을 따라서 직접 DB서버를 구축 했을 경우 : myroot
- DB호스팅을 이용했을 경우 : admin, root, dbadmin, vultradmin, doadmin, linroot

이 화면을 보았다면, 당신은 웹(Nginx), 앱(PHP), 디비(MySQL)의 모든 제어 권한을 확보한 것입니다.
첫번째 사이트(158-247-199-114.sslip.io) (phpmyadmin) 구축 끝!
두번째 사이트를 위해서 mysql user 및 mysql database 를 생성하도록 합시다.
이 예제에서는 아이디를 myblog, 호스트를 localhost 로 설정하겠습니다.


두번째 사이트(blog.158-247-199-114.sslip.io) 생성
블로그 도메인을 생성하고 워드프레스 설치해보기
- nginx 환경설정 생성기 : https://npm-config-generator.lael.app/nginx
지금까지 실습했던 것들을 되돌아 보면서 블로그 도메인을 구축해주세요.
[nginx conf 생성] -> [certbot 을 활용한 인증서 발급] -> [nginx 수정 후 새로고침]
해당 리눅스 사용자 아이디(myuser1)로 로그인하고, blog 웹 루트 위치로 이동합니다.
# cd blog.158-247-199-114.sslip.io/
워드프레스 최신버전 다운로드
# wget https://wordpress.org/latest.zip
압축해제
# unzip latest.zip
다운받은 설치파일 삭제
# rm latest.zip
워드프레스 구성파일을 wordpress 폴더에서 꺼내기
# mv wordpress/* .
비어있는 wordpress 폴더 삭제
# rmdir wordpress
웹사이트 접속 후 설치 진행!
웹브라우저에서 내 도메인 주소로 접속해보자.

필요한 정보는 이미 알고 있으므로, 편하게 설치를 진행해보세요.

워드프레스 블로그 구축 완료
이제 테마와 플러그인을 설정하시고, 나만의 블로그를 운영할 수 있습니다.
워드프레스의 세계로!
마지막
여러분이 원하는 웹 소프트웨어를 다운 받아서 설치 및 구동해보세요!
항상 도움이 됩니다. 처음 이 블로그를 봤을때는 이해도 못하고 따라하기만 했는데 지금은 없어도 알아서 할 정도까지 왔네요. 신기…
Practice makes perfect!
연습 계속 하다보면 어느새 전문가!
phpmyadmin 관련해서는 이전글에서도 어떻게 다운로드 받고 설치해서 접속해야 하는지에 대한 부분이 전혀 없네요. /var/www/html 에 wget으로 다운로드 받고 아이피주소/phpmyadmin 접속했는데 차단당하네요.
글 업데이트는 언제쯤 되는지 궁금합니다.
혼돈이 있는 부분을 수정했습니다. 다운로드는 wget 을 사용하며,
파일은
/usr/share/nginx/html에 다운받아야 합니다.win-acme 를 사용해서 xampp 에서 사이트를 사용 중에 vmware 에 ubuntu 를 설치 사용 하려고 하니 사용 중이라서 에러가 나는데 밑에 힌트 내용이 무슨 뜻인지 모르겠고요 ubuntu 에서 사용할 방법이 없을까요?
힌트 내용은 Hint: The Certificate Authority failed to verify the temporary nginx configuration changes made by Certbot. Ensure the listed domains point to this nginx server and that it is accessible from the internet. 입니다. 잘 부탁 드립니다.
웹 사이트는 80, 443 포트를 사용합니다. 포트는 1개의 프로그램에서 점유할 수 있습니다.
xampp 에서 해당 포트를 점유하고 있기 때문에, vmware ubuntu 에서 그 포트를 직접 바인딩 할 수 없습니다.
따라서 웹방문자->xampp->ubuntu 방식으로 통신되도록, xampp에 proxy 설정을 해야 합니다.
https://gist.github.com/codesorter2015/ece7dd46144d9fd0d6e01f2480ba7eb8 를 참고해 보세요.
하지만, 저라면 xampp 사용을 중단하고 vmware ubuntu 에서만 사용할 것 같네요. 윈도우 서버는 웹서버 용도로는 매우 안좋습니다.
NGINX 사이트 설정 생성에서 SSL 부분은 클라우드플레어를 사용 중이라면 아파치 사이트 설정 생성에서와 같이 임시 인증서 사용에만 체크를 해두면 되는건가요?
클라우드플레어에서 자동으로 설정될텐데, 임시 인증서 사용하거나, http만 사용해도 됩니다.
권장하는 사용법은, 해당 도메인에 대한 cloudflare에서 발급한 사설인증서를 임시인증서로 사용하는 것입니다.