上线笔记 ubuntu - nodejs

【未完, 缺部署和HTTPS】

ssh 登陆

  1. ssh root@ip (ssh -p [port] [username]@[ip])
  2. 挂载盘 fdisk -l
  3. df -h
  4. 配置账号权限 adduser [name]
  5. 账号授权 gpasswd -a [name] sudo
    sudo visudo (在nano 的 user privilege specification 中增加[name]的权限)
  6. 重启ssh功能 service ssh restart

无密码 ssh 登陆(同时在本机和服务器执行)

  1. 配置公钥和私钥
    ssh-keygen -t rsa -b 4096 -C "[email]"

  2. 配置ssh 代理 eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_rsa

  3. 在服务器创建授权文件:(在.ssh中) vi authorized_keys (esc -> wq!)

  4. 复制本地的公钥 id_rsa.pub的内容到 服务器的authorized_keys(cat -> vi -> i -> esc -> eq!)

  5. 修改文件权限 chmod 600 authorized_keys

  6. 重启服务 sudo service ssh restart

修改服务器默认登陆端口(安全)

  1. sudo vi /etc/ssh/sshd_config
  2. 修改端口端口可修改范围 0~65536 (1~1024不要用)
  3. 在文件末尾增加 AllowUsers [name]
  4. 重启服务 sudo service ssh restart
  5. 重新登陆 ssh -p 8899 [email protected]

关闭root 账户登陆(安全)

  1. sudo vi /etc/ssh/sshd_config
  2. PermitRootLogin no
  3. 重启ssh服务 sudo service ssh restart

配置 iptables 和 Fail2Ban (安全)

  1. 更新ubuntu sudo apt-get update && sudo apt-get upgrade
  2. 清空规则 sudo iptables -F
  3. 配置 sudo vi /etc/iptables.up.rules
*filter

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT // 允许所有建立起来的连接
-A OUTPUT -j ACCEPT //允许所有出去的连接
-A INPUT -p tcp --dport 443 -j ACCEPT // 允许 https 连接
-A INPUT -p tcp --dport 80 -j ACCEPT //允许80端口
-A INPUT -p tcp -m state --state NEW --dport 8899 -j ACCEPT //允许 8899 端口的ssh服务
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT //允许ping
-A INPUT -m 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. 查看ufw是否激活: sudo ufw status
  3. 激活防火墙ufw: 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
  2. 安装 Fail2Ban: sudo apt-get install fail2ban
    10.修改fail2ban的配置文件: sudo vi /etc/fail2ban/fail.conf
    bantime = 3600
    destemail = [email]
  3. 开启 fail2ban : sudo service fail2ban stop

搭建Nodejs 环境

  1. sudo apt-get update
  2. 安装工具: sudo apt-get install vim openssl build-essential libssl-dev wget curl git
  3. 安装nvm: wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
  4. 使用nvm安装nodejs : nvm install --lts
  5. 使用此版本的nodejs: nvm use --lts
  6. 默认系统中的版本就是此版本: nvm alias default v14.15.4
  7. 检查版本: node -v
  8. 安装淘宝源 npm install -g cnpm --registry=https://registry.npm.taobao.org
  9. 检查cnpm 版本 cnpm -v
  10. 增加系统监控数目: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
  11. 安装全局工具包 npm install pm2 webpack gulp grunt-cli -g
  12. 测试环境
  • 新建app.js vi app.js
const http = require('http')
http.createServer(function(req, res){
        res.writeHead(200, {'Content-Type': 'text/plain'})
    res.end('12334')
}).listen(8081)

console.log('server running')
  • 运行服务 node app.js
  • 注意此处可能需要增加防火墙对8081端口的支持

借助 pm2 让 Nodejs 服务常驻

  1. pm2 start app.js
  2. 使用pm2 list 列出已跑起来的服务
  3. 看服务的具体信息 pm2 show [服务名]
  4. 实时日志 pm2 log

https://pm2.keymetrics.io/docs/usage/pm2-doc-single-page/

配置 nginx 反向代理

  1. 尝试关闭apache服务器 sudo service apache2 stop
  2. 删除apache:
    update-rc.d -f apache2 remove
    sudo apt-get remove apache2
  3. 更新包列表 sudo apt-get update
  4. 安装 nginx : sudo apt-get install nginx
  5. 配置nginx:
  • 进入 /etc/nginx/conf.d
  • 新建配置文件 sudo vi [name]-com-8081.conf
upstream [name] {
  server 127.0.0.1:8081;
}

server {
  listen 80;
  server_name [服务器IP, 如:124.71.194.225];

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

    proxy_pass http://[域名];
    proxy_redirect off;
  }
}
  • 确定 host 的配置未被注释:/etc/nginx/nginx.conf
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
  • 测试nginx的配置是否正确
    sudo nginx -t
  • 重启 nginx : sudo nginx -s reload
  • 隐藏 nginx 的ubuntu版本: /etc/nginx/nginx.conf 中 server_tokens 设为off

更改域名的DNS根服务器

使用 dnspod

  • 将各个运营商的DNS解析指向dnspod
    参考文档https://docs.dnspod.cn/dns/5ffd613346757d460d99ed5b/

  • 将域名加入 dnspod

  • 配置解析项目的域名

    A记录: 用来指定域名的IPv4地址(如: 8.8.8.8),将域名指向一个IP地址
    CNAME: 将一个域名指向另一个域名,另一个域名指向IP地址,
    NS: 如果需要将子域名交给其他DNS服务商解析
    MX: 如果需要设置又想,让邮箱能够收到邮件
    主机地址 + A记录 + IP + 600TTL

在 Ubuntu 上安装 MongoDB

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

  • Import the public key used by the package management system:
    wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
  • Create a list file for MongoDB
    echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
  • Reload local package database:
    sudo apt-get update
  • Install the MongoDB packages:
    sudo apt-get install -y mongodb-org

注意: 阿里云服务器的源可能是阿里云的,将阿里云的源去掉sudo vi /etc/apt/apt.conf中的地址注释掉, 修改镜像文件 sudo vi /etc/apt/souces.list.d/mongodb-org.....list/ 改为阿里云 http:/mirrors.

  • 检查防火墙是否同意 27017 端口 sudo vi /etc/iptables.up.rules
-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

sudo iptables-restore < /etc/iptables.up.rules

  • 开启mongod服务: sudo service mongod start
  • 查看 mongod服务是否开启: cat /var/log/mongodb/mongod.log
  • 如果要关闭mongod服务 : sudo service mongod stop(start 启动 restart重启)
  • 修改mongod的默认端口(原本是27017): sudo vi /etc/mongod.conf
    将 net 下的port 的 27017 改为 29999, 要重新设置防火墙端口, 然后使用mongo --port 29999进入数据库终端

向线上服务器导入数据

  • |本地|备份数据库 mondodump -h 127.0.0.1:27017 [数据库名] -o [导出文件名]
  • |本地|打包文件: tar zxvf [打包后文件名称,如: indust-app.tar.gz] [储存位置 indust-app-backup/]
  • |本地| 上传到服务器:scp -P [数据库端口] [打包后文件地址] [用户名]@[服务器IP]:[服务器上需要的储存位置] 如:
    scp -P 29999 ~/Desktop/deploy-projects/indust-app.tar.gz [email protected]:/home/manager/dbbackup
    (以上使用FTP工具亦可)
  • |服务器|解压缩tar包:tar xvf [包名]
  • |服务器|将文件导入线上mongodb:
mongorestore --host 127.0.0.1:29999  -d [文件名] [文件相对路径]
  • |服务器|验证是否导入:
    1. 进入mongo数据库: mongo --port 29999
    2. 使用 use indust-app
    3. show tables
    4. exit

上线项目配置 MongoDB 数据库读写权限

  • 为线上数据库设置超级管理员:

    1. 进入mongo 命令行界面:mongo --port 29999 (未设置port则直接是mongo)
    2. 切换至 admin 数据库: use admin
    3. 新建用户:db.createUser({user: 'some_owner', pwd: '123455', roles:[{role: 'userAdminAnyDatabase', db:'admin'}]})
  • 为数据库设置管理员:

    1. 授权(因为后续操作需要管理员账户首先授权后再进行):db.auth('some_owner', '123455') *返回值为1则表示正确*\
    2. 对其他数据库进行授权,进入其他数据库 use [数据库名]
    3. db.createUser({user: 'owner2', pwd: '123455', roles:[{role: 'readWrite', db:'数据库名'}]})
    4. 数据库备份员角色: db.createUser({user: '用户名', pwd: '111111', roles:[{role: 'read', db:'数据库名'}]})
      注: 3-> 4-> 5-> 6 为创建数据库用户的方法, 记得每次创建好后找个地方存起来密码
  • 开启验证模式

你可能感兴趣的:(上线笔记 ubuntu - nodejs)