진행한 프로젝트 프론트 서버 환경을 도커 이미지로 만들것입니다.
이유는 바로 서버에 배포후에도 OS나 라이브러리등의 버전 차이로 오는 에러를 막기위해서,,
두 가지 방법이 있다.
## front ##
# root directory
npm run build
# ./build directory안에서 빌드 파일 압축
tar cvf 20221214_front.tar ./
## back ##
# root directory
rm -rf node_modules/
# 빌드 파일로 압축
tar cvf 20221214_back.tar ./
# ssh key가 있는 폴더에서만 접근됨;
scp -i ./keyname.pem 2022121_front.tar centos@ip:/home/centos/directory
# 서버 접속, 동일하게 ssh key directory
ssh -i ./keyname.pem centos@ip
# 지정 폴더에서 압축해제
tar -xvf 20221214_front.tar ./
// AWS 서버 접속
ssh -i ~key~ ~ip~
// 해당하는 디렉토리로 이동
cd Project
// 도커 파일 생성
Vi Dockerfile
FROM node:16-alpine
MAINTAINER:user@email.com
WORKDIR /usr/src/app
COPY package*.json ./
COPY . .
EXPOSE 3001
CMD ["npm","start"]
or
FROM node:16
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
RUN npm install -g pm2
COPY . .
EXPOSE 8080
CMD ["pm2-runtime", "start", "app.js"]
FROM nginx:latest
WORKDIR /usr/share/nginx/html/
COPY ./build/ .
EXPOSE 3002
CMD ["nginx","-g","daemon off;"]//세미콜론필수 ㅠㅜㅠ
docker images
# 도커 이미지 생성
npm run build
# docker build, -옵션, 이미지명:버전 ~현재디렉토리에서 도커파일 찾아라~
docker build -t adpot_front:0.1 .
도커 실행
nginx file에서 도메인,포트명 지정
// 경로
root/etc/nginx/conf.g/default.conf
// sudo 권한으로 편집 실행
sudo vi default.conf
// 하기 코드 추가
server {
listen 80;
server_name sub-domain.domain.co.kr;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:3001;
}
listen 443 ssl; # managed by Certbot
# ssl_certificate /etc/letsencrypt/live/app.anypot.co.kr/fullchain.pem; # managed by Certbot
# ssl_certificate_key /etc/letsencrypt/live/app.anypot.co.kr/privkey.pem; # managed by Certbot
ssl_certificate /etc/nginx/ssl/wildcard.anypot/fullchain1.pem; # managed by Certbot
ssl_certificate_key /etc/nginx/ssl/wildcard.anypot/privkey1.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
컨테이너가동
netstat -tnl #사용중인 포트 확인
docker run -d -p 3001:80 --restart=always --name=실행명 이미지명:태그
docker rmi 이미지명
docker rmi $(docker images -f "dangling=true" -q)
// 가동중인 컨테이너 로그확인
docker logs -f cal_front
// nginx 재시작 (nginx 파일 변경시 ㅇㅇ)
sudo systemctl restart nginx
// 서버 ip주소 확인
ping www.domain.com
// html 확인
curl ip or domain..
// 도커 이미지 변경시에 컨테이너 중단 및 삭제 후 컨테이너 다시 만드세여
docker stop cal_front (컨테이너 중단)
docker rm -f cal_front (컨테이너 삭제)
(프론트)
최신 소스 코드 -> 서버에서 소스파일 build -> 도커 이미지 생성 -> 도커 컨테이너 실행
(백)
최신 소스 코드 -> build 필요없이 바로 Dockerfile로 이미지 생성
도커 이미지 생성 전 서버를 express로 돌리는지 nginx로 돌리는지 확인
도커 컨테이너 실행 전에 이전 컨테이너 종료,삭제 후진행