感謝 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 配置