도커 사용법, 데비안 os설치, nginx 설치, php-fmp, wordpress, myphpadin, myriaDB 올려보기(ft_server 과제풀이)

이호용·2021년 1월 15일
0

42_ft_server

목록 보기
6/6

머릿말

지난 시간에는 도커, nginx란 무엇인가에 대해 살펴보앗다.
이번시간에는 도커를 직접 사용해보며, 좀더 세부적으로 도커의 동작, 사용방법을 알아본다.

도커 사용범위 및 목표(42seoul학교 과제_ft_server).

  1. 하나의 컨테이너를 만들고, 그 컨테이너의 이미지는 데미안으로 함.
  2. 서버는 nginx를 이용.
  3. 서버는 wordpress, phpmyadmin,mysql을 연동.
  4. mysqlDB는 phpmyadmin과 wordpress에연동되어야함.
  5. 보안 SSL프로토콜을 사용가능하게 만듬.
  6. url에 따라 정확한 웹사이트 연결.
  7. 언제든 해제할 수 있게, autoindex적용

도커 설치

1. 도커를 다운 받아주세요.

2. Docker.dmg실핼.

3. 다운이 완료 되었으면, 도커를 실행

리눅스창에 명령어 입력

docker version

아래와 같이 version정보가 나온다면 정상적으로 도커설치 완료.

Client:
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b

4. 데비안 이미지로 컨테이너 생성

docker pull debian:buster
docker images

debian:buster 최신버전의 데비안이 설치된다.

docker run -it -p 80:80 -p 443:443 debian:buster

데비안 이미지로 포트 80과 443을 열어서 컨테이너를 생성한다.

5. nginx 설치.

apt-get update 
apt-get upgrade
apt-get -y install nginx 
service nginx start 
service nginx status

설치가 되었는지 확인을 하고,

http://localhost:80
http://localhost

  • 둘중 아무대나 들어가서 확인한다. 설치가 안되었다면, 다시 차근차근 진행해볼것.
  • nginx 란?

6. 이제 이 niginx에 보안을 더하기위해서 ssl을 넣는다.

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
  • 파일 키파일이름과 인증서는 아래에서도 사용되므로 그대로 유지하거나, 바꾼다면 config를 바꿀떄 까먹지 말고 같이 바꿔주어야한다.

-req : 인증서 요청 및 인증서 생성 유틸.
-rsa : 4096 방식으로 localhost.dev.key으로 공개키 만듬.
-newkey : 개인키를 생성하기 위한 옵션.
-keyout <키 파일 이름> : 키 파일 이름을 지정.
-out <인증서 이름> : 인증서 이름을 지정.
-days 365 : 인증서의 유효기간을 작성하는 옵션.
-nodes는 nginx를 킬떄 암호 입력하지 않고 ssl이 작동하도록 해줌.

C == 나라;
ST == 도시;
L == 시/도;
O == 기관명;
OU == 회사/팀;
CN == 도메인 이름;

10. nginx에 ssl 추가 및 리다이렉션을 진행하자.

vim etc/nginx/sites-available/default해서 아래와 같이 수정하자

  • default 파일은 nginx서버 페이지들을 관리한다.
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의 공개키 위치를 설정해준다.

11. default폴더를 수정햇으니 설정을 재부팅해서 적용시킴.

service nginx reload 
service nginx restart

적용시키고 https://localhost:443
여기로 접속해보면, 기존 http://localhost 페이지에 주소창 옆에 보안주의가 생겼다면 ssl설정이 완료 되었다.

12. nginx에 php-fpm 설치.

 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보다 더 빠른 속도로 작업이 진행되도록 할 수 있습니다.

13. nginx에서 php-fpm 파일 설정.

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

14. mariaDB(mysql)설치.

apt-get -y install mariadb-server php-mysql

mariaDB란? mariaDB란? 오픈소스 관계형 데이터베이스.

관계형 데이터베이스란?
관계형 데이터베이스(relational database)는 상호 관련된 데이터 포인트에 대한 액세스를 저장하고 제공하는 데이터베이스의 한 형태입니다. 관계형 데이터베이스는 데이터를 테이블에 직관적으로 간단하게 나타내는 관계형 모델을 기반으로 합니다. 관계형 데이터베이스에서 테이블의 각 열은 키(key)라고 하는 고유 ID를 가진 레코드입니다. 테이블의 컬럼(column)은 해당 데이터의 속성을 가지며, 각 레코드는 일반적으로 각 속성에 대한 값을 가지므로 데이터 포인트 간 관계를 손쉽게 구축할 수 있다.

원래는 데비안os에서는 mysql이 기본 관계형 데이터베이스로 사용되었다. 그러나, 오라클사에 인수합병된 mysql이 유료화를 선언하면서 데비안 9버전 이후로 myriaDB를 일반적으로 사용하는 관계형 데이터베이스가 되었다.

15. phpmyadmin 설치

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 환경으로 구성되어, 있어 쉽게 사용할수 있다.

16.phpmyadmin 을 blowfish암호 화를 진행한다.

다운 받은 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파일을 업데이트 햇으니, 적용시키기 위해 다시 스타트 해주자.

17. phpmyadmin 비밀번호 및 워드프레스 테이블 생성.

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와 설정한 비밀번호를 입력하면 접속하는걸 볼수 있다.

  • phpadmin 아이디 비번 입력 못하고 넘어가면 워드프레스 설정할떄 정상적으로 db에 접근못해, 에러가 날수 있으니 확인하고 넘어가자.

18. wordpress 설치하기.

이제 거의 다 왔다. 정상적으로 작동되는 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를 다운받는다. 그리고 압축을 풀고, 폴더에 넣어주고 권한 변경.

19. 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

짜잔 워드프레스가 열린다. 만약 데이터 베이스에 접근 못한다고 한다면, 워드프레스 설정을 다시 확인해보자.

특히 비번...

20. autoindex 추가.

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 되어 있는걸 확인할 수 있다.

21. 결과물.


0개의 댓글