Ubuntu 20.04 LTS 에서 웹서버(Apache + PHP + MySQL) 구성하기
이 글을 통해 Ubuntu 20.04 LTS 운영체제에서 APM 웹서버를 구축하는 방법에 대해 설명하도록 하겠습니다.
저는 Ubuntu 9.04 버전부터 10년 넘게 구축 방법을 작성/유지보수 하고 있으며, 그동안 많은분들이 참고해주셨고, 별 문제가 없었습니다.
일반 사업체 및 실무 서비스에서 사용할 수 있는 안정적인 구축 방법을 설명 하겠습니다.
* 리눅스 명령어 환경으로 접속하는 방법을 모른다면 이 글로 이동하세요.
리눅스 명령어 환경으로 원격 접속하는 방법 : 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/
* 유료 도메인을 구매 하려면 https://blog.lael.be/post/6357 글로 이동하세요.
다음의 클라우드 호스팅에서 정상 동작을 확인함
- AWS EC2, Ubuntu Server 20.04 LTS (HVM), SSD Volume Type, x86 및 Arm
- AWS Lightsail, Ubuntu 20.04 LTS
- Vultr, Ubuntu 20.04 x64 (https://www.vultr.com/) (*추천 : 한국에 서버가 있으며, 성능이 좋으며, 저렴합니다.)
- Linode, Ubuntu 20.04 LTS (https://www.linode.com/)
- Digital Ocean, 20.04 (LTS) x64 (https://www.digitalocean.com/)
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
다수의 서버를 구축할 때, 모든 서버의 운영체제(OS)를 동일하게 선택하는 것이 좋습니다. 예상하지 못한 문제가 발생할 확률이 크게 줄어듭니다.
대다수의 클라우드 호스팅 업체에서는 유지보수 기간이 긴 LTS 버전만을 선택할 수 있도록 하고 있습니다.
현재는 구축하면 2030년까지 업데이트를 제공받을 수 있는 Ubuntu 20.04 LTS 버전을 권장합니다.
이 글의 모든 단계는 root 권한으로 진행합니다.
1) root 사용자 권한으로 전환
서버의 최고관리자(root)로 로그인합니다. 우리는 서버를 이용하는 것을 넘어서, 서버를 조작할 예정이기 때문에 최고관리자 권한이 필요합니다.
이미 root 계정으로 로그인 했다면 이 단계를 건너 뛸 수 있습니다.
보통 서버 설치 후 사용하는 최초의 계정은 root 이거나, root 명령어를 사용할 수 있는 sudo 사용자 입니다.
- 자신의 계정이 sudo 명령어를 사용할 수 있는지 확인
# id
계정이 sudo 그룹에 속해 있으면 sudo 명령어를 사용할 수 있습니다.
- 관리자급 명령어(sudo)를 사용해서 root 계정으로 강제 로그인
# whoami
# sudo su
2) 쉘 기본 언어값 변경
서버 운영 중에 문제가 발생했을 때 구글 검색을 할 수 있게 하는 기초 작업입니다.
쉘의 기본 언어값을 영어로 변경합니다.
시스템의 변화가 생기는 것은 아니며, 오직 쉘 메세지만 영어로 바뀝니다.
qwerty 라고 입력해봅시다. 반드시 qwerty 라고 입력하세요.
(참고 : 의미없는 명령어이며 무조건 에러가 발생합니다. 에러메세지 테스트 용도임.)
# qwerty
이미 영어메시지가 출력된다면 다음 단계로 넘어가세요.
< 그림 : 동일한 서버. 메세지 언어설정만 다름 >
영어가 아닐 경우 다음 명령어를 사용하여 변경.
# vi /etc/default/locale
LANG="en_US.UTF-8"
3) 시스템 정보 확인
먼저, 이 서버의 사양을 확인해 보도록 하자.
아래에 몇개의 서버 정보 확인 명령어를 적어두었으며, 나중에 서버 장애가 생겼을 때 이러한 명령어를 사용해 문제의 원인을 파악할 수 있어야 한다.
한번씩 입력해 보는 것을 추천함.
설치된 운영체제 버전 정보 확인
# lsb_release -a
CPU 모델 확인
# cat /proc/cpuinfo | grep "model name" | head -1
CPU 코어수 확인
# cat /proc/cpuinfo | grep "model name" | wc -l
시스템 메모리 정보 확인
# free -m
총 메모리 : total, 현재 사용가능 메모리 : available
비 필수적인 캐시 메모리를 정리하기
# sync && echo 3 > /proc/sys/vm/drop_caches
일반적으로는 OS가 캐시메모리를 관리하기 때문에 굳이 사용할 필요없지만, Server Administrator 라면 알아두면 좋다. 위 명령어 입력 후 free -m 명령어를 다시 입력해보자.
디스크 파티션 확인
# lsblk
Type 이 disk, part 인 것의 항목을 확인해보자.
디스크 파티션 확인 (fdisk)
# fdisk -l
결과 화면이 약간 어려울 수 있으니 그냥 한번 읽어보고 넘어가도록 하자.
디스크 여유 공간 확인
# df -h
Mounted on 가 (/) 인 것의 Size, Used, Avail, Use 를 확인해 두도록 하자. 디스크가 가득 차면 실행 중인 어플리케이션에 심각한 문제를 줄 수 있다.
최종 부팅 시간 확인
# who -b
서버 부하량, 부팅 시간, 서버 접속자 확인
# w
시스템 서비스 확인
# systemctl list-unit-files
STATE 항목을 보세요.
b (back), spacebar (next), q (quit) 를 사용해 탐색합니다.
자동 실행 목록에 등록된 시스템 서비스 확인
# systemctl list-unit-files --state=enabled
운영체제가 부팅될 때 시스템 서비스로서 실행되는 프로그램의 목록을 확인해보자.
어떤 시스템 서비스가 설치될 때 VENDOR PRESET에 의해 자동 실행될지 아닐지 최초 결정하게 된다. 이러한 서비스 프로그램을 설치 후 자동실행을 제어할 때 사용하는 명령어이다.
4-1) 시스템 시간 설정 - 표시되는 형태 (Timezone)
시간 설정이란, 절대적인 시간(timestamp) 및 표시되는 형태(timezone) 설정을 말한다.
먼저 timezone 을 설정하고, 그 다음 timestamp 를 설정할 것이다.
Timezone 설정하기
이것을 하지 않으면 클라우드 서버 사업자가 미리 지정해 둔 지역의 Timezone 을 할 것이다. (주로, GMT)
- 데비안 패키지 재설정 TimeZone Data 를 실행한다.
#dpkg-reconfigure tzdata
GUI 환경이 나올 텐데, 순서대로 Asia - Seoul 을 선택하면 된다. a 와 s 키를 누르면 관련 위치로 이동한다.
dpkg-reconfigure 를 사용할 수 없는 환경(예를 들자면 docker ubuntu)이라면 아래의 명령을 실행하세요. (동작은 완전히 동일함)
# ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
현재 시간 확인
# date
4-2) 시스템 시간 설정 - 절대 시간 기준 값 (Timestamp)
시스템이 과부하되면 시스템 시간이 아주 조금씩 지연됩니다.
따라서 시간이 일정하게 유지되도록, 주기적으로 시간을 교정하는 프로그램을 실행하는 것이 좋습니다.
Ubuntu OS설치시 기본적으로 설정되고, 항상 잘 동작하기 때문에 확인하는 명령어만 살펴보고 가겠습니다.
# timedatectl
# timedatectl timesync-status
아마도 NTP service : active, 그리고 Server 는 169.254.169.123 또는 ntp.ubuntu.com 일 것입니다.
네트워크 시간 동기화는 32second ~ 34min 8second 주기로 이루어질 것입니다.
5) 시스템 메모리 크기를 확인하고 가상 메모리 설정하기
리눅스에 swap 이라는 가상메모리 설정이 있습니다. 이것을 설정하면 실제 메모리 공간보다 더 많은 공간을 사용할 수 있습니다.
이것은 과거에 기술적, 금액적 문제로 인해 서버의 메모리 용량이 부족하던 시절에 쓰던 방식입니다.
이것을 설정하면 서버의 메모리가 부족한 상황이 되면, swap을 사용하면서 서버 요청을 잘 처리하게 됩니다.
swap을 사용할 때 cpu를 조금 더 사용하게 되므로, 과도한 swap 을 사용하지 마시고 적절히 사용하세요.
무조건 1GB를 설정하고, 나중에 조정하는것을 추천합니다. 이 작업은 서버의 재부팅을 필요로 하지 않고 실시간으로 적용됩니다.
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://github.com/laelbe/linux-simple-scripts/blob/main/_server_tools/add_swapfile
swap 추가 후 제거를 원하면 소스코드를 보고, 적절히 작업하세요. (swapoff, fstab 제거, swap파일제거)
6) 현재 운영체제에 설치되어 있는 프로그램 최신버전 패치
기억하세요! 어떠한 운영체제를 설치하든 (윈도우 포함) 가장먼저 해야 할 일은 업데이트 입니다.
APT 목록 갱신
APT란 Advanced Packaging Tool 을 뜻합니다.
우리는 apt 라는 우분투에 내장된 프로그램을 이용해서 프로그램을 쉽게 설치/제거 할 수 있습니다.
패키지 목록 갱신.
#apt update
현재 운영체제에 설치되어있는 프로그램 최신버전 패치
#apt upgrade
설치 중 일부 프로그램 설정파일을 초기화 할것인지 물어볼 수도 있는데 기본값인 Keep Local Version 을 선택한다. (미리 선택되어 있으므로 Enter 만 누르면 된다.)
설치, 제거, 업데이트 과정중에 생긴 찌꺼기 파일이 있으면 제거.
#apt autoremove
아주 가끔씩 찌꺼기 파일이 생긴다. 지우지 않아도 문제는 없다.
시스템 기초 설정이 끝났기 때문에, 이제 웹 어플리케이션 서버를 구축하도록 하겠습니다.
Apache2, PHP, MySQL 순서로 구축하도록 하겠습니다.
7) Apache2 설치
# apt install apache2
- 설치된 아파치 버전 확인
# apache2 -v
Server version: Apache/2.4.41 (Ubuntu)
- 웹브라우저에 서버의 아이피를 입력해서 Apache 동작을 확인해보자. 방화벽(Security Group등)이 있다면 TCP 80 포트를 허용해주어야 한다.
< Apache2 웹서버가 정상적으로 설치되었고 실행 중이라면, 이 화면이 표시될 것이다. >
https 인증서 관련 프로그램 설치
# apt install ssl-cert
무료 인증서 발급 프로그램 설치
# apt install certbot
- 널리 사용되는 Apache2 Module 활성화
이걸 하지 않으면 워드프레스를 포함한 많은 프로그램이 구동되지 않거나 사용 제약이 걸리게 된다.
# a2enmod rewrite # a2enmod headers # a2enmod ssl # a2dismod -f autoindex
- 변경사항 적용
# service apache2 restart
다음 단계부터 파일 생성, 파일 수정등의 작업을 할 것입니다.
오타 입력을 방지하고 빠른 오류 발견을 위해 Apache2 환경설정 문법검사 명령어를 실행해 봅시다.
- Apache2 환경설정 문법검사
# apache2ctl -S
환경설정 문법검사가 통과하면, 현재 서버의 설정파일의 분석결과가 표시됩니다.
만약, 환경설정 문법에 오류가 있다면 해당 오류 내용과, 오류가 발생한 Line을 표시해줍니다.
이 명령어를 실행해서 Apache2 환경설정 문법오류가 있는지 확인 할 수 있습니다.
* vi 에디터 사용법 : https://blog.lael.be/post/7321
- 기본 언어셋 변경
# vi /etc/apache2/conf-available/charset.conf
기본 언어값 UTF-8 에 대해서 주석처리되어 있을 텐데 주석(#)을 제거해 준다.
- 추가 보안 설정
# vi /etc/apache2/conf-available/security.conf
매우 권장하는 보안 설정이므로 Ubuntu Apache 패키지 제작자가 미리 작성해 두었다.
아래의 그림을 참고하여 설정하도록 하자.
#추가 보안패치. (.git, .svn, .env 등 dot로 시작하는 파일 및 폴더 보호, Web Access가 되어서는 안될 파일들의 접근 제어)
서비스 운영중 의도치않게 발생할 수 있는 보안 문제를 막는 코드이다.
# vi /etc/apache2/apache2.conf
파일 중간(약 199번째 줄)의 <FilesMatch “^\.ht”> 구문 다음에 추가한다.
TIP : vi 에디터 열자마자 199G (대문자) 입력하면 바로 이동합니다.
# deny file, folder start with dot <DirectoryMatch "^\.|\/\."> Require all denied </DirectoryMatch> # deny (log file, binary, certificate, shell script, sql dump file) access. <FilesMatch "\.(?i:log|binary|pem|enc|crt|conf|cnf|sql|sh|key|yml|lock|gitignore)$"> Require all denied </FilesMatch> # deny access. <FilesMatch "(?i:composer\.json|contributing\.md|license\.txt|readme\.rst|readme\.md|readme\.txt|copyright|artisan|gulpfile\.js|package\.json|phpunit\.xml|access_log|error_log|gruntfile\.js|bower\.json|changelog\.md|console|legalnotice|license|security\.md|privacy\.md)$"> Require all denied </FilesMatch> # Allow Lets Encrypt Domain Validation Program <DirectoryMatch "\.well-known/acme-challenge/"> Require all granted </DirectoryMatch> # Block .php file inside upload folder. uploads(wp), files(drupal), data(gnuboard). <DirectoryMatch "/(uploads|default/files|data|wp-content/themes)/"> <FilesMatch ".+\.php$"> Require all denied </FilesMatch> </DirectoryMatch>
- 변경사항 적용
# service apache2 restart
Apache 개별 사용자 권한 설정
웹 서비스 구동시 발생할 수 있는 Permission(권한) 문제를 해결하기 위한 모듈을 설치한다.
다음과 같이 설정하면 shell의 권한과 sftp의 권한과 web의 권한이 동일하게 취급되며 보안에 도움이 된다.
순서대로 입력하면 된다.
# apt-cache search mpm-itk
libapache2-mpm-itk - multiuser module for Apache
# apt install libapache2-mpm-itk
# chmod 711 /home
# chmod -R 700 /home/*
(/home/* 안에 아무파일도 없을 경우 마지막 구문은 에러가 날 수 있다. 에러가 나면 무시하도록 하자.)
- 변경사항 적용
# service apache2 restart
- 기본사이트 추가 설정
# vi /etc/apache2/sites-available/000-default.conf
ServerName localhost 한 줄 추가해주세요.
ServerName localhost
- HTTPS 기본사이트 켜기
# mv /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/000-default-ssl.conf
mv 명령어를 사용하는 이유에 대해 질문을 받아서 작성합니다. 물론 이 내용을 이해하지 못하여도 사용에 지장이 없습니다. Apache 는 가장 처음으로 로딩하는 파일을 기본 사이트로 취급합니다. 기본 사이트는 지정한 ServerName 에 모두 해당하지 않을 경우, 연결되는 사이트입니다. Apache 의 conf 로딩 순서는, 알파벳 순서에 따릅니다. 그리고 숫자를 더 우선시 합니다. 따라서 위의 mv 명령어를 사용하지 않고, 당신의 도메인이 d 보다 앞단계 일 경우 (예를 들어 apple.com) 이 도메인 conf가 먼저 불러와지게 되고 기본 사이트가 됩니다. 우리는 위의 default-ssl 을 기본 사이트로써 동작하기를 원하기 때문에, 로딩 우선순위를 높이기 위해서, 이름을 000-default-ssl.conf 로 변경하는 것입니다.
이 파일에도 ServerName localhost 를 추가해주세요.
# vi /etc/apache2/sites-available/000-default-ssl.conf
# a2ensite 000-default-ssl.conf
- 환경설정 구문확인 (결과 메세지도 확인해보세요)
# apache2ctl -S
- 설정 적용
# service apache2 reload
8) PHP 설치
Ubuntu 20.04 LTS 에서는 PHP 7.4 버전이 설치된다.
만약 당신의 소프트웨어가 PHP 7.4 에서 오류가 발생한다면, ppa 등을 통해서 낮은 버전의 php 를 설치하지 마시고, OS 버전을 낮춰서 Ubuntu 18.04 LTS 를 사용하는것을 권장합니다.
소프트웨어 의존성 관리는 매우 번거로운 작업이기 때문입니다.
이 글에서는 PPA나 개별저장소, 소스설치가 아니라, Ubuntu 공식 저장소에서 지원하는 패키지로만 설치합니다. Ubuntu 20.04 LTS 는 장기적으로 사용할 수 있게 출시된 버전이며, 2030년 4월까지 업데이트가 제공됩니다. Ubuntu SecurityTeam 은 공식 지원하는 모든 패키지에 대해서 Auditing, Tracking, Reporting, Fixing, Testing 을 수행합니다. https://wiki.ubuntu.com/SecurityTeam
All binary packages in main and restricted are supported by the Ubuntu Security team for the life of an Ubuntu release. (https://wiki.ubuntu.com/SecurityTeam/FAQ)
https://packages.ubuntu.com/focal/php
Ubuntu PHP 는 매우 많은 사람들이 사용하고 있으며, 따라서, Ubuntu 개발팀에서 우선적으로 관리하는(main) 소프트웨어 패키지입니다.
PHP 소프트웨어는 매우 오랜 역사를 가지고 있고, 검증되어서 취약점의 거의 없습니다. 혹시나 알려지지 않은 취약점이 발생하더라도 Ubuntu Security Team 에 의해 Zero-day patch 가 이루어지니 안심하시고 사용하시면 됩니다.
# apt install php
시스템에 Apache2 가 설치되어 있기 때문에 Apache2 PHP module (libapache2-mod-php7.4) 도 같이 설치되고 적용된다.
- 설치된 PHP 버전 확인
# php -v
글을 작성하는 현재 설치된 버전은 PHP 7.4.3 이며, 여러분의 버전은 이것보다 높을 것이다. (물론 주기적으로 업데이트 명령어인 apt update 및 apt upgrade 를 해주면 최신의 상태를 유지할 수 있다.)
기타 널리 사용되는 PHP모듈을 설치한다.
- 다국어 처리모듈
#apt install php-mbstring
- 이미지 처리모듈
#apt install php-gd
- 원격지 정보 불러는 모듈 (워드프레스 등에서 쓰임)
#apt install php-curl php-xml
- 수학 연산 확장 모듈
#apt install php-bcmath
- OAuth 인증 모듈 (클라우드 API 등 연동서비스에서 쓰임)
#apt install php-oauth
- MySQL 연동 모듈 (mysqli, pdo-mysql 관련 함수를 사용할 수 있게됨)
#apt install php-mysql
- Composer 설치 (PHP 패키지 의존성 관리 프로그램)
#apt install composer
더 설치하고 싶은 PHP 모듈이 있다면 아래 명령어 입력 후 선택하여 설치하면 된다.
#apt-cache search php- | grep ^php- | grep module
PHP 보안 설정
ubuntu php 패키지에서 php 를 해석하는 확장자가 너무 많이 설정되어 있다.
#vi /etc/apache2/mods-available/php7.4.conf
.php .phar .phtml 확장자 파일이 기본적으로 php를 해석할 수 있게 되어있다.
과거 16.04 패키지 보다 많이 개선되었지만 여전히 잠재적 문제를 포함하고 있다.
웹페이지에서 파일업로드 구현시 이 확장자 파일을 제대로 막아주지 못하면 사이트가 위험하게 된다.
.php 를 제외한 나머지의 접근을 차단하자.
아래 그림의 위치에 추가한다. 보안사고 방지를 위해서 몇가지 php관련 확장자 접근제어 설정도 추가하였다.
<FilesMatch ".+\.ph(p3|p4|p5|p7|ar|t|tml)$"> Require all denied </FilesMatch>
적용을 위해서 아파치 재시작
PHP 가 Apache 의 모듈로 동작하는 방식이므로 PHP 의 변경사항이 생기면 Apache 를 재시작 해 주어야 한다.
#service apache2 restart
PHP Default timezone 설정하기
PHP 의 Date 관련 함수에서 사용할 기본 기준 시간을 지정하는 작업입니다.
이 값을 설정하지 않으면 시스템 timezone 을 사용합니다.
PHP Default timezone 을 설정하는 것은 필수는 아니지만 매우 권장하는 작업입니다. 설정해주세요.
동일한 작업을 2개의 파일에 적용해 주어야 합니다.
- 이것은 Apache2 + PHP 일때 참조하는 파일입니다.
#vi /etc/php/7.4/apache2/php.ini
* 편집 가이드
vi 에디터 진입 후 -> /timezone 엔터 i -> 편집 -> 적절한 위치에 Asia/Seoul 입력 -> 저장
- 이것은 cron이나 console에서 PHP를 실행할때 참조하는 파일입니다. 동일하게 timezone 을 설정해 주세요.
#vi /etc/php/7.4/cli/php.ini
date.timezone 값을 찾아서 주석을 제거하고 시간을 설정해주세요.
이 값을 찾아서
이렇게 변경.
변경사항 적용하기
#service apache2 restart
phpinfo 파일 생성
php 환경설정 정보를 볼 수 있는 파일을 생성한다. 의도치 않게 이 정보가 노출되더라도 보안에 위협이 되지는 않는다.
# echo "<?php if (gethostname() == (empty(\$_GET['q']) ? '' : \$_GET['q'])) phpinfo(); ?>" > /var/www/html/myphpinfo.php
웹 브라우저에서 http://서버의아이피/myphpinfo.php?q=서버의 호스트 이름 로 접속해 보자.
이 페이지에서 “default_charset”, “Default timezone” 값을 살펴보세요. (UTF-8, Asia/Seoul)
phpmyadmin 설치하기
phpmyadmin 은 php로 제작된 mysql 관리툴입니다. 매우 안정적이고 안전한 프로그램입니다. 설치해봅니다.
# wget https://files.phpmyadmin.net/phpMyAdmin/5.1.3/phpMyAdmin-5.1.3-all-languages.zip -O /var/www/html/dbmyadmin.zip.lock
# cd /var/www/html && unzip dbmyadmin.zip.lock && mv phpMyAdmin-5.1.3-all-languages dbmyadmin
웹 브라우저에서 http://서버의아이피/dbmyadmin 로 접속해 보자.
이렇게 뜨면 정상입니다. 지금은 DB 접속정보가 없어서 할 수 있는 작업이 없기 때문에, 화면이 표시되는지만 확인해주세요.
phpmyadmin 웹소프트웨어의 환경설정을 진행합니다.
phpmyadmin 이 설치된 폴더로 이동한 후에 config.sample.inc.php 파일 이름을 config.inc.php 로 바꿉니다. (mv 명령어 또는 비슷한 명령어 사용)
# mv /var/www/html/dbmyadmin/config.sample.inc.php /var/www/html/dbmyadmin/config.inc.php
config.inc.php 파일을 열어서 다 지우고, 아래의 내용으로 변경해줍니다.
# vi /var/www/html/dbmyadmin/config.inc.php
vi 에디터 진입 후 :set paste 엔터 -> 복사 붙여넣기 모드 설정하면 정상적인 내용 붙여넣기가 가능해집니다.
예제를 잘 만들어 두었으니 코드를 해석해보고 적절히 응용해보세요.
<?php declare(strict_types=1); $valid_passwords = ['webuser' => gethostname(), 'webuser2' => gethostname()]; $valid_users = array_keys($valid_passwords); $user = $_SERVER['PHP_AUTH_USER']; $pass = $_SERVER['PHP_AUTH_PW']; $validated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]); if (!$validated) { header('WWW-Authenticate: Basic realm="password?"'); header('HTTP/1.0 401 Unauthorized'); die ("Not authorized"); } $cfg['blowfish_secret'] = 'RkyE=T6t6KjX65KPC7/XNQ\Bk9EhBXar'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ $cfg['NavigationTreeEnableGrouping'] = false; $cfg['MaxNavigationItems'] = '200'; $cfg['FirstLevelNavigationItems'] = '200'; $cfg['ShowDatabasesNavigationAsTree'] = false; $cfg['NumRecentTables'] = 0; /** * Servers configuration */ $i = 0; $i++; $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['port'] = '3306'; /* $i++; $cfg['Servers'][$i]['host'] = 'mydatabase-instance01.cohyfvqnmewt.ap-northeast-2.rds.amazonaws.com'; $cfg['Servers'][$i]['port'] = '3306'; */ /* $i++; $cfg['Servers'][$i]['host'] = '211.192.211.192'; $cfg['Servers'][$i]['port'] = '3306'; */
dbmyadmin 을 다시 접속하면, 아이디와 비밀번호를 물어볼 것인데, id 는 webuser, pw 는 phpinfo에서 사용하였던 호스트이름을 입력해주세요.
선택 작업 1. ssh 및 sftp 비밀번호 접속 허용하기
이 작업은 인증키를 사용한 로그인을 못하는 초보자분들께만 권장합니다. 항상 내 아이피만 접속할 수 있도록 방화벽을 잘 설정해주세요. 서버가 이미 비밀번호 로그인 방식을 허용하도록 설정되어 있을 수도 있습니다.
내 IP주소 확인하기 : https://ipconfig.tools/ko/
ssh daemon 환경설정
# vi /etc/ssh/sshd_config
아래 그림을 적절히 참고하여, 설정 값을 변경하세요.
반드시 방화벽 설정을 하세요. 대부분의 클라우드 호스팅에서는 네트워크 방화벽 기능을 지원합니다. (TCP 22)
변경사항 적용
# service ssh restart
접속중인 쉘의 연결은 끊기지 않습니다.
사용자 비밀번호 설정
# passwd 사용자이름(아이디)
비밀번호 접속 확인
Filezilla (https://filezilla-project.org/download.php?type=client) 같은 FTP 프로그램을 사용해서 서버에 접속해 보세요.
선택 작업 2. 동시 접속자 수 설정하기
- Ubuntu Apache 에서 순간 동시 처리가능한 갯수는 150개 입니다.
1000개의 처리 요청이 있다면 150개는 프로세서가 즉시 처리하고, 나머지 850개는 대기열에서 대기(stall)하다가 순서대로 처리됩니다.
* CPU 나 Memory 사용량이 높지 않은데, 사이트가 5초 대기한 후에 접속된다면 이 부분을 설정해야 합니다.
* 또는, 서비스 운영중에 /var/log/apache2/error.log 파일에 아래의 메세지가 표시되면 설정합니다.
server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
이 설정을 하여 순간동시 처리 갯수를 늘릴 수 있습니다.
실행모드 확인
# a2query -M
prefork 라고 뜰겁니다.
prefork 관련 동시접속 설정
# vi /etc/apache2/mods-available/mpm_prefork.conf
당신의 서버 메모리가 4GB 이상이고 대기시간 문제가 발생하고 있다면 아래와 같이 적용해보세요.
<IfModule mpm_prefork_module> StartServers 10 MinSpareServers 10 MaxSpareServers 20 MaxRequestWorkers 300 ServerLimit 300 MaxConnectionsPerChild 0 </IfModule>
설정 변경 후 Apache 를 재시작하면 적용됩니다.
규칙
StartServer 와 MinSpareServers 는 같은값이어야 합니다.
MaxSpareServer 는 MinSpareServers 의 2배이어야 합니다.
ServerLimit 의 기본값은 256 입니다.
MaxRequestWorkers 는 ServerLimit 을 넘을 수 없습니다.
만약 MaxRequestWorkers 값이 256 이 넘는값을 설정하려면 같은 값으로 ServerLimit 도 설정해주세요.
*) 이것을 손대기 전에 (이미지 캐시서버 구축하기 : https://blog.lael.be/post/7605) 글을 읽고 적용해보세요.
물리적으로 connection 수가 줄어들기 때문에 더 많은 동시접속을 처리할 수 있게 됩니다. 그리고 2대가 분산처리하기 때문에 페이지가 더 빠르게 표시됩니다.
9) 실제 사용 테스트 (실제로 사용해 보는 예제)
1] 도메인 준비하기
1) 유료 도메인을 구매 하려면 https://blog.lael.be/post/6357 글로 이동하세요.
자신의 PC 에 설치한 가상머신이나 회사 내부 사설망의 서버에도 도메인 연결이 가능합니다. 무엇을 하든 반드시 도메인을 준비해주세요.
2) 무료 도메인을 활용할 수도 있습니다.
이 글에서는 https://nip.io/ 를 사용하도록 하겠습니다.
무료도메인 nip.io 를 기준으로 설명하겠습니다.
만약 당신의 서버의 IP 가 52.79.173.82 이라면 52-79-173-82.nip.io 도메인을 사용할 수 있습니다.
이 본문 예제에서는 다음의 3가지 도메인을 사용합니다.
52-79-173-82.nip.io mysite1.52-79-173-82.nip.io mysite2.52-79-173-82.nip.io
도메인을 사용해서 myphpinfo 페이지를 열어보도록 합시다. 아래의 파란부분을 자신에 맞게 수정하세요.
http://52-79-173-82.nip.io/myphpinfo.php?q=ip-10-12-14-10
2] 일반 사용자 계정 생성
일반 사용자 추가하기
원하시는 아이디 있으면 그것으로 하세요. 선호하는 아이디가 없으면 myuser1 으로 하세요.
#adduser myuser1
참고로 반대동작을 하는 계정삭제 명령어는 (계정을 삭제하고 홈디렉토리도 삭제함) 아래와 같습니다.
#userdel -r myuser1
보통 웹루트는 홈디렉토리에 하지 않습니다.
(일반적으로 www, htdocs, public_html 라는 이름을 웹루트로 사용합니다.)
저는 주로 www 이름을 사용합니다. 사용자변경 후 www 디렉토리를 생성하고 빠져나오기
#su -l myuser1
#mkdir 52-79-173-82.nip.io #mkdir mysite1.52-79-173-82.nip.io #mkdir mysite2.52-79-173-82.nip.io
#exit
3] 웹사이트 Apache 환경설정파일 작성
사이트 생성 파일 작성할 때, 실수가 생기는 경우가 많아서, 환경설정 생성기를 만들었습니다.
자신의 환경에 맞추어 입력하시면 됩니다. 브라우저 즐겨찾기에 등록 후 필요할 때 마다 쓰시면 됩니다.
Apache2 환경설정 생성기 https://webmaster.cafe/tools/apache-conf-generator/
이 본문의 예제에서는 다음의 값을 사용하겠습니다.
https://webmaster.cafe/tools/apache-conf-generator/?s=myuser1&h=52-79-173-82.nip.io&r=&t=&d=%2Fhome%2Fmyuser1%2F52-79-173-82.nip.io
내용을 복사하여 /etc/apache2/sites-available/52-79-173-82.nip.io.conf 위치에 생성.
위에서 생성한 설정 구문을 아래의 위치에 넣어주세요.
/etc/apache2/sites-available/[[사이트주소]].conf
사이트 켜기
오타를 방지하기 위해서 a2ensite 앞몇단어 + 탭 을 입력해주세요.
# a2ensite 52-79-173-82.nip.io.conf
참고 : 사이트 끄는 명령어
# a2dissite 52-79-173-82.nip.io.conf
변경사항 적용
# service apache2 reload
무료 인증서를 발급 받으시려면
위의 apache2 reload 를 완료한 후에, 4번째 탭으로 이동.
방화벽에서 anywhere(0.0.0.0/0) TCP 80, TCP 443 포트가 열려있어야 합니다.
< Congratulations! 를 확인하셔야 합니다. >
참고 : 사이트 주소와 연결되는 환경설정 파일을 보는 명령어
# apache2ctl -S
이 상태에서 다시 3번째 탭 내용을 적용해야 합니다.
아까 작성했던 /etc/apache2/sites-available/52-79-173-82.nip.io.conf 파일 내용을 교체하세요.
아까는 유효하지 않은 임시인증서로 구동을 했던 것이고, 이제는 방금 발급받은 유효한 인증서로 구동을 하는 것입니다.
최종 적용
# service apache2 reload
주소창에 열쇠가 보이면 정상이다.
인증서 갱신 프로그램 주기적으로 실행하기
https://blog.lael.be/post/5107 이동 후 4번 인증서 갱신 프로그램 주기적으로 실행하기 보고 똑같이 입력하세요.
10) MYSQL 설치
요즘엔 웹어플리케이션 서버만 구축하고, DB는 DB호스팅 서비스를 이용하는 분위기입니다.
여기에서는 이러한 DB호스팅을 사용하지 않고, 직접 MYSQL DB서버를 구축하는 방법에 대해 설명하도록 하겠습니다.
MySQL 명령어 클라이언트 프로그램 설치 - 외부 DB를 사용하든 안하든 설치하는 것이 좋습니다.
#apt install mysql-client
위의 패키지를 설치하면 console 환경에서 mysql 명령어를 사용할 수 있게 된다.
MySQL 서버 설치
#apt install mysql-server
설치된 버전 확인
#mysqladmin version
MySQL 8.0.28 버전이 설치되었다. (여러분의 버전은 이것보다 높을 것입니다.)
기본 설정으로 MySQL 의 root 사용자는 auth_socket 인증을 사용하도록 설정되어 있으며, 따라서 리눅스 root 사용자는 비밀번호 입력없이 MySQL root 사용자로 로그인 할 수 있다.
추가적으로, auth_socket 이 설정된 사용자는 비밀번호 설정이 되지 않는다. (정확히 말하자면 비밀번호 설정은 되는데 그 값을 저장하지 않는다. 즉, 절대로 비밀번호 로그인 불가능)
다시 말해서, 기본적으로 root 사용자로 비밀번호 로그인을 할 수 없다는 것이다. (auth_socket 인증을 사용하도록 설정되어 있으므로)
굳이 기본 설정을 건드리지는 않겠다.
MySQL 8.0 부터 바뀐 서버 기본값 살펴보기 : https://dev.mysql.com/blog-archive/new-defaults-in-mysql-8-0/
MySQL 8.0 부터 기본 설정값이 적절하게 바뀌어 있으므로, 추가적인 설정을 하지 않고 바로 사용하면 됩니다.
추가적으로 변경을 원하는 값이 있다면, 다음의 명령어를 사용하여 값을 변경할 수 있다.
# vi /etc/mysql/mysql.conf.d/mysqld.cnf
웹UI를 사용하여 서버에 로그인
# cat /etc/mysql/debian.cnf
이 명령어를 사용해서 서버의 기본 최고관리자의 비밀번호를 확인한다.
조금전에 설치한 phpmyadmin 을 통해서 DB서버에 로그인 해 보도록 하자.
MySQL 사용자 계정 생성
빨간 부분만 입력하세요.
참고 : MySQL 사용자 계정 삭제하는 방법
이제 리눅스의 세계로~
11) 워드프레스 설치 예제
먼저 myuser1 계정으로 로그인합니다. (myuser1 계정으로 전환합니다.)
위의 9번 예제에서 myuser1 계정을 생성 했을 것입니다.
웹루트로 이동합니다.
# cd 52-79-173-82.nip.io/
워드프레스 최신버전을 다운받습니다.
# wget https://wordpress.org/latest.zip
압축해제
# unzip latest.zip
다운받은 설치파일 삭제
# rm latest.zip
워드프레스 구성파일을 wordpress 폴더에서 꺼내기
# mv wordpress/* .
사용하지 않는 wordpress 폴더 삭제
rmdir wordpress
웹사이트 접속 후 설치 진행!
웹브라우저에서 내 도메인 주소로 접속해보자.
필요한 정보는 이미 알고 있으므로, 편하게 설치를 진행해보세요.
6] 완성
완성! 적당히 테마 선택하시고 꾸미시면 됩니다.
워드프레스의 세계로!
마지막
여러분이 원하는 웹 소프트웨어를 다운 받아서 설치 및 구동해보세요!
드디어 20.04 LTS 도 올라오는 군요 감사합니다! 화이팅
화이팅입니다!
20.04 글이 없는지 찾아보고 있었는데 올라오고 있네요 ;-; 언제나 도움받고 있습니다, 감사합니다!
정말 감사합니다.
16.버전때부터 알고서 서버에 적용 했었는데
20.04버전까지 업데이트를 해주시다니 정말 감사합니다.
20.02버전까지 업데이트 해주셔서 감사합니다.
음…서버를 종종 엎는다면, 이 글을 그때마다 보면서 셋팅하는게 맞을까요?
셋팅후 도커이미지를 만들어서 사용하는게 맞을까요?
전체를 이미지화 해서 사용하는게 맞나요? 셋팅값만은 따로 불러 오고 우분투 이미지만 불러오는게 맞을까요?
도커를 아직 잘 모르지만 종종 우분투 셋팅을 반복하는것 보다 도커 이미지를 확용하는게 어떻지 궁금합니다.
그냥 셋팅이 맞나요? ^^
docker 를 쓰신다면 이미지화 하시는게 좋고, 저는 설치스크립트를 따로 작성해서 쓰고 있습니다.
한줄 입력하면 자동세팅 되도록이요.
둘다 편할것 같다는 생각이 듭니다. 설치크립트는 공유하실 생각이 없으신지요? ^^
설치스크립트는 클라우드별, 환경별로 다르게 짜야되요. OS가 같더라도 환경이 다르기 때문에 docker 스크립트와, aws 스크립트도 다릅니다.
제가 만든 – 제가 다니는 회사에서 사용하고 있는 – 스크립트는 너무 개인화가 되어 있어서 General Purpose 용도로 만들기가 어렵네요.
오~~ 드디어 완성되었군요. 축하하고, 감사합니다.
안녕하세요! 초보자인데 정말 쉽고 편하게 구축이 가능하도록 친절하게 설명해주셔서 감사드려요!
덕분에 성공했습니다.
혹시 워드프레스가 아닌 filezilla를 이용해서 웹사이트를 구축하고 싶은데 웹사이트의 php파일을 어디에 올려야 할까요?
/home/myuser1/xx-xx-xx-xx.nip.io 폴더에 php파일을 올리면 되는걸까요?
그렇다면 접속 시 url은 어디로 접속하면 될까요?
만약 제가 잘못하고 있는 것이 있다면 어디에 php파일을 올려야할까요..
그 전에 해야할 작업들이 더 있을까요?
현재는 워드프레스구축을 제외하고 해당 글의 모든 작업을 마친 상태이고 다른 작업은 하지않았습니다.
php파일을 작성 후 웹서버에 올려서 사이트를 구축하고 싶은데 잘 안되네요
접속 시
Not Found
The requested URL was not found on this server.
라는 오류페이지가 반환됩니다.
/home/myuser1/xx-xx-xx-xx.nip.io/index.php 에 올리시면 됩니다!
그 외에 별다른 작업은 필요하지 않나요?
/home/myuser1/xx-xx-xx-xx.nip.io/aaa.php와 같이 올려봤지만 “The requested URL was not found on this server.” 에러가 뜹니다
aaa.php파일명을 index.php로 변경해도 같은 에러가 뜨고요
혹시 https://webmaster.cafe/tools/apache-conf-generator/?s=myuser1&h=52-79-173-82.nip.io&d=%2Fhome%2Fmyuser1%2F52-79-173-82.nip.io 이것의 환경설정 파일을 적용하셨나요?
네! 모든 포스트에 있는 작업 그대로 따라했습니다.
https 자물쇠표시도 뜨는데 not found 에러가 뜨네요.. 아니면 그냥 php파일자체가 에러일까요? 문법이 안맞는다거나 하는..
해결했습니다! 코드에 문제가 있었나봐요!!
db설정도 이상하게 해놨어서 바꾸고 코드도 따로 수정했더니 됐어요!
혹시 몰라 보안그룹도 0.0.0.0/0으로 모든 포트/ip에 대해 인아웃 둘다 허용 해놨습니다.
도메인으로 ping을 보내봐도 잘 가는데 웹 페이지에 사이트를 올리는게 안되네요..
여담인데 블로그 둘러보다가 알게됐는데 이렇게 대단하신 선배님이 계신 것도 자랑스럽네요.. 열심히 노력해서 선배님처럼 되고싶다고 생각했습니다
해결되셨다니 다행입니다!
여러가지 시도하셨던 것들이 실력 향상에 큰 도움이 되었을겁니다.
LetsEncrypt 로 무료인증서 받는부분에서
순서대로 잘따라갔는데요 마지막에 There were too many requests of a given type :: Error creating new order :: too many certificates already issued for “nip.io”. Retry after 2022-12-01T10:00:00Z: see https://letsencrypt.org/docs/rate-limits/ 이런 에러가 뜨는 이유를 혹시알수있을까요? nip.io 란 도메인주소가 너무많아서 지금은 사용할수없다는뜻일까요? 혹시 다른방법이있을까요 도메인을사야될까요!?
여러가지 방법이 있겠지만.. 아무래도 도메인을 구매하는게 좋을것 같습니다.
https://blog.lael.be/post/6357 글을 참고해서 나만의 도메인을 구매해보셔요.
처음에 실행할때 잘되었다가 컴퓨터 끄고 다음날 다시해서 apache start 나 restart 해보니가
apache2: Syntax error on line 251 of /etc/apache2/apache2.conf: Syntax error on line 16 of /etc/apache2/sites-enabled/127.0.0.1.nip.io.conf/127.0.0.1: without matching section 이런오류가뜨는데 뭔지알수있을까요 ?
아이피가 127.0.0.1 인가요? 우분투 데스크탑에서 작업하신거에요?
아이피 설정이 잘못되었어요.
감사합니다!!아이피수정후 다시해보니 잘되었습니당!!!
mysqladmin version 이명령어를입력하면 mysqladmin: connect to server at ‘localhost’ failed
error: ‘Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)’
Check that mysqld is running and that the socket: ‘/var/run/mysqld/mysqld.sock’ exists! 이런오류가납니다 ㅠㅠ
mysql-server 프로그램을 설치하지 않은 경우입니다. 혹시나 설치했다면, 서버를 재부팅해보세요.
cd /var/www/html && unzip dbmyadmin.zip.lock && mv phpMyAdmin-5.1.3-all-languages dbmyadmin
이 명령어를 입력하면
Archive: dbmyadmin.zip.lock
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
unzip: cannot find zipfile directory in one of dbmyadmin.zip.lock or
dbmyadmin.zip.lock.zip, and cannot find dbmyadmin.zip.lock.ZIP, period.
이런 오류가 납니다..ㅠ
바로 윗줄인 wget https://files.phpmyadmin.net/phpMyAdmin/5.1.3/phpMyAdmin-5.1.3-all-languages.zip -O /var/www/html/dbmyadmin.zip.lock 을 잘못 실행하신겁니다.
https://files.phpmyadmin.net/phpMyAdmin/5.1.3/phpMyAdmin-5.1.3-all-languages.zip 파일을 다운받아서 /var/www/html/dbmyadmin.zip.lock 위치에 저장해야합니다.
호스트 이름을 어디서 확인이 가능한가요…?
스크린샷의 빨간 사각형 부분입니다.
명령어로는 #hostname 이라고 입력하면 나옵니다.
certbot인증서 과정에서
IMPORTANT NOTES:
– The following errors were reported by the server:
Domain: ip.nip.io
Type: dns
Detail: no valid A records found for ip.nip.io; no
valid AAAA records found for ip.nip.io
– Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
– We were unable to subscribe you the EFF mailing list because your
e-mail address appears to be invalid.You can try again later by
visiting https://act.eff.org.
ip는 혹시 몰라서 가렸습니다 어떻게 해야 다음 과정으로 넘어갈수있을까요..?
혹시 192.168 로 시작하는 사설아이피 인가요?
안녕하세요 좋은 글 감사합니다.
워드프레스 설치 과정에서 질문이 있는데
무료 도메인으로 세팅 후에 나중에 유료 도메인을 연결하려고 하는데
이런 경우 새로운 디렉토리에 다시 워드프레스를 설치해야하나요? 아니면 기존 디렉토리 이름을 바꾸거나 하면 될까요??
워드 프레스 설치 자체를 어느 디렉토리에 해야하는지가 중요한 요소인지 궁금합니다!
만약 그런 경우라면, 도메인 주소만 추가하시면 됩니다.
디렉토리 및 사용자 계정 모두 유지, 도메인주소만 변경.
감사합니다 !
한 가지 질문이 더 있는데, 해당 과정 따라서 해보니
/wp-admin 에는 접속이 잘 되는데
/wp-admin에서는 로그인 정보가 틀릭나 wp-config.php 정보가 잘못됐다는 에러가 나오고 있습니다.
혹시 ip 주소에서는 에러가 나는게 맞는 상황인가요?
ip주소로 접속했을 경우에는 사이트가 뜨지 않게 작업하셔야 합니다.
항상 도메인주소/wp-admin 으로 접속하세요.
안녕하세요 ! 위 내용을 따라 잘 설치를 하였습니다! 몇 가지 궁금한 사항이 있습니다.
1. 사용자 변경 후 www 디렉토리 빠져나오기 부분 이해가 안됩니다 ㅜ
예시와 같이 했을 시 www 디렉토리가 안보입니다.
2. SSL인증 이후 404에러만 화면에 보입니다. (IP로 접속시 정상으로 화면이 나타납니다.)
3. MySQL 접속이 안됩니다….
안녕하세요. 너무 큰 도움을 받아서 댓글을 남깁니다.
덕분에 vultr 웹호스팅의 ubuntu 환경에서 워드프레스 설치에 성공했습니다.^^
자세한 설명으로 ubuntu 환경을 이해하는 데도 큰 도움이 됐습니다.
감사합니다~
반갑습니다.
운영자님의 이 포스트 따라하기로 odroid-HC2에 우분투 서버 20.04 설치 후 잘 되고 있습니다.
가끔 에러가 나면 속수무책으로 헤매기만 합니다.
오늘 아침에 서버를 켜고 워드프레스를 접근하려 했더니 DB 오류가 나더군요. xshell 프로그램으로 서버에 접근해 mysql 건드려 보면 mysqld.sock 에러가 나고… 이런 경우가 잦습니다. 해서 결국은 mysql 삭제 후 재설치한 후 백업한 DB 복원하면 또 돌아갑니다.
근데 오늘은 xshell 도 튕겨나오고, 서버도 접속하면 크롬에서도
페이지가 작동하지 않습니다. (저의 서버) DNS에서 전송한 데이터가 없습니다. err_empty_response
에러 메시지가 나오고 더이상 접근이 안됩니다.
서버를 끄고 다시 켜면 되는 것 같고, 좀전에 혹시나해서 xshell 대신 MobaXterm 프로그램으로 접속해 있다가 브라우저에서 위의 에러 메시지를 뿜어내고, 다시 튕겨나가길래 혹시나 하고 service apache2 restart 하니 또 살아납니다.
이 포스트에서 하라시는 대로 그대로 따라해 워드프레스도 설치하고, 최근엔 그누보드5을 설치해 홈페이지도 따로 꾸며 서버 돌리고 있는데…. 난감합니다..
도움 말씀 부탁드립니다.
아는 게 없으니 어떤 정보를 드려야 에러에 대한 처방을 내리실 수 있는지도 잘 모릅니다. 이 질문도 혼자만의 푸념이나 되지 않았으면 합니다.
감사합니다.
root 사용하지 마시고, 별도의 슈퍼유저 계정을 생성해서 사용하세요.
안녕하세요.
몇 번의 시행착오는 있었지만 덕분에 디지털오션 클라우드에 설치하고 세팅도 무사히 마쳤습니다.
그런데 몇가지 궁금한 점이 있어서 문의 드립니다.
1.
mysql 대신 MariaDB를 사용하고 싶은데 방법을 모르겠습니다.
본문 내용 그대로 따라하면서 mysql 설치 부분만 건너뛰고
https://blog.wsgvet.com/ubuntu-2004-install-mariadb/
를 참고해서 MariaDB를 설치했는데 phpmyadmin 로그인이 안되더라고요.
어떤식으로해야 MariaDB를 사용할 수 있는지 궁금합니다.
2.
그리고 어제밤 세팅 마치고 그누보드 깔고 글쓰기 테스트도 마친 홈페이지가 오늘 디비 정보가 틀리다는 문구가 뜨고
phpmyadmin 접속해서 로그인하면
mysqli::real_connect(): (HY000/2002): No such file or directory
이런 문구가 뜨더군요.
검색해보니 서버가 안 켜져 있어서 발생한다고 하는데,
서버는 켜져있고,
$> sudo mkdir /var/mysql
$> sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
이렇게 하면 된다고 하기에 해봤지만 이것도 안 먹히더라고요.
보통 이런 경우에는 어떻게 해야 하는지 궁금합니다.
그리고 클라우드 직접 운영시 이런 에러가 종종 발생하나요?
설치하고 뭐 하지도 않았는데 하루도 안지나서 이러지 좀 걱정이네요.
지금은 테스트 하느라 클라우드 계속 삭제하고 다시 세팅해보는 중이라 문제 없지만
실제 운영이 이래버리면 큰 문제일거 같아서요.
service mysql start
라는 명령어를 실행하시면 됩니다.
답변 감사합니다.
안녕하세요.
올려주신 내용을 그대로 따라해서 서버 설치 완료하고 홈페이지 이전도 마쳤습니다.
감사합니다.
그런데 한가지 해결 안되는게 있어서 문의 드립니다.
php.ini에서 아래처럼 설정했습니다.
file_uploads = On
upload_max_filesize = 100M
post_max_size = 100M
phpMyAdmin의 파일 업로드 용량이 기존 2M에서 100M로 정상적으로 변경이 되었데
그누보드 게시판은 파일 업로드 용량이 10M로 나옵니다.
게시판 설정에서 업로드 파일 한개당 용량을 임의로 100M로 입력 한 후 10M보다 큰 파일 첨부해서 테스트하면
“올바른 방법으로 이용해 주십시오.”라고 나옵니다.
phpinfo.php 정보를 봐도
post_max_size 100M 100M
upload_max_filesize 100M 100M
정상적으로 보여집니다.
혹시나해서
upload_max_filesize = 2M
로 바꿔보면 phpMyAdmin의 파일 업로드 용량이 2M로 변경이 되는데
역시나 그누보드게시판 파일 업로드 용량은 10M로 나옵니다.
저 10M 고정값이 어디서 나오는지 모르겠고 어디서 어떤 식으로 손봐야 할지를 모르겠습니다.
제 나름대로 해볼건 다해보고 검색을 해봤지만 마땅한 방법이 없어서 문의 드립니다.
이런 경우 어디를 체크해 봐야 하는 건가요?
혹시라도 서버 자체의 문제인가해서
동일 서버에 동일한 사양에 nginx으로 세팅해봤는데 그누보드 게시판 업로드 용량 100M로 정상적으로 나오더라고요.
프로그램 자체적으로 업로드 용량제한을 설정할 수 있습니다. 그누보드의 업로드 용량제한 설정부분을 살펴봐주세요.
친절하신 답변 정말 감사합니다.
프로그램 자체적으로 업로드 용량 제한 설정이 무얼 말씀하시는 건지 모르겠습니다.
동일 회사 동일 사양의 서버에
하나는 이곳에 올려주신 내용 그대로 Apache로 세팅해서 그누보드를 설치했고
다른 하나는 nginx으로 세팅해서 동일하게 그누보드를 설치했습니다.
그누보드는 최신버전 설치 후 다른거 건드린게 없습니다.
그리고 php.ini에서 동일하게 업로드 용량을 100M으로 설정했습니다.
Apache는 phpmyadmin의 업로드 용량은 100M로 변경이 되는데 그누보드 업로드 용량은 10M로 고정되는 상황이고
nginx phpmyadmin, 그누보드 업로드 용량 모두 100M로 변경이 되어 업로드되는 상황입니다.
아무리 검색해 봐도 답이 안 나오네요.
동일한 문제 있다는 글을 하나 보긴 했는데 해결책은 없더라고요.
혹시 모르니 Apache 새로 설치해서 테스트해 봐야겠습니다.
그누보드 관리자 -> 게시판 관리 -> 게시판 수정 -> 파일 업로드 용량 부분을 확인해보세요.
아… 지금까지 제가 바보짓을 하고 있었네요.
이제서야 원인을 알았습니다.
라엘님 블로그를 보고 처음 세팅 성공하고 운영중인지라 사소한 부분을 못보고 있었습니다.
다시 한번 감사합니다.