단기 서버 배치 Nginx/Node/Nuxt/React/NG, 일반적인 최적화 및 자동 시작 스 크 립 트
작은 작업장 으로서 앞 뒤 엔 드 의 서 비 스 는 모두 한 서버 에 있 습 니 다.
업무 가 많아 지면 서 전단 이 드디어 던 져 졌 습 니 다.
테스트 라인 과 정식 라인 을 포함 하여 배치 해 야 할 것 은 다음 과 같다.
PC 홈 페이지
Angular6
/백그라운드 관리 umi+react
/모 바 일 공유 Nuxt
/APP 내장 페이지 Nuxt
닥 치 는 대로 기록 하고, 관심 있 는 것 을 보면, 아마도 너 를 도와 시간 을 좀 절약 할 수 있 을 것 이다.뭐 공부 해요?
난잡 한 지식 점,
linux
의 일부 동 동 shell ,chmod,chgrp ,chown
과 기초 운영 에 관 한 지식nginx
의 일부 동쪽, 비교적 현대 화 된 배치 (IE 11 이하 의 것 을 고려 하지 않 음).pm2
및 node
등등기초 환경
Centos 7.4
이 고 손 에 넣 으 면 바로 최신 #
cat /etc/redhat-release
#
yum update
#
reboot
# ( 7.x .. )
# , ,
# , , GG, ,
cat /etc/redhat-release # CentOS Linux release 7.6.1810 (Core)
node
버 전 은 시비 LTS
버 전 을 선택 하고 current
빠 른 교체 버 전 (11. x) 공식
wiki
제공: github. com/nodesource/...gcc
, make
의존) yum install gcc-c++ make
그렇지 않 으 면 컴 파일 에 의존 하 는 사람들 이 이 잘못 을 보고 할 것 이다. 예 를 들 어 내 가 배치
nuxt
할 때 만난 것 이다.yarn
, 사용 하기 편 한 가방 관리자 (관청 원) # centos
curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo yum install yarn
nginx
, 선택 한 것 은 lts(1.14.2)
www.nginx.com/resources/w…
최신 LTS 업데이트 로그: ngix. org/en/CHANGES -...
git
, 홈 페이지 소스 코드 설치 # 2.x.x ( )
$ tar -zxf git-2.x.x.tar.gz
$ cd git-2.x.x
$ make configure #
$ ./configure --prefix=/usr # (--prefix)
$ make all doc info
$ sudo make install install-doc install-html install-info
# ( , )
물론 시스템 상 유 창 고 를 직접
yum
설치 할 수도 있 지만 버 전 은 비교적 낡 았 다.그리고 제3자 소스 도 선택 할 수 있 습 니 다. (안전 위험 은 스스로 부담 합 니 다)
배치 하 다.
nginx 를 설치 한 후 기본 값 으로 는 다음 과 같은 몇 가지 가 있 습 니 다.
git
: 웹 페이지 를 저장 하 는 곳 html(/usr/share/nginx/html)
: 이 디 렉 터 리 에 있 는 conf(/etc/nginx/conf.d/)
파일 은 conf
에 추 가 됩 니 다. 구체 적 으로 nginx.conf
사용 되 었 습 니 다 nginx.conf
include
: logs(/var/logs/nginx)
기본 로그 의 저장 위치 nginx
당신 자신 도 지정 할 수 있 습 니 다. 설정 파일 을 얼마나 섬세 하 게 빼 도 됩 니 다.내 가 사용 한 최신
include
, 초기 화 lts
는 대체로 이렇다. 어떤 것 은 내 가 넣 은 것 이다.텐 센트 클 라 우 드 는 대응 하 는
nginx.conf
중국어 수첩 이 있다.주의 점
최신 버 전의 기본 실행 사용 자 는
nginx
이 고 일부 버 전 은 nginx
입 니 다.따라서 코드 영역 은 기본
www-data
기본 경로 에 두 지 않 으 면 권한 을 수정 하고 nginx
집 디 렉 터 리 에 두 지 마 십시오.그렇지 않 으 면
root
초과 관리 권한 (해당 하 는 사용자 그룹 가입) 을 부여 하고 이 디 렉 터 리 의 소속 을 변경 해 야 합 니 다.비교적 합 리 적 인 방법 은 코드 디 렉 터 리 를 루트 디 렉 터 리 에 저장 하고 새 폴 더 를 저장 하 는 것 입 니 다.
#
# nginx, nginx, chown(change owner)
chown -R nginx:nginx /code
# chgrp (change group)
, 755
chmod -R 755 /code
`755 : rwx-rx-rX => u(user)-g(group)-o(other) => r(read[ ]:4)-x(excute[ ]:1)-w(write[ ]:2)`
# , cpu , , /proc
# /proc/cpuinfo(cpu ) ,meminfo( )
nginx 에서 가장 자주 사용 하 는 명령
nginx
: 설정 파일 이 정상 인지 테스트 합 니 다. 오류 가 발생 하면 직접 던 집 니 다. 설정 파일 을 변경 한 후 서 비 스 를 다시 시작 하 는 것 을 피하 십시오!검증 은 유일한 진리 nginx -t
: 설정 파일 을 다시 불 러 옵 니 다. 서 비 스 를 다시 시작 할 필요 가 없습니다. 변경 nginx
설정 은 이 걸 로 직접 유효 합 니 다. 지연 되 지 않 습 니 다
#
user nginx;
worker_processes auto; # ,
worker_rlimit_nofile 65535; # worker
events { # ,
multi_accept on; #
use epoll; #
worker_connections 65535; #
}
#
error_log /var/log/nginx/error.log warn;
# pid(process id), linux , pid nginx
pid /var/run/nginx.pid;
http {
charset utf-8; #
sendfile on; #
tcp_nopush on; # sendfile , , ,
tcp_nodelay on; # , keep-alive TCP tcp_nodelay
server_tokens off; # , nginx
log_not_found off; # , favico
types_hash_max_size 2048; # ,
client_max_body_size 16M; # body ( )
include /etc/nginx/mime.types; # , mime ,
default_type application/octet-stream; # nginx
#
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#
access_log /var/log/nginx/access.log main;
# SSL
ssl_session_timeout 1d; # ssl ,
ssl_session_cache shared:SSL:50m; #ssl/tls , 1M 4000 sessions
ssl_session_tickets off; #
# TLS1.2
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;
ssl_prefer_server_ciphers on; #
#
ssl_stapling on;
ssl_stapling_verify on;
# DNS , DNS .
resolver 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s;
resolver_timeout 2s;
#
keepalive_timeout 65;
# ( )
# , ,
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
내 가 가지 고 있 는
nginx -s reload
과 일반적인 포장 항목 을 가지 고 있다.nginx
or nginx
일반적인 배치: 이러한 배 치 는
nuxt
하나 react
에 적용 된다.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name proadmin.xxxx.com;
root /code/react-sx-admin/prod;
# SSL
ssl_certificate /etc/nginx/conf.d/cert/proadmin/proadmin.crt;
ssl_certificate_key /etc/nginx/conf.d/cert/proadmin/proadmin.key;
ssl_trusted_certificate /etc/nginx/conf.d/cert/proadmin/proadmin.crt;
# SPA history , ,
location / {
try_files $uri $uri/ /index.html;
}
#
location ~ /\.(?!well-known) {
deny all;
}
#
location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
expires 7d;
access_log off;
}
# svg ,
location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
add_header Access-Control-Allow-Origin "*";
expires 7d;
access_log off;
}
# gzip
gzip on;
gzip_vary on;
# , ( )
gzip_proxied any;
# ,
gzip_comp_level 6;
#
gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss application/atom+xml image/svg+xml;
}
# http https
server {
listen 80;
listen [::]:80; #
server_name proadmin.xxx.com;
location / {
# $host ( )
return 301 https://proadmin.xxx.com$request_uri;
}
}
ng6
역방향 대리: 이런 것 은 서비스 에 더 많이 적용 된다. 예 를 들 어
build
이 이 끌 어 가 는 것 과 다른 서 비 스 를 제공 할 수 있 는 것 이다.
# nuxt ,
# https://zh.nuxtjs.org/faq/nginx-proxy/
map $sent_http_content_type $expires {
"text/html" epoch; # epoch 1970
"text/html; charset=utf-8" epoch;
default off;
}
server {
listen 80;
server_name proshare.xxx.com;
# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name proshare.xxx.com;
gzip on;
gzip_types text/plain application/xml text/css application/javascript;
gzip_min_length 1000;
location / {
expires $expires;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 1m;
proxy_connect_timeout 1m;
proxy_pass http://127.0.0.1:5555;
}
location ~ /\.ht {
deny all;
}
ssl_certificate /etc/nginx/conf.d/cert/proshare/proshare.crt;
ssl_certificate_key /etc/nginx/conf.d/cert/proshare/proshare.key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
}
일반 스 크 립 트
서버 가 다운 되 지 않 을 수 없습니다. 다운 되 었 을 때 필요 한 서 비 스 는 다시 사용 해 야 합 니 다.
셀 프 스 크 립 트
nginx 시작
dist
로 유지 하면 됩 니 다. nuxt
;비
node
에 설 치 된 nginx 는 이 유지 보 수 를 이용 하여 자체 적 으로 systenctl
규범 화 된 서 비 스 를 작성 해 야 합 니 다.그리고
systemctl enable nginx
이 스 크 립 트 를 yum
에 놓 으 면 systemctl
유지 할 수 있 습 니 다.chmod 754
/usr/lib/systemd/system
의 표기 법 보기 # /usr/lib/systemd/system/nginx.service
# ,
# , , , , PID
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
www. cnblogs. com/sparkdev/p/...
pm2 달리기 종목
systemctl
지금까지 발전 하면 서 최신 판 의 기능 이 비교적 완선 되 었 고 자체 작 동 체 제 를 내장 한 것 이다.754 : rwx-rx-r => u-g-o => r(read[ ]:4)-x(excute[ ]:1)-w(write[ ]:2)
의 자체 시작 체 제 를 식별 할 수 있 습 니 다. 예 를 들 어 우리 가 사용 하 는 것 이 nginx service
인 것 을 발견 하면 pm2
의 서비스 설명 파일 을 생 성 할 수 있 습 니 다.linux
: 서 비 스 를 시작 합 니 다 systemctl
: 서비스 가 정상적으로 작 동 하 는 지 확인 nginx.service
: 현재 실행 중인 작업 저장 pm2 start [services]
pm2 list
pm2 save
(통 해 원 격 으로 발표) pm2
테스트 아래 와 정식 라인 이 있 기 때문에 나 는 설정 을 두 개 로 쓰 고 두 드 리 는 코드 를 줄 이기 위해 한 무더기 deploy
를 썼 다.# ?
# pm2 : https://pm2.io/doc/en/runtime/guide/easy-deploy-with-ssh/?utm_source=pm2&utm_medium=website&utm_campaign=rebranding
#
# $1, , , dev prod
pm2init(){
pm2 deploy ./ecosystem.$1.config.js $1 setup;
pm2 deploy ./ecosystem.$1.config.js $1;
}
pm2up(){
pm2 deploy ./ecosystem.$1.config.js $1 update;
}
pm2rev(){
pm2 deploy ./ecosystem.$1.config.js $1 revert;
}
#pm2
alias pm2init=pm2init
alias pm2up=pm2up
alias pm2rev=pm2rev
#
# pm2init depoly_name => pm2init dev
ecosystem.config.js
module.exports = {
apps: [
{
name: 'stag-sx-share',
script: 'npm',
args: 'run start',
watch: ['.nuxt'], //
watch_options: {
usePolling: true
},
env: {
HOST: '0.0.0.0',
PORT: 3333,
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production',
HOST: '0.0.0.0',
PORT: 3333
},
output: './logs/console.log',
error: './logs/consoleError.log',
merge_logs: true,
log_date_format: 'YYYY-MM-DD HH:mm Z'
}
],
deploy: {
dev: {
// SSH user
user: 'root',
// SSH host
host: ['xxxx'],
// SSH options with no command-line flag, see 'man ssh'
// can be either a single string or an array of strings
ssh_options: 'StrictHostKeyChecking=no',
// GIT remote/branch
ref: 'origin/master',
// GIT remote
repo: '[email protected]:lqh/nuxt-sx-mobile-share.git',
// path in the server
path: '/code/stag-nuxt-sx-share',
// Pre-setup command or path to a script on your local machine
'pre-setup': 'ls -la',
'pre-deploy': 'git pull',
// deploy hook
'post-deploy':
'npm install && pm2 reload ./ecosystem.dev.config.js --env production --force'
}
}
}
ssh
발표 Coding
로 설명 하 자. 그래도 편리 하 다.# rsync
# -r : recursive, , , !
# -c : , ,
# -h : --human-readable
# -v : verbose,
# --progress :
# --delete : , , !
alias fdumi="rsync -vrch --progress --delete /Users/linqunhe/Code/umi_dva_sx_admin/dist/* [email protected]:/code/umi-dva-sx-admin/dev"
총결산
재 미 있 으 면 애플 릿 을 쓸 준 비 를 했 습 니 다. 신선 하고 갓 나 온 큰 수요, 준비 용
alias
으로 쓸 준 비 를 했 습 니 다.rsync
때 하나 썼 는데 지금 alias
어떻게 변 했 는 지 모 르 겠 어 요.한 사람의 전 투 는 줄곧 그렇게 시큰시큰 하 였 는데, 다음 접 판 협 이 받 기 어 려 울 것 같 아서, 아마 모두 무 너 져 다시 할 것 같다.
제 가 먼저 구 덩이 를 밟 겠 습 니 다.
Taro
그 시 리 즈 는 연기 되 어야 합 니 다. 연말 수요 가 계속 삽입 되 고 있 습 니 다.그래도 다행 입 니 다. 그때
taro 0.x
도 나 올 것 같 습 니 다. 잘못된 점 은 댓 글로 남 겨 주세요. 바로 수정 하 겠 습 니 다. 감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.