零基礎騰訊雲CentOS部署雲服務器

Web項目遠程部署

獲取雲主機,安裝系統

購買雲服務器

騰訊雲,1核,2G,50Gphp

在這裏插入圖片描述

安裝系統

  • Linux主要分類html

    • Debian:Ubuntu,Debian
    • Red hat:Red Hat ,Centos
  • 具體分類前端

    • Debian:用的deb包,使用APT包管理系統。同時Debian提供了大多數軟件比較新的版本,而且提供了更多的軟件包(相對於原版Red Hat)。Debian的優勢在於更新迅速,軟件包完善(Ubuntu尤爲),操做便利。缺點是部分時候穩定性欠佳,跟進最新軟件有可能存在Bug。java

      Ubuntu是基於Debian所開發,能夠簡單地認爲Ubuntu是Debian的功能增強版。與Debian相比,Ubuntu提供了更人性化系統配置,更強大的系統操做以及比Debian更激進的軟件更新。Ubuntu與Debian比較,能夠認爲Debian更趨向於保守一些,Ubuntu對新手友好度更高,上手更容易。node

    • Red Hat:用rpm包,使用yum包管理系統。相對於Debian來講,Red Hat的一大特色就是慢。大部分軟件停留在穩定版本,並且相距最新版版本也差較多。並且某些新版軟件的一些新特性支持也比較慢,好比php-fpm。由於Red Hat是面向企業用戶提供的操做系統,因此在穩定性上十分突出,通常在新功能或穩定性的選擇上更傾向於後者。只有當某個功能徹底肯定穩定了,纔會加入到系統裏。優勢是系統穩定,技術文檔完善,若是付費的話能獲得企業級別的技術支持。缺點是軟件包比較老舊,並且一些較新功能會欠缺。mysql

      • Red Hatlinux

        Red Hat是付費操做系統,你能夠無償使用,可是若是要使用Red Hat的軟件源而且想獲得技術支持的話,是要像Windows那樣掏錢的,因此你們能夠理解爲Linux中的Windows。這麼作符合開源精神,無償使用,服務收費。git

      • Centosweb

        Centos是Red Hat的開源版本。通常在Red Hat更新以後,Centos會把代碼中含有Red Hat專利的部分去掉,同時Red Hat中包含的種種服務器設置工具也一塊兒幹掉,而後從新編譯就是Centos。正則表達式

  • 總結

    若是你喜歡嚐鮮,喜歡用最新的功能或喜歡折騰系統,那麼Debian是個更好的選擇。

    若是你追求穩定,不想常常升級系統軟件不愛折騰,那麼Red Hat是你更好的選擇。

    上手難度 Ubunt<Debian<Redhat=Centos。

    我安裝了centOS,本文全部命令操做基於centOS7

Reference

關於系統

系統目錄結構

在這裏插入圖片描述

  • 登陸後所在目錄

    剛剛遠程登陸後顯示的是這個:

    [root@VM-0-7-centos ~]#

    ~表明什麼路徑呢?

    [root@VM-0-7-centos ~]# pwd
    /root

    即表明着/根目錄下的root目錄,該目錄爲系統管理員,也稱做超級權限者的用戶主目錄

  • /usr
    usr 是 unix shared resources(共享資源) 的縮寫,這是一個很是重要的目錄,用戶的不少應用程序和文件都放在這個目錄下,相似於 windows 下的 program files 目錄。

    /usr/bin:
    系統用戶使用的應用程序
    
    /usr/sbin:
    超級用戶使用的比較高級的管理程序和系統守護程序
    
    /usr/src:
    內核源代碼默認的放置目錄
  • /etc

    這個是系統中的配置文件,若是你更改了該目錄下的某個文件可能會致使系統不能啓動

  • /home
    用戶的主目錄,在 Linux 中,每一個用戶都有一個本身的目錄,通常該目錄名是以用戶的帳號命名的,如上圖中的 alice、bob 和 eve

  • /bin
    bin 是 Binaries (二進制文件) 的縮寫, 這個目錄存放着最常用的命令

Reference

遠程鏈接操做服務器

遠程鏈接服務器

  • 選擇工具

    對於Windows,使用第三方軟件會更方便,例如Xshell;對於Mac來講,可直接使用終端ssh進行鏈接centos服務器

    SSH是什麼?

    SSH 爲 (Secure Shell),專爲遠程登陸會話和其餘網絡服務提供安全性的協議,若是一個用戶從本地計算機,使用SSH協議登陸另外一臺遠程計算機,咱們就能夠認爲,這種登陸是安全的,即便被中途截獲,密碼也不會泄露,目前已經成爲Linux系統的標準配置。

  • 使用SSH帳號密碼鏈接遠程主機

    • 登陸命令

      ssh <username>@<hostname or IP address>

      user爲默認的用戶名,host爲上面騰訊雲提供給你的公網IP,SSH的默認端口是22,因此上述命令的默認鏈接端口爲22,可使用以下命令修改端口

      $ ssh -p 2222 user@host

      如圖命令表示,ssh直接鏈接遠程主機的2222端口

      • 問題:密碼輸錯三場後,提示以下錯誤
      user@49.232.68.5's password: 
      user@49.232.68.5: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

      解決:

      去騰訊雲控制檯改一下密碼

    • 登出命令

      • logout
      • exit
      • 直接關閉終端

    • 示例

      wujunnan@wujunnandeMacBook-Pro ~ %  ssh root@wujunnan.net
      root@wujunnan.net's password: 
      Last login: Tue Nov 24 22:16:27 2020 from 120.244.160.103
  • 使用SSH密鑰登陸遠程主機

    • 先去控制檯獲取密鑰

    • 執行如下命令,賦予私鑰文件僅本人可讀權限

      chmod 400 <下載的與雲服務器關聯的私鑰的絕對路徑>
    • 執行如下命令,進行遠程登陸(第一次會讓輸入密碼)

      ssh -i <下載的與雲服務器關聯的私鑰的絕對路徑> <username>@<hostname or IP address>
    • 示例

      wujunnan@wujunnandeMacBook-Pro ~ % ssh -i /Users/wujunnan/develop/important/wujunnan.pem root@wujunnan.net
      Last login: Fri Nov 20 23:52:28 2020 from 120.244.160.103

鏈接中出現的問題

  • Mac遠程鏈接窗口會常常中斷,出現send disconnect: Broken pipe

    原理:

    爲了保證服務器的資源不被浪費,系統會對SSH的鏈接按期進行自動回收(即自動斷開),其回收原則爲:一個鏈接在規定的限制時間內沒有數據傳輸就認定爲超時,而後就會主動斷開鏈接。 基於這個原則,若是想要保持鏈接,只須要在超時前發送一個空數據包便可。

    編輯sudo vim /etc/ssh/ssh_config添加如下設置可解決這個問題

    # 斷開時重試鏈接的次數
    ServerAliveCountMax 5
     
    # 每隔5秒自動發送一個空的請求以保持鏈接
    ServerAliveInterval 5

    修改以後須要重啓遠程主機,使配置生效

防火牆

騰訊雲安全組

安全組是一種虛擬防火牆,具有有狀態的數據包過濾功能,用於設置雲服務器、負載均衡、雲數據庫等實例的網絡訪問控制,控制實例級別的出入流量,是重要的網絡安全隔離手段。

您能夠經過配置安全組規則,容許或禁止安全組內的實例的出流量和入流量。

新建安全組時,能夠選擇騰訊雲提供的兩種安全組模板:

  • 放通所有端口模板:將會放通全部出入站流量。
  • 放一般用端口模板:將會放通 TCP 22端口(Linux SSH 登陸),80、443端口(Web 服務),3389端口(Windows 遠程登陸)、 ICMP 協議(Ping)、放通內網。

因此咱們可使用騰訊雲組的虛擬防火牆或者在centOS中本身開啓防火牆

在這裏插入圖片描述

Reference

系統防火牆

開啓防火牆後,會攔截全部端口,並設置一些白名單,咱們須要把咱們使用的端口加入防禦牆白名單

相關命令

  • 查看防火牆狀態

    systemctl status firewalld

    下面表示未開啓防火牆

    Active: inactive (dead)
  • 開啓防火牆

    systemctl start firewalld
  • 開啓端口

    firewall-cmd --permanent --zone=public --add-port=8080/tcp --permanent
  • 查看端口

    firewall-cmd --permanent --query-port=8080/tcp

    提示yes,即查詢成功

  • 重啓防火牆

    firewall-cmd --reload
  • 查看已經開放的端口

    firewall-cmd --list-ports
  • 關閉防火牆端口

    firewall-cmd --zone=public --remove-port=3338/tcp --permanent
  • 設置防火牆開機自動啓動

    systemctl enable firewalld
  • 開機禁用防火牆

    systemctl disable firewalld

上傳文件到遠程服務器

scp

scp是secure copy的簡寫,用於在Linux下進行遠程拷貝文件的命令

上傳命令

scp -P 2222 /home/abc.tar.gz root@www.vpser.net:/root/abc.tar.gz

端口大寫P爲參數,2222表示更改SSH端口後的端口,若是沒有更改SSH端口能夠不用添加該參數 /home/abc.tar.gz表示本地上準備上傳文件的路徑和文件名。root@www.vpser.net 表示使用root用戶登陸遠程服務器。

上傳到哪裏

本地安裝的軟件和其餘文件放在這裏

/usr/local

實際使用

上傳文件

wujunnan@wujunnandeMacBook-Pro ~ % scp /Users/wujunnan/軟件/Tomcat/apache-tomcat-8.5.60.tar.gz
root@wujunnan.net's password: 
apache-tomcat-8.5.60.tar.gz                   100%   10MB   8.3MB/s   00:01

上傳zookeeper文件夾

wujunnan@wujunnandeMacBook-Pro ~ % scp -r /Users/wujunnan/develop/WWW/zookeeper-3.4.6 root@wujunnan.net:/usr/local/zookeeper
root@wujunnan.net's password:

-r爲遞歸上傳文件夾

服務端

[root@VM-0-7-centos ~]# ls
apache-tomcat-8.5.60.tar.gz

安裝軟件

yum

yum(Yellow dog Updater, Modified),是一個前端軟件包管理器。

咱們一般使用 yum install 命令來在線安裝 linux系統的軟件, 這種方式基於RPM包管理,可以從指定的服務器自動下載RPM包而且安裝,能夠自動處理依賴性關係,而且一次安裝全部依賴的軟件包。

用yum安裝,實質上是用RPM安裝,因此RPM查詢信息的指令均可用。

  • yum -y install與yum install有什麼不一樣?

    若是使用yum install xxxx,會找到安裝包以後,詢問你Is this OK[y/d/N],須要你手動進行選擇。可是若是加上參數-y,就會自動選擇y,不須要你再手動選擇。

yum配置阿里雲倉庫

  • 查看可用的epel源

    yum list | grep epel-release
  • 安裝 epel

    yum install -y epel-release
  • 配置阿里鏡像提供的epel源

    wget -O /etc/yum.repos.d/epel-7.repo  http://mirrors.aliyun.com/repo/epel-7.repo
  • 清除系統全部的yum緩存

    yum clean all
  • 生成yum緩存

    yum makecache
  • 查看全部的yum源

    yum repolist all
  • 查看可用的yum源

    yum repolist enabled

如何停止yum安裝

  • 中斷線程

    ctrl+z
  • 查找當前yum相關進程

    ps -ef | grep yum
  • 殺死線程(選擇第一行的第一個)

    kill -9 進程號(pid)

如何查看yum安裝的軟件位置

  • 通常來講,RPM默認安裝路徑以下

    Directory Contents of Directory
    /etc 一些配置文件的目錄,例如/etc/init.d/mysql
    /usr/bin 一些可執行文件
    /usr/lib 一些程序使用的動態函數庫
    /usr/share/doc 一些基本的軟件使用手冊與幫助文檔
    /usr/share/man 一些man page文件
  • 以MySQL爲例

    查看MySQL安裝包

    [root@VM-0-7-centos ~]# rpm -qa | grep -i mysql
    mysql-community-common-5.6.50-2.el6.x86_64
    mysql-community-client-5.6.50-2.el6.x86_64
    mysql-community-server-5.6.50-2.el6.x86_64
    mysql-community-release-el6-5.noarch
    mysql-community-libs-5.6.50-2.el6.x86_64
  • 查看具體路徑

    [root@VM-0-7-centos ~]# rpm -ql mysql-community-client-5.6.50-2.el6.x86_64
    /usr/bin/msql2mysql
    /usr/bin/mysql
    /usr/bin/mysql_config_editor
    /usr/bin/mysql_find_rows
    /usr/bin/mysql_waitpid
    /usr/bin/mysqlaccess
    /usr/bin/mysqlaccess.conf
    /usr/bin/mysqladmin
    /usr/bin/mysqlbinlog
    /usr/bin/mysqlcheck
    /usr/bin/mysqldump
    /usr/bin/mysqlimport
    /usr/bin/mysqlshow
    /usr/bin/mysqlslap
    /usr/share/doc/mysql-community-client-5.6.50
    /usr/share/doc/mysql-community-client-5.6.50/LICENSE
    /usr/share/doc/mysql-community-client-5.6.50/README
    /usr/share/man/man1/msql2mysql.1.gz
    /usr/share/man/man1/mysql.1.gz
    /usr/share/man/man1/mysql_config_editor.1.gz
    /usr/share/man/man1/mysql_find_rows.1.gz
    /usr/share/man/man1/mysql_waitpid.1.gz
    /usr/share/man/man1/mysqlaccess.1.gz
    /usr/share/man/man1/mysqladmin.1.gz
    /usr/share/man/man1/mysqlbinlog.1.gz
    /usr/share/man/man1/mysqlcheck.1.gz
    /usr/share/man/man1/mysqldump.1.gz
    /usr/share/man/man1/mysqlimport.1.gz
    /usr/share/man/man1/mysqlshow.1.gz
    /usr/share/man/man1/mysqlslap.1.gz

Reference

安裝JDK

查看可安裝的版本

yum -y list java*

安裝JDK8

yum install -y java-1.8.0-openjdk-devel.x86_64

查看版本

java -version

查看安裝目錄

[root@VM-0-7-centos ~]# cd /usr/lib/jvm
[root@VM-0-7-centos jvm]# ls
java
java-1.8.0
java-1.8.0-openjdk
java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64
java-openjdk
jre
jre-1.8.0
jre-1.8.0-openjdk
jre-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64
jre-openjdk

配置環境變量

編輯環境變量

vi /etc/profile
#JDK全局環境變量設置
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin

使配置生效

source /etc/profile

安裝Maven

  • 將maven複製到local/maven

    wujunnan@wujunnandeMacBook-Pro classes % scp /Users/wujunnan/Downloads/項目實戰_環境部署_GIT倉庫/apache-maven-3.6.1.tar.gz  root@wujunnan.net:/usr/local/maven
  • 解壓

    tar -xvf apache-maven-3.6.1.tar.gz
  • 配置環境變量

    vim /etc/profile
    #maven
    export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.1
    export PATH=${PATH}:${MAVEN_HOME}/bin
  • 從新加載配置文件

    source  /etc/profile
  • 測試

    mvn --version
  • 將準備好的修改過配置的settings.xml文件放到/root/.m2目錄下

安裝Tomcat

  • 下載Tomcat

    tomcat8

  • 將本地Tomcat複製到雲端

    scp /Users/wujunnan/軟件/Tomcat/apache-tomcat-8.5.60.tar.gz
  • 建立相關文件夾,並將Tomcat移動到指定文件夾

    cd usr/local/ 
    mkdir Tomcat01 
    cd Tomcat01/
    
    mv /root/* .
  • 將Tomcat壓縮包進行解壓

    tar -zxv -f apache-tomcat-8.5.60.tar.gz
  • 進入,啓動Tomcat

    mv apache-tomcat-8.5.60 tomcat01
    cd tomcat01/bin
    ./startup.sh
  • 打開,設置防火牆

    //啓動防火牆
    systemctl start firewalld
    //查看已開放的端口
    firewall-cmd --list-ports
    //開啓8080端口
    firewall-cmd --zone=public --add-port=8080/tcp --permanent
    //使防火牆設置生效
    firewall-cmd --reload
    //關閉防火牆端口
    firewall-cmd --zone=public --remove-port=3338/tcp --permanent
    //開機啓動防火牆
    systemctl enable firewalld

配置Tomcat

  • 一個tomcat使用了幾個端口?(tomcat8.5.60爲例)

    • 8005

      <Server port="8005" shutdown="SHUTDOWN">

      8005端口是用來關閉TOMCAT服務的端口

    • 8080

      <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

      8080端口是tomcat負責創建HTTP鏈接的端口,經過瀏覽器訪問tomcat服務器的web應用時,使用此端口

    • 8443

      <!--
          <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
                     maxThreads="150" SSLEnabled="true" >
              <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
              <SSLHostConfig>
                  <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                               certificateFile="conf/localhost-rsa-cert.pem"
                               certificateChainFile="conf/localhost-rsa-chain.pem"
                               type="RSA" />
              </SSLHostConfig>
          </Connector>
      -->

      默認的https監聽端口。默認未開啓,若是要開啓因爲tomcat不自帶證書因此除了取消註釋以外,還要本身生成證書並在<Connector>中指定

    • 8009

      <!--
      <Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="8443" />
      -->

      這個默認在配置文件中是被註釋掉的,鏈接器監聽8009端口,負責和其餘的HTTP服務器創建鏈接。在把Tomcat與其餘HTTP服務器集成時,就須要用到這個鏈接器。

  • 修改鏈接端口

    因此當咱們在一臺服務器上配置多個tomcat的時候,須要修改這個Tomcat的這三個端口

    8080
    8005
    (8009)

    尤爲是8005,能夠採起這樣的配置策略,18005,28005,38005…注意端口最大爲65536

查看Tomcat是否啓動

ps -ef |grep tomcat

Tomcat查看日誌

實時查看日誌

tail -f catalina.out

查看最後1000行日誌

tail -1000 catalina.out

按ctrl+c便可結束查看

控制檯輸出的日誌,Linux下默認重定向到catalina.out,tomcat官方解釋爲:

When running Tomcat on unixes, the console output is usually redirected to the file
named catalina.out.

查看佔用端口

  • 查看Tomcat是否佔用某個端口

    netstat -anp|grep 8005
    [root@VM-0-7-centos logs]# netstat -anp|grep 8005
    tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      30726/java
  • 查看上述進程

    [root@VM-0-7-centos logs]# ps -ef|grep 30726
    root      3740 24182  0 15:50 pts/0    00:00:00 grep --color=auto 30726
    root     30726     1  0 15:13 pts/0    00:00:18 /usr/lib/jvm/java-1.8.0-openjdk/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/tomcat_dubble_8080/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityLfistener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/tomcat_dubble_8080/bin/bootstrap.jar:/usr/local/tomcat/tomcat_dubble_8080/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat/tomcat_dubble_8080 -Dcatalina.home=/usr/local/tomcat/tomcat_dubble_8080 -Djava.io.tmpdir=/usr/local/tomcat/tomcat_dubble_8080/temp org.apache.catalina.startup.Bootstrap start
  • 查看Tomcat佔用的全部端口

    ss -antp | grep java | column -t
    [root@VM-0-7-centos ~]# ss -antp | grep java | column -t
    LISTEN  0  50   :::45795                 :::*                     users:(("java",pid=6083,fd=20))
    LISTEN  0  1    ::ffff:127.0.0.1:28005   :::*                     users:(("java",pid=1152,fd=64))
    LISTEN  0  1    ::ffff:127.0.0.1:48005   :::*                     users:(("java",pid=1122,fd=67))
    LISTEN  0  50   :::2181                  :::*                     users:(("java",pid=6083,fd=25))
    LISTEN  0  100  :::7080                  :::*                     users:(("java",pid=1122,fd=54))
    LISTEN  0  100  :::9002                  :::*                     users:(("java",pid=1152,fd=54))
    LISTEN  0  100  :::9003                  :::*                     users:(("java",pid=1220,fd=54))
    LISTEN  0  100  :::8080                  :::*                     users:(("java",pid=1183,fd=54))
    LISTEN  0  1    ::ffff:127.0.0.1:18005   :::*                     users:(("java",pid=1220,fd=65))
    LISTEN  0  1    ::ffff:127.0.0.1:58005   :::*                     users:(("java",pid=1092,fd=64))
    LISTEN  0  1    ::ffff:127.0.0.1:38005   :::*                     users:(("java",pid=1183,fd=67))
    LISTEN  0  50   :::8888                  :::*                     users:(("java",pid=1220,fd=120))
    LISTEN  0  100  :::7002                  :::*                     users:(("java",pid=1092,fd=54))
    ESTAB   0  0    ::ffff:172.21.0.7:60014  ::ffff:172.21.0.7:8888   users:(("java",pid=1152,fd=118))
    ESTAB   0  0    ::ffff:127.0.0.1:2181    ::ffff:127.0.0.1:40364   users:(("java",pid=6083,fd=27))
    ESTAB   0  0    ::ffff:127.0.0.1:2181    ::ffff:127.0.0.1:40382   users:(("java",pid=6083,fd=29))
    ESTAB   0  0    ::ffff:172.21.0.7:8888   ::ffff:172.21.0.7:60010  users:(("java",pid=1220,fd=125))
    ESTAB   0  0    ::ffff:172.21.0.7:60010  ::ffff:172.21.0.7:8888   users:(("java",pid=1092,fd=111))
    ESTAB   0  0    ::ffff:127.0.0.1:2181    ::ffff:127.0.0.1:40394   users:(("java",pid=6083,fd=28))
    ESTAB   0  0    ::ffff:127.0.0.1:40382   ::ffff:127.0.0.1:2181    users:(("java",pid=1152,fd=108))
    ESTAB   0  0    ::ffff:172.21.0.7:8888   ::ffff:172.21.0.7:60014  users:(("java",pid=1220,fd=126))
    ESTAB   0  0    ::ffff:127.0.0.1:40394   ::ffff:127.0.0.1:2181    users:(("java",pid=1220,fd=124))
    ESTAB   0  0    ::ffff:127.0.0.1:40364   ::ffff:127.0.0.1:2181    users:(("java",pid=1092,fd=96))

批量殺死Tomcat

killall -9 java

殺掉全部的java進程,killall命令殺死同一進程組內的全部進程。其容許指定要終止的進程的名稱,而非PID

安裝MySQL

我使用的版本是5.6,這個版本比較小

  • 卸載MariaDB

    Centos 7 默認支持的是mariadb,不支持mysql數據庫,MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL受權許可,採用GPL受權許可 MariaDB的目的是徹底兼容MySQL,包括API和命令行,使之能輕鬆成爲MySQL的代替品。

    若是想用MySQL,卸載mariadb,不然安裝MySQL不兼容

    • 查看已安裝的 Mariadb 數據庫版本

      rpm -qa|grep -i mariadb
    • 卸載已安裝的 Mariadb 數據庫

      rpm -qa|grep mariadb|xargs rpm -e --nodeps  // 卸載mariadb,文件名爲上述命令查詢出來的文件
    • 再次查看已安裝的 Mariadb 數據庫版本,確認是否卸載完成

      rpm -qa|grep -i mariadb
  • 安裝數據庫

    • 下載安裝包文件

      wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
    • 安裝mysql-community-release-el7-5.noarch.rpm包

      rpm -ivh mysql-community-release-el7-5.noarch.rpm
    • 查看可用的 mysql 安裝文件

      yum repolist all | grep mysql
    • 安裝mysql

      yum install mysql-server
    • 檢查mysql是否安裝成功

      rpm -qa | grep mysql
  • 啓動數據庫,並修改密碼

    查看數據庫啓動狀態

    service mysqld status

    啓動數據庫

    service mysql start

    使用默認密碼登陸

    mysql -u root -p

    默認是沒有密碼的,直接按enter,而後設置密碼

    set password for root@localhost=password
  • 開啓數據庫遠程鏈接

    • 改表法

      在localhost登入mysql後,更改 「mysql」 數據庫裏的 「user」 表裏的 「host」 項,將"localhost"改稱"%"

      mysql>update user  set host = '%' where user = 'root';
      mysql>select host,  user from user;
    • 受權法

      若是你想容許用戶myuser從ip爲192.168.1.6的主機鏈接到mysql服務器,並使用mypassword做爲密碼

      mysql>grant all privileges on *.* to root@"%" identified by "root"; 
      
      mysql>FLUSH  PRIVILEGES

      %表明全部IP

    • 查看所存儲的帳號密碼

      mysql> use mysql
      Database changed
      
      mysql> select host,user,password from user;
      +-----------+------+-------------------------------------------+
      | host      | user | password                                  |
      +-----------+------+-------------------------------------------+
      | %         | root | *7240D0E46D710424917F0FDBD7D5087A269F6B6D |
      | 127.0.0.1 | root | *7240D0E46D710424917F0FDBD7D5087A269F6B6D |
      | ::1       | root | *7240D0E46D710424917F0FDBD7D5087A269F6B6D |
      +-----------+------+-------------------------------------------+
      3 rows in set (0.00 sec)
  • 設置MySQL的編碼格式

    [client]
    default-character-set=utf8
    [mysqld]
    default-storage-engine=INNODB
    character-set-server=utf8
    collation-server=utf8_general_ci
  • 重啓MySQL

    service mysqld restart
  • 開啓防火牆3306端口

    firewall-cmd --zone=public --add-port=3306/tcp --permanen

    重啓防火牆

    firewall-cmd --reload
  • 測試端口是否開放

    wujunnan@wujunnandeMacBook-Pro ~ % telnet wujunnan.net 3306
    Trying 49.232.68.5...
    Connected to wujunnan.net.
    Escape character is '^]'.
  • 關於數據庫的設置文件

    在linux上不叫my.ini,而是my.cnf,在/etc/my.cnf

  • mysqld

    mysqld是服務。linux 系統裏通常的服務都是以 d 結尾的

    腳本啓動mysql服務的命令是 net start mysql

    這裏的mysql是一個服務名稱,執行services.msc,能夠看到mysql服務,執行路徑是 xxx\mysqld --defaults-file=xxx,可認爲mysql這個服務是mysqld 的別名,net start mysql 就是運行 mysqld程序

設置MySQL開機自動啓動

Reference

  • 在/etc/init.d目錄下有個mysqld的服務

  • 賦予可執行權限

    chmod +x /etc/init.d/mysqld
  • 添加服務

    chkconfig --add mysqld
  • 顯示服務列表

    chkconfig --list
    
    mysqld         	0:關	1:關	2:關	3:開	4:開	5:開	6:關
    netconsole     	0:關	1:關	2:關	3:關	4:關	5:關	6:關
    network        	0:關	1:關	2:開	3:開	4:開	5:開	6:關

    若是看到mysql的服務如上圖所示2,3,4,5都是開的話則成功,默認級別是2345

  • 若是是關,則鍵入命令開啓

    chkconfig --level 2345 mysql on
  • 重啓服務器

    reboot

MySQL密碼錯誤怎麼辦

  • 到安裝的MySQL的目錄下,找my.cof(個人在/etc目錄下)

    在[mysqld]下面一行加入

    skip-grant-tables

    意思是登陸時不須要密碼

  • 重啓MySQL

    service mysqld restart
  • 登陸MySQL

  • 鍵入mysql –uroot –p;直接回車(Enter)直接登陸

  • 設置密碼

    set password for 'root'@'localhost'=password('123456')
  • 執行下面操做後,能夠再執行上述命令

    flush privileges;
  • 或者執行這條命令,反正就是修改mysql系統數據庫中的user表中的數據

    update user set authentication_string=password("123456") where user="root";

    update user set password = password('root');

安裝Redis

  • 下載redis安裝包

    wget http://download.redis.io/releases/redis-4.0.6.tar.gz
  • 解壓壓縮包

    tar -zxvf redis-4.0.6.tar.gz
  • yum安裝gcc依賴

    yum install gcc
  • 跳轉到redis解壓目錄下

    cd redis-4.0.6
  • 編譯安裝

    make MALLOC=libc
    cd src && make install

啓動Redis

Reference

  • 切換到redis src目錄下,直接啓動redis

    ./redis-server
  • 後臺啓動Redis

    nohup /usr/local/redis/src/redis-server &
  • 怎麼查看Redis是夠啓動

    打開客戶端查看

    src/redis-cli

安裝zookeepper

  • 下載,複製,解壓

  • 啓動zookeepper

    ./zkServer.sh start
  • 看zookeeper有沒有啓動

    ps -aux | grep 'zookeeper'

優化啓動

每次啓動虛擬機後都須要經過命令啓動mysql和redis,爲了方便啓動,咱們能夠爲這些命令設置別名

  • 在~/.bash_profile最後加入下面兩行配置

    alias start-redis='nohup /usr/local/redis/src/redis-server &'
    alias start-zookeeper='/usr/local/zookeeper/bin/zkServer.sh start'
    alias start-mysql='service mysql start'
  • 從新加載配置

    source ~/.bash_profile
  • 之後執行下列命令就能夠啓動相應服務了

    start-redis
    start-zookeeper
    start-mysql

腳本快速部署

目前存在的問題

一個一個的向多個Tomcat webapps文件夾中複製war包過於麻煩,咱們可使用腳原本代替咱們來完成

思路就是,經過git來獲取咱們遠程倉庫的代碼,而後經過maven的命令來進行代碼的部署

準備工做

  • 準備git

    • 安裝git

      yum install git -y
    • 測試git安裝是否成功

      git --version
  • 安裝maven

    如上,注意須要配置全局啓動

  • 添加腳本

    在根目錄建立一個./shartup的可執行腳本,內容以下:

    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:  zhangmeng
    # Required-Start:    
    # Required-Stop:
    # Should-Start:      
    # Default-Start:    
    # Default-Stop:
    # Short-Description:
    # Description:       system code up, mvn bulid, deploy, tomcat start.
    ### END INIT INFO
    
    
    #PATH=/sbin:/usr/sbin:/bin:/usr/bin
    
    CODE_PATH=/app/code/itcas_health
    GIT_LOCATION=https://xxxxxx
    DEPLOY_POSITOIN=origin/master
    
    deploy(){
     echo "------------------deploy--------------------"
     echo "module="$1
     rm -rf /app/tomcat-$1/webapps/ROOT/*
     cd /app/tomcat-$1/webapps/ROOT/
     unzip $CODE_PATH/$1/target/*.war
    }
    
    restart(){
     echo "-------------------------service start----------------------"
     PROCESS_ID=`ps aux | grep /app/tomcat-$1/ | grep -v grep | awk '{print $2}'`
     if [ -n "$PROCESS_ID" ]
     then
      echo "kill is $PROCESS_ID--------------------------------------"
      kill -9 $PROCESS_ID
     else
      echo "server is not runnint------------------------------------"
     fi
     echo "tomcat is start---------------------------------------"
     sh /app/tomcat-$1/bin/startup.sh
    }
    
    updateCode(){
     echo "開始執行代碼更新……"
     git reset head --hard
     git checkout master
     if [ ! -f $CODE_PATH"/pom.xml" ]; then
      echo "代碼目錄不存在,當即拉取代碼到:"$CODE_PATH
      git clone $GIT_LOCATION $CODE_PATH
     else
      echo "代碼已存在,執行git pull"
      cd $CODE_PATH
      git pull
     fi
    }
    build(){
     echo "開始執行本地構建……"
     cd $CODE_PATH
     git checkout master
     git branch -D deploy
     git checkout -b deploy  $DEPLOY_POSITOIN
     git log --pretty=oneline --decorate --graph --abbrev-commit -n20
     mvn package
    }
    deployAndRestart(){
    
     arr=$(ls /app |grep ^tomcat|sed 's/tomcat-//g')
    
     if [ -n "$1" ]
     then
      for i in ${arr[@]}
      do
        echo "next module: $i"
        deploy $i
        restart $i
      done
      exit
     fi
    
    
     index=-1
     echo "---------------"
     for i in ${arr[@]}
     do
      index=$((index+1))
      echo "    [$index]  $i"
     done
     echo "---------------"
    
     echo -n "which module you want enter[1-$index]:"
     read module_index
    
     if [ $module_index -lt 0 ] || [ $module_index -gt $index ]
     then
      echo " Sorry your input must in [0-$index]"
      exit
     fi
    
     index=-1
      for i in ${arr[@]}
      do
       index=$((index+1))
       if [ $index = "$module_index" ]; then
        success=1
        echo "index: $module_index       module: $i"
        deploy $i
        restart $i
    
      fi
      done
    
    }
    
    
    operations=(all update build deploy)
    index=-1
    echo "---------------"
    for i in ${operations[@]}
    do
      index=$((index+1))
      echo "    [$index]  $i"
    done
    echo "---------------"
    
    echo -n "which operation you want enter[0-$index]:"
    read operation_index
    if [ $operation_index -lt 0 ] || [ $operation_index -gt $index ]
    then
     echo " Sorry your input must in [0-$index]"
     exit
    fi
    
    echo "index: $operation_index    operation: ${operations[$operation_index]}"
    
    case "${operations[$operation_index]}" in
       "update")
          updateCode
          ;;
       "build")
          build
          ;;
       "deploy")
          deployAndRestart
          ;;
       "all")
          updateCode
          build
          deployAndRestart all
    esac

    (腳原本自猛哥)

  • 修改裏面的代碼位置和遠程倉庫的地址

    GIT_LOCATION=https://xxxxxx
  • 若是腳本文件不能正常執行

    是由於在windows下編輯的時候,換行結尾是\n\r , 而在linux下是\n,因此纔會多出來\r

    可使用cat命令進行查看

    可使用以下命令批量刪除\r

host策略

線上部署以後存在一個問題就是,因爲部署前咱們將前端中的localhost都換成了咱們的域名或者ip地址,因此當咱們打開本地項目以後不能再進行調試,那麼如今咱們就須要,修改host。

當用戶在瀏覽器中輸入一個須要登陸的網址時,系統會首先自動從Hosts文件中尋找對應的IP地址,一旦找到,系統會當即打開對應網頁,若是沒有找到,則系統會再將網址提交DNS服務器進行IP地址的解析

咱們能夠把前端中的服務器域名映射爲127.0.0.1

這樣的話當咱們須要調試的時候就開啓這個host,當咱們須要訪問遠程服務器的時候就關閉這個host

以上功能能夠經過switchhosts!軟件實現

在這裏插入圖片描述

域名與網絡

公網IP和私網IP

爲何要分爲公網IP和私網IP呢?

簡單說來就是ip地址數量有限和管理上的須要,只有公網IP才能連上網絡,私有IP不能直接做爲Internet上面的鏈接之用,因此在一個局域網下 你們使用同一個IP去鏈接上網,這樣就節省了不少公網IP

ipconfig查出來的只是你上網的私有IP,可是百度上查詢到的是公網IP

備案

備案的是服務器仍是域名

備案的意思是:將域名指向的ip服務器,在工信部進行登記,域名持有人是誰,服務器ip提供商是誰,這是一連串的信息並非單獨存在的,備案的目的在於監管違法信息。

另外若是換服務器,備案原則上來說,若是你更換了服務器ip或者是服務商都是要去工信部從新登記的。

可是因爲網站備案數量實在是太多了,工信部通常是不可能按期來覈查域名指向ip的真實性,都是按期隨機抽查,一單抽查到實際信息與登記信息不匹配,可能會致使備案被吊銷。

ICP備案,ICP許可證是什麼

ICP備案,根據《非經營性互聯網信息服務備案管理辦法》(原信息產業部令第33號令)規定,非經營性互聯網信息服務提供者應當在其網站開通時在主頁底部的中央位置標明其備案編號,並在備案編號下方按要求連接信息產業部備案管理系統網址,供公衆查詢覈對;若是未在其備案編號下方連接信息產業部備案管理系統網址的,由住所所在地省通訊管理局責令改正,並處五千元以上一萬元如下罰款。

ICP許可證,通常指中華人民共和國電信與信息服務業務經營許可證,若網站涉及經營性業務,您需在ICP備案後申請經營性ICP許可證
在這裏插入圖片描述

Linux相關命令

文件目錄相關

  • mv

    mv /root/* .

    將root文件夾下的全部文件都移動到當前文件夾

    注意:用戶使用該指令複製目錄時,必須使用參數 -r 或者 -R

    將文件 aaa 更名爲 bbb

    mv aaa bbb

    將 info 目錄放入 logs 目錄中。注意,若是 logs 目錄不存在,則該命令將 info 更名爲 logs

    mv info/ logs
  • cp

    cp(copy file)

    用於複製文件或目錄

    使用指令 cp 將當前目錄 test/ 下的全部文件複製到新目錄 newtest 下,輸入以下命令

    cp –r test/ newtest
  • pwd

    pwd(print work directory) 命令用於顯示工做目錄
  • sed

    替換文本中的/r

    sed -i 's/\r$//' build.sh
  • grep

    查找文件裏符合條件的字符串

    grep (global search regular expression(RE) and print out the line)全面搜索正則表達式並把行打印出來

    搜索/usr/src/linux/Documentation目錄下搜索帶字符串magic的文件:

    $ grep magic /usr/src/linux/Documentation/*
    sysrq.txt:* How do I enable the magic SysRQ key?
    sysrq.txt:* How do I use the magic SysRQ key?
    -a 或 --text : 不要忽略二進制的數據。

網絡相關

  • netstat

    它跟 netstat 差很少,但有着比 netstat 更強大的統計功能

    netstat -anp|grep 8005
    -a (all) 顯示全部選項,默認不顯示LISTEN相關。
    -t (tcp) 僅顯示tcp相關選項。
    -u (udp) 僅顯示udp相關選項。
    -n 拒絕顯示別名,能顯示數字的所有轉化成數字。
    -l 僅列出有在 Listen (監聽) 的服務狀態。
    
    -p 顯示創建相關連接的程序名
    -r 顯示路由信息,路由表
    -e 顯示擴展信息,例如uid等
    -s 按各個協議進行統計
    -c 每隔一個固定時間,執行該netstat命令。
  • ss 命令

    ss 是 Socket Statistics

ss -antp | grep java | column -t
-h, --help 幫助
-V, --version 顯示版本號
-t, --tcp 顯示 TCP 協議的 sockets
-u, --udp 顯示 UDP 協議的 sockets
-x, --unix 顯示 unix domain sockets,與 -f 選項相同
-n, --numeric 不解析服務的名稱,如 "22" 端口不會顯示成 "ssh"
-l, --listening 只顯示處於監聽狀態的端口
-p, --processes 顯示監聽端口的進程(Ubuntu 上須要 sudo)
-a, --all 對 TCP 協議來講,既包含監聽的端口,也包含創建的鏈接
-r, --resolve 把 IP 解釋爲域名,把端口號解釋爲協議名稱

進程相關

  • ps

    • 查看ppid爲30726的進程相關信息

      ps -ef|grep 30726
    • 查看在運行的Tomcat

      ps -ef |grep tomcat
    • 相關參數

      -e:顯示系統內的全部進程信息。與-A選項功能相同
      -f:使用完整的(full)格式顯示進程信息。還會打印命令參數,當與-L一塊兒使用時,將添加NLWP(線程數)和LWP(線程ID)列
      -F:在-f選項基礎上顯示額外的完整格式的進程信息。包含SZ、RSS和PSR這三個字段

其餘

  • reboot

    reboot  用於用來從新啓動計算機
  • chmod

    chmod(英文全拼:change mode)命令是控制用戶對文件的權限的命令
    chmod 755 /文件   使文件擁有root權限

    批量修改文件權限

    unzip -d /app tomcat-all.zip
  • 解壓

    • tar

      解包:tar xvf FileName.tar 
      打包:tar cvf FileName.tar DirName //這個不叫壓縮
    • gz

      解壓1:gunzip FileName.gz 
      解壓2:gzip -d FileName.gz 
      壓縮:gzip FileName
    • tar.gz 和 tgz

      解壓:tar zxvf FileName.tar.gz 
      壓縮:tar zcvf FileName.tar.gz DirName
    • zip

      解壓:unzip FileName.zip 
      壓縮:zip FileName.zip DirName
      unzip -d /app tomcat-all.zip 將文件解壓到對應的目錄須要用到-d參數
  • rpm

    rpm(英文全拼:redhat package manager) 本來是 Red Hat Linux 發行版專門用來管理 Linux 各項套件的程序

    經常使用參數

    -i, --install                     install package(s)
    -v, --verbose                     provide more detailed output
    -h, --hash                        print hash marks as package installs (good with -v)
    -e, --erase                       erase (uninstall) package
    -U, --upgrade=<packagefile>+      upgrade package(s)
    --replacepkge                    不管軟件包是否已被安裝,都強行安裝軟件包
    --test                            安裝測試,並不實際安裝
    --nodeps                          忽略軟件包的依賴關係強行安裝
    --force                           忽略軟件包及文件的衝突
    Query options (with -q or --query):
    -a, --all                         query/verify all packages
    -p, --package                     query/verify a package file
    -l, --list                        list files in package
    -d, --docfiles                    list all documentation files
    -f, --file                        query/verify package(s) owning file
相關文章
相關標籤/搜索