ft_server 프로젝트 수행 과정
2021/02/01
-
docker 홈페이지에서 docker for mac 버튼으로 설치
- 도커로 데비안 버스터 이미지 만들기
$ docker pull debian:buster
$ docker images
-> 도커 이미지 파일 목록들이 뜸 - docker 로 debian:buster 환경에 들어가기
$ docker run -it -p 80:80 -p 443:443 debian:buster
-p 옵션: 포트로 외부에서 접속 가능하도록 설정
-p (연결할 호스트의 포트번호):(컨테이너의 포트번호) - nginx 설치
$ apt-get update
$ apt-get upgrade
$ apt-get install nginx - nginx 서버 연결 확인
# service nginx start
# service nginx status
-> 인터넷 접속 (localhost:80)
: Welcome to nginx 가 나오면 성공
# service nginx stop // 일단 종료 - docker image 저장
# exit // 도커 종료
# docker ps -a
-> 방금 닫힌 컨테이너 ID 복사
# docker commit [CONTAINER ID] [이름]
# docker images // 방금까지 한 내용이 나옴
2021/02/1 1
- 최근 저장한 도커 이미지 실행
$ docker run -it -p 80:80 -p 443:443 [이미지 레포지토리 이름]:[TAG]
// docker run -it -p 80:80 -p 443:443 ft_server:latest - nginx 설치 이후부터 실행
- open ssl 설치
# apt-get install -y openssl vim - 개인키 & 인증서 생성
# openssl req -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=KR/ST=Seoul/L=Seoul/O=42Seoul/OU=Ahn/CN=localhost" -keyout localhost.dev.key -out localhost.dev.crt
- req: 인증서 요청 및 인증서 생성 유틸
-newkey: 개인키 생성 위한 옵션
-keyout <키 파일 이름> : 키 파일이름을 지정해 키 파일 생성
-out <인증서 이름> : 인증서 이름을 지정해 인증서 생성
-days 365 : 인증서의 유효기간을 작성하는 옵션
-nodes 생략시 재부팅할때마다 수동으로 암호 입력 - 권한제한
# 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 - nginx에 ssl 설정 및 url redirection 추가
"etc/nginx/sites-available/default" 파일 수정
-> default 파일에 https 연결을 위한 설정 작성 - nginx에 ssl 설정 및 url redirection 추가
# 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;
}
}
80번 포트로 수신되면 443 포트로 리다이렉션 시켜준다
443 포트를 위한 서버 블록에는 ssl on 과 인증서의 경로를 작성해준다. 나머지는 기존 설정 그대로
8. 바뀐 설정을 nginx 에 적용
# service nginx reload
9. php-fpm 설치 및 nginx 설정
php : 서버 사이드 스크립트 언어
nginx 는 웹서버이기 때문에 정적 콘텐츠만 다룰 수 있다. 동적 페이지 구현하기 위해서는 동적 콘텐츠를 읽고 html 로 변환시켜 웹 서버에게 다시 전달해주는 외부 프로그램(php) 필요
이런 연결 과정의 방법을 정의한 것 == CGI
# apt-get install -y php-fpm
/etc/nginx 구성
- sites-available : 설정파일 들어있는 곳
- sites-enabled : 실행시킬 파일들만 symlink 로 연결해서 여기에 넣어둔다
- nginx.conf : sites-enabled에 있는 파일들을 호출하는 파일. 서버 실행에 관한 정보를 적어둔다.
# 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.php 추가
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;
}
}
10. nginx auto index 설정
autoindex?
/etc/nginx/sites-available/default 파일에서 location / { } 부분에 `autoindex on` 추가
# 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.php 추가
index index.html index.htm index.nginx-debian.html index.php;
server_name ft_server;
location / {
autoindex on;
try_files $uri $uri/ =404;
}
# PHP 추가
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}
}
# service nginx reload
11. MariaDB 설치하기 (mysql)
apt-get install -y mariadb-server php-mysql php-mbstring
- debian buster는 mariaDB 만을 지원한다.
- php-mysql : php에서 mysql에 접근할 수 있게 해주는 모듈
- php-mbstring : 2바이트 확장 문자를 읽을 수 있도록 해주는 모듈
12. 도커 종료 후 이미지 저장
2020/02/12
-
최근 저장한 도커 이미지 실행
$ docker run -it -p 80:80 -p 443:443 mariadb-download
-
# service nginx start
-
php-fpm 실행
# service php7.3-fpm start
# service php7.3-fpm status
php 테스트 > var/www/html/phpinfo.php
<?php phpinfo(); ?>
-> 127.0.0.1/phpinfo.php 로 접속하여 연동 되는지 확인
확인 후에는 phpinfo.php를 삭제하는 것이 보안상 좋다고 한다.
(# rm /var/www/html/phpinfo.php) -
phpmyadmin 설치
# apt-get install -y wget
// phpmyadmin 설치
# wget https://files.phpmyadmin.net/phpMyAdmin/5.0.4/phpMyAdmin-5.0.4-all-languages.tar.gz
// 압축 해제
# tar -xvf phpMyAdmin-5.0.4-all-languages.tar.gz
# rm phpMyAdmin-5.0.4-all-languages.tar.gz // 압축파일 제거
-
서버가 phpMyAdmin 을 띄워줄 경로에 폴더를 통째로 올려주면 됨 (/var/www/html)
> nginx 설정 부분에서 서버의 루트 디렉토리를 /var/www/html 로 지정함
# mv phpMyAdmin-5.0.4-all-languages phpmyadmin
# mv phpmyadmin /var/www/html/ => 압축해제한 파일을 이름을 바꿔서 phpmyadmin -
phpMyAdmin 설정
1. phpmyadmin/config.sample.inc.php 파일을 복사해서 config.inc.php 생성
2. config.inc.php 에 블로피시 암호를 만들어 넣기
3. create_tables.sql을 가져와서 phpMyAdmin을 위한 테이블을 만든다
# cp -p var/www/html/phpmyadmin/config.sample.inc.php var/www/html/phpmyadmin/config.inc.php
# vi var/www/html/phpmyadmin/config.inc.php
암호 생성 사이트
위 사이트에서 생성된 암호 복사해서 php 파일을 수정
>> $cfg['blowfish_secret'] = '이 부분에 사이트에서 생성한 암호를 넣는다';
create_tables.sql -> phpMyAdmin 을 위한 테이블 생성
# service nginx reload
# service php7.3-fpm restart
# service mysql start
# mysql < /var/www/html/phpmyadmin/sql/create_tables.sql -u root --skip-password
# mysqladmin -u root -p password
기존 패스워드 입력
새로운 패스워드 입력
# mysql
mariadb > show databases;
> CREATE DATABASE IF NOT EXISTS wordpress; // 디비 생성
> show databases; // 생성된 디비 확인
> exit -
phpMyAdmin 작동 확인
# service mysql start
-> localhost/phpmyadmin 접속 -
DB 추가하기 - Wordpress 설치
# wget https://wordpress.org/latest.tar.gz
# tar -xvf latest.tar.gz
# rm latest.tar.gz -> 압축파일 삭제
# mv wordpress/ var/www/html/
# chown -R www-data:www-data /var/www/html/wordpress
- 소유자 변경
-R : recursive, 에러메시지가 있어도 출력하지 않게 하는 커맨드
- [owner]:[group] 변경할 유저와 그룹
-
wordpress 설정
1 ) /var/www/html/wordpress/wp-config.php 에 설정 수정하기
# cp var/www/html/wordpress/wp-config-sample.php var/www/html/wordpress/wp-config.php
# 파일 수정
// ** 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', 'yeosong' );
/** 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', '' ); -
Wordpress 작동 확인
# service nginx reload
-> localhost/wordpress 접속
# 마무리
추가한 기능들이 정상적으로 동작한다면, 지금까지 작업한 내용을 Dockerfile + srcs/ 에 지시문 형태로 정리하면 끝!
[Docker] Docker cp : host 에서 Container 로 file copy
host , docker container file copy host filesystem 에서 docker 의 container 에 file 을 copy 하고 싶을 때 1. host -> docker container - test file 생성 - docker cp [hostFilePath] [container_name]:[..
hello-bryan.tistory.com
docker cp [container_NAMES]:[container_file_path] [hostFilePath]
-> container names는 image 이름이 아니라 docker images 했을 때 제일 끝에 있는걸로 해야 된다.
- default, config.inc.php, wp-config.php
2020/02/13
1. run.sh에서 sql을 작성
service mysql start
echo "CREATE DATABASE IF NOT EXISTS wordpress;" \
| mysql -u root --skip-password
echo "CREATE USER IF NOT EXISTS 'yoahn'@'localhost' IDENTIFIED BY 'yoahn';" \
| mysql -u root --skip-password
echo "GRANT ALL PRIVILEGES ON wordpress.* TO 'yoahn'@'localhost' WITH GRANT OPTION;" \
| mysql -u root --skip-password
echo "FLUSH PRIVILEGES" \
| mysql -u root --skip-password
| mysql -u root --skip-password
->
"CREATE DATABASE IF NOT EXISTS wordpress;"
- wordpress DB가 존재하지 않으면 새로 생성
"CREATE USER IF NOT EXISTS 'yoahn'@'localhost' IDENTIFIED BY 'yoahn';"
- USER 생성
- create user 'userid'@'host = 접근권한' identified by '비밀번호';
접근권한 = localhost / % (외부 접근 권한 부여)
"GRANT ALL PRIVILEGES ON wordpress.* TO 'yoahn'@'localhost' WITH GRANT OPTION;"
- 특정 데이터베이스의 테이블 전체에 대한 사용자 추가
- ~ ON [DB이름].[테이블] TO 'mysql_ID'@'접속서버' with grant option
- grant 명령어를 사용하여 작업한 경우 flush privileges 실행할 필요 없음
wp-config.php 수정
/** MySQL database username */
define( 'DB_USER', 'root' );
/** MySQL database password */
define( 'DB_PASSWORD', 'yeosong' );
- sql로 추가한 사용자 id와 설정한 비밀번호가 wp-config.php의 설정파일과 같아야 한다
2. service mysql restart 를 마지막에 한번 더 하면 에러남
- restart 할 필요 없으므로 제외함
3. docker file 빌드하기
$ docker build . -t ft_server
-t 옵션
: 'name:tag' 포맷
$ docker run -it -p 80:80 -p 443:443 ft_server
-i (interactive)
-t (tty)
두 옵션을 같이 줘야 터미널 안에서 실행 가능
-p (host 포트):(컨테이너 포트)
호스트와 컨테이너 간의 포트 연결
호스트 컴퓨터에서 컨테이너에서 리스닝하고 있는 포트로 접속할 수 있도록 설정
nginx 설정파일 중 default파일에서 https 서버 블록에 default_server를 적으면 wordpress 에서 사용자 생성이 안된다.
++++
retry 하기 전에 다시 검토하다가 phpmyadmin 에서 root 계정 로그인이 안되는 문제를 해결해보려고 시도한 끝에 방법을 알아냈다!
먼저 tempDir 로 지정할 디렉토리가 생성되어 있지 않아서 오류가 났었다.
그래서 run.sh 파일에
mkdir /var/www/html/phpmyadmin/tmp
를 추가하고, php, nginx를 사용하는 사용자(www-data:www-data)가 해당 디렉토리에 대해 수정이 가능하도록 권한을 부여
-> 해결
* www-data 사용자
/etc/nginx/nginx.conf
파일에 보면 사용자 이름이 www-data로 되어있음
service php7.3-fpm start
service nginx start
하고 ps -ef 해보면 실행한 사용자 ID가 나오는데, www-data 사용자가 실행함
phpmyadmin 설정 스토리지가 완전히 설정되지 않아 일부 기능들이 활성화가 안됨
먼저 생성한 사용자 id / password 로 로그인 했더니 권한 관련된 오류가 나오는데 해결이 안되서 root 계정으로 로그인 가능하게 수정
mysql < /var/www/html/phpmyadmin/sql/create_tables.sql | mysql -u root --skip-password
mysqladmin -u root -p password
를 실행하면 비밀번호 변경이 가능한데, 기존 비밀번호, 새 비밀번호, 새 비밀번호 확인을 한다.
-> 엔터만 세번 눌러서 비밀번호 설정 없애기
service mysql restart;
mysql 재시작하여 설정 적용
reference
yeosong1.github.io/ftserver-풀이기록#-목표
ft_server 풀이 과정
🖥 42 학습 노트 by yeosong
yeosong1.github.io
kkim-blog.tistory.com/entry/KKIM의-ftserver-학습일지-02-Searching?category=1171564
KKIM의 ft_server 학습일지 - 0.2 Searching
KKIM's Study journal about FT_SERVER (42_Subject!) 0. Reference Links [ft_server] 총 정리 : 도커 설치부터 워드프레스 구축까지 과제 시작부터 마무리까지 기록한 내용들. velog.io ft_server 풀이 과정 🖥..
kkim-blog.tistory.com
velog.io/@hidaehyunlee/ftserver-총-정리-도커-설치부터-워드프레스-구축까지
[ft_server] 총 정리 : 도커 설치부터 워드프레스 구축까지
과제 시작부터 마무리까지 기록한 내용들.
velog.io
m.blog.naver.com/alice_k106/220340499760
[Docker Study] 3. 도커의 몇 몇 run 옵션들
사실 컨테이너를 올바르게 run만 하면 도커 사용방법은 절반은 익혔다고 생각합니다. 그만큼 도커를 혼자서...
blog.naver.com
lhb.kr/news/article.html?no=3101
nginx rewirte, redirect 주소변환 설정모음
nginx rewirte, redirect 주소변환 설정모음 nginx 에서 주소변경 nginx 에서 주소변환 # domain.com 으로 접속 시 newdomain.com 으로 리다이렉토 server { server_name domain.com; return 301 http://www.newdomain.com$request_uri; } #d
lhb.kr
오십보백보 ft_server 시작하기
들어가기에 앞서 저는 웹 서버나 도커에 대한 지식이 0인 상태로 시작했습니다. 과제를 시작하기 전에는 '도커'와 '웹 서버'라는 단어만 들어봤고 이에 대한 개념은 지금도 명확하진 않습니다.
stitchcoding.tistory.com