感谢 Scott 老师,Scott老师的慕课网教程 https://coding.imooc.com/clas...
ssh root@39...* 输入密码(购买时的密码)javascript
root@39.106.220*.*: Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
alias ssh_orange="ssh root@39.106.22*.*"
root 权限,能够增长几个拥有root权限的用户css
adduser [name]
cat /etc/passwd
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
orange01
设置密码 passwd orange01
根据提示填写两次密码gpasswd -a orange001 sudo
(centos 环境)html
配置用户权限: 修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,以下所示: ## Allow root to run any commands anywhere root ALL=(ALL) ALL orange01 ALL=(ALL) ALL 修改完毕,如今能够用 orange01 账号登陆,而后用命令 su - ,便可得到root权限进行操做。 :wq! 保存退出
srevice ssh restart
centos7 命令:systemctl restart sshd.service
或 service sshd restart
ssh 实现无密码登陆java
本地操做: 本地生成 ssh key: ssh-keygen -t rsa -b 4096 -C "326242499.@qq.com" 同 git 操做同样 开启 ssh 代理 eval "$(ssh-agent -s)" 把ssh key 假如到代理中 ssh-add ~/.ssh/id_rsa (在 .ssh 目录下执行这一操做) 远程主机操做: 再把上面本地操做的步骤重复一遍 而后生成 authorized_keys 文件: vi .ssh/authorized_keys 而后将本地的公钥的内容 (~/.ssh/id_rsa.pub) 拷贝到远程主机的 authorized_keys 文件内 受权 chmod 600 authorized_keys 重启远程主机 sudo service ssh restart(乌班图) systemctl restart sshd.service 或 service sshd restart (centos7) 作完这些步骤就能够ssh免密登陆远程主机了
端口安全性node
https://www.cnblogs.com/zhuzi8849/p/6254498.html
ssh -p 3600 root@39.**.**.*
登陆链接超时 (未设置成功)配置安全项、防火墙(iptables) --- 未作nginx
sudo yum update
或者 sudo yum upgrade (这个会报错)sudo yum install vim openssl build-essential libssl-dev wget curl git
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
安装完以后 nvm --version 检查下是否安装成功 安装 node: nvm install v8.11.3
git
nvm use v8.10.0
nvm 指定使用的 node 的版本nvm alias default v8.10.0
设置 node 默认使用版本设置淘宝镜像 npm --registry=https://registry.npm.taobao.org install -g npm
github
npm --registry=https://registry.npm.taobao.org install -g cnpm
cnpm sync koa
同步 npm 上的模块echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
(不知道是作什么)npm install -g pm2
开启一个静态站点web
经过对80端口的监听,将80端口的流量转发到其余端口
让web经过 80 端口被外网访问
只有 root 权限的用户才能使用 80 端口
服务器有多个网站 能够经过 nginx 代理 80端口,转发给 特定的端口,实现负载均衡
httpd
包/etc/nginx/conf.d
目录下,而后建立配置文件配置文件:一个服务一个配置文件microblog-yao-3002.conf
命名规则:域名 + 端口
mongodb
# 考虑负载均衡策略 upstream microblog { server 127.0.0.1:3002; // 本地node服务 } server { listen 80; server_name code-sky.cn; // 域名 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://microblog; // 把域名代理到应用上 proxy_redirect off; } } 检查 nginx/nginx.conf 配置文件 去掉 include 注释 include /etc/nginx/conf.d/*.conf; 这句在 nginx.conf 必需要在 http 里面 server 外面 sudo nginx -t 检查 nginx 配置文件是否正确 nginx 重启 sudo nginx -s reload 隐藏 nginx 版本 nginx.conf http 设置 server_tokens off;
nginx 对 css,js 静态资源的处理(可以让浏览器缓存静态资源)
# 在单独应用的nginx配置里,放在server里面同 location同级 # 对静态资源的处理 location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|pdf|txt) { root /www/blog/production/current/admin/dist/; } # 开启gizp压缩 # new config lines for gzip gzip on; gzip_min_length 1k; gzip_buffers 4 8k; gzip_http_version 1.1; gzip_types text/plain application/javascript application/x-javascript text/javascript text/css;
在服务器上搭建 MongoDB数据库(通常状况下,数据应该与应用分开,本身学习就无所谓了)
brew install mongodb
brew安装MongoDB brew services start mongodb
/usr/local/Cellar/
下的 mongodb
文件夹。To have launchd start mongodb now and restart at login:
brew services start mongodb
Or, if you don't want/need a background service you can just run:
mongod --config /usr/local/etc/mongod.conf
mongoDB操做
启动报错处理 mongod -repair 启动mongodb systemctl start mongod.service or service mongod start 重启mongodb systemctl restart mongod.service or service mongod restart 中止mongodb systemctl stop mongod.service or service mongod stop 查看mongodb状态 systemctl status mongod.service 登陆 mongo 查看数据库 show dbs
修改 mongodb 默认链接端口号
sudo vi /etc/mongod.conf # port: 27017 # 将端口号修改成 19999 port: 19999 bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces. 修改完端口 重启mongodb sudo service mongod restart 指定端口链接 指定端口链接 mongodb mongo --port 19999 注意:若是设置了防火墙,要将防火墙更新
mongodump -h 127.0.0.1:27017 -d test2 -o microblog
test2 数据库名称
microblog 备份文件夹名称
tar zcvf microblog.tar.gz microblog
前面:打包后的文件名称 后面:打包前的文件夹
scp -p 80 ./microblog.tar.gz root@39.106.220.6:/root/dbmicroblog
-p 服务器端口
本地tar包位置
服务器地址
服务器存放 tar 包的位置
tar -xzvf microblog.tar.gz
tar 命令: 压缩文件:tar -czvf test.tar.gz a.c // 压缩 a.c 文件为 test.tar.gz 解压文件:tar -xzvf test.tar.gz a.c // 解压 test.tar.gz 为 a.c
test2
数据库导入到线上刚刚配置完端口的数据库mongorestore --host 127.0.0.1:19999 -d test2 ./test2
前面test2 线上数据库的名称
后面 ./ test2 线上备份数据库存储的位置
查看是否导入成功
mongo --port 19999 show dbs 查看数据库 use test2 进入test2数据库 show tables 查看test2数据库中的表 db.user.find({}) 查看表中的数据
导入到线上已有的数据库,导入一张或多张单表
本地导出单表 mongoexport -d immoc-movie -c users -q '{"name": {$ne: null}}' -o ./movie-users.json -d immoc-movie 数据库名称 -c users 要导出的表 -q 可选 查询条件 -o 导出文件在本地存放的位置 将该单表 scp 上传到服务器 将该单表导入到 线上数据库 mongoimport --host 127.0.0.1:19999 -d immoc-movie -c users ./movie-users.json 建议导入初始化数据时在配置数据库权限以前,否则输入的命令会麻烦不少,输入各类命令 删掉数据库 mongo --host 127.0.0.1:19999 immoc-movie --eval "db.dropDatabase()"
mongod 打开mongoDB 服务
mongo 打开 mongoDB客户端
brew services start mongodb
为数据库设置用户权限 设置 添加mongoDB管理员 use admin db.createUser({user: 'orange', pwd: 'yao1024', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]}) 每次对不一样数据库建立管理员都须要到 admin 去认证 对用户进行登陆受权 use admin db.auth('orange', 'yao1024') 切换到 test2 use test2 建立读写权限用户 db.createUser({user: 'microblog', pwd: 'microblog', roles: [{role: 'readWrite', db: 'test2'}]}) 建立备份角色 db.createUser({user: 'wheel', pwd: 'wheel', roles: [{role: 'read', db: 'test2'}]}) 修改配置文件开启mongoDB验证模式 sudo vi /etc/mongod.conf # security: 将 #去掉 authorization: 'enable' (两个空格) 重启 mongoDB 让配置生效 sudo service mongod restart 从新登陆 mongo --port 19999 show dbs 就会报错 use admin db.auth('orange', 'yao1024') 直接登陆某个数据库 mongo 127.0.0.1:19999/test2 -u microblog -p microblog 数据库名 用户名 密码
迁移数据库、迁移数据库的一张单表 先将 库或单表导出到服务器的某个目录里,而后 tar 打包 用 scp -P 80 root@xx.xx.xx:/root/db/microblog.tar.gz 而后再把这个包上传到另外一台服务器上 线上生产数据库定时备份(上传到云平台)
pm2 deploy ecosystem.json production setup
pm2 deploy ecosystem.json production
1. 服务器安装 git,(和本地安装git同样,配置 rsa_pub 等文件,能够实现免密) 2. 本地代码上传到代码仓库 3. 服务器拉取代码仓库代码 4. 在项目根目录建立 pm2 自动部署文件 ecosystem.json,编辑部署文件内容 5. 在服务器根目录上新建 /www 目录,与 pm2 配置文件映射起来 6. 在本地执行 pm2 deploy ecosystem.json production setup 便可成功部署 7. 可能部署失败的缘由:帐号权限不够,服务器 www 文件不存在 部署的 user 用户必需要有建立文件夹的权限 原理:经过本地 pm2 登陆远程服务器,通知远程服务器从代码仓库拉取代码到部署目录 8. pm2 在服务器上使用的是 非交互 ssh 链接方式,须要注释 .bashec 文件内容 (个人centos 没找到那两句,因此什么也没作) 9. 将 代码仓库更新,确保 ecosystem.json 存在于 /www/production/current 目录里 10. 执行 pm2 deploy ecosystem.json production 部署成功,即发布成功 11. 修改 nginx 配置文件 建立3000端口的 conf 问题:如何开启两个端口共存,防火墙容许3000端口访问,仍是申请个域名吧 12. 代码更新 pm2 deploy 的 HEAD 指向不了最新的提交,仍是指向上次的提交 解决方法:须要在 pm2 配置文件中多加一行配置 "post-deploy": "git pull && npm install && pm2 startOrRestart ecosystem.json --env production", 13. 若是数据库设置了用户权限:代码里链接数据库要以 14. 若是没有域名,怎么在 nginx 配置映射二级域名,有 二级 ip地址之说吗? 不要搞了,仍是备案域名吧
scp -p 80 ./admin.code-sky.cn/Nginx/2_admin.code-sky.cn.key root@39.106.220.6:/root
scp -p 80 ./admin.code-sky.cn/Nginx/1_admin.code-sky.cn_bundle.crt root@39.106.220.6:/root
ssl
的文件夹,而后将 ssl
文件夹移动到 /www
目录下修改 nginx 配置文件
upstream admin { server 127.0.0.1:3003; } server { listen 80; server_name admin.code-sky.cn; # rewrite ^(.*) https://$host$1 permanent; return 301 https://admin.code-sky.cn$request_uri; } server { listen 443; server_name admin.code-sky.cn; #填写绑定证书的域名 ssl on; ssl_certificate /www/ssl/1_admin.code-sky.cn_bundle.crt; ssl_certificate_key /www/ssl/2_admin.code-sky.cn.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置 ssl_prefer_server_ciphers on; if ($ssl_protocol = "") { rewrite ^(.*) https://$host$1 permanent; } 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://admin; proxy_redirect off; } location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|pdf|txt) { root /www/blog/production/current/admin/dist/; } # new config lines for gzip gzip on; gzip_min_length 1k; gzip_buffers 4 8k; gzip_http_version 1.1; gzip_types text/plain application/javascript application/x-javascript text/javascript text/css; }
sudo nginx -t
重启nginx sudo nginx -s reload
即完成 https 配置