centOS下的node部署环境搭建

本文实践的是单机搭建 nginx+node+mongodb+redis 流行组合的具体过程

node的安装过程详情

其他的直接上亲自实践过的安装命令以及需要注意的地方,习惯用英文注释,部分重点已用中文指出

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#!/bin/bash
#update software
sudo yum update -y
#back to root dir
cd ~
#Nginx
sudo yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
#If pcre
rpm -qa pcre
#yes download nginx stable version
wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar zxvf nginx-1.12.0.tar.gz
#switch to root for mkdir
su root
cd nginx-1.12.0
./configure && make && make install
cd ~ && exit
rm -rf nginx-1.12.0
rm nginx-1.12.0.tar.gz
#start nginx
#access public IP should success
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#self-start config
sudo vi /lib/systemd/system/nginx.service
#content
:'
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
'
systemctl start nginx.service
systemctl enable nginx.service
#check if running
systemctl list-units --type=service

#Mongodb
sudo vi /etc/yum.repos.d/mongodb-org-3.4.repo

#https://docs.mongodb.com/master/tutorial/install-mongodb-on-red-hat/
#content
:'
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
'

#yum install mongodb
sudo yum -y install mongodb-org
#start mongodb(default it can self-start when booting)
sudo service mongod start
#self-start
sudo chkconfig mongod on

#pm2 install
sudo cnpm i pm2 -g

#redis
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
su root
tar xzf redis-3.2.9.tar.gz
cd redis-3.2.9
make
cd src
cp redis-server redis-cli redis-sentinel redis-benchmark redis-check-aof redis-check-rdb /usr/local/bin
mkdir /etc/redis
mkdir -p /var/lib/redis/6379
cp redis.conf /etc/redis/6379.conf

vi /etc/redis/6379.conf
:'
daemonize yes
logfile /var/log/redis_6379.log
dir /var/lib/redis/6379
'

cp utils/redis_init_script /etc/init.d/redis

vi /lib/systemd/system/redis.service
#content
:'
[Unit]
Description=Redis on port 6379
[Service]
Type=forking
ExecStart=/etc/init.d/redis_6379 start
ExecStop=/etc/init.d/redis_6379 stop
[Install]
WantedBy=multi-user.target

vm.overcommit_memory = 1
net.core.somaxconn=512
'
systemctl start redis.service
systemctl enable redis.service

cd .. && cd .. && rm -rf redis-3.2.9 redis-3.2.9.tar.gz

#kernel config
sysctl -w vm.overcommit_memory=1
sysctl -w net.core.somaxconn=512
echo never > /sys/kernel/mm/transparent_hugepage/enabled

#booting shell
echo never >> /sys/kernel/mm/transparent_hugepage/enabled
echo never >> /sys/kernel/mm/transparent_hugepage/defrag
systemctl restart mongod.service

#nginx conf ( Remember to configure user !!!)
#nginx 配置内容经优化(踩过的坑,最顶部的注释要去掉替换成对应的用户名,否则会无文件权限!!)
#其中含负载均衡及反向代理的配置,模仿着配置好就行
:'
#user userName

http {
client_header_buffer_size 3k;
client_max_body_size 2m;
client_body_buffer_size 7k;
large_client_header_buffers 2 1k;

client_body_timeout 32;
client_header_timeout 32;
reset_timedout_connection on;

open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

tcp_nopush on;
tcp_nodelay on;
types_hash_max_size 2048;

gzip on;
gzip_disable "MSIE [1-6]\.";
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
types_hash_max_size 2048;

}

# 负载均衡
upstream pro_name {
server 127.0.0.1:3000;
# balanceServer ip2;
# balanceServer ip3;
}

server {
listen 80;
server_name pro_name;
charset utf-8;
access_log /var/log/nginx/app.log;
root /home/.../code/...;



location ~ /api/ {
proxy_pass http://pro_name;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_read_timeout 7s;
}

location ~ /.ht {
deny all;
}

location ~* \.(css|js|gif|jpe?g|png|ico)$ {
root /home/.../code/...;
expires 168h;
}

location / {
index index.html index.htm;
}


}
'

#实用nginx命令,养成好习惯
#everytime save change of .conf
/usr/local/nginx/sbin/nginx -t #Check Syntax
/usr/local/nginx/sbin/nginx -s reload #Smooth reload nginx

#nginx optimize
sysctl -w net.core.somaxconn=1024

最后使用pm2进行node项目的管理,包括简单的监控

详情请见

pm2进程管理

keymetrics监控项目

附上腾讯云主机在生产环境下的安全组配置

作者

马克鱼

发布于

2017-06-08

更新于

2025-10-12

许可协议