目部署環(huán)境)
1.搭建Java部署環(huán)境1.1aptapt (Advanced Packaging Tool), Linux軟件包管理?具.?于在Ubuntu、Debian和相關(guān)Linux發(fā)?版上安裝、更新、刪除和管理deb軟件包.?多數(shù)apt命令必須以具有sudo權(quán)限的???份運(yùn)? 或者是管理身份運(yùn)行如果切換到root??,命令前就不需要加sudo了apt常?命令# 列出所有軟件包 apt list # 輸出所有包的列表,內(nèi)容?較多,可以使?grep命令過濾輸出 apt list |grep java # 更新軟件包數(shù)據(jù) sudo apt-get update # 安裝軟件包 sudo apt install package_name # 刪除軟件包 sudo apt remove package_nameremove命令將卸載給定的軟件包但可能會留下?些配置?件。如果要刪除包含所有配置?件的軟包請使?purge?不是removeapt remove 和 apt purge 的區(qū)別? apt remove 刪除包的?進(jìn)制?件,它留下了殘留的配置?件.? apt purge 刪除與包相關(guān)的所有內(nèi)容,包括配置?件.如果弄亂了程序的配置,希望從系統(tǒng)中完全清除它的痕跡再重新開始,可以使? apt purge通常使? apt remove 就?夠了1.2JDK更新軟件包數(shù)據(jù)sudo apt-get update安裝jdk 對應(yīng)的版本#查找jdk包 apt list |grep jdk #安裝jdk sudo apt install openjdk-17-jdk使?java -version 驗(yàn)證是否安裝成功.如果提?java命令找不到則說明安裝失敗.如果顯示java版本號則說明安裝成功.卸載JDK檢查安裝的是哪個(gè)OpenJDK # dpkg --list | grep -i jdk 移除 openjdk包: # apt-get purge openjdk* 卸載 OpenJDK 相關(guān)包 # apt-get purge icedtea-* openjdk-* 檢查所有 OpenJDK包是否都已卸載完畢 # dpkg --list | grep -i jdk1.3Mysql使?apt安裝MySQL#查找安裝包 apt list |grep mysql-server #安裝mysql sudo apt install mysql-server查看MySQL狀態(tài)顯示active (running) 就好了sudo systemctl status mysqlMySQL安裝安全設(shè)置默認(rèn)的MySQL設(shè)置是不安全的,MySQL安裝提供了?個(gè)安全腳本,?于解決不太安全的默認(rèn)選項(xiàng).sudo mysql_secure_installation接下來按照提?輸?roothcss-ecs-0bb1:~# sudo mysql_secure_installation #安裝安全設(shè)置? Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: Y #是否設(shè)置驗(yàn)證密碼組件? There are three levels of password validation policy: LOW Length 8 MEDIUM Length 8, numeric, mixed case, and special characters STRONG Length 8, numeric, mixed case, special characters and dictionary file Please enter 0 LOW, 1 MEDIUM and 2 STRONG: 2 #設(shè)置密碼強(qiáng)度? Skipping password set for root as authentication with auth_socket is used by default. If you would like to use password authentication instead, this can be done with the ALTER_USER command. See https://dev.mysql.com/doc/refman/8.0/en/alter-user.html#alter-userpassword-management for more information. By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y #默認(rèn)情況下MySQL安裝有?個(gè)匿名??, 允許任何?登錄MySQL. 是否刪除匿名??? Success. Normally, root should only be allowed to connect from localhost. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y #僅 應(yīng)允許root從localhost連接? Success. By default, MySQL comes with a database named test that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y #默認(rèn)情況下, MySQL帶有?個(gè)test數(shù)據(jù)庫, 是否刪除?? - Dropping test database... Success. - Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y #是否現(xiàn)在加載配置, 使剛才的修改?效? ? Success. All done!1.4. 設(shè)置密碼連接mysql服務(wù)器sudo mysql使?alter user 命令修改密碼ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY XXXXXXX;這個(gè)XXX代表的是剛才設(shè)置的密碼卸載MySQL#停?mysql sudo systemctl stop mysql #卸載mysql sudo apt-get remove --purge mysql-server mysql-client mysql-common #刪除 MySQL 配置?件和數(shù)據(jù) sudo rm -rf /etc/mysql /var/lib/mysql #清理殘留?件和?錄 sudo apt-get autoremove sudo apt-get autoclean #驗(yàn)證卸載結(jié)果 mysql --version2.部署Web項(xiàng)?到Linux1 .什么是部署?作中涉及到的環(huán)境? 開發(fā)環(huán)境:開發(fā)?員寫代碼?的機(jī)器.? 測試環(huán)境:測試?員測試程序使?的機(jī)器.? ?產(chǎn)環(huán)境(線上環(huán)境):最終項(xiàng)?發(fā)布時(shí)所使?的機(jī)器.對穩(wěn)定性要求很?.把程序安裝到?產(chǎn)環(huán)境上,這個(gè)過程稱為部署.也叫上線.?旦程序部署成功,那么這個(gè)程序就能被外?中千千萬萬的普通??訪問到。換句話說,如果程有BUG,這個(gè)BUG也就被千千萬萬的??看到了.部署過程?關(guān)重要,屬于程序開發(fā)中最重要的?環(huán).?旦部署出現(xiàn)問題,極有可能導(dǎo)致嚴(yán)重的事故(服務(wù)器不可?之類的).為了防?部署出錯(cuò),?般公司內(nèi)部都有?些?動化部署?具(如Jenkins等).當(dāng)前我們先使???部署的?式來完成部署 。2.環(huán)境配置程序正常運(yùn)?,需要保證環(huán)境和程序都要正確,我們需要先設(shè)置環(huán)境數(shù)據(jù)準(zhǔn)備按照之前的數(shù)據(jù)庫建表腳本,在服務(wù)器上運(yùn)?,建?相同的表結(jié)構(gòu).程序配置?件修改實(shí)際?作中,開發(fā)環(huán)境,測試環(huán)境以及?產(chǎn)環(huán)境的配置都是不?樣的?如mysql的??名和密碼我們可以針對不同的環(huán)境,設(shè)置不同的配置多平臺?件配置針對不同平臺創(chuàng)建不同的配置?件,要求名字為application-XXX.yml或者application-XXX.properties以下以application-XXX.yml為例開發(fā)環(huán)境dev測試環(huán)境test生產(chǎn)環(huán)境prod固定格式,只有后?的字?可以修改在配置?件?寫不同的內(nèi)容application-dev.yml注意自己的數(shù)據(jù)庫用戶名和密碼自己設(shè)置的spring: datasource: url: jdbc:mysql://127.0.0.1:3306/java_blog_spring? characterEncodingutf8useSSLfalse username: root password: root driver-class-name: com.mysql.cj.jdbc.Driverapplication-prod.ymlspring: datasource: url: jdbc:mysql://127.0.0.1:3306/java_blog_spring? characterEncodingutf8useSSLfalse username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver在主配置?件 application.yml 中指定配置?件,并刪除數(shù)據(jù)庫相關(guān)配置spring: profiles: active: prod從Maven中讀取環(huán)境配置變量profiles profile iddev/id properties profile.namedev/profile.name /properties /profile profile idprod/id activation activeByDefaulttrue/activeByDefault /activation properties profile.nameprod/profile.name /properties /profile /profiles修改 application.ymlspring: profiles: active: profile.name3.構(gòu)建項(xiàng)?并打包在本地使?maven進(jìn)?打包如果Test代碼中有與環(huán)境配置相關(guān)的操作(?如數(shù)據(jù)庫相關(guān)的操作),打包會失敗,點(diǎn)擊下圖①處的圖標(biāo),可以跳過測試點(diǎn)擊clean-package出現(xiàn)這個(gè)就是打包成功4.上傳Jar包到服務(wù)器,并運(yùn)?4.1. 上傳Jar包直接拖動打好的jar包到xshell窗即可完成?件的上傳Xshell可以直接拖動?件到窗,達(dá)到上傳?件的?的,如果使?其他客?端,不?持?件的上傳,需要借助lrzsz命令1.上傳文件sz filename2.下載文件rz執(zhí)?該命令后在彈出框中選擇要上傳的?件即可,上傳的速度取決于?絡(luò).問題:如果執(zhí)?上述命令之后,提? Command ‘XX’ not found ,表?當(dāng)前云服務(wù)器未安裝lrzsz命令,需要先進(jìn)?安裝3. 安裝lrzszapt-get install lrzsz4.2 運(yùn)行程序nohup java -jar blog-spring-0.0.1-SNAPSHOT.jar nohup:后臺運(yùn)?程序.?于在系統(tǒng)后臺不掛斷地運(yùn)?命令退出終端不會影響程序的運(yùn)?.語法格式:nohup Command [ Arg … ] [ ] 參數(shù)說明: Command要執(zhí)?的命令。 Arg?些參數(shù)可以指定輸出?件 讓命令在后臺執(zhí)?終端退出后命令仍舊執(zhí)? ?如: nohup java -jar blog-0.0.1-SAPSHOT.jar /logs **Linux可以通過 把需要輸出的內(nèi)容寫到指定?件中.這樣的操作稱為重定向.**4.3 開放端口號如果外?需要訪問該服務(wù),需要先服務(wù)器防?墻開放對應(yīng)的端?號本著服務(wù)器安全的原則云服務(wù)器上的端?必要不開啟.?如常?端號:數(shù)據(jù)庫3306,Redis6379,盡可能避免開放,?是采?其他?式來接,?如配置隧道的?式5.驗(yàn)證程序訪問項(xiàng)目需要改云服務(wù)的ip 和端口號按照項(xiàng)?的功能進(jìn)?驗(yàn)證? 驗(yàn)證賬?注冊登錄? 驗(yàn)證展?博客列表? 驗(yàn)證新增博客? 驗(yàn)證展?博客內(nèi)容? …6. 常見問題?個(gè)程序的正常運(yùn)?,需要程序的正確和環(huán)境的正確.同樣的代碼在Windows上可以運(yùn)?成功,不?定在Linux上運(yùn)?成功.不同的系統(tǒng)對代碼的理解和?持是不的.?如Windows系統(tǒng)對MySQL不區(qū)分??寫,Linux區(qū)分??寫服務(wù)不能正常訪問的原因有很多,主要分以下???服務(wù)未啟動a. 使?ps -ef|grep java查看程序是否在運(yùn)?b. 使?curl 自己的鏈接看下是否有返回html??,如果有返回,說明程序啟動成功了,考慮端未開放c. 如果未啟動成功,需要查看對應(yīng)的?志,根據(jù)原因來分析.i. 數(shù)據(jù)庫不存在ii. 表不存在(區(qū)分??寫)iii. 數(shù)據(jù)庫密碼不正確iv. Jdk安裝版本不對,或者未安裝v. mysql未設(shè)置密碼vi. …h(huán)ttp端未開放檢查云服務(wù)器防?墻/安全組是否開放相應(yīng)端?(如8080)7. 殺掉進(jìn)程如果我們需要重啟服務(wù),或者重新部署等,都需要先停?之前的服務(wù)查看當(dāng)前服務(wù)的進(jìn)程ps -ef|grep java上圖35443就是該服務(wù)的進(jìn)程.2. 殺掉進(jìn)程kill -9 PID8.總結(jié)連接Linux服務(wù)器的?式有很多,xshell只是其中?種.xshell是?個(gè)客?端,??服務(wù)器.Ubuntu軟件管理?具是apt,他的linux發(fā)?版本軟件包管理?具不同,?如CentOS是使?yum來管理軟件的SpringBoot可以使?多個(gè)配置?件來完成不同平臺的配置.在Window上可以運(yùn)?成功的代碼,在Linux上不?定能運(yùn)?成功.啟動程序需要使?nohup后臺運(yùn)?,需要停?服務(wù)時(shí),使?kill命令