지난 시간에는 도커, nginx란 무엇인가에 대해 살펴보앗다.
이번시간에는 도커를 직접 사용해보며, 좀더 세부적으로 도커의 동작, 사용방법을 알아본다.
리눅스창에 명령어 입력
docker version
아래와 같이 version정보가 나온다면 정상적으로 도커설치 완료.
Client:
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b
docker pull debian:buster
docker images
debian:buster 최신버전의 데비안이 설치된다.
docker run -it -p 80:80 -p 443:443 debian:buster
데비안 이미지로 포트 80과 443을 열어서 컨테이너를 생성한다.
apt-get update
apt-get upgrade
apt-get -y install nginx
service nginx start
service nginx status
설치가 되었는지 확인을 하고,
http://localhost:80
http://localhost
ssl과 http,https의 차이점을 모른다면 링크에 들어가서 개념을 집고 넘어가자. ssl개념 및 정리
apt-get -y install vim openssl
openssl req -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=KR/ST=Seoul/L=Seoul/O=42Seoul/OU=AITEAM/CN=localhost" -keyout localhost.dev.key -out localhost.dev.crt
mv localhost.dev.crt etc/ssl/certs/
mv localhost.dev.key etc/ssl/private/
chmod 600 etc/ssl/certs/localhost.dev.crt etc/ssl/private/localhost.dev.key
-req : 인증서 요청 및 인증서 생성 유틸.
-rsa : 4096 방식으로 localhost.dev.key으로 공개키 만듬.
-newkey : 개인키를 생성하기 위한 옵션.
-keyout <키 파일 이름> : 키 파일 이름을 지정.
-out <인증서 이름> : 인증서 이름을 지정.
-days 365 : 인증서의 유효기간을 작성하는 옵션.
-nodes는 nginx를 킬떄 암호 입력하지 않고 ssl이 작동하도록 해줌.
C == 나라;
ST == 도시;
L == 시/도;
O == 기관명;
OU == 회사/팀;
CN == 도메인 이름;
vim etc/nginx/sites-available/default해서 아래와 같이 수정하자
server {
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:442 ssl;
# ssl 설정
ssl on;
ssl_certificate /etc/ssl/certs/localhost.dev.crt;
ssl_certificate_key /etc/ssl/private/localhost.dev.key;
# 서버의 root디렉토리 설정
root /var/www/html;
# 읽을 파일 목록
index index.html index.htm index.nginx-debian.html;
server_name ft_server;
location / {
try_files $uri $uri/ =404;
}
}
Port 80 에 대해서는 301 Redirect 설정하고, 80포트로 접속했을떄, 443으로 접속하도록 바꾸어준다.
ssl을 on으로 설정하고, ssl의 공개키 위치를 설정해준다.
service nginx reload
service nginx restart
적용시키고 https://localhost:443
여기로 접속해보면, 기존 http://localhost 페이지에 주소창 옆에 보안주의가 생겼다면 ssl설정이 완료 되었다.
apt-get -y install php-fpm
php-fpm이란?
PHP-fpm은 PHP FastCGI Process Manger의 약자로, CGI보다 빠른 말할 수 있습니다.
CGI(Common Gateway Interface)란 웹서버(정보제공측)와 클라이언트(정보이용측)간에 필요한 정보교환을 가능하게 해주는 일종의 웹인터페이스라고(일종의 프로그램) 할 수 있습니다.
문제는 이 CGI는 만들떄마다, 프로세서를 생성하는데, Fast CGI는 만들 때마다 이미 생성 된 프로세스를 가지고 구동하기 때문에 처리가 CGI보다 빠릅니다. Apache에서는 PHP가 있기 때문에 처리가 가능하지만, nginx에서는 php-fpm을 따로 설치해 설치합니다.
동적 페이지를 사용할 때 CGI보다 더 빠른 속도로 작업이 진행되도록 할 수 있습니다.
vim /etc/nginx/sites-available/default
설치한 php-fpm파일을 동작시키기 위해서 default 파일을 수정합니다.
만약 버전이 7.3이 아니라면 버전에 맞추어, 입력해주면 됩니다.location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; index index.html index.htm index.nginx-debian.html; }
php-fpm 작동 확인
service php7.3-fpm start
service php7.3-fpm status
apt-get -y install mariadb-server php-mysql
mariaDB란? mariaDB란? 오픈소스 관계형 데이터베이스.
관계형 데이터베이스란?
관계형 데이터베이스(relational database)는 상호 관련된 데이터 포인트에 대한 액세스를 저장하고 제공하는 데이터베이스의 한 형태입니다. 관계형 데이터베이스는 데이터를 테이블에 직관적으로 간단하게 나타내는 관계형 모델을 기반으로 합니다. 관계형 데이터베이스에서 테이블의 각 열은 키(key)라고 하는 고유 ID를 가진 레코드입니다. 테이블의 컬럼(column)은 해당 데이터의 속성을 가지며, 각 레코드는 일반적으로 각 속성에 대한 값을 가지므로 데이터 포인트 간 관계를 손쉽게 구축할 수 있다.
원래는 데비안os에서는 mysql이 기본 관계형 데이터베이스로 사용되었다. 그러나, 오라클사에 인수합병된 mysql이 유료화를 선언하면서 데비안 9버전 이후로 myriaDB를 일반적으로 사용하는 관계형 데이터베이스가 되었다.
apt-get install -y wget
wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.tar.gz
tar -xvf phpMyAdmin-5.0.2-all-languages.tar.gz
mv phpMyAdmin-5.0.2-all-languages phpmyadmin
mv phpmyadmin /var/www/html/
phpmyadmin은 apt-get을 통해 설치를 할수 없다. 그래서 우리는 wget을 통해 phpmyadmin을 다운받는다. 다운받은 알집 파일을, 압축해제하고, phpmyadmin이라는 이름으로 바꾸어 html폴더에 넣어준다.
만약 phpMyadimin최신 버전을 받고 싶다면, phpmyadmin 사이트 로 들어가 최신 버전 링크를 복사하고 wget뒤에다가 붙여주면 최신버전을 이용할수 있다.
wget이란? 'Web Get'의 약어로 웹 상의 파일을 다운로드 받을 때 사용하는 명령어로 wget은 비 상호작용 네트워크 다운로더 이다. apt-get이랑 비슷한거라고 생각하자. phpmyadmin 이란? 설치한 mariaDB 관리 작업을 웹페이지를 통해 진행하도록 도와주며, GUI 환경으로 구성되어, 있어 쉽게 사용할수 있다.다운 받은 phpmyadmin는 다른 사용자에게 제공되는 페이지 이므로, phpmyadmin에서 보내는 데이터들을 암호화 하기 위해, blowfish암호 화를 진행한다.
cp -rp var/www/html/phpmyadmin/config.sample.inc.php var/www/html/phpmyadmin/config.inc.php
vim var/www/html/phpmyadmin/config.inc.php
15에서 옮긴 admin폴더에 sample로 제공되는 php파이를 config.inc.php로 바꾸어주고, 설정하기 위해 열어준다.
아래 사이트로 들어가.
블로피시 암호화
$ cfg [ 'blowfish_secret'] = '여기 코드!';
코드를 복사하고, config.inc.php파일에
$ cfg [ 'blowfish_secret'] = '넣어주세요.'
똑같은 코드를 찾아 넣어주면, 블로피쉬 암호화가 작동이된다.
service nginx reload
service mysql start
mysql파일을 업데이트 햇으니, 적용시키기 위해 다시 스타트 해주자.
mysql 접속
mysql -u root -p
$ Enter password: '엔터눌러주세요'
mysqladmin -u root -p password 새로운비밀번호
이렇게 변경하고 끝내버리면, 다음번에 mysql을 다시 켰을떄 비밀번호 설정이 날라간다.(정확히는 sql에 저장은 되어잇지만, mysqladmin에서 적용이 안됨.)
mysql>flush privileges;
위의 코드를 추가해서 mysql이 꺼졌다 켜져도, 정상적으로 비밀번호를 유지하게끔 코드를 입력.
비밀번호 설정하는 다른 방법(안해도 됨.)mysql>show databases;
mysql>use mysql;
mysql>update user set password=password('새로운비밀번호') where user='root';
mysql>flush privileges;
이렇게 하면 root로 저장된 모든 비밀번호를 똑같이 변경 시킬수 있다.
비밀번호를 설정햇으니, 다시 mysql을 재부팅하고,
service mysql start
https://localhost/phpmyadmin/ 에 들어가서 아이디 root와 설정한 비밀번호를 입력하면 접속하는걸 볼수 있다.
이제 거의 다 왔다. 정상적으로 작동되는 db를 활용할 wordpress를 설치한다.
mysql
show databases;
CREATE DATABASE IF NOT EXISTS wordpress;
show databases;
exit
워드프레스를 사용하기 위해 필요한 DB를 만들고,
wget https://wordpress.org/latest.tar.gz
tar -xvf latest.tar.gz
mv wordpress/ var/www/html/
chown -R www-data:www-data /var/www/html/wordpress
phpmyadmin과 같이 wget을 사용해서 wordpress를 다운받는다. 그리고 압축을 풀고, 폴더에 넣어주고 권한 변경.
다운받은 wordpress를 작동시키기 위해 설정을 진행하는데
cp var/www/html/wordpress/wp-config-sample.php var/www/html/wordpress/wp-config.php
vim var/www/html/wordpress/wp-config.php
워드프레스에서 기본적으로 제공하는 config파일을, 우리가 사용하는 mysql위에서 잘 돌아가도록 설정해준다.
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );
/** MySQL database username */
define( 'DB_USER', 'root' );
/** MySQL database password */
define( 'DB_PASSWORD', '위에서 설정했던 비밀번호 입력' );
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );
/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
service nginx reload -> localhost/wordpress
짜잔 워드프레스가 열린다. 만약 데이터 베이스에 접근 못한다고 한다면, 워드프레스 설정을 다시 확인해보자.
특히 비번...
vim etc/nginx/sites-available/default
default 파일을 열고
# etc/nginx/sites-available/default
# Autoindex
index index.html index.htm index.php #index.ngiinx-debian.html;
server_name ft_server;
location / {
# autoindex on 추가
autoindex on;
try_files $uri $uri/ =404;
}
localhost 함수에 autoinsdex on을 추가해준다.
그리고 localhost에 접속을 해보면, html폴더에 있는 항목들이 나열되어 있는걸 볼수 있다.
만약 항목들이 나열되는게 아니라 단순히 nginx사이트만 보인다면, html폴더에 들어가, index index.html index.htm index.php #index.ngiinx-debian.html; 여기 파일들과 이름이 같은 파일들이 있는지 확인하다 있다면,이름을 바꿔주거나 삭제하고 사이트에 접속하면 정상적으로 autoindex 되어 있는걸 확인할 수 있다.