zoukankan      html  css  js  c++  java
  • Docker + node(koa) + nginx + mysql 线上环境部署

    在上一篇 Docker + node(koa) + nginx + mysql 开发环境搭建,我们进行了本地开发环境搭建

    现在我们就来开始线上环境部署

    如果本地环境搭建没有什么问题,那么线上部署的配置也就很简单了

    我所使用的环境,Linux Mint,命令有不同可以适当更改

    目录结构

    - compose   新建,线上环境配置
    - data      
    - conf      
    - node_modules
    - static        
    - docker-compose.yml
    - docker-compose-prod.yml   新建,线上环境配置
    - package.json
    - server.js
    - yarn.lock
    

    线上服务配置

    我们现在需要3个服务:

    • Node
    • Nginx
    • Mysql

    在根目录下compose文件夹内,创建对应的Dockerfile配置文件,mysql是使用的镜像文件,就不用创建Dockerfile

    compose/node/Dockerfile
    compose/nginx/Dockerfile
    

    1.Node服务配置

    compose/node/Dockerfile

    FROM node:12-alpine     # 使用的基础镜像文件
    WORKDIR /code           # 工作目录的路径
    COPY ./package.json ./server.js /code/  # 拷贝文件到/code
    COPY ./static /code/static              # 拷贝文件到/code/static
    RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories 
    	&& apk update && apk add yarn 
    	&& yarn config set registry https://registry.npm.taobao.org/ 
    	&& yarn             # 这一窜命令,设置镜像源到国内(加速),更新,安装yarn,yarn设置国内镜像源,yarn安装node依赖
    CMD ["npm", "start"]    # 容器启动时运行
    
    • FROM指定基础镜像文件
    • WORKDIR工作目录的路径
    • COPY拷贝本地文件到容器内
    • RUN在 docker build 时运行命令
    • CMD在 docker run 时运行命令

    关于Dockerfile更详细的介绍可以查看 这里

    2.Nginx服务配置

    compose/nginx/Dockerfile

    这个配置文件很简单,我们只需要把本地的nginx conf文件拷贝到容器里,删除默认配置

    FROM nginx:1.17
    RUN rm /etc/nginx/conf.d/default.conf
    COPY ./conf/default.conf /etc/nginx/conf.d/default.conf 
    

    nginx conf域名设置

    线上部署是需要一个域名的,我们现在假设一个域名测试:

    conf/default.conf

    server {
        listen       80;
        server_name  localhost yoursite.com;    # 这里添加你们的域名
        ...
    }
    

    我们在本地修改/etc/hosts,就可以测试了

    127.0.1.1       yoursite.com
    

    3.compose

    和本地环境配置一样,要管理多个服务,我们需要compose文件来管理

    在之前我们已经说明了,mysql是直接使用镜像,没有额外的修改,就不需要Dockerfile了

    docker-compose-prod.yml根目录新建配置文件

    version: "3"
    
    volumes:
            static:         # 数据卷名称
            db:             # 数据卷名称
    
    services:
            web:
                    build:                                          # 构建镜像
                            context: ./                             # 上下文环境
                            dockerfile: ./compose/node/Dockerfile   # Dockerfile路径
                    ports:
                            - "3000:3000"
                    volumes:
                            - static:/code/static       # 使用前面声明的static挂在容器/code/static
                    restart: always                     # 总是重启
            nginx:
                    build:
                            context: ./
                            dockerfile: ./compose/nginx/Dockerfile
                    ports:
                            - "80:80"
                    volumes:
                            - static:/code/static
                    restart: always
            mysql:
                    image: mysql:5.6        # 直接使用镜像构建
                    env_file: .env          # 环境变量env,我们写入到了配置文件里,避免密码泄漏
                    volumes:    
                            - db:/var/lib/mysql
                    ports:
                            - "3306:3306"
                    restart: always
    
    

    和之前的配置基本一样,不过有一些小的改动

    volumes数据卷,我们设置了2个数据卷,static和db,下面就可以直接使用,它会自动创建并挂在到系统制定的目录/var/lib/docker/volumes/xxxx_static

    • build我们之前是使用的image镜像构建,同样build也可以,因为我们在Dockerfile里面已经声明了镜像了
      • context指定上下文运行环境到根目录,我们build时需要一个上下文环境
      • dockerfile指定当前服务的Dockerfile配置

    restart总是重启

    测试服务

    配置已经写好,我们来测试服务是否正常

    sudo docker-compose -f docker-compose-prod.yml build
    sudo docker-compose -f docker-compose-prod.yml up
    

    服务运行起来,如果你能通过yoursite.com访问的话,说明配置成功

    正式上线

    我们只需要把源代码copy到服务器上然后运行上面两条命令即可

    至于如何上传到服务器,FTP,GIT等...都可以

    总结

    在服务器已经安装好docker的情况下,和我们本地跑服务没有任何区别,各种顺滑,无障碍

    从此以后就不再纠结线上线下环境不一致的问题了

    珍爱生命,LOVE & PEACE

    附录

    服务器上安装Docker

    服务器上也需要安装Docker,docker-compose,具体安装步骤有详细的官方文档:

    Dockerfile

    github

  • 相关阅读:
    go语言xrom使用
    go语言算法
    go语言递归
    go语言map(字典)
    GO语言实现小技巧
    偶遇递归树
    Python中字典对象根据字典某一个key和values去重
    python中将字符串格式转字典
    Azure媒体服务的Apple FairPlay流功能正式上线
    SVG裁剪和平移的顺序
  • 原文地址:https://www.cnblogs.com/lostyu/p/docker_prod.html
Copyright © 2011-2022 走看看