名詞?CONTAINER?ID(容器ID)
名詞?IMAGE?ID(鏡像ID)cat?/etc/os-release?//查看系統信息
pwd?//查看當前路徑
ls?//查看當前目錄文件
docker?-v?//查看docker版本
docker-compose?up?-d?//在后臺運行(取消-d是在控制臺運行)
docker-compose?stop?//所有容器停止運行
docker?ps?-a?//查看正在運行的容器
docker?images?//查看安裝的鏡像
docker?stop?[CONTAINER?ID]?//停掉運行的容器
docker?rm?[CONTAINER?ID]?//刪除運行的容器
systemctl?status?docker??//查看docker狀態
systemctl?stop?docker????//停止docker
systemctl?start?docker????//啟動docker
systemctl?restart?docker????//重啟docker Docker + Jenkins + Nginx 實戰前端自動化部署
version:?'3.8'
#?執行腳本;docker-compose?-f?docker-compose-v1.0.yml?up?-d
services:jenkins:image:?jenkins/jenkins:2.439container_name:?jenkinsprivileged:?trueuser:?rootports:-?"9090:8080"-?"50001:50000"volumes:-?./jenkins_home:/var/jenkins_home?#?如果不配置到云服務器路徑下,則可以配置?jenkins_home?會創建一個數據卷使用-?/var/run/docker.sock:/var/run/docker.sock-?/usr/bin/docker:/usr/local/bin/docker-?./maven/conf/settings.xml:/usr/local/maven/conf/settings.xml?#?這里只提供了?maven?的?settings.xml?主要用于修改?maven?的鏡像地址-?./jdk/jdk1.8.0_202:/usr/local/jdk1.8.0_202?#?提供了?jdk1.8,如果你需要其他版本也可以配置使用。environment:-?JAVA_OPTS=-Djenkins.install.runSetupWizard=false?#?禁止安裝向導「如果需要密碼則不要配置」docker?exec?jenkins?cat?/var/jenkins_home/secrets/initialAdminPasswordrestart:?unless-stoppedvolumes:jenkins_home: Jenkins-Mac
1、安裝jenkinsbrew?install?jenkins2、鏈接launchd配置文件ln?-sfv?/usr/local/opt/jenkins/*.plist?~/Library/LaunchAgentsln?-sfv?/usr/local/opt/jenkins-lts/*.plist?~/Library/LaunchAgents3、啟動jenkinslaunchctl?load?~/Library/LaunchAgents/homebrew.mxcl.jenkins.plistlaunchctl?load?~/Library/LaunchAgents/homebrew.mxcl.jenkins-lts.plist4、停止jenkinslaunchctl?unload?~/Library/LaunchAgents/homebrew.mxcl.jenkins.plistlaunchctl?unload?~/Library/LaunchAgents/homebrew.mxcl.jenkins-lts.plist訪問:http://localhost:8080?
清華大學鏡像:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
tar?-xvzf?jdk-8u281-linux-x64.tar.gz
vi?/etc/profile.d/java8.sh
export?JAVA_HOME=/usr/local/java/jdk1.8.0_281
export?JAVA_BIN=/usr/local/java/jdk1.8.0_281/bin
export?PATH=$PATH:$JAVA_HOME/bin
export?CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export?JAVA_HOME?JAVA_BIN?PATH?CLASSPATH
source?/etc/profile
java?-versiontar?-xvzf?apache-maven-3.6.3-bin.tar.gz
mv?apache-maven-3.6.3?maven3
vi?/etc/profileMAVEN_HOME=/usr/local/tools/maven3?
export?MAVEN_HOME?
export?PATH=${PATH}:${MAVEN_HOME}/binsource?/etc/profile?
mvn?-version 添加訪問憑據:點擊添加,添加訪問認證(我是用的UserName+Password模式也可以選擇其他方式)
源碼管理:選擇Git填寫倉庫地址,并添加訪問賬號和密碼或者秘鑰
Jenkins是開源CI&CD軟件領導者,是Devops神器
安裝Jenkins->編寫pipeline腳本->編寫Dockerfile腳本。
FROM?openjdk:8-jdk-alpineMAINTAINER?liunewshine@qq.comENV?TZ=Asia/Shanghai
RUN?ln?-snf?/usr/share/zoneinfo/$TZ?/etc/localtime?&&?echo?$TZ?>?/etc/timezone?&&?mkdir?-p?/esmsWORKDIR?/esmsEXPOSE?8090ADD?./target/esms.jar?./CMD?java?-Djava.security.egd=file:/dev/./urandom?-jar?esms.jar
docker?run?-u?root?-itd?--name?jenkins?-p?6001:8080?-v?$(which?docker):/usr/bin/docker?-v?/var/run/docker.sock:/var/run/docker.sock?-e?TZ="Asia/Shanghai"?-v?/etc/localtime:/etc/localtime:ro?-v?/volume1/docker/jenkins:/var/jenkins_home?jenkins/jenkins docker pull jenkins/jenkins
docker-ce 18.09.1(務必使用docker-ce,老版本的docker會導致Jenkins中無法使用docker daemon)
流水線+docker,流水線可以讓項目發布流程更加清晰,docker可以大大減少Jenkins配置。
盡量減少Jenkins的配置和發布腳本的書寫。
CPU使用率、內存使用率和磁盤使用率的提高通常與系統中發生的特定操作和情況相關。以下是一些常見情況和操作,可能會導致這些資源的使用率增加:
CPU使用率增加:
運行計算密集型任務:例如,執行大量數學計算、加密解密操作或圖像處理。
運行多個并發應用程序:同時運行多個應用程序或服務,尤其是需要大量計算資源的應用程序,可能會導致CPU使用率增加。
資源競爭:如果系統上運行了多個高優先級的任務或進程,它們可能會競爭CPU資源,導致CPU使用率上升。
內存使用率增加:
運行內存密集型應用程序:例如,大型數據庫、緩存服務或虛擬機。
創建大型數據結構:例如,加載大型文件或數據集到內存中。
內存泄漏:如果應用程序存在內存泄漏問題,內存使用率可能會持續增加,直到系統耗盡可用內存。
磁盤使用率增加:
寫入大量數據:例如,進行大規模的日志記錄、數據庫寫入操作或文件傳輸。
讀取大量數據:例如,從磁盤加載大型文件或執行大型數據庫查詢。
運行IO密集型應用程序:例如,視頻編碼、解碼或批量文件處理。
文件系統碎片化:如果文件系統碎片化嚴重,可能會導致文件讀取和寫入操作變慢,進而導致磁盤使用率增加。
查看某個端口是否開放:netstat -lnt | grep 80
查看nginx配置是否正確:nginx -t
查看nginx是否正常啟動:ps -ef | grep nginx
查看防火墻狀態: systemctl status firewalld
啟動防火墻: systemctl start firewalld
停止防火墻: systemctl stop firewalld
永久停用: systemctl disable firewalld
啟用防火墻: systemctl enable firewalld
查看某個端口占用情況:netstat –apn | grep 8080
升級版本內核:yum update -y
docker?run?-p?3306:3306?--restart=always?-e?TZ="Asia/Shanghai"?\
--name?mymysql?-v?/usr/local/gourd/docker/mysql/conf:/etc/mysql/conf.d?\
-v?/usr/local/gourd/docker/mysql/logs:/logs?\
-e?MYSQL_ROOT_PASSWORD=123456?-d?mysql:5.7docker?run?-p?8080:8080?--name?gourdtomcat?\
--restart=always?-e?TZ="Asia/Shanghai"?\
-v?/docker/tomcat/test:/usr/local/tomcat/webapps/test?-d?tomcatdocker?run?-p?6379:6379?--restart=always?-e?TZ="Asia/Shanghai"?\-v?/usr/local/gourd/docker/redis/data:/data?\-v?/usr/local/gourd/docker/redis/conf/redis.conf:/etc/redis/redis.conf?\--name?myredis?-d?redis?redis-server?--appendonly?yesdocker?run?--name?gourdnginx?-p?80:80?\--restart=always?-e?TZ="Asia/Shanghai"?-d?\-v?$PWD/conf/nginx.conf:/etc/nginx/nginx.conf?\-v?$PWD/logs:/var/log/nginx?nginx //?查看運行中的容器
docker?ps
//?查看所有的容器
docker?ps?-a
//?搜索鏡像
docker?search?keyword
//?例:docker?search?mysql
//?查看下載的鏡像
docker?iamges
//?啟動容器
docker?start?[容器名/容器ID]
//?停止容器
docker?stop/kill?[容器名/容器ID]
//?重啟容器
docker?restart?[容器名/容器ID]
//?刪除已停止的容器
docker?rm?[容器名/容器ID]
//?強制刪除容器
docker?rm?-f?[容器名/容器ID]
//?刪除鏡像
docker?rmi?鏡像id
//?查看容器日志
docker?logs?[容器名/容器ID]
//?查看容器運行狀態信息
docker?stats
//?獲取容器/鏡像的元數據
docker?inspect?[OPTIONS]?NAME|ID?[NAME|ID...]
//?查看容器中運行的進程信息,支持?ps?命令參數
docker?top?[OPTIONS]?CONTAINER?[ps?OPTIONS]
//?將宿主機目錄拷貝到容器目錄
docker?cp?[path1]?[容器ID]:[path2]
//?將容器目錄拷貝到宿主機目錄
docker?cp?[容器ID]:[path2]?[path1] Web 應用程序,如 Nginx、Apache、Node.js、Tomcat 等。
數據庫,如 MySQL、PostgreSQL、MongoDB 等。
消息隊列,如 RabbitMQ、Kafka 等。
緩存,如 Redis、Memcached 等。
日志管理,如 ELK(Elasticsearch、Logstash、Kibana) 等。
容器管理,如 Kubernetes、Docker Compose 等。
docker?search?postgres
docker?pull?postgres
docker?images[root@localhost?~]$?cd?/data/
[root@localhost?data]$?mkdir?postgres
[root@localhost?postgres]$?pwd
/data/postgresdocker?run?--name?postgresql?--privileged?-e?POSTGRES_PASSWORD=password?-p?15433:5432?-v?/data/postgres:/var/lib/postgresql/data?-d?postgresdocker?ps?-adocker?pull?postgres
docker?volume?create?postgre-data
docker?run?-id?--name=postgresql?-v?postgre-data:/var/lib/postgresql/data?-p?5432:5432?-e?POSTGRES_PASSWORD=123456?-e?LANG=C.UTF-8?postgres 1?搜索鏡像?docker?search?<鏡像名稱>
2?下載鏡像?docker?pull?<鏡像名稱>:<標簽>
3?運行容器?docker?run?<選項>?<鏡像名稱>:<標簽>
4?配置容器?docker?exec?<容器名稱>?<命令>
5?保存容器?docker?commit?<容器名稱>?<新鏡像名稱>:<標簽>
6?導出容器?docker?save?-o?<文件名稱>?<鏡像名稱>:<標簽>
7?導入容器?docker?load?-i?<文件名稱>
Navicat for PostgreSQL 是一個簡單易用的 PostgreSQL 數據庫開發圖形工具。從編寫簡單的 SQL 查詢到開發復雜的數據庫,Navicat for PostgreSQL 旨在滿足廣泛的用戶需求,從 PostgreSQL 初學者到經驗豐富的開發人員。連接到本地/遠程 PostgreSQL 服務器,并與 Amazon Redshift、Amazon Aurora、Amazon RDS、Google Cloud 和 Microsoft Azure 等云數據庫以及所有 PostgreSQL 數據庫對象兼容。
Apache Bench (ab) :Apache Bench是一個簡單而強大的HTTP性能測試工具,它通常隨著Apache Web服務器一起提供。您可以使用Homebrew來安裝它:
brew install ab。Wrk:Wrk是一個現代的HTTP性能測試工具,具有線程化設計和支持Lua腳本等特性。您可以使用Homebrew來安裝它:
brew install wrk。Siege:Siege是另一個流行的HTTP性能測試工具,具有簡單易用的特性。您可以使用Homebrew來安裝它:
brew install siege。Vegeta:Vegeta是一個命令行工具,用于基于HTTP進行負載測試和性能分析。您可以使用Homebrew來安裝它:
brew install vegeta。JMeter:Apache JMeter是一個功能強大的Java應用程序,用于執行各種負載測試和性能測量,不僅限于HTTP。您可以從官方網站下載并手動安裝它:Apache JMeter。
創建MQTT pub Sampler錄入要發送MQTT的topic,如果需要發送不同數據,可以創建一個CVS,從表里獲取數據。這時候在Pub sampler 里就需要使用${}來獲取數據,字符串要加“”。
如果要模擬多個設備,那就創建多個線程組即可。如果想要測試MQTT服務能承受多大的并發, 可以根據需要設置線程數和間隔時間,不過這個數量如果特別大的話,并發量會不精準,但總體上還是可以達到我們的測試目的。
最好設置一個定時器,控制發送的頻率。比如設置10毫秒一次,相當于1個線程1秒發送100次數據
注意超時時間,這里默認的是10毫秒,如果MQTT服務不穩定,可能會出現偶爾連不上的問題,建議1000毫秒
public?enum?ServiceError?{NORMAL(1,?"操作成功"),UN_KNOW_ERROR(-1,?"未知錯誤"),/**?Global?Error?*/GLOBAL_ERR_NO_SIGN_IN(-10001,"未登錄或登錄過期/Not?sign?in"),GLOBAL_ERR_NO_CODE(-10002,"code錯誤/error?code"),GLOBAL_ERR_NO_AUTHORITY(-10003,?"沒有操作權限/No?operating?rights"),;private?int?code;private?String?msg;private?ServiceError(int?code,?String?msg){this.code=code;this.msg=msg;}public?int?getCode()?{return?code;}public?String?getMsg()?{return?msg;}
} springboot 啟動類
jar啟動請忽略,war啟動請繼承 SpringBootServletInitializer
import?org.springframework.boot.SpringApplication;
import?org.springframework.boot.autoconfigure.SpringBootApplication;
import?org.springframework.boot.builder.SpringApplicationBuilder;
import?org.springframework.boot.web.servlet.support.SpringBootServletInitializer;@SpringBootApplication
public?class?SecurityApplication?extends?SpringBootServletInitializer?{public?static?void?main(String[]?args)?{SpringApplication.run(SecurityApplication.class,?args);}//?war啟動請實現該方法@Overrideprotected?SpringApplicationBuilder?configure(SpringApplicationBuilder?builder)?{return?builder.sources(SecurityApplication.class);}
}
Docker Compose是一個用于定義和運行多個Docker容器的工具。它允許您使用YAML文件來配置應用程序的服務、網絡和卷,并使用單個命令啟動、停止和管理整個應用程序。通過Docker Compose,您可以在一個命令中啟動包含多個容器的應用程序,而無需手動運行多個docker run命令。
Docker Compose的核心概念包括:
服務(Services) :指應用程序中的不同組件,每個服務通常對應一個容器。
項目(Project) :指由一組關聯的服務組成的完整應用程序。
YAML文件:用于定義項目結構、服務配置和依賴關系的文本文件,通常稱為
docker-compose.yml。
使用Docker Compose,您可以輕松地在開發、測試和生產環境中部署和管理復雜的容器化應用程序。
全局參數
filter
監測數據項統一過濾,保留兩位小數。
{{10.23123|montionFilter?}} 掃碼登錄流程講解、獲取授權登錄二維碼
微信開放平臺的方式應該是最舒服的微信掃碼登陸了,但是前提需要交認證300元的認證費用,網站的話還需要提交《微信開放平臺網站信息登記表》,也是審核最麻煩的方式,只好先pass啦
時序圖總結流程:
1、用戶點擊網站微信登陸圖標。
2、網站帶上AppID和AppSecret和回調域名參數請求微信OAuth2.0授權登陸。
3、第二步通過后,微信返回二維碼供用戶掃碼。
4、用戶掃碼確定授權。
5、微信帶上code參數回調java后端相關接口。
6、java后端獲取到code后,在帶上帶上AppID和AppSecret和code再去調微信接口。
7、獲取access_token后就可以解析用戶的一些基本信息,比如:微信用戶頭像、用戶名、性別、城市等一些基本參數。
準備工作
網站應用微信登錄是基于OAuth2.0協議標準構建的微信OAuth2.0授權登錄系統。 在進行微信OAuth2.0授權登錄接入之前,在微信開放平臺注冊開發者賬號,并擁有一個已審核通過的網站應用,并獲得相應的AppID和AppSecret,申請微信登錄且通過審核后,可開始接入流程。
授權流程說明
微信OAuth2.0授權登錄讓微信用戶使用微信身份安全登錄第三方應用或網站,在微信用戶授權登錄已接入微信OAuth2.0的第三方應用后,第三方可以獲取到用戶的接口調用憑證(access_token),通過access_token可以進行微信開放平臺授權關系接口調用,從而可實現獲取微信用戶基本開放信息和幫助用戶實現基礎開放功能等。 微信OAuth2.0授權登錄目前支持authorization_code模式,適用于擁有server端的應用授權。該模式整體流程為:
1.?第三方發起微信授權登錄請求,微信用戶允許授權第三方應用后,微信會拉起應用或重定向到第三方網站,并且帶上授權臨時票據code參數;
2.?通過code參數加上AppID和AppSecret等,通過API換取access_token;
3.?通過access_token進行接口調用,獲取用戶基本數據資源或幫助用戶實現基本操作。 第一步:請求CODE
第三方使用網站應用授權登錄前請注意已獲取相應網頁授權作用域(scope=snsapi_login),則可以通過在PC端打開以下鏈接: https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 若提示“該鏈接無法訪問”,請檢查參數是否填寫錯誤,如redirect_uri的域名與審核時填寫的授權域名不一致或scope不為snsapi_login。
1.?若access_token已超時,那么進行refresh_token會獲取一個新的access_token,新的超時時間;
2.?若access_token未超時,那么進行refresh_token不會改變access_token,但超時時間會刷新,相當于續期access_token。 請求方法
獲取第一步的code后,請求以下鏈接進行refresh_token:
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN 1、Appsecret?是應用接口使用密鑰,泄漏后將可能導致應用數據泄漏、應用的用戶數據泄漏等高風險后果;存儲在客戶端,極有可能被惡意竊取(如反編譯獲取Appsecret);
2、access_token?為用戶授權第三方應用發起接口調用的憑證(相當于用戶登錄態),存儲在客戶端,可能出現惡意獲取access_token?后導致的用戶數據泄漏、用戶微信相關接口功能被惡意發起等行為;
3、refresh_token?為用戶授權第三方應用的長效憑證,僅用于刷新access_token,但泄漏后相當于access_token?泄漏,風險同上;
4、如無特別業務需求,建議開發者自行管理業務登錄態并合理設置過期時間,減少用戶重新授權登錄次數,優化用戶體驗。建議將secret、用戶數據(如access_token)放在App云端服務器,由云端中轉接口調用請求。 對于接口作用域(scope),能調用的接口有以下:
| 授權作用域(scope) | 接口 | 接口說明 |
|---|---|---|
| snsapi_base | /sns/oauth2/access_token | 通過code換取access_token、refresh_token和已授權scope |
| snsapi_base | /sns/oauth2/refresh_token | 刷新或續期access_token使用 |
| snsapi_base | /sns/auth | 檢查access_token有效性 |
| snsapi_userinfo | /sns/userinfo | 獲取用戶個人信息 |
什么是授權臨時票據(code)? 答:第三方通過code進行獲取access_token的時候需要用到,code的超時時間為10分鐘,一個code只能成功換取一次access_token即失效。code的臨時性和一次保障了微信授權登錄的安全性。第三方可通過使用https和state參數,進一步加強自身授權登錄的安全性。
什么是授權作用域(scope)? 答:授權作用域(scope)代表用戶授權給第三方的接口權限,第三方應用需要向微信開放平臺申請使用相應scope的權限后,使用文檔所述方式讓用戶進行授權,經過用戶授權,獲取到相應access_token后方可對接口進行調用。
當認證完成之后,我們即可以創建網站應用
1、微信開放平臺介紹(申請里面的網站應用需要企業資料) 微信開放平臺網站:https://open.weixin.qq.com/
2、什么是appid、appsecret、授權碼code appid和appsecret是 資源所有者向申請人分配的一個id和秘鑰 code是授權憑證,A->B 發起授權,想獲取授權用戶信息,那a必須攜帶授權碼,才可以向B獲取授權信息 (你要從我這里拿東西出去,就必須帶身份證)
3、先仔細閱讀下微信開放平臺 官方給出的微信登錄開發指南: https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
#????1、掃碼支付文檔:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=2_2
#????2、名稱理解appid:公眾號唯一標識appsecret:公眾號的秘鑰mch_id:商戶號,申請微信支付的時候分配的key:支付交易過程生成簽名的秘鑰,設置路徑?微信商戶平臺(pay.weixin.qq.com)-->賬戶中心-->賬戶設置-->API安全-->密鑰設置
#????3、和微信支付交互方式1、post方式提交2、xml格式的協議3、簽名算法MD54、交互業務規則?先判斷協議字段返回,再判斷業務返回,最后判斷交易狀態5、接**易單位為?分6、交易類型:JSAPI--公眾號支付、NATIVE--原生掃碼支付、APP--app支付 微信支付業務流程說明:
(1)商戶后臺系統根據用戶選購的商品生成訂單。
(2)用戶確認支付后調用微信支付【統一下單API】生成預支付交易;
(3)微信支付系統收到請求后生成預支付交易單,并返回交易會話的二維碼鏈接code_url。
(4)商戶后臺系統根據返回的code_url生成二維碼。
(5)用戶打開微信“掃一掃”掃描二維碼,微信客戶端將掃碼內容發送到微信支付系統。
(6)微信支付系統收到客戶端請求,驗證鏈接有效性后發起用戶支付,要求用戶授權。
(7)用戶在微信客戶端輸入密碼,確認支付后,微信客戶端提交授權。
(8)微信支付系統根據用戶授權完成支付交易。
(9)微信支付系統完成支付交易后給微信客戶端返回交易結果,并將交易結果通過短信、微信消息提示用戶。微信客戶端展示支付交易結果頁面。
(10)微信支付系統通過發送異步消息通知商戶后臺系統支付結果。商戶后臺系統需回復接收情況,通知微信后臺系統不再發送該單的支付通知。
(11)未收到支付通知的情況,商戶后臺系統調用【查詢訂單API】。
(12)商戶確認訂單已支付后給用戶發貨。
加群聯系作者vx:xiaoda0423
倉庫地址:https://github.com/webVueBlog/JavaGuideInterview