美文网首页tool for workGO服务端
阿里云ECS大保健 Docker部署Go服务+mysql+Ngi

阿里云ECS大保健 Docker部署Go服务+mysql+Ngi

作者: tomcat_pikaqiu | 来源:发表于2018-11-02 00:32 被阅读79次

    目录

    一、阿里云ECS初始配置及登录
    1. 外网访问端口设置
    2. SSH远程登录
    二、 Docker部分
    1. 认识docker
    2. docker安装
    3. dokcer部署Go容器
    三、mysql部分
    1. mysql安装
    2. docker部署mysql容器
    3. mysql设置用户权限
    四、 Nginx部分
    1. Nginx安装
    2. Nginx配置反向代理
    3. docker部署Nginx容器

    正文

    一、阿里云ECS初始配置及登录

    前几天发现双十一阿里云ECS打折活动,于是买了个199/年的乞丐版练练手

    1. 初始配置

    从阿里云服务管理控制台首次登录会生成一个远程连接密码,此密码只出现一次,注意保存。
    接下来对外网访问端口进行设置,否则无法正常从公网访问。
    【云服务控制台】----->【实例列表】---->【管理】---->【本实例安全组】
    打开如下界面

    本实例安全组.png
    点击【配置规则】添加3个端口的访问
    1. tcp 80端口
    2. tcp 8080端口
    3. mysql 3306端口
    image.png
    2.SSH远程登录

    打开终端命令行输入ssh root@[远程ip地址]

    ssh root@110.222.222.222
    

    回车会提示输入root密码(ps:root密码需要在云控制台设置)
    登录成功后,会打印出欢迎内容

    Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-117-generic x86_64)
    
     * Documentation:  https://help.ubuntu.com
     * Management:     https://landscape.canonical.com
     * Support:        https://ubuntu.com/advantage
    New release '18.04.1 LTS' available.
    Run 'do-release-upgrade' to upgrade to it.
    
    
    Welcome to Alibaba Cloud Elastic Compute Service !
    

    到此,云服务器主机已经配置好,接下来可以安装一些工具啥的开始干活了。

    二、Docker部分

    1.认识docker

    docker是一个容器引擎,每个容器可以看做是一个隔离的虚拟主机。docker可以创建一个容器用来管理服务的运行停止等,当然作为一个“虚拟主机”,构建某类型服务时,需要依赖于服务所依赖的运行编译环境,即“镜像”。简单点理解,来一幅通俗易懂的图。


    image.png

    大概跑起来之后是这么个样子,因为容器与容器之间,容器与主机之间是隔离的,故不能直接私有访问。
    简单理解是这么个玩意,详情请进入Docker官方渠道介绍学习docker中文社区

    2.docker安装

    本文以ubuntu 16.04系统介绍安装
    首先,执行安装命令

    sudo apt-get update
    sudo apt-get install docker.io
    

    接下来启动docker后台服务

    sudo service docker start
    

    如果在本机尝试,可能需要设置国内镜像,或者直接翻墙
    设置国内镜像可在/etc/docker/daemon.json文件中加入

    {
      "registry-mirrors": ["http://hub-mirror.c.163.com"]
    }
    

    接下来可以用docker search来搜索所需镜像

    docker search mysql
    

    然后下载镜像

    docker pull mysql
    
    3.docker部署GO服务

    docker部署GO服务首先需要创建Dockerfile,注意Dockerfile的名字一定要是"Dockerfile"。
    进入GOPATH下某项目的根目录新建文件“Dockerfile”,写入一下内容

    #源镜像
    FROM golang:latest
    #作者
    MAINTAINER Razil "soulline13@163.com"
    #设置工作目录
    WORKDIR $GOPATH/src/testgo
    #将服务器的go工程代码加入到docker容器中
    ADD . $GOPATH/src/testgo
    #go构建可执行文件
    RUN go build .
    #暴露端口
    EXPOSE 8080
    #最终运行docker的命令
    ENTRYPOINT  ["./testgo"]
    

    然后保存,执行docker build命令

    docker build -t testgo .
    

    build完成后可以看到successfully日志,当然,若未编译通过,编译失败的日志也可以看到
    成功后执行docker run命令创建并运行容器

    docker run --name testgo -p 8080:8080 -d testgo
    

    无论成功或失败,都会生成容器id
    执行docker ps -a 命令查看所有容器

    docker ps -a 
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS                               NAMES
    9110c2e2cd2e        testgo              "./testgo"               3 seconds ago        Up 3 seconds            0.0.0.0:8080->8080/tcp               testgo
    672ad890203c        bd2282751b5f        "/bin/sh -c 'go buil…"   30 hours ago        Exited (1) 30 hours ago                                       hungry_shirley
    f8555c9e7450        bd2282751b5f        "/bin/sh -c 'go buil…"   31 hours ago        Exited (1) 31 hours ago                                       xenodochial_wilson
    

    状态up,表示正常运行
    也可以使用docker logs查看容器日志

    docker logs -f -t --since="2018-11-01" --tail=1000 testgo
    

    二、Mysql部分

    1.mysql安装
    sudo apt-get install mysql-server
    apt-get isntall mysql-client
    

    注意,安装后不要着急启动mysql服务,如果已经启动
    使用service mysql stop停止mysql服务。因为数据库的创建用户权限设置等都要在mysql的docker容器中进行,因为先运行则会占用3306端口和mysql docker容器冲突。
    搜索并下载mysql docker进行

    docker search mysql
    
    NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    mysql                                                  MySQL is a widely used, open-source relation…   7234                [OK]                
    mariadb                                                MariaDB is a community-developed fork of MyS…   2322                [OK]                
    mysql/mysql-server                                     Optimized MySQL Server Docker images. Create…   534                                     [OK]
    

    我这里是已经下载好了,如需下载,执行docker pull mysql下载镜像

    2.docker部署mysql容器
    sudo docker run --name mysql -p 12345:3306 -e MYSQL_ROOT_PASSWORD=12345 -d mysql:5.6.35
    

    执行docker ps -a 查看运行情况

    docker ps -a
    CONTAINER ID IMAGE  COMMAND CREATED  STATUS PORTS  NAMES
    
    9110c2e2cd2e testgo  "./testgo" 1 hours ago Up 1 hours  [0.0.0.0](0.0.0.0):8080->8080/tcp testgo
    
    2e529ce89853 mysql  "docker-entrypoint.s…"  3 seconds ago Up 3 seconds  [0.0.0.0](0.0.0.0):3306->3306/tcp, 33060/tcp  mysql
    
    672ad890203c bd2282751b5f "/bin/sh -c 'go buil…"  30 hours ago Exited (1) 30 hours ago  hungry_shirley
    
    f8555c9e7450 bd2282751b5f "/bin/sh -c 'go buil…"  31 hours ago Exited (1) 31 hours ago  xenodochial_wilson
    
    

    进入mysql容器交互命令行状态,准备创建数据库设置用户权限等操作

    docker exec -t -i mysql /bin/bash
    
    3.mysql设置用户权限

    使用root账号进入mysql

    mysql -u root -p
    输入密码
    
    mysql>create database test;
    mysql>create user 'username'@'host' IDENTIFIED BY 'password';
    mysql>GRANT privileges ON databasename.tablename TO 'username'@'host';
    

    四、Nginx部分

    为何要使用nginx?我这里的需求是为了解决访问带端口号的问题。http请求默认是80端口,一般访问一个网站不带端口默认就访问了80端口。当我们的服务不在80端口时,就需要通过nginx反向代理来映射到真实的服务端口地址。当然,nginx也可以做负载均衡。

    1.nginx安装
    sudo apt-get install nginx
    

    安装完成以后,文件夹如下所示
    /usr/sbin/nginx:主程序
    /etc/nginx:存放配置文件
    /usr/share/nginx:存放静态文件
    /var/log/nginx:存放日志
    同样,安装完之后确保nginx服务未启动
    执行 service nginx stop停止服务

    接下来下载nginx docker镜像

    docker search nginx
    NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    nginx                                                  Official build of Nginx.                        10055               [OK]                
    jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker con…   1440                                    [OK]
    richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable of…   634                                     [OK]
    
    docker pull nginx
    

    docker pull nginx下载nginx镜像备用

    2.Nginx配置反向代理

    首先启动一次nginx docker容器

    docker run -p 8080:80 --name nginx_web -it  nginx
    

    然后,将docker中的nginx配置文件拷贝到本地主机

    docker cp 65bc23f952db:/etc/nginx/ /root/nginx/etc/
    

    完了之后将刚刚启动的nginx docker容器停止并删除

    docker stop 65bc23f952db
    docker rm 65bc23f952db
    

    解释一下为何要拷贝,因为拷贝到本地是为了待会儿挂载在容器中,方便修改。
    接下来配置文件添加
    默认情况下nginx.conf都会指向conf.d中的子配置文件,如图


    image.png

    接下来在/root/nginx/etc/conf.d/创建一个反向代理配置文件gogs.conf
    填入一下内容

    server {
        listen 80;
        server_name www.test.com;    # 把域名替换成你自己的
        location / {
        proxy_redirect off;
            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://192.168.1.2:8080;      # 这里设置你要代理的ip+端口
          }
    }
    

    填好后,此时配置已完成

    3.docker部署Nginx容器

    执行docker run命令创建并运行nginx容器

    docker run --name=nginx_p -p 80:80 -v /root/nginx/html:/usr/share/nginx/html -v /root/nginx/etc/nginx/conf.d:/etc/nginx/conf.d -d nginx
    

    将nginx容器中的配置路径映射到本地主机的配置路径中。
    执行docker ps -a 查看运行情况

    docker ps -a
    CONTAINER ID IMAGE  COMMAND CREATED  STATUS PORTS  NAMES
    af6599f1db77 nginx   "nginx -g 'daemon of…"   3 seconds ago     Up 3 seconds               0.0.0.0:80->80/tcp                  nginx_p
    9110c2e2cd2e testgo  "./testgo" 1 hours ago Up 1 hours  [0.0.0.0](0.0.0.0):8080->8080/tcp testgo
    
    2e529ce89853 mysql  "docker-entrypoint.s…"  30 minutes ago Up 30 minutes  [0.0.0.0](0.0.0.0):3306->3306/tcp, 33060/tcp  mysql
    
    672ad890203c bd2282751b5f "/bin/sh -c 'go buil…"  30 hours ago Exited (1) 30 hours ago  hungry_shirley
    
    f8555c9e7450 bd2282751b5f "/bin/sh -c 'go buil…"  31 hours ago Exited (1) 31 hours ago  xenodochial_wilson
    

    接下来就可以直接使用ip或者域名不带端口(默认80端口)访问主机中8080端口的服务了

    www.test.com -----> 192.168.1.2:8080
    
    docker.jpeg

    相关文章

      网友评论

        本文标题:阿里云ECS大保健 Docker部署Go服务+mysql+Ngi

        本文链接:https://www.haomeiwen.com/subject/vylxxqtx.html