Skip to main content

nodejs从零部署

基础命令(基于 ubuntu)

fdisk -l # 查看挂载的硬盘
df -h # 查看硬盘使用情况

linux 账户操作

1.添加用户名

adduser {username}

2.给账户 sudo 权限

gpasswd -a {username} sudo

3.权限配置修改

sudo visudo

1.在 # User privilege specification 下添加一行 {username} ALL=(ALL:ALL) ALL
2.^+X退出编辑,Shift+Y保存,·enter回车 回到命令行
3.service ssh restart 重启服务

ssh 免密登录

在本地操作

1.生成密钥

ssh-keygen -t res -b 4096 -C "xxx@xxx.com"

2. 开启ssh-agent服务

eval "$(ssh-agent -s)"

3. 添加密钥

ssh-add ~/.ssh/id_rsa

服务器端操作

1. 和本地操作一致,生成密钥,开启ssh-agent服务

2. 生成authorized_keys文件

vi ~/.ssh/authorized_keys

3. 将本地 id_rsa.pub 里面的内容 复制到服务端的 authorized_keys文件中

4. 改变authorized_keys文件权限

chmod 600 ~/.ssh/authorized_keys

5. 重启 ssh 服务

sudo service ssh restart

修改 ssh 默认端口

tips: 修改前 先新开命令行窗口,登录到服务器(防止修改出问题,导致登录不上服务器)

sudo vi /etc/ssh/sshd_config
  1. 修改 Port 参数,修改为新的端口

注意:1~1024端口为系统备用,且需要 root 权限才能启动,所以选择 1025~65536之间的端口

  1. UseDNS确保为no,文件最后添加一行AllowUsers {username}
  2. 保存退出
  3. 重启 ssh 服务sudo service ssh restart
  4. 重新登录服务器ssh -p {port} {username}@{server ip}

关闭 root 用户 ssh 登录

  1. 打开 ssh 配置文件sudo vi /etc/ssh/sshd_config
  2. 修改PermitRootLoginno
  3. 退出编辑并保存
  4. 重启 ssh 服务sudo service ssh restart

开启 iptables

  1. 清空配置sudo iptables -F
  2. 编辑配置文件sudo vi /etc/iptables.up.rules
*filter

# 允许连接
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许出口流量
-A OUTPUT -j ACCEPT
# 允许443端口访问(https)
-A INPUT -p tcp --dport 443 -j ACCEPT
# 允许80端口访问(http)
-A INPUT -p tcp --dport 80 -j ACCEPT

# 允许39999 ssh登录
-A INPUT -p tcp -m state --state NEW --dport 39999 -j ACCEPT
# 允许ping服务器
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# 允许mongoDB
-A INPUT -s 127.0.0.1 -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -d 127.0.0.1 -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT
# 记录被拒绝登录的信息
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied:" --log-level 7
# 拦截敏感请求(60秒内发出150个请求)
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 150 -j DROP
# 拒绝其他请求
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT
  1. 启用配置文件sudo iptables-restore < /etc/iptables.up.rules
  2. 查看防火墙状态sudo ufw status,如果显示 inactive则为未激活
  3. 激活防火墙sudo ufw enable
  4. 开启重启自动激活功能sudo vi /etc/network/if-up.d/iptables, 写入内容
#!/bin/sh
iptables-restore /etc/iptables.up.rules
  1. 写入执行权限sudo chmod +x /etc/network/if-up.d/iptables

生产环境搭建

1.基础包安装

sudo apt-get install vim openssl build-essential libssl-dev wget curl git

2.安装 nvm 3.安装 nodejs

nvm install v6.9.5
nvm use v6.9.5
nvm alias default v6.9.5 # 设为默认
node -v

4.设置系统文件监控数量echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

5.配置 nginx

/etc/nginx/conf.d/xxx.conf

upstream demo {
server 127.0.0.1:8081;
}
server {
listen 80;
server_name xxx.xxx.xx(ip地址);

location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;

proxy_pass http://demo;
proxy_redirect off;
}

# 静态文件配置
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|pdf|txt) {
root /www/demo/current/public;
}
}

tips: 隐藏 nginx 版本信息sudo /etc/nginx/nginx.conf# server_tokens off;的注释取消掉

mongoDB 使用

  1. 开启服务 sudo service mongod start
  2. 查看日志 cat /var/log/mongodb/mongod.log
  3. 修改 iptables 配置
# 允许mongoDB
-A INPUT -s 127.0.0.1 -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -d 127.0.0.1 -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT
  1. 启用配置文件sudo iptables-restore < /etc/iptables.up.rules
  2. 连接 mongoDB 实例mongo
  3. mongoDB 服务命令: (1).开启服务sudo service mongod start (2).停止服务sudo service mongod stop (3).重启服务sudo service mongod restart
  4. 更改 mongoDB 端口sudo vi /etc/mongod.conf修改port参数,重启服务。修改 iptables 配置,重新载入配置。连接 mongoDB mongo --port {端口}
  5. 备份本地 mongoDB 数据mongodump -h 127.0.0.1:27017 -d {数据库名称} -o {文件夹名称}
  6. 压缩备份文件tar zcvf {filename}.tar.gz {file-roder-name}
  7. scp 上传
  8. 服务器端解压缩tar xvf {filename}.tar.gz
  9. 导入数据mongorestore --host 127.0.0.1:27017 -d {数据库名} {数据路径}
  10. 本地导出单表数据mongoexport -d {数据库名} -c {表名称} -o {存放路径: ./xx.json}
  11. 导入单表数据mongoimport --host 127.0.0.1:27017 -d {数据库名} -c {表名称} {数据路径}
  12. 删除数据库mongo --host 127.0.0.1:27017 {数据库名} --eval "db.dropDatabase()"

mongoDB 权限设置

  1. 账户设置
mongo # 进入mongoDB实例
use admin # 切换到`admin`数据库
db.createUser({user: 'demo', pwd: 'xxx1234', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]}) # 创建管理员账户
db.auth('demo', 'xxx1234') # 登录授权(返回1 则授权成功)
use {数据库名称} # 切换数据库
db.createUser({user: 'username1', pwd: 'xxx222', roles: [{role: 'readWrite', db: '数据库名称']}) # 创建读写权限账户
db.createUser({user: 'username2', pwd: 'xxx222', roles: [{role: 'read', db: '数据库名称']}) # 创建读权限用户(用于数据备份)
  1. 开启认证模式
sudo vi /etc/mongod.conf

开启 security:

security:
authorization: 'enabled'

重启服务

sudo service mongod restart

进入数据库

mongo 127.0.0.1:27017/{数据库名称} -u {用户名} -p {密码}
show tables
db.user.find({})

mongoDB 数据备份

  1. 新建备份脚本
#!/bin/sh

backUpFolder = /home/backUp/db
date_now = `date +%Y_%m_%d_%H%M`
backFileName = app_$date_now

cd $backUpFolder
mkdir -p $backFileName

mongodump -h 127.0.0.1:27017 -d {数据库名称} -u {账户名称} -p {密码} -o $backFileName

tar zcvf $backFileName.tar.gz $backFileName

rm -rf $backFileName

2.利用crontab开启自动备份

crontab -e

编辑内容

13 00 * * * sh {脚本路径}

ssl 证书

  1. 免费证书

    又拍云
    七牛云
    腾讯云

  2. nginx 重定向配置

server {
listen 80;
server_name xxxx.com;
# rewrite ^(.*) https://$host$1 permanent;
return 301 https://xxxx.com$request_uri;
}

安装教程