在ECS上部署项目
- 尚籌網的后臺管理系統和前臺會員系統的部署,以及完結總結
- 后臺管理系統:SSM單一結構
- 前臺會員系統:分布式架構SpringBoot+SpringCloud
1. 圖紙
2. 租賃ESC服務器
2.1 網址
云服務器ECS_云主機_服務器托管_彈性計算-阿里云 (aliyun.com)
2.2?內存選擇
由于所有程序、Web 應用、微服務都要在一個實例中運行,所以實例的內存建議使用 8G 內存。
2.3 實例管理?
2.4 使用 Xshell 遠程連接
使用公網地址進行連接
3. 安裝服務器端運行環境?
3.1 上傳壓縮資源?
3.2 安裝JDK
解壓JDK壓縮包 配置/etc/profile文件 使用source命令使/etc/profile文件生效[root@iZm5e3uhznq40do0w2g4qsZ ~]# cd /opt/software/ [root@iZm5e3uhznq40do0w2g4qsZ software]# ll total 647124 -rw-r--r-- 1 root root 10874669 Sep 25 01:44 apache-tomcat-9.0.21.tar.gz -rw-r--r-- 1 root root 146799982 Sep 25 01:45 jdk-8u311-linux-x64.tar.gz -rw-r--r-- 1 root root 47836256 Sep 25 01:45 mysql-community-client-8.0.26-1.el7.x86_64.rpm -rw-r--r-- 1 root root 454689776 Sep 25 01:46 mysql-community-server-8.0.26-1.el7.x86_64.rpm -rw-r--r-- 1 root root 2438367 Sep 25 01:45 redis-6.2.1.tar.gz ①.解壓JDK壓縮包 [root@iZm5e3uhznq40do0w2g4qsZ software]# tar -zxvf jdk-8u311-linux-x64.tar.gz [root@iZm5e3uhznq40do0w2g4qsZ software]# cd jdk1.8.0_311/ [root@iZm5e3uhznq40do0w2g4qsZ jdk1.8.0_311]# pwd /opt/software/jdk1.8.0_311 ②.配置/etc/profile文件 [root@iZm5e3uhznq40do0w2g4qsZ jdk1.8.0_311]# vim /etc/profileJAVA_HOME=/opt/software/jdk1.8.0_311PATH=$PATH:$JAVA_HOME/binexport JAVA_HOME PATH ③使用source命令使/etc/profile文件生效 [root@iZm5e3uhznq40do0w2g4qsZ jdk1.8.0_311]# source /etc/profile ④測試jdk是否安裝成功 [root@iZm5e3uhznq40do0w2g4qsZ jdk1.8.0_311]# echo $JAVA_HOME /opt/software/jdk1.8.0_311 [root@iZm5e3uhznq40do0w2g4qsZ jdk1.8.0_311]# java -version java version "1.8.0_311" Java(TM) SE Runtime Environment (build 1.8.0_311-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)3.3 解壓Tomcat
Tomcat不需要安裝,解壓后即可使用,但是如果想訪問Tomcat,需要在ECS中設置安全組,放行Tomcat端口號:8080
[root@iZm5e3uhznq40do0w2g4qsZ software]# tar -zxvf apache-tomcat-9.0.21.tar.gz3.4 安裝MySQL
3.4.1 安裝
①先查看是否有mariadb,如果有則卸載,因為mariadb對mysql有干擾
[root@iZm5e3uhznq40do0w2g4qsZ software]# rpm -qa | grep mariadb mariadb-libs-5.5.68-1.el7.x86_64 #--nodeps的意思是忽略依賴,強制卸載 [root@iZm5e3uhznq40do0w2g4qsZ software]# rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps②解壓壓縮包并按順序安裝MySQL
①.解壓 [root@iZm5e3uhznq40do0w2g4qsZ software]# tar -xvf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar ②按先后順序安裝,之間有依賴關系 [root@iZm5e3uhznq40do0w2g4qsZ software]# rpm -ivh mysql-community-common-8.0.26-1.el7.x86_64.rpm [root@iZm5e3uhznq40do0w2g4qsZ software]# rpm -ivh mysql-community-client-plugins-8.0.26-1.el7.x86_64.rpm [root@iZm5e3uhznq40do0w2g4qsZ software]# rpm -ivh mysql-community-libs-8.0.26-1.el7.x86_64.rpm [root@iZm5e3uhznq40do0w2g4qsZ software]# rpm -ivh mysql-community-libs-compat-8.0.26-1.el7.x86_64.rpm [root@iZm5e3uhznq40do0w2g4qsZ software]# rpm -ivh mysql-community-client-8.0.26-1.el7.x86_64.rpm [root@iZm5e3uhznq40do0w2g4qsZ software]# rpm -qa | grep libaio [root@iZm5e3uhznq40do0w2g4qsZ software]# yum -y install libaio [root@iZm5e3uhznq40do0w2g4qsZ software]# rpm -ivh mysql-community-server-8.0.26-1.el7.x86_64.rpm3.4.2 MySQL初步操作
①安裝完之后進行初始化?
[root@iZm5e3uhznq40do0w2g4qsZ software]# mysqld --initialize --console②初始化之后,把mysql的安裝目錄的所有者和所屬組都修改一下,以便敲擊mysql時,讓mysql軟件用戶有權限直接使用
[root@iZm5e3uhznq40do0w2g4qsZ software]# chown -R mysql:mysql /var/lib/mysql/③啟動服務
[root@iZm5e3uhznq40do0w2g4qsZ software]# systemctl start mysqld④查看臨時密碼,并登錄
[root@iZm5e3uhznq40do0w2g4qsZ software]# cat /var/log/mysqld.log | grep localhost 2022-09-26T13:25:37.666077Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: uAp!8Ir>q)s8 #使用密碼'uAp!8Ir>q)s8'登錄 [root@iZm5e3uhznq40do0w2g4qsZ software]# mysql -uroot -p Enter password: uAp!8Ir>q)s8 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.26Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>⑤登陸之后修改臨時密碼
alter user 'root'@'localhost' identified by 'abc123';⑥使用測試
mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.26 | +-----------+ 1 row in set (0.00 sec)mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.01 sec)3.4.3 設置MySQL
①設置訪問授權
默認的root用戶只能當前節點localhost訪問,是無法遠程訪問的,我們還需要創建一個root賬戶,用戶遠程訪問,并給root用戶分配權限。重啟mysql服務讓其生效
mysql> create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'abc123'; Query OK, 0 rows affected (0.01 sec)mysql> grant all on *.* to 'root'@'%'; Query OK, 0 rows affected (0.01 sec)重啟mysql服務讓其生效 systemctl restart mysqld②使用SQLyog測試是否可以遠程連接
3.4.4 在ECS中設置快照,保存進度,出錯時可以回滾到當前進度?
3.5 安裝Redis
①安裝gcc-c++
yum -y install gcc-c++②解壓redis壓縮包
tar -zxvf redis-6.2.1.tar.gz③編譯并安裝redis
[root@iZm5e3uhznq40do0w2g4qsZ redis-6.2.1]# vim src/Makefile 修改安裝目錄:PREFIX?=/usr/local/redis 編譯: [root@iZm5e3uhznq40do0w2g4qsZ redis-6.2.1]# make 安裝: [root@iZm5e3uhznq40do0w2g4qsZ redis-6.2.1]# make install④復制并修改配置文件
[root@iZm5e3uhznq40do0w2g4qsZ redis-6.2.1]# cp /opt/software/redis-6.2.1/redis.conf /usr/local/redis/ [root@iZm5e3uhznq40do0w2g4qsZ redis-6.2.1]# vim /usr/local/redis/redis.conf 修改:daemonize yes 是否可以后臺訪問logfile "/var/redis/redis.log" 日志文件,需要手動創建dir /usr/local/redis 工作目錄 [root@iZm5e3uhznq40do0w2g4qsZ redis-6.2.1]# mkdir /var/redis⑤測試:啟動redis
啟動redis: [root@iZm5e3uhznq40do0w2g4qsZ redis-6.2.1]# /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf 客戶端登錄: [root@iZm5e3uhznq40do0w2g4qsZ redis-6.2.1]# /usr/local/redis/bin/redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> keys * (empty array) 127.0.0.1:6379>4. Maven打包?
4.1 修改參數
①.MySQL連接信息
- 訪問地址:localhost
- 用戶名:root
- 密碼:abc123
②.Redis連接信息
- 主機地址改成 127.0.0.1?
③.支付接口涉及的被調用地址
- notify-url: http://47.104.212.211/pay/notify
- return-url: http://47.104.212.211/pay/return
④.跨微服務請求、重定向請求的主機地址
- 把 localhost:80 改成 47.104.212.211
4.2 工程打包
4.2.1 工程之間的關系
4.2.2?Maven 對于安裝順序的要求
- 依賴關系對安裝順序的要求
- A 依賴 B
- Maven 要求先安裝 B,再安裝 A
- 繼承關系對安裝順序的要求
- A(子工程)繼承 B(父工程)
- Maven 要求先安裝 B,再安裝 A
- 如果配置聚合,那么對聚合工程執行 install 命令,Maven 就會自動按照正確的順序安裝各個模塊工程。但是我們現在 common-util 工程沒有參與聚合,所以要先單獨對 common-util 執行安裝。
4.2.3 SpringBoot 工程打包
- 目標效果
- 通過運行 java -jar xxx.jar 命令直接啟動 SpringBoot 微服務。此時要求這個 jar包中包含SpringBoot 內置的 Tomcat、SpringBoot 環境 jar 包以及其他依賴 jar 包。
- 實現效果的關鍵
- 在SpringBoot所在Maven工程的pom.xml文件中配置build標簽使用SpringBoot指定的 Maven 插件進行打包。?
要想使用上面的配置必須讓當前工程或父工程繼承 SpringBoot。
<!-- 繼承 SpringBoot 官方指定的父工程 --> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.6.RELEASE</version> </parent>如果在父工程中加入 build 配置,那么各個子工程就都不必加入 build。但是我們現在的情況是:有的子工程并不是 SpringBoot 微服務,所以哪個需要就給哪個加上。也就是下圖所示的工程:?
4.2.4?打包命令:mvn clean install -Dmaven.test.skip=true
表示先清理、再安裝,跳過測試。注意:執行 Maven 命令一定要進入 pom.xml 所在的目錄?
4.2.5 啟動命令
①.shangcouwang-admin.war 包需要放到 Tomcat 的 webapps 目錄下,啟動 Tomcat
[root@iZm5e3uhznq40do0w2g4qsZ ~]# mv shangcouwang-admin.war /opt/software/apache-tomcat-9.0.21/webapps/ [root@iZm5e3uhznq40do0w2g4qsZ ~]# /opt/software/apache-tomcat-9.0.21/bin/startup.sh②.微服務
java -jar /opt/packages/shangcouwang02-member-eureka-0.0.1-SNAPSHOT.jar java -jar /opt/packages/shangcouwang04-member-mysql-provider-0.0.1-SNAPSHOT.jar java -jar /opt/packages/shangcouwang05-member-redis-provider-0.0.1-SNAPSHOT.jar java -jar /opt/packages/shangcouwang06-member-authentication-consumer-0.0.1-SNAPSHOT.jar java -jar /opt/packages/shangcouwang07-member-project-consumer-0.0.1-SNAPSHOT.jar java -jar /opt/packages/shangcouwang08-member-order-consumer-0.0.1-SNAPSHOT.jar java -jar /opt/packages/shangcouwang09-member-pay-consumer-0.0.1-SNAPSHOT.jar java -jar /opt/packages/shangcouwang10-member-zuul-0.0.1-SNAPSHOT.jar③.啟動完成之后,使用瀏覽器訪問47.104.212.211即可
5. 項目總結
5.1 后臺管理系統
5.1.1 搭建環境
- 使用 Maven 作為構建管理和依賴管理工具
- 使用SpringMVC作為Web層框架,負責處理請求、接收請求參數、顯示頁面、請求的轉發重定向
- 普通請求:返回響應體通常為一個頁面
- Ajax 請求:返回響應體通常為一個 JSON 數據
- 使用 MyBatis 作為持久化層框架。
- 使用 MyBatis 的 PageHelper 插件實現數據的分頁顯示。
- Admin 數據(普通請求的方式處理)
- Role 數據(Ajax請求的方式處理)
- 使用 Spring 提供的容器管理項目中的組件
- XxxHandler
- XxxService
- XxxMapper
- XxxInterceptor
- XxxExceptionResolve
- 前端技術
- Boostrap 作為前端樣式框架
- 使用 layer 作為彈層組件
- 使用 zTree 在頁面上顯示樹形結構
- 借助 SpringMVC 提供的異常映射機制實現項目中錯誤消息的統一管理
- 基于注解
- 基于 XML
- 通過對請求消息頭信息的判斷在給出異常處理結果時實現了普通請求和 Ajax 請求的兼容
5.1.2 管理員登錄
- MD5 密碼加密
- 使用自定義攔截器檢查登錄狀態
5.1.3 管理員維護
- 使用 MyBatis 的 PageHelper 插件實現分頁
- 在頁面上使用了 Pagination 實現數字頁碼
- 在數據庫表中給 loginacct 字段添加唯一約束,在保存了重復的 loginacct 時觸發異常,從而保證登錄賬號的唯一
5.1.4 角色維護:以 Ajax 交互方式實現數據的增刪改查操作
5.1.5 菜單維護
- 使用 zTree 在頁面上顯示樹形結構
- 并結合 zTree 提供的 API 顯示自定義圖標
- 對樹形節點進行增刪改查操作
5.1.6 RBAC 模型:Role Based Authentication Control,基于角色的權限控制
5.1.7 分配資源
- 給 Admin 分配 Role
- 給 Role 分配 Auth
5.1.8 權限控制
使用 SpringSecurity 接管項目的登錄、登錄檢查、權限驗證
※改源碼:讓 SpringSecurity 在初始化時不要查找 IOC 容器,而是在第一次請求時查找;查找的 IOC 容器也改成了查找 SpringMVC 的 IOC 容器(也就是由 DispatcherServlet的父類 FrameworkServlet 初始化的 IOC 容器)。
- 登錄驗證:將登錄表單對接到 SpringSecurity
- 登錄檢查:SpringSecurity 內置
- 全局配置:在 SpringSecurity 配置類中設定
- 權限規則注解:@PreAuthority
- 頁面標簽:對頁面局部進行權限限定,實現細粒度權限控制
5.2 前臺會員系統
5.2.1 搭建環境
- SpringBoot+SpringCloud
- SpringBoot
- SpringSession
- Thymeleaf
- Redis
- MyBatis
- SpringCloud
- Eureka:注冊中心
- Feign:遠程接口的聲明式調用
- Ribbon:客戶端負載均衡
- Zuul:網關,ZuulFilter 過濾?
- SpringBoot
5.2.2 用戶登錄、注冊
- 調用第三方接口給用戶手機發送短信驗證碼
- 使用 BCryptPasswordEncoder 實現帶鹽值的加密
- 使用 SpringSession 解決分布式環境下 Session 不一致問題
- 使用 Redis 作為 SpringSession 的 Session 庫
- 在 Zuul 中使用 ZuulFilter 實現登錄狀態檢查
- 在 Zuul 中配置訪問各個具體微服務的路由規則?
5.2.3 發布項目:使用阿里云 OSS 對象存儲服務保存用戶上傳的圖片
5.2.4 展示項目:將數據庫中的項目數據查詢出來到頁面上顯示
5.2.5 支持項目
- 確認回報信息
- 生成訂單
- 進入支付流程:調用支付寶開放平臺提供支付接口
5.2.6 部署發布
- 租賃阿里云 ECS 彈性服務器
- 安裝應用程序
- JDK
- Tomcat
- MySQL
- Redis
- 修改項目的連接信息等參數
- 打包
- war 包
- jar 包
- 上傳
- 啟動
總結
- 上一篇: uniapp实现微信小程序全局【发送给朋
- 下一篇: 软件工程的学生毕业计算机等级是按哪一级别