감사하고 유용하게 참고한 글들
Docker Desktop for Mac에서 Stable
버전 설치
설치가 완료되면 상단바에 고래 아이콘 등장한다. 도커가 실행중이라는 의미, 즉 터미널에서 도커 접근 가능.
컨테이너 조회 (실행 중, 중지된 것까지 포함)
docker ps -a
컨테이너 중지
docker stop <컨테이너 이름 혹은 아이디>
컨테이너 시작 (중지 된 컨테이너 시작) 및 재시작 (실행 중인 컨테이너 재부팅)
docker start <컨테이너 이름 혹은 아이디>
docker restart <컨테이너 이름 혹은 아이디>
컨테이너 접속 (실행중인 컨테이너에 접속)
docker attach <컨테이너 이름 혹은 아이디>
docker pull debian:buster
확인하려면 docker images
docker run -it --name con_debian -p 80:80 -p 443:443 debian:buster
-i
옵션은 interactive(입출력), -t
옵션은 tty(터미널) 활성화--name [컨테이너 이름]
옵션을 통해 컨테이너 이름을 지정할 수 있다. 안하면 랜덤으로 생성? -p 호스트포트번호:컨테이너포트번호
옵션은 컨테이너의 포트를 개방한 뒤 호스트 포트와 연결한다.buster
를 명시하지 않아도 자동으로 최신 버전을 불러온다.터미널 창이 아래처럼 바뀌면 데비안 bash에 접속한 것이다.
종료하고 싶다면 exit
. 종료한다고 컨테이너가 중지되는 것은 아니다. 컨테이너는 실행 중인 상태에서 접속만 끊은 것이라고 생각하면 된다. 다시 접속하고 싶다면 attach 명령어 사용.
apt-get -y install nginx curl
apt-get
을 사용한다.apt-get update
, apt-get upgrade
순서대로 진행하고 다시 설치.cURL
은 서버와 통신할 수 있는 커맨드 명령어 툴이다. url을 가지고 할 수 있는 것들은 다할 수 있다. 예를 들면, http 프로토콜을 이용해 웹 페이지의 소스를 가져온다거나 파일을 다운받을 수 있다. ftp 프로토콜을 이용해서는 파일을 받을 수 있을 뿐 아니라 올릴 수도 있다. nginx 서버 실행
service nginx start
nginx 상태 확인
service nginx status
[ ok ] nginx is running.
가 뜨면 서버가 잘 돌아가고 있다는 뜻이다.
localhost:80 에 접속해보면 서버와의 성공적인 첫 소통을 확인할 수 있다.
같은 내용을 터미널을 통해서도 확인할 수 있다. 아까 다운받은 curl 을 사용한 방식이다.
curl localhost
nginx 중지
service nginx stop
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)는 SSL
위에서 돌아가는 HTTP의 평문 전송 대신에 암호화된 통신을 하는 프로토콜이다.
이런 HTTPS를 통신을 서버에서 구현하기 위해서는 신뢰할 수 있는 상위 기업이 발급한 인증서가 필요로 한데 이런 발급 기관을 CA(Certificate authority)라고 한다. CA의 인증서를 발급받는것은 당연 무료가 아니다.
self-signed SSL 인증서는 자체적으로 발급받은 인증서이며, 로그인 및 기타 개인 계정 인증 정보를 암호화한다. 당연히 브라우저는 신뢰할 수 없다고 판단해 접속시 보안 경고가 발생한다.
self-signed SSL 인증서를 만드는 방법은 몇 가지가 있는데, 무료 오픈소스인 openssl
을 이용해 쉽게 만들수 있다.
개인키(.key)
, 서면요청파일(.csr)
, 인증서파일(.crt)
을 openssl이 발급해준다.apt-get -y install openssl
openssl req -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=KR/ST=Seoul/L=Seoul/O=42Seoul/OU=Lee/CN=localhost" -keyout localhost.dev.key -out localhost.dev.crt
localhost.dev.key 와 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
etc/nginx/sites-available/default
파일을 수정해줄건데, 좀 더 편한 접근을 위해 vim을 설치해준다.
apt-get -y install vim
vim etc/nginx/sites-available/default
default
파일에 https 연결을 위한 설정을 작성한다.
원래는 서버 블록이 하나이며 80번 포트만 수신대기 상태인데, https 연결을 위해 443 포트를 수신대기하고 있는 서버 블록을 추가로 작성해야 한다.
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;
}
}
바뀐 설정을 nginx에 적용한다
service nginx reload
브라우저에서 https://localhost 로 접속했을 때 경고문구가 뜨면 성공.
mac의 chrome에서는 ‘고급’ 설정을 통해서 안전하지 않은 사이트임을 인지하고 접속하는 버튼이 없다.
thisisunsafe
문자열 입력. (화면에 보이지 않으니 그냥 입력)대표적인 서버 사이드 스크립트 언어.
nginx는 웹서버이기 때문에 정적 콘텐츠밖에 다루지 못한다. 동적 페이지를 구현하기 위해서는 웹 서버 대신 동적 콘텐츠를 읽은 뒤 html로 변환시켜 웹 서버에게 다시 전달해주는 외부 프로그램(php 모듈)이 필요하다. 이런 연결 과정의 방법 혹은 규약을 정의한 것이 CGI이다.
일반 GCI 보다 빠른 처리가 가능한 FastGCI. 정리하자면,
php-fpm
을 통해 nginx와 php를 연동시켜 우리의 웹 서버가 정적 콘텐츠 뿐만 아니라 동적 콘텐츠를 다룰 수 있도록 만드는 것이다.
apt-get install php-fpm
위 명령으로 php-fpm 7.3 버전을 설치해주고 nginx default 파일에 php 처리를 위한 설정을 추가한다.
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 setting
ssl on;
ssl_certificate /etc/ssl/certs/localhost.dev.crt;
ssl_certificate_key /etc/ssl/private/localhost.dev.key;
# Set root dir of server
root /var/www/html;
# Auto index
index index.html index.htm index.nginx-debian.html index.php;
server_name ft_server;
location / {
try_files $uri $uri/ =404;
}
# PHP 추가
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}
}
index.php
도 추가해주자. autoindex 가 뭔지 알고싶다면 먼저 웹서버가 리소스 매핑과 접근을 어떻게 하는지 부터 알아야한다.
웹 서버는 어떻게 수 많은 리소스 중 요청에 알맞은 콘텐츠를 제공할까?
일반적으로 웹 서버 파일 시스템의 특별한 한 폴더를 웹 콘텐츠를 위해 사용한다. 이 폴더를
문서루트
혹은docroot
라고 부른다. 리소스 매핑의 가장 단순한 형태는 요청 URI를dotroot
안에 있는 파일의 이름으로 사용하는 것이다.만약 파일이 아닌 디렉토리를 가리키는 url에 대한 요청을 받았을 때는, 요청한 url에 대응되는 디렉토리 안에서
index.html
혹은index.htm
으로 이름 붙은 파일을 찾아 그 파일의 콘텐츠를 반환한다. 이를 autoindex 라고 부른다.
그래서 우리는 autoindex 기능을 켜줘야한다. nginx default 파일에서 location / 부분에 autoindex on
을 추가한다.
# 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;
}
만약 autoindex가 꺼져 있거나 해당 디렉토리에 index 목록에 해당하는 파일이 없다면, 웹 서버는 자동으로 그 디렉토리의 파일들을 크기
, 변경일
, 해당 파일에 대한 링크
와 함께 열거한 HTML 파일을 반환한다.
루트 디렉터리인 /var/www/html 에 존재하는 index.ngiinx-debian.html 을 주석처리해보면, 읽을 파일이 없다고 생각하고 아래처럼 전체 파일 목록을 반환하는 것을 확인할 수 있다.
apt-get -y install mariadb-server php-mysql php-mbstring
mariaDB
만을 지원한다. mariaDB도 mysql을 기반으로 만들어졌기때문에 mysql 명령어와 완전히 호환된다.php-mysql
은 php에서 mysql에 접근할 수 있게 해주는 모듈이다.php-mbstring
은 2바이트 확장 문자를 읽을 수 있도록 해주는 모듈이다. 혹시 중간에 에러가 나서 MariaDB를 완전 삭제하고 다시 설치하고 싶다면 여기 참고. 쥬륵..
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
wp-config-sample.php
을 복사해 wp-config.php
를 만든다.
cp -rp var/www/html/wordpress/wp-config-sample.php var/www/html/wordpress/wp-config.php
wp-config.php
파일의 DB_NAME, DB_USER, DB_PASSWORD 3가지 항목을 수정해준다.
vim var/www/html/wordpress/wp-config.php
db 설정을 위해 mysql을 실행시킨다.
service mysql start
mysql 접속 및 DB 생성
mysql # 실행시키면 mysql로 들어가짐
CREATE DATABASE wordpress;
# `;` 꼭 입력하기;
SHOW DATABASES;
명령어를 통해 DB목록을 확인할 수 있다.
그 외 mysql 문법이 궁금하다면 예제로 익히는 SQL 문법 확인!
유저 생성
# on mysql
CREATE USER 'daelee'@'localhost' IDENTIFIED BY 'daelee';
GRANT ALL PRIVILEGES ON wordpress.* TO 'daelee'@'localhost' WITH GRANT OPTION;
@'localhost'
는 로컬 접속만 허용하겠다는 뜻이고 @'%'
로 작성하면 외부 접속을 허용하겠다는 뜻이다.
설정 업데이트
# on mysql
USE wordpress;
SHOW TABLES;
exit
로 mysql을 빠져나올 수 있다.
php7.3-fpm 재시작
service php7.3-fpm restart
php-mysql로 php 설정이 변경되었기 때문.
이제 wordpress DB 설정이 모두 끝났다.
https://127.0.0.1/wordpress/ 로 접속했을때 아래와 같은 페이지가 나오면 성공이다.
계속
을 누르면 몇 가지 설정을 마친 뒤 wordpress를 설치할 수 있다. 대시보드 및 나의 첫 워드프레스 홈페이지를 확인해보자.
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
으로 바꿔서 우리 서버의 루트 디렉토리(/var/www/html)에 위치시킨다.phpmyadmin
폴더에 들어가보면 정말 많은 파일들이 있다. 그 중 config.sample.inc.php을 복사해 config.inc.php
파일을 만든다.
cp -rp var/www/html/phpmyadmin/config.sample.inc.php var/www/html/phpmyadmin/config.inc.php
blowfish 암호 생성 사이트 에서 키를 생성/복사한 뒤 config.inc.php
에 추가한다.
vim var/www/html/phpmyadmin/config.inc.php
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
nginx 재시작
service nginx reload
db 설정을 위해 mysql을 실행시킨다.
service mysql start
phpmyadmin/sql 폴더의 create_table.sql
파일을 mysql로 리다이렉션 시켜준다.
mysql < var/www/html/phpmyadmin/sql/create_tables.sql
https://127.0.0.1/phpmyadmin 에 접속한 뒤 wordpress/wp-config.php 에서 설정한 ID와 PW를 입력하면 아래 사진처럼 데이터베이스를 GUI로 편리하게 관리할 수 있다.
이제 지금까지의 과정을 Dockerfile로 만들어 관리해보자.