NodeJs+Express建设一个网站记录
用 Express generator 快速开始
- 安装 Express application generator
$ npm install express-generator -g
- 用Express generator 创建 nodeweb 项目
$ express --ejs nodeweb
--ejs 表示用ejs做view engine,默认使用jade - 安装dependencies
cd nodeweb
npm install
- 运行刚才创建的项目
- On MacOS or Linux
$ DEBUG=nodeweb:* npm start
- On Windows, use this command:
> set DEBUG=myapp:* & npm start
这里的DEBUG是node的 environment variable,在js文件中可以通过process.env.DEBUG
得到前面设置的DEBUG的值
Serving static files in Express
app.use('/static', express.static(path.join(__dirname, 'public')))
express.static 是 express 的一个内置 middleware。
用 git 同步代码
在服务器上, ce ~/web
, 把网站代码clone下来
用 PM2 运行
安装 pm2
npm install pm2@latest -g
启动网站
pm2 start apps.json
pm2 生成启动脚本
方式1
$ pm2 startup centos
[PM2] You have to run this command as root. Execute the following command:
sudo su -c "env PATH=$PATH:/usr/bin pm2 startup centos -u red --hp /home/red"
把sudo su...这句话拷贝,粘贴再次运行,在/etc/init.d/下生成一个 pm2-init.sh, 每次系统启动会自动运行。
方式2
方式1产生的脚本在init.d目录, centos 7 已经是用 systemd 了,所以下面的方式更好 $ pm2 startup systemd
[PM2] You have to run this command as root. Execute the following command:
sudo su -c "env PATH=$PATH:/usr/bin pm2 startup systemd -u red --hp /home/red"
再次运行sudo su -c "env PATH=$PATH:/usr/bin pm2 startup systemd -u red --hp /home/red"
这次会在 /etc/systemd/system
下面产生pm2.service
.
安装 Nginx
现在curl localhost:3000
,网站能运行,但是3000 端口被 firewalld 封锁,从服务器外部还是不能打开网站。这时可以给 firewalld 增加一个 service 打开 3000 端口,也可以安装 nginx 做反向代理。
安装 nginx
sudo yum install nginx
先删除 nginx 默认配置里的 server 部分,打开 /etc/nginx/nginx.conf
, 删除 server {... ...}里面的内容,保存。
添加modular 配置,在/etc/nginx/nginx.conf
里的 http 部分找到 include /etc/nginx/conf.d/*.conf
, 这句话好像默认就存在。
添加my-web的配置,在 /etc/nginx/conf.d/下新建文件 my-web.conf, 添加内容
server {
listen 80;
server_name yy.xx.com;
location / {
proxy_pass http://127.0.0.1:3000/;
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;
#client_max_body_size 100m;
}
}
检查配置文件的语法是否有错: sudo nginx -t
重启动 nginx, sudo systemctl restart nginx
这时候,本地机器 http://yy.xx.com应该可以打开 my-web。