零基础腾讯云CentOS部署云服务器

Web项目远程部署

(文章较长,建议需要哪一部分点击左侧目录跳转)

获取云主机,安装系统

购买云服务器

腾讯云,1核,2G,50G

在这里插入图片描述

安装系统

  • Linux主要分类

    • Debian:Ubuntu,Debian
    • Red hat:Red Hat ,Centos
  • 具体分类

    • Debian:用的deb包,使用APT包管理系统。同时Debian提供了大多数软件比较新的版本,并且提供了更多的软件包(相对于原版Red Hat)。Debian的优点在于更新迅速,软件包完善(Ubuntu尤其),操作便利。缺点是部分时候稳定性欠佳,跟进最新软件有可能存在Bug。

      Ubuntu是基于Debian所开发,可以简单地认为Ubuntu是Debian的功能加强版。与Debian相比,Ubuntu提供了更人性化系统配置,更强大的系统操作以及比Debian更激进的软件更新。Ubuntu与Debian比较,可以认为Debian更趋向于保守一些,Ubuntu对新手友好度更高,上手更容易。

    • Red Hat:用rpm包,使用yum包管理系统。相对于Debian来说,Red Hat的一大特点就是慢。大部分软件停留在稳定版本,而且相距最新版版本也差较多。而且某些新版软件的一些新特性支持也比较慢,比如php-fpm。因为Red Hat是面向企业用户提供的操作系统,所以在稳定性上十分突出,一般在新功能或稳定性的选择上更倾向于后者。只有当某个功能完全确定稳定了,才会加入到系统里。优点是系统稳定,技术文档完善,如果付费的话能得到企业级别的技术支持。缺点是软件包比较老旧,而且一些较新功能会欠缺。

      • Red Hat

        Red Hat是付费操作系统,你可以免费使用,但是如果要使用Red Hat的软件源并且想得到技术支持的话,是要像Windows那样掏钱的,所以大家可以理解为Linux中的Windows。这么做符合开源精神,免费使用,服务收费。

      • Centos

        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 local_file remote_ip:remote_folder 

默认使用22端口

上传到哪里

本地安装的软件和其他文件放在这里

/usr/local
实际使用
  • 上传Tomcat压缩包(不写目的目录会默认放在root下)

    wujunnan@wujunnandeMacBook-Pro ~ % scp /Users/wujunnan/软件/Tomcat/apache-tomcat-8.5.60.tar.gz root@wujunnan.net:/usr/local/tomcat
    
  • 上传zookeeper文件夹

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

    -r为递归上传文件夹

安装软件

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默认安装路径如下

    DirectoryContents 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

    sed -i 's/\r//' filename
    

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权限
    
  • 解压

    • 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
    

各位且看且求证
欢迎指正错误!

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值