-
[Amazon Lightsail] Ubuntu 22.04 LTS 웹서버(Apache, PHP, MariaDB) 구성Knowledge Base 2024. 4. 10. 02:06
진행단계의 대부분은 root 권한으로 실행
설치된 운영체제 정보 확인
#lsb_release -a
Timezone 설정
#dpkg-reconfigure tzdata
GUI환경이 나오면 Asia, Seoul을 차례대로 선
시간확인
#date
시스템 시간 설정 확인
#timedatectl
현재 설치된 프로그램을 최신버전으로 패치
패키지 목록갱신
#apt update
최신버전으로 패치
(설치과정에서 일부의 프로그램 설정파일을 초기화할 것인지 물어보면 Keep Local Version(기본값) 선택
#apt upgrade
설치, 제거, 업데이트 과정중에 생긴 gabage file 제거
#apt autoremove
재부팅
#reboot
방화벽 확인
ufw (uncomplicated firewall) 설치
#apt install ufw
port open 후 활성화 (22, 80, 443 만 오픈 : port 22 미오픈시 콘솔접속 불가)
#ufw allow 22 #ufw allow 80 #ufw allow 443 #ufw enable #ufw status
Apache2 설치
#apt install apache2
설치된 아파치 버전 확인
#apache2 -v
apache2가 정상적으로 설치되었다면 브라우저로 접속하면 아래와 같은 화면이 출력됨
https 인증서 관련 프로그램 설치
#apt install ssl-cert
무료인증서 발급 프로그램 설치
#apt install certbot
사용할 apache2 Module 활성화
#a2enmod rewrite #a2enmod headers #a2enmod ssl #a2dismod -f autoindex
변경사항 적용
#service apache2 restart
Apache2 환경설정 문법 검사
#apache2ctl -S
기본 언어셋 변경
#vi /etc/apache2/conf-available/charset.conf
주석처리된 UTF-8 주석(#)제거
추가보안설정
#vi /etc/apache2/conf-available/security.conf
아래를 참고하여 설정
추가보안패치 (.git, .svn, .env 등의 파일보호, 기타 web Access가 되어서는 안될 파일들의 접근제어)
#vi /etc/apache2/apache2.conf
추가할 내용
# 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|config|sql|sh|key|yml|lock|bak|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><DirectoryMatch "/(data/session)/">Require all denied</DirectoryMatch>변경사항 적용
#service apache2 restart
Apache 개별사용자 권한 설정
Permission(권한) 문제 해결을 위한 모듈설치 (shell, sftp, web 권한이 동일하게 취급)
#apt-cache search mpm-itk #apt install libapache2-mpm-itk #chmod 711 /home #chmod -R 700 /home/*
변경사항 적용
#service apache2 restart
기본사이트 추가설정
#vi /etc/apache2/sites-available/000-default.conf
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
PHP설치 (8.1)
Ubuntu 22.04 LTS에서는 PHP8.1이 설치됨
#apt install php
버전확인
#PHP -v
* apt update 및 apt upgrade를 해주면 최신의 상태를 유지해 줄 수 있다.
PHP 모듈 설치
#apt install php-mbstring #apt install php-gd #apt install php-curl php-xml #apt install php-bcmath #apt install php-oauth #apt install php-mysql #apt install composer
* 모듈설명
- 멀티바이트 문자열 처리모듈
- 이미지 처리모듈
- 원격지 정보를 불러오는 모듈
- 수학 연산 확장모듈
- OAuth 인증모듈
- MySQL 연동 모듈
- PHP패키지 의존성 관리 프로그램 (Composer)
더 설치할 모듈을 확인후 선택하여 설치
#apt-cache search php- | grep ^php- | grep module
PHP 보안설정
*php를 해석하는 확장자를 제한
#vi /etc/apache2/mods-available/php8.1.conf
그림을 참고하여 추가<FilesMatch ".+\.ph(p3|p4|p5|p7|ar|t|tml)$">Require all denied</FilesMatch>적용을 위해 Apache 재시작
#service apache2 restart
PHP Default Timezone 설정 (권장)
#vi /etc/php/8.1/apache2/php.ini #vi /etc/php/8.1/cli/php.ini
위 2개 파일에서 추가
date.timezone = Asia/Seoul
입력하되 제일 앞의 주석(#)제거
변경사항 적용
#service apache2 restart
phpmyadmin 설치
#wget https://files.phpmyadmin.net/phpMyAdmin/5.1.3/phpMyAdmin-5.1.3-all-languages.zip -O /var/www/html/dbmyadmin.zip.lock
* 브라우저에서 http://내아이피/dbmyadmin 으로 접속하면 phpMyAdmin 뜨면 정상
phpmyadmin 환경설정 진행
#mv /var/www/html/dbmyadmin/config.sample.inc.php /var/www/html/dbmyadmin/config.inc.php #vi /var/www/html/dbmyadmin/config.inc.php
내용을 모두 지우고 아래의 내용으로 채움
<?php
declare(strict_types=1);
$valid_passwords = ['webuser1' => 'webpass1', 'webuser2' => 'webpass2'];
$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';
*/도메인 적용 및 테스트
일반사용자 계정 생성
user1 사용자계정 생성 후 해당 사용자로 전환하여 www 디렉토리 생성 (/home/user1/www)
#adduser user1 #su -l user1 #mkdir www exit
웹사이트를 위한 Apache 환경설정파일 작성
* 아래의 환경설정 생성기로 자신의 환경에 맞추어 입력 (80, 443포토 열려있는지 확인)
Apache2 환경설정 생성기 https://webmaster.cafe/tools/apache-conf-generator/
Apache2 환경설정 생성기에서 두번째 탭 [HTTPS (임시인증서)] 내용을 복사하여
/etc/apache2/sites-availible/자신의 도메인.conf 위치에 생성
#/etc/apache2/sites-available/[[사이트주소]].conf
사이트 활성화 (*.conf 파일이 있는 위치에서 실행)
#a2ensite [[자신의사이트주소]].conf
* 사이트 비활성화 명령어는 #a2dissite [[자신의사이트주소]].conf
변경사항 적용
#service apache2 reload
무료인증서 발급을 통해 보안서버를 구축하려면
Apache2 환경설정 생성기의 네번째 탭 [인증서 설정가이드]로 이동하여 3) cerbot을 사용하여 도메인 인증 및 인증서 발급을 실행
#certbot certonly --webroot --webroot-path=/home/user1/www -d [[MySite]].com -d www.[[MySite]].com
다시 Apache2 환경설정 생성기의 세번째 탭 [HTTPS (LetsEncrypt)]로 이동하여 /etc/apache2/sites-availible/자신의 도메인.conf 변경
* 임시 인증서로 구동했으므로 이제 유효한 인증서로 구동해야 함적용 마무리
#service apache2 reload
웹브라우저로 접속하면 보안서버가 적용되어 있음
인증서관련
Let's Encrypt는 3개월 짜리 인증서이며 주기적으로 갱신해 주어야 한다.
#letsencrypt renew
인증서 갱신을 주기적으로 실행해주면 된다.
#crontab -e
10 5 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log 15 5 * * 1 /usr/sbin/service apache2 reload
위 내용을 등록
MariaDB 설치
mariadb의 server와 client패키지 설치
#apt install mariadb-server #apt install mariadb-client
설치후 mariadb 실행하여 접속가능한지 확인
#mariadb
Mariadb 보안설정
#mariadb-secure-installation
* 처음 실행시에는 패스워드가 지정되어 있지않기때문에 Enter로 패스하고 이후 root 패스워드 지정, 나머지 익명계정 내용등은 삭제
Mariadb에 접속하여 정상적으로 접속가능한지 확인
#mariadb -u root -p password :
'Knowledge Base' 카테고리의 다른 글
Laravel 11.x api.php가 존재하지 않음 (0) 2024.04.05 Laravel 11.x 에서 lang 폴더가 존재하지 않음 (0) 2024.04.01 sail 명령어 (0) 2024.04.01