MLDD

닫기 검색결과 전체 보기

    SERVER 기초(Docker/WordPress/phpMyAdmin/MySQL)

    code 2020. 7. 14. 01:02
    반응형

    [문제]

    1. 하나의 도커 컨테이너에서 Nginx기반의 웹서버를 구축. 이 컨테이너의 OS는 'Debian:Buster' 이어야함.
    2. 1의 웹서버는 동시에 WordPress, phpMyAdmin을 굴려야 하는데, 이 두 가지는 MySQL 기반의 SQL DB가 연동된다. (OS와의 호환성으로 Maria DB로 대체되기도 함)
    3. URL에 기반하여, 1의 웹서버가 올바른 웹사이트에 리디렉션 되어야 함.
    4. 1의 웹서버는 '비활성화 가능한 autoindex'와 같이 구동되어야 함.

    [실습 순서]

    FROM debian:buster

    setting WORKDIR

    WORKDIR /

    sources

    COPY ./srcs/ /srcs/

    change mirror to kakao 

    RUN sed -i 's/deb.debian.org/mirror.kakao.com/g' /etc/apt/sources.list

    • sed -i: sed '/pattern to match/g' file [출처] sed 활용 예시

    intall nginx, php, vim w/localtime

    when installing php-fpm, php is dependency

    RUN apt-get update && apt-get upgrade -y RUN apt-get install -y nginx RUN apt-get install -y php7.3-fpm RUN apt-get install -y wget vim RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

    • php7.3-fpm: php가 dependency로 설치된다.
    • wget: phpMyAdmin 설치할 때 필요하다.
    • localtime(선택): https://proni.tistory.com/entry/🐳-Docker-Timezone시간-설정하기

    openssl

    • openssl conf: https://www.phildev.net/ssl/opensslconf.html (thx to @sanam)
    • req reference(증명서 서명 요청 관리, 플래그 포함): https://www.openssl.org/docs/man1.1.0/man1/openssl-req.html
    • CSR파일과 CRT파일?
      1. .csr(Certificate Signing Request): 대부분 PEM 포맷이자 텍스트 파일 SSL 발급 신청을 위해서 본 파일 내용을 인증기관 CA 에 제출하는 요청서 파일임을 구분하기 위해서 붙이는 확장자
      2. .crt: 유닉스/리눅스 기반 시스템에서 인증서 파일임을 구분하기 위해서 사용되는 확장자.
      3. (참고)PEM(Privacy Enhanced Mail): Base64 인코딩된 ASCII 텍스트. 파일 구분 확장자로 .pem 을 주로 사용한다. 노트패드에서 열기/수정도 가능. 개인키, 서버인증서, 루트인증서, 체인인증서 및 SSL 발급 요청시 생성하는 CSR 등에 사용되는 포맷이며, 가장 광범위하고 거의 99% 대부분의 시스템에 호환되는 산업 표준 포맷. (대부분 텍스트 파일)

    [생성방법 1. command 1번]

    CSR을 명시적으로 생성하지 않고, key와 부가정보들을 입력하여 직접 self-sign

    가이드: [Nginx] HTTP/2

    RUN openssl req -newkey rsa:4096 -x509 -days 365 -nodes -subj "/C=KR/ST=Gangnam-gu/L=Seoul/O=42Seoul/OU=hycho/CN=localhost" -keyout 42server.key -out 42server.crt

    RUN mv 42server.crt etc/ssl/certs/

    RUN mv 42server.key etc/ssl/private/

    • 포맷: https://c10106.tistory.com/2364 (원문: https://stackoverflow.com/questions/10175812/ )
    • -newkey arg: arg는 보통 rsa:nbits로 구성된다.
    • -x509(테스트인증서 OR 자체서명된 루트CA): 인증서 요청 대신, self-sign된 인증서를 출력할 때 쓰는 옵션. 기존 리퀘스트에 -in 옵션이 있는 경우에는 self-sign 인증서로 변환을 해주고, 아니면 새로운 리퀘스트 생성.
    • -days: 유효일 수, -x509가 사용될 때 날짜 지정이 가능하다. 기본값은 30일.
    • -nodes: 비밀키 생성되었을 때, 암호화되지 않는다. == 재부팅 시 수동으로 암호를 입력하는 일을 생략. (좋은 건가?)
    • -subj arg: subject 이름을 설정하거나 대체할 때 사용. 공백은 무시.
    • -keyout filename: 새로만든 개인 키를 쓸 파일 이름을 제공.
    • -out filename: 기본 출력할 '파일 이름 OR 표준 출력'을 지정

    RUN chmod 600 etc/ssl/certs/42server.crt etc/ssl/private/42server.key

    • 권한 지정: https://opentutorials.org/course/228/4894

    여기서는 (1) 디렉토리 및 파일 소유자는 root로 (2) 디렉토리 권한은 700 옵션을 주었다.

    [생성방법 2. command 2번]

    CSR 명시적 생성 -> 인증서에 self-sign -> 인증서 완성

    • 참고:

    yoopark/ft_server

    OpenSSL Essentials: Working with SSL Certificates, Private Keys and CSRs | DigitalOcean

    thx to @yopark

    RUN openssl req -new -newkey rsa:2048 -nodes -keyout /etc/ssl/private/42server.key -out /etc/ssl/certs/42server.csr -subj '/C=KR/ST=Gangnam-gu/L=Seoul/O=42Seoul/OU=hycho/CN=localhost'

    • https://phoenixnap.com/kb/openssl-tutorial-ssl-certificates-private-keys-csrs (csr → crt [0])
    • https://basic-x.tistory.com/21 (csr → crt [1])
    • https://blog.naver.com/kletgdgo/90118978766 (csr → crt [2])

    RUN openssl x509 -req -days 365 -in /etc/ssl/certs/42server.csr -signkey /etc/ssl/private/42server.key -out /etc/ssl/certs/42server.crt

    • x509(다목적 인증서 유틸리티): https://www.openssl.org/docs/man1.0.2/man1/x509.html
    • (x509) -req: 인증서의 입력이 예상됨. 인증서 요청이 (사전에)필요함.
    • (x509) -in filename: 인증서를 어떤 파일에서 읽어올지 지정. 미지정시 stdin.
    • (x509)-signkey: 제공된 개인키를 가지고 입력파일에 자체 서명.
      1. 입력파일이 인증서인 경우, 발급자 이름을 제공된 subject로 설정. 날짜는 -days로 설정. (-clrext 옵션이 없는 경우, 인증서 확장은 유지됨)
      2. 입력이 증명서 요청인 경우, 요청된 subject를 사용하는 개인키를 사용하여, 자체 서명된 인증서가 작성됨

    RUN chmod 600 etc/ssl/certs/42server.crt etc/ssl/private/42server.key

    • 혹시 모르니 권한 설정을 한다.

    install mariadb-server, phpMyAdmin

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

    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/

    • 현재 데비안은 MySQL 대신에 MariaDB를 Default로 사용하기에 이를 설치함
    • phpMyAdmin은 apt-get으로 설치가 불가능. 그래서 wget을 이용하여 웹에서 다운로드 받는다.
    • blowfish 암호생성기: http://www.passwordtool.hu/blowfish-password-hash-generator

    wordpress 설치

    RUN wget https://wordpress.org/latest.tar.gz

    RUN tar -xvf latest.tar.gz

    RUN mv wordpress/ var/www/html/

    RUN chown -R www-data:www-data /var/www/html/wordpress

    • chown: 리눅스에서 소유자를 변경하는 커맨드. -R은 –recursive. 에러 메시지가 있어도 출력하지 않게 하는 옵션. www-data는 우분투에서 Apache,PHP 실행시 수정이 가능한 옵션.

    redirection port 80 to 443 (nginx)

    • 아래대로 하면, 리디렉션 코드 밑의 http(80) 관련 코드는 주석 처리해도 상관없음을 알 수 있다.

    Nginx 에서 HTTP 에서 HTTPS 으로 Redirect 하기

    301 vs 302 리디렉트(redirect)

    301, 302 리다이렉션

    autoindex: on

    Module ngx_http_autoindex_module

    open ports

    EXPOSE 80 443

    http의 기본 포트가 80, https의 기본 포트가 443인 이유는 무엇일까?

    • EXPOSE는 호스트와 연결할 포트 번호를 설정합니다. docker run 명령의 --expose 옵션과 동일합니다.

    가장 빨리 만나는 Docker 7장 - 7. EXPOSE

    start

    CMD ["bash", "init.sh"]

    가장 빨리 만나는 Docker 7장 - 5. CMD

    One more ttttthing

    • How to send files from docker to local (thx to @secho) ex) docker cp 1d4886ff1fca:/var/www/html/phpmyadmin/config.inc.php ./config.inc.php

    결론: 호스트 마운트를 하면 된다. 도커 실행 전이든 실행 중이든, 방법만 다르지 할 수 이따

    docker cp - 호스트 컨테이너 사이 파일 복사

    호스트에서 Docker 컨테이너로 파일 복사

    Docker Volume (호스트 볼륨 공유)-컨테이너 데이터를 호스트 디스크에 저장하기

    • 사용중인 도커 컨테이너 저장하기

    사용중인 docker 컨테이너를 그대로 저장하기 (commit)

    • 루트계정으로 mysql에 접속해서, 표준입력으로 받기 (mysql -u root < /tmp/root_setup)

    yoopark/ft_server

    • 리눅스 find 옵션 (급하게 파일 찾을때... find / -name [FILE] )

    리눅스 find 명령어 사용법. (Linux find command) - 리눅스 파일 검색.

    • Docker 모든 컨테이너 삭제 명령
    • 모든 컨테이너 삭제하기

    docker stop $(docker ps -a -q)

    docker rm $(docker ps -a -q)

    • 모든 이미지 삭제하기

    docker rmi $(docker images -q)

    • Exit 상태의 모든 컨테이너 삭제하기

    docker rm $(docker ps --filter 'status=exited' -a -q)

    반응형

    'code' 카테고리의 다른 글

    exit() 함수에 대한 메모(?)  (0) 2020.08.14
    vim을 intellisense처럼 써보기... [w/Ctags]  (0) 2020.08.09
    VIM configure file (.vimrc)  (0) 2020.07.13
    malloc, calloc  (0) 2020.07.09
    Mac 창 분할 및 Vim 단축키 쓰기  (0) 2020.07.02
    'code' 관련 글 more
    • exit() 함수에 대한 메모(?) 2020.08.14
    • thumbnail
      vim을 intellisense처럼 써보기... [w/Ctags] 2020.08.09
    • VIM configure file (.vimrc) 2020.07.13
    • malloc, calloc 2020.07.09
    Posted by MLDD

    최근...

  • 포스트
  • 댓글
  • 더 보기

글 보관함

카테고리

CATEGORY (52)
일상 (3)
code (8)
Problem Solving (34)
Cloud (2)
해외직구 (1)
전자기기 (0)
먹거리 (3)
유용한 팁 (1)
반응형
«   2025/09   »
일 월 화 수 목 금 토
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

카운터

Total
Today
Yesterday
DNS server, DNS service
  • Home
  • Tag
  • Guestbook
MLDD's Blog is powered by daumkakao
Skin info material T Mark 5+ by 뭐하라
favicon

MLDD

내가 담고 싶은 것만 담아보기

  • Home
  • Tag
  • Guestbook

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • CATEGORY (52)
    • 일상 (3)
    • code (8)
    • Problem Solving (34)
    • Cloud (2)
    • 해외직구 (1)
    • 전자기기 (0)
    • 먹거리 (3)
    • 유용한 팁 (1)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바