一台ESC试玩EDAS外加docker部署nginx+redis+mysql

====================请跳过,以下叨叨念与本文无大关系=================
【先说点废话】本来想搭dubbo分布式环境的,但是阿里云EDAS估计流量投放较大,鬼使神差就入了EDAS的船,花了十块大洋成为包年的屌丝版人民币玩家。根据教程把玩后发现,有如下优点和不足:
优点:分布式服务框架 HSF(好舒服)轻量配置即可,甚至不用搭建注册中心,监控台等项目运维自动化,吧啦吧啦优点看文档玩一次就知道了;
我的不足:穷的只有一台云服。搭个云上测试环境,要学下docker才能对服务器增删改查,部署Nginx+redis+mysql这些常用的中间件
阿里云优惠券,点入免费领哦~
====================以上叨叨念纯属发泄下贫穷的可怕=================
【目标】
* EDAS单机配置多应用MVC项目+常用中间件 *

【准备】
1.支付宝至少一块钱(具体价格见官网)
2.至少一台可以更换镜像的阿里云服(我的华东2,不清楚所有区域是否都可用)
阿里云服务器ESC优惠券,点入免费领券购买,算是对我的小小支持
3.需要域名访问的话你懂的,域名备案去。
其他就是有折腾的时间和耐心。。。

【部署EDAS单机多应用】
1.开通EDAS服务,乞丐版1元/月(实际看广网报价)
EDAS服务优惠券,点入免费领券购买,算是对我的小小支持
2.通过 导入 ECS 自动安装 Agent,按照最后一个部署方式最方便。
3.导入ESC
由于官方教程优先配置是用于单机单应用,所有根据下图操作,我们要改成Docker+Swarm的部署方式支持单机多应用
这里写图片描述
这里写图片描述
其他参数默认或自己取名,主要集群类型必须Swarm。创建好后就选这个集群,其他的按教程走就行。

4.按着教程配个应用试试,至于SLB那个,一台服务器就省省心吧。
5.把4的不走在走一遍,看看多应用是否ok。实质多应用就是多个tomcat环境。

【部署常用中间件】
目前就调了Nginx+redis+mysql这三个,本来想直接原始安装,想想这样和高大上的docker部署不搭,所以学了点docker皮毛,开始docker模式部署这些中间件,测试用用配置大多随意,求轻虐。(要是能力够的可以尝试docker+Swarm的compose文件方式部署,Onz给大神跪)
docker学习.pdf,点击跳转,然后找个PDF。

Mysql
参考链接方法二

mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/conf && cd ~/mysql
docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Redis
参考链接方法二

mkdir -p ~/redis ~/redis/data
touch ~/redis/redis.conf && cd ~/redis
//下载官方默认配置,主要要设置密码(默认无)和访问白名单(默认会只准许本地访问),怎么修改请度娘
wget http://download.redis.io/redis-stable/redis.conf -O redis.conf
docker run -p 6379:6379 --name myredis --restart always -v $PWD/redis.conf:/etc/redis/redis.conf -v $PWD/data:/data  -d redis:latest redis-server /etc/redis/redis.conf --appendonly yes

Nginx
参考链接方法二

mkdir -p ~/nginx/logs ~/nginx/conf ~/nginx/conf/conf.d ~/nginx/cert
touch ~/nginx/conf/nginx.conf 
#添加配置,一般还是多应用域名分离配置
#见下文我的渣渣配置nginx.conf 和conf.d下的*.conf
cd ~/nginx
如下是http访问的启动
docker run -p 80:80 --name mynginx -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/conf/conf.d:/etc/nginx/conf.d -v $PWD/logs:/var/log/nginx -d nginx:latest
#需要https时
#充分利用阿里免费CA证书,见下文[免费证书申请]
#要把证书配置文件放到~/nginx/cert下,
#把官方给的service{...}拷到~/nginx/conf.d/xxx_ssl.conf中

docker run -p 80:80 -p 443:443 --name mynginx -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/conf/conf.d:/etc/nginx/conf.d -v $PWD/logs:/var/log/nginx -v $PWD/cert:/etc/nginx/cert -d nginx:latest
每增加一个应用(域名访问)就按上面的添加相应nginx配置
##配置文件错误容易导致启动后退出,可通过以下命令查看原因
docker container logs 容器ID
#容器起不来大多原因是配置文件有问题

以wx.51guagua.top域名为例的nginx简单配置

nginx.conf

user  root;
worker_processes  2;
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    autoindex  on;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
    client_max_body_size 100M;
    client_header_buffer_size    128k;
    large_client_header_buffers  4  128k;
}

web.conf

server {
    listen        80;
    server_name   wx.51guagua.top;
    root           /usr/share/nginx/html;
    include        /etc/nginx/default.d/*.conf;

    location / {
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass         http://应用所在主机内网IP:应用端口;
    }
}

web_ssl.conf(用于https)

server {
    listen 443;
    server_name wx.51guagua.top;

    ***这里的配置直接用CA证书成功申请后,点击“下载”会跳到帮助页,直接copy提供的配置,删除本段***,

    location / {
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass         http://应用所在主机内网IP:应用端口;
    }
}

应用所在主机内网IP:应用端口怎么获取!
应用本机内网IP去ESC控制台看服务所在的机子的内网IP,用127.0.0.1不行的,因为nginx是装在容器里,这会访问当前容器,而不是本机;
端口获取查看docker容器配置,这是EDAS部署应用项目时自动绑定的端口,还没看到是否能手动更改,命令如下:

docker ps
#会看到有个NAMES栏目,其中以ip_container_数字结尾的名称就是应用容器,其对应的PORTS栏目中用例如0.0.0.0:1025->8080/tcp内容,就是本机的1025端口映射到容器的8080端口,1025就是我们要找的端口。

docker ps

免费证书申请

先登录阿里云,再点传送门
按箭头顺序点
购买好了,就去控制台补全证书。

【demo测试】
写了个HSF-SSM的脚手架,请猛击可测试用==》https://gitee.com/wesleyOne/edashsfssm_scaffolding
配个数据库表,修改下srv项目下的pom.xml文件配置,主要是mysql和redis内网访问地址和账号密码。
这里写图片描述

以下简单测试2018-05-12,可忽略。
偷懒,直接拿测试demo稍微修改方便页面展示,打包,EDAS后台创建两个应用,发包,惊喜!
测试demo下载
修改了detail项目下的IndexServlet.java如下

public class IndexServlet extends HttpServlet {

    private static final long serialVersionUID = -112210702214857712L;

    @Override
    public void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {

        ApplicationContext ctx = ApplicationContextUtil.getApplicationContext();
        #获取服务接口
        ItemService itemService = ( ItemService ) ctx.getBean( "item" );

        PrintWriter writer = resp.getWriter();
        writer.write( itemService.getItemById(new Random().nextLong()).getItemId() +"\n");
        writer.write( itemService.getItemByName( "REQ_URI:" ).getItemName()+req.getRequestURI() +"\n");
        writer.write("白驹过隙:"+ new SimpleDateFormat("yyyy MM dd HH mm ss").format(new Date()));
        return;
    }

    @Override
    protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
    }

}

访问,忽略中文乱码23333
访问

安全组配置规则什么的自己配一下80,443其他看你心情

【总结】
哈哈哈,一周业余时间工作量,学习docker花了较多时间,实际流程通了一遍发现也不麻烦,而且代码配置也不麻烦,发布项目很舒服,更多功能待发掘。欢迎指正!

更多阿里云优惠券,点入免费领哦~


版权声明:本文为weixin_37222239原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。