일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 5월종합소득세
- spinnaker
- intrinsic
- 42seoul
- 동시취득
- 머신비전
- 라이다
- LIDAR
- 직무부트캠프
- miniRT
- AOLP
- Python
- pseudo LiDAR
- 객체인식
- 논문리뷰
- stereo image
- superresolution
- 42seoul #printf
- 삼쩜삼
- 코멘토 후기
- 의사 라이다
- ouster
- 코멘토
- extrinsic
- point grey
- FLIR
- 카메라
- 편광카메라
- ft_server
- 3d object recognition
- Today
- Total
문무겸비
[ft_server] Dockerfile, default file 뜯어보기 본문
윈 10 + wsl2 환경에서 ft_server를 완성했다.
wsl2 + docker setting이나, 과제 완수에 관점에서는 jipark님의 블로그를 보면서 해결을 하였다 (감사해요 jipark!)
ft_server 따라잡기 (도커, nginx 서버, php웹서버)
1. wsl2 설치 및 도커 설치 www.44bits.io/ko/post/wsl2-install-and-basic-usage WSL2(Windows Subsystem for Linux 2) 설치 및 사용 방법 지난 5월 윈도우10의 대규모 업데이트가 있었습니다. 이번 업데이트에는..
earthkingman.tistory.com
다만 jipark님도 상당 부분을 daelee님의 블로그를 참고하신 듯하다.
[ft_server] 총 정리 : 도커 설치부터 워드프레스 구축까지
과제 시작부터 마무리까지 기록한 내용들.
velog.io
과제 완수 자체는 블로그를 천천히 따라 하면 누구든지 가능하겠지만, 블로그에서 아쉬웠던 점은 dockerfile 작성, default file 한줄한줄의 의미를 설명해주지 않았던 것이다.
또 phpmyadmin과 mysql과의 관계나, nginx와 apach와의 관계 등 ft_server를 하면서 흔히 생각해볼 만한 부분을 정리하려고 한다.
여기서는 구현보다는, 이미 ft_server를 완성하고 과제의 전체적인 흐름을 다 이해했다는 가정하에 의미를 좀 더 같이 탐구해보려고 한다.
Dockerfile
FROM debian:buster
LABEL maintainer="cjung@student.42seoul.kr"
RUN apt-get update && apt-get install -y \
nginx \
mariadb-server \
php-mysql \
php-mbstring \
openssl \
vim \
wget \
php7.3-fpm
COPY ./srcs/run.sh ./
COPY ./srcs/default ./tmp
COPY ./srcs/wp-config.php ./tmp
COPY ./srcs/config.inc.php ./tmp
# 권한설정
#chmod 775 /run.sh
#chown -R www-data:www-data /var/www/
#chmod -R 755 /var/www/
# 없어도 된다
# open ssl
RUN 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
# openssl 인증서 및 키 발급
RUN mv localhost.dev.crt etc/ssl/certs/
RUN mv localhost.dev.key etc/ssl/private/
RUN chmod 600 etc/ssl/certs/localhost.dev.crt etc/ssl/private/localhost.dev.key
# 키와 인증서에 대해, user 말고는 아무것도 할 수 없게 만드는 것. just 보안이슈. 동작이랑은 상관없었다
# nginx
RUN rm /etc/nginx/sites-available/default
RUN cp -rp /tmp/default /etc/nginx/sites-available/
# wordpress
RUN wget https://wordpress.org/latest.tar.gz
RUN tar -xvf latest.tar.gz
RUN mv wordpress/ var/www/html/
RUN cp -rp ./tmp/wp-config.php /var/www/html/wordpress
#chown -R www-data:www-data /var/www/html/wordpress
# 없어도 된다.
# phpMyAdmin and chmod
RUN wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.tar.gz
RUN tar -xvf phpMyAdmin-5.0.2-all-languages.tar.gz
RUN mv phpMyAdmin-5.0.2-all-languages phpmyadmin
RUN mv phpmyadmin /var/www/html/
RUN rm phpMyAdmin-5.0.2-all-languages.tar.gz
RUN cp -rp /tmp/config.inc.php /var/www/html/phpmyadmin/
RUN chmod 705 /var/www/html/phpmyadmin/config.inc.php
# others는 이 파일에 대해 쓰기 권한을 가져서는 안되므로 제한.
CMD bash run.sh
dockerfile 예시를 구하는 건 쉽다. 대부분 비슷한 모습을 하고 있는데, 대충 위와 비슷한 형태를 띠고 있을 것이다. 작업 환경에 따라서 실제 작동 여부는 달라질 터이니, 유념하시길 바란다.
FROM은 container image |
RUN은 명령어 실행 |
COPY는 host OS 로부터 container로 파일 복사. |
CMD는 container가 동작할 때마다 실행하는 명령어 |
처음에는 run.sh에다가 명령어를 다 넣었는데, 그러니까 container를 켤 때마다 시간이 많이 걸리게 되어 그냥 dockerfile build 할 때 대부분을 수행하는 걸로 바꿨다.
# 권한설정
#chmod 775 /run.sh
#chown -R www-data:www-data /var/www/
#chmod -R 755 /var/www/
dockerfile 처음 부분을 보면 권한 설정을 하게 된다. 하지만 실제로 없이 build를 해본 결과 잘 동작하고, 다른 카뎃분들 평가를 하면서 물어봐도 딱히 동작하는 데에는 영향을 미치지 않는 듯하다. 실제 나중에 서비스를 할 때는 고려해야 할지도 모르겠지만, 굳이 지금 필요하다고 느껴지지 않는 것을 넣을 필요는 없다고 생각해서 뺐다.
chown의 경우 처음 보는 명령어였는데, file내의 user, group을 변경시켜주는 역할을 한다. ls -la를 하면 file들에 설정된 user, group을 볼 수 있는데, 이걸 바꿔주는 것이다. user, group, others의 권한이 각각 다르므로 경우에 따라 필요할 것이다.
chown -R root:root FILE-> FILE의 user, group을 root로 설정하고 에러메시지는 출력하지 않겠다.
chown - 파일의 소유자와 그룹을 변경한다
www.joinc.co.kr
RUN chmod 600 etc/ssl/certs/localhost.dev.crt etc/ssl/private/localhost.dev.key
# 키와 인증서에 대해, user 말고는 아무것도 할 수 없게 만드는 것. just 보안이슈. 동작이랑은 상관없었다
open ssl 인증서랑 키를 chmod 하는 것인데, 없어도 상관없으나 보안 이슈로 인해 이와 같이 설정하는 것이 일반이다.
HTTPS와 SSL 인증서 - 생활코딩
HTTPS VS HTTP HTTP는 Hypertext Transfer Protocol의 약자다. 즉 Hypertext 인 HTML을 전송하기 위한 통신규약을 의미한다. HTTPS에서 마지막의 S는 Over Secure Socket Layer의 약자로 Secure라는 말을 통해서 알 수 있듯이
opentutorials.org
phpmyadmin 설정 파일 권한 오류
RUN chmod 705 /var/www/html/phpmyadmin/config.inc.php
# others는 이 파일에 대해 쓰기 권한을 가져서는 안되므로 제한.
이것은 왠지 모르게 이 오류가 나던데, 왜 이에 대해서 아무도 오류 리포팅을 하지 않았는지 의문이다. 아무도 이런 경험이 없었던 건가 42 seoul에서는?
저 오류 메시지를 그대로 구글에 검색해도 해결 방법이 나온다.
config.inc.php 설정 파일에 익명 쓰기 권한이면 안된다. 정말 말 그대로 오류 메시지가 떠서 다 이해했을 때 짜증이 났을 정도다. 설정 파일을 아무나 건드리게 할 수 없게 해 놔야지만이 phpmyadmin에 접속을 허용하는 구조인 듯하다.
chmod 005도 된다.
default 파일
server { #80번 포트에 대해서 서버블록을 여는것
listen 80; #ipv4
listen [::]:80; #ipv6
#80번 포트에서는 http를 https로 리다이렉션 시켜준다.
return 301 https://$host$request_uri;
}
server { #443번 포트에 대해서 서버블록을 여는것
listen 443 ssl; #with ssl.
listen [::]:443 ssl;
ssl on;
ssl_certificate /etc/ssl/certs/localhost.dev.crt;
ssl_certificate_key /etc/ssl/private/localhost.dev.key;
#웹페이지가 들어있는 파일
root /var/www/html;
index index.html index.htm index.nginx-debian.html index.php;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
autoindex on;
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}
}
NGINX Redirect (rewrite) 적용
NGINX에서 redirect 를 적용하는 방법은 두 가지가 있음 1. rewrite 지시어 일반적으로 많이 쓰는 방법. 좀 지저분함 server { ... rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last; rewrite ^(/dow..
tod2.tistory.com
ft_server subject에서는 리다이렉션을 요구하기 때문에, ssl 없는 포트도 하나 열어서 그 포트를 ssl 인증이 된 포트로 리다이렉트 하는 기능을 구현한다.
위 default 파일에서 볼 수 있듯이 서버 블록을 두 개 구성한 것을 알 수 있다. 80번 하나 443번 하나.
서버 블록이라는 개념은 이번에 나도 처음 알았다. 당신도 아마 다 이해할 수 있을 것이다.
php-fpm 설정
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}
php-fpm은 CGI의 업그레이드 버전이다. php를 사용했고, 뭘 더 개선했고.. 는 아래 링크에서 잘 설명하고 있다. (근데 진짜 ft_server랑 거의 비슷한 내용을 다뤄주고 있다. 신기..)
CGI는 Common Gateway Interface의 약자로 웹서버와 외부 프로그램을 연결해주는 표준화된 프로토콜이다. 웹이 처음 등장했을 때는 HTML과 이미지를 전달해주는 웹서버 밖에 없었다. 하지만 웹에 대한 수요가 증가함에 따라서 정적인 HTML만을 가지고 정보를 제공하는 것에 한계가 생겼고, 이를 극복하기 위해서 등장한 기술이 CGI다. 웹서버로 요청이 들어왔을 때 그것이 웹서버가 처리 할 수 없는 정보일 때 그 정보를 처리 할 수 있는 외부 프로그램을 호출해서 외부 프로그램이 처리한 결과를 웹서버가 받아서 브라우저로 전송하는 것이다. 외부 프로그램은 C, C++, 펄, PHP, Python등 어떤 언어로든 작성될 수 있는데, 이것이 가능한 것은 웹서버와 외부 프로그램 사이에 통용되는 공통의 규칙이 정의되어 있기 때문이다.
NGINX-PHP-MySQL 설치 - NGINX
CGI CGI는 Common Gateway Interface의 약자로 웹서버와 외부 프로그램을 연결해주는 표준화된 프로토콜이다. 웹이 처음 등장했을 때는 HTML과 이미지를 전달해주는 웹서버 밖에 없었다. 하지만 웹에 대
opentutorials.org
mysql랑 phpmyadmin은 무슨 관계?
sql은 언어 중 하나이다.
mysql은 sql을 이용한 framework이다 (python과 tensoflow2 와 같은 관계로 이해했다)
phpmtadmin은 mysql을 gui로 관리하기 위한 툴이다.
run.sh
#!/bin/bash
service mysql start
echo "CREATE DATABASE IF NOT EXISTS wordpress;" | mysql -u root --skip-password
echo "CREATE USER IF NOT EXISTS 'cjung'@'localhost' IDENTIFIED BY '1234';" | mysql -u root --skip-password
echo "GRANT ALL PRIVILEGES ON wordpress.* TO 'cjung'@'localhost' WITH GRANT OPTION;"| mysql -u root --skip-password
service nginx start
service php7.3-fpm start
bash
container가 켜질 때마다 실행된는 run.sh에서는 mysql의 database 생성 및 user설정을 하였다. 그리고 servies start.
사실 start 빼고는 죄다 dockerfile에 넣고 싶었는데 알 수 없는 오류로 인해 잘 안됐다. 푸힝
mysql -u root (계정과 비번을 만들지 않았을때)
MySQL 접속 명령어
1.데이터 베이스 접속하기 mysql -u 사용자명 -p 데이터베이스이름 mysql -u root (계정과 비번을 만들지 않았을때) mysql -u root -p(루트 비번이 있을때) 2.데이터베이스 추가 mysqladmin -u root -p create 데..
vkein.tistory.com
mysql < init.sql
이렇게 멋있게 작성할 수도 있었는데 자꾸 에러가 뜨고 해결도 잘 안되서 이전 카뎃이 작성한 걸 참고해서 끝냈다.
이 다음 dockerfile이 있는 위치에서 아래 명령어를 실행하면 된다.
docker build . -t [name] |
docker run -it -p80:80 -p443:443 [name] |
-it는 container 내에서 cmd창을 편하게 사용하기 위한 옵션들이다.
-i, --interactive=false: 표준 입력(stdin)을 활성화하며 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지합니다. 보통 이 옵션을 사용하여 Bash에 명령을 입력합니다.
-t, --tty=false: TTY 모드(pseudo-TTY)를 사용합니다. Bash를 사용하려면 이 옵션을 설정해야 합니다. 이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만 셸이 표시되지 않습니다.
-p는 포트 번호 설정이고 80:80은 80번 포트로 들어온 걸 80번 포트로 받겠다는 뜻이다.
누구든지 부디 나의 오류를 지적해 달라. 아직 햇병아리라 배울 것이 많다..
'42seoul' 카테고리의 다른 글
[miniRT] 시작하기전 개념정리-추가예정 (0) | 2021.02.24 |
---|---|
[miniRT] minilibx-linux 튜토리얼 (0) | 2021.02.10 |
[miniRT] Makefile, .configure, 쉡 스크립트 문법 (0) | 2021.02.09 |
[ft_printf] 만들기 (0) | 2020.12.31 |