文章目录

  • 1:环境介绍
  • 2:安装nginx
  • 1:安装所需插件
  • 1:安装gcc
  • 2:pcre、pcre-devel安装
  • 3:zlib安装
  • 4:安装openssl
  • 2:安装nginx
  • 3:安装docker
  • 1:系统操作
  • 2:安装docker
  • 4:安装docker-compose
  • 5:安装mysql
  • 6:后端项目部署启动流程
  • 1:拉取镜像
  • 2:通过docker-compose创建容器、启动镜像
  • 7:前端项目部署流程
  • 1:上传前端ui,web两个项目的编译生成的dist文件
  • 2:配置nginx文件(用于端口监听和服务转发)


1:环境介绍

  1. Centos7
  2. nginx:1.9.9+
  3. Docker:19.03.13+
  4. docker-compose : 1.18.0+
  5. mysql:5.7+

2:安装nginx

如果安装过此步可以跳过

1:安装所需插件

1:安装gcc

gcc是linux下的编译器在此不多做解释,感兴趣的小伙伴可以去查一下相关资料,它可以编译 C,C++,Ada,Object C和Java等语言

  1. 命令:查看gcc版本
[root@localhost ~]# gcc -v

云计算docker实验 docker算法部署_云计算docker实验

  1. 一般阿里云的centOS7里面是都有的,没有安装的话会提示命令找不到
  2. 安装命令:
[root@localhost ~]# yum -y install gcc

2:pcre、pcre-devel安装

pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。

  1. 安装命令:
[root@localhost ~]# yum install -y pcre pcre-devel

3:zlib安装

zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip,所以需要安装

  1. 安装命令:
[root@localhost ~]# yum install -y zlib zlib-devel

4:安装openssl

openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔。。。。。。

  1. 安装命令:
[root@localhost ~]# yum install -y openssl openssl-devel

2:安装nginx

首先下载nginx

  1. 下载nginx安装包
[root@localhost ~]# wget http://nginx.org/download/nginx-1.9.9.tar.gz
  1. 把压缩包解压到usr/local/java(如果:如果没有java目录自己创建)
[root@localhost ~]# mkdir -p /usr/local/java #创建java目录
[root@localhost ~]# tar -zxvf nginx-1.9.9.tar.gz -C /usr/local/java #解压到java目录
  1. 切换到/usr/local/java/nginx-1.9.9/下面
[root@localhost ~]# cd /usr/local/java/nginx-1.9.9
  1. 执行三个命令:
[root@localhost ~]# ./configure
[root@localhost ~]# make && make install
  1. 切换到/usr/local/nginx安装目录
[root@liulei local]# cd /usr/local/nginx/

云计算docker实验 docker算法部署_云计算docker实验_02

  1. 配置nginx的配置文件nginx.conf文件,主要也就是端口
[root@liulei nginx]# vim conf/nginx.conf

云计算docker实验 docker算法部署_docker_03


可以按照自己服务器的端口使用情况来进行配置

ESC键,wq!强制保存并退出
7. 启动nginx服务
切换目录到/usr/local/nginx/sbin下面

[root@liulei nginx]# cd /usr/local/nginx/sbin

云计算docker实验 docker算法部署_docker_04

  1. 启动nginx命令:
[root@liulei sbin]# ./nginx
  1. 查看nginx服务是否启动成功
[root@liulei sbin]# ps -ef | grep nginx

云计算docker实验 docker算法部署_docker_05

  1. 访问你的服务器IP

    说明安装和配置都没问题OK了
  2. nginx.conf说明
#user  nobody;
worker_processes  1; #工作进程:数目。根据硬件调整,通常等于cpu数量或者2倍cpu数量。
 
#错误日志存放路径
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid; # nginx进程pid存放路径
 
 
events {
    worker_connections  1024; # 工作进程的最大连接数量
}
 
 
http {
    include       mime.types; #指定mime类型,由mime.type来定义
    default_type  application/octet-stream;
 
    # 日志格式设置
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log  main; #用log_format指令设置日志格式后,需要用access_log来指定日志文件存放路径
					
    sendfile        on; #指定nginx是否调用sendfile函数来输出文件,对于普通应用,必须设置on。
			如果用来进行下载等应用磁盘io重负载应用,可设着off,以平衡磁盘与网络io处理速度,降低系统uptime。
    #tcp_nopush     on; #此选项允许或禁止使用socket的TCP_CORK的选项,此选项仅在sendfile的时候使用
 
    #keepalive_timeout  0;  #keepalive超时时间
    keepalive_timeout  65;
 
    #gzip  on; #开启gzip压缩服务
 
    #虚拟主机
    server {
        listen       80;  #配置监听端口号
        server_name  localhost; #配置访问域名,域名可以有多个,用空格隔开
 
        #charset koi8-r; #字符集设置
 
        #access_log  logs/host.access.log  main;
 
        location / {
            root   html;
            index  index.html index.htm;
        }
        #错误跳转页
        #error_page  404              /404.html; 
 
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
 
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
        #    root           html; #根目录
        #    fastcgi_pass   127.0.0.1:9000; #请求转向定义的服务器列表
        #    fastcgi_index  index.php; # 如果请求的Fastcgi_index URI是以 / 结束的, 该指令设置的文件会被附加到URI的后面并保存在变量$fastcig_script_name中
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
 
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
 
 
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
 
 
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;  #监听端口
    #    server_name  localhost; #域名
 
    #    ssl_certificate      cert.pem; #证书位置
    #    ssl_certificate_key  cert.key; #私钥位置
 
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m; 
 
    #    ssl_ciphers  HIGH:!aNULL:!MD5; #密码加密方式
    #    ssl_prefer_server_ciphers  on; # ssl_prefer_server_ciphers  on; #
 
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
 
}

3:安装docker

系统操作:关闭防火墙的原因

1:系统操作

  1. 关闭firewalld防火墙
[root@localhost ~]# systemctl stop firewalld
  1. 禁止开机启动
[root@localhost ~]# systemctl disable firewalld
  1. 修改系统编码
[root@localhost ~]# vim /etc/sysconfig/i18n

添加内容LANG=“zh_CN.UTF-8”

2:安装docker

  1. 安装一些必要的系统工具
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 添加软件源信息
[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 更新 yum 缓存
[root@localhost ~]# yum makecache fast
  1. 安装 Docker-ce
[root@localhost ~]# yum -y install docker-ce
  1. 启动 Docker 后台服务
[root@localhost ~]# systemctl start docker
  1. 查看 Docker 启动状态
[root@localhost ~]# systemctl status docker

云计算docker实验 docker算法部署_mysql_06

  1. docker常用命令
Docker常用命令:
[root@localhost ~]# systemctl start docke #启动docker
[root@localhost ~]# systemctl stop docker #停止docker
[root@localhost ~]# systemctl restart docker #重启docker
[root@localhost ~]# systemctl status docker #查看docker状态
[root@localhost ~]# systemctl enable docker #加入开机自启
[root@localhost ~]# systemctl disable docker #解除开机自启

4:安装docker-compose

在安装docker-compose之前首先检查是否安装了python-pip
终端输入

  1. 检查pip是否安装命令
[root@localhost ~] pip -v
  1. 确认没有安装python-pip,则以此执行
[root@localhost ~]#  yum -y install epel-release
[root@localhost ~]#  yum -y install python-pip
[root@localhost ~]#  pip install --upgrade pip
[root@localhost ~]#  pip install docker-compose --ignore-installed requests
[root@localhost ~]#  docker-compose -version #查看docker-compose版本
/usr/lib/python2.7/site-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in a future release.
 from cryptography.hazmat.backends import default_backend
docker-compose version 1.26.2, build unknown
  1. 版本信息
docker-compose version 1.26.2, build unknown

5:安装mysql

  1. 创建用户和组
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -g mysql mysql
  1. 修改linux 系统用户mysql的密码
[root@localhost ~]# passwd mysql
#设置密码为MYsql!@#$%12345
  1. 准备安装包:上传准备好的包到/usr/local下
[root@localhost ~]# cd /usr/local
[root@localhost local]# tar -zxvf mysql-5.7.31-el7-x86_64.tar.gz
[root@localhost local]# mv mysql-5.7.31-el7-x86_64 mysql
  1. 为mysql目录改变所属用户和组
[root@localhost local]# chown -R mysql:mysql mysql
  1. 创建数据目录和日志目录:切换到mysql用户
[root@localhost local]# su mysql
[mysql@localhost local]# cd /usr/local/mysql
[mysql@localhost mysql]# mkdir data log
  1. 初始化数据库:记录下初始化密码
[mysql@localhost mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

云计算docker实验 docker算法部署_nginx_07

  1. 配置文件
[mysql@localhost mysql]# vim mysql.cnf
# 添加以下内容至文件
[client]
port=43306
socket=/usr/local/mysql/mysql.sock
[mysqld]
#忽略大小写
lower_case_table_names = 1 
#端口
port=43306
#设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
pid-file=/usr/local/mysql/mysql.pid
socket=/usr/local/mysql/mysql.sock
log_error=/usr/local/mysql/log/error.log
collation_server=utf8_general_ci
# 服务端使用的字符集默认为8比特编码的latin1字符集
character_set_server=utf8
log-bin=/usr/local/mysql/log/mysql-bin
server-id=100
  1. 启动mysql
[mysql@localhost mysql]# bin/mysqld_safe --defaults-file=/usr/local/mysql/mysql.cnf --user=mysql &
  1. 查看是否启动
[mysql@localhost mysql]# ps aux|grep mysql
  1. 为sock文件创建软连接:不设置,进入数据库会报错
[mysql@localhost mysql]# ln -s /usr/local/mysql/mysql.sock /tmp/mysql.sock
  1. 进入数据库
[mysql@localhost mysql]# bin/mysql -u root -p
# 输入之前记录的初始密码
  1. 修改数据库密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123123';
  1. 退出数据库,用新密码
mysql> exit;
[mysql@localhost mysql]# mysql -u root -p
  1. 远程访问的授权
mysql> create user 'root'@'%' identified with mysql_native_password by 'HZct@123';
mysql> grant all privileges on *.* to 'root'@'%' with grant option;
mysql> flush privileges;
mysql> exit;
  1. 执行sql文件(这个是示例!!!)
#上传sql文件
[root@csp-boot-test-128 ~]# chown -R mysql:mysql  文件夹名称/文件名称   #切换文件所在用户
[root@csp-boot-test-128 ~]# mv 文件/文件夹名称 /home/mysql/      #移动到sql文件/文件夹目录
[root@csp-boot-test-128 ~]#su mysql              #切换到mysql用户
[mysql@csp-boot-test-128 root]$ cd /usr/local/mysql      #进入到mysql目录下
[mysql@localhost mysql]# bin/mysql -u root -p           #连接数据库
# 输入之前记录的初始密码
mysql> create database csp;        #创建数据库
mysql> show databases;             #查看是否创建成功
mysql>use csp;                     #使用csp数据库 
mysql>source /home/mysql/sql文件         #执行命令进行导入
mysql>show tables;                #查看是否导入
mysql>exit
  1. 执行sql文件(创建这四个数据库)
create database microservice-auth default character set utf8 collate utf8_general_ci;
create database microservice-exam default character set utf8 collate utf8_general_ci;
create database microservice-gateway default character set utf8 collate utf8_general_ci;
create database microservice-user default character set utf8 collate utf8_general_ci;

6:后端项目部署启动流程

1:拉取镜像

  1. 拉取auth-service服务
[root@localhost ~]# sudo docker pull registry.cn-hangzhou.aliyuncs.com/hzct-microservice-exam/auth-service:[镜像版本号]
  1. 拉取config-service服务
[root@localhost ~]# $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/hzct-microservice-exam/config-service:[镜像版本号]
  1. 拉取exam-service服务
[root@localhost ~]# $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/hzct-microservice-exam/exam-service:[镜像版本号]
  1. 拉取gateway-service服务
[root@localhost ~]# $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/hzct-microservice-exam/gateway-service:[镜像版本号]
  1. 拉取monitor-service服务
[root@localhost ~]# $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/hzct-microservice-exam/monitor-service:[镜像版本号]
  1. 拉取msc-service服务
[root@localhost ~]# $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/hzct-microservice-exam/msc-service:[镜像版本号]
  1. 拉取user-service服务
[root@localhost ~]# $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/hzct-microservice-exam/user-service:[镜像版本号]

2:通过docker-compose创建容器、启动镜像

  1. 创建exam目录
[root@localhost ~]# mkdir -p /opt/exam
  1. 切换到exam目录
[root@iZbp1268ldc0zhxbsmny6xZ opt]# cd /opt/exam/
[root@iZbp1268ldc0zhxbsmny6xZ exam]#
  1. 把deploy打包上传到该目录
[root@iZbp1268ldc0zhxbsmny6xZ exam]# rz
  1. linux中提示没有unzip命令解决方法(此步可忽略)
使用unzip命令解压.zip文件,可能没有安装unzip软件

命令: yum list | grep zip/unzip   #获取安装列表    获取不到说明没有安装

安装命令: yum install zip    #提示输入时,请输入y;

安装命令:yum install unzip #提示输入时,请输入y;

解压命令:unzip xxx.zip #解压
  1. 进入该目录运行下面的命令
[root@liulei ~]# cd /opt/exam/deploy
  1. 首先运行docker-compose-base.yml(基本插件和监控模块)
# 运行此文件的命令:
[root@liulei deploy]# docker-compose -f docker-compose-base.yml up
特别说明:此步初次运行可能会比较慢,需要下载对应的插件,和网络有很大关系
此文件ip地址和端口号需要修改为对应的

云计算docker实验 docker算法部署_docker_08

  1. 再运行docker-compose-services.yml(后端服务模块)
# 运行此文件的命令:
[root@liulei deploy]# docker-compose -f docker-compose-services.yml up
特别说明:此文件ip地址和端口号需要修改为对应的

云计算docker实验 docker算法部署_mysql_09

  1. 至此后端所需插件和模块都启动完成了。
  2. 温馨提示:访问这个地址可以查看服务的启动情况
http://ip:8500/

7:前端项目部署流程

1:上传前端ui,web两个项目的编译生成的dist文件

  1. nginx默认存放dist文件的路径为
[root@liulei ~]# cd /usr/local/nginx/html/
[root@liulei html]# ll
-rw-r--r--. 1 root root      537 9月  26 17:33 50x.html
-rw-r--r--. 1 root root      612 9月  26 17:33 index.html
  1. 首先创建存放dist文件的文件夹ui、web
[root@liulei exam]# mkdir -p /usr/local/nginx/html/{ui,web}
  1. 把spring-microservice-exam-web编译的dist文件放到web目录下
  2. 把spring-microservice-exam-ui编译的dist文件放到ui目录下
  3. 两个文件打的都是zip包
  4. 解压命令
[root@liulei ui]# unzip dist.zip
[root@liulei web]# unzip dist.zip

2:配置nginx文件(用于端口监听和服务转发)

  1. 进入nginx的配置文件
[root@liulei ui]# vim /usr/local/nginx/conf/nginx.conf
  1. 配置web(9528)、ui(9527)的监听
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    #root /usr/local/nginx/html/dist;
    index  index.html index.htm;
     upstream gateway-service {
         server 192.168.1.126:9180       max_fails=3 fail_timeout=30s;
     }
   server {
        listen 9527;
        server_name  192.168.1.126;
        location ~* /a(pi|uth) {
            proxy_pass http://192.168.1.126:9180;
        }

        location ~* /admin {
           proxy_pass http://192.168.1.126:9527;
         }
        location / {
         root   html/ui/dist;
                index  index.html index.htm;
                if (!-e $request_filename) {
                                rewrite ^(.*)$ /index.html?s=$1 last;
                                break;
                        }

        }
    }
   server {
        listen 9528;
        server_name  192.168.1.126;
        location ~* /a(pi|uth) {
            proxy_pass http://192.168.1.126:9180;
        }

        location ~* /admin {
           proxy_pass http://192.168.1.126:9527;
         }
        location / {
         root   html/web/dist;
                index  index.html index.htm;
                if (!-e $request_filename) {
                                rewrite ^(.*)$ /index.html?s=$1 last;
                                break;
                        }

        }
    }
    server {
        listen       81;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
 # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}
  1. 配置好之后
按 Ese 、Shift+:wq!(退出)
  1. 配置好之后重新启动nginx,进入sbin目录
[root@liulei html]# cd /usr/local/nginx/sbin/
[root@liulei sbin]#
  1. 执行启动命令
[root@liulei sbin]# ./nginx
  1. 如果报错
[root@liulei sbin]# ./nginx 
nginx: [emerg] bind() to 0.0.0.0:81 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:81 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:81 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:81 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:81 failed (98: Address already in use)
nginx: [emerg] still could not bind()
[root@liulei sbin]# netstat -tunlp|grep 81
tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN      88055/nginx: master 
tcp6       0      0 :::9181                 :::*                    LISTEN      88832/docker-proxy  
[root@liulei sbin]# kill 88055
  1. 就是81端口你启动了,先查询关闭再启动就好了。命令分别为
[root@liulei sbin]# netstat -tunlp|grep 81 #查询进程号
[root@liulei sbin]# kill 88055 #关闭进程
  1. 前端登录界面截图
  2. 云计算docker实验 docker算法部署_nginx_10


  3. 云计算docker实验 docker算法部署_nginx_11

  4. 前端登录成功截图
  5. 云计算docker实验 docker算法部署_docker_12


  6. 云计算docker实验 docker算法部署_docker_13