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
Docker + node(koa) + nginx + mysql 线上环境部署的更多相关文章
- Docker + node(koa) + nginx + mysql 开发环境搭建
什么是Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然 ...
- (转) 线上环境部署MongoDB的官方建议
本文主要内容来自MongoDB官方文档http://docs.mongodb.org/manual/administration/production-notes/.并结合了实际工作情况进行分享. 1 ...
- 使用Fabric一键批量部署上线/线上环境监控
本文讲述如何使用fabric进行批量部署上线的功能 这个功能对于小应用,可以避免开发部署上线的平台,或者使用linux expect开发不优雅的代码. 前提条件: 1.运行fabric脚本的机器和其他 ...
- LNMP(linux+nginx+mysql+php)服务器环境配置【转载】
本文转载自 园友David_Tang的博客,如有侵权请联系本人及时删除,原文地址: http://www.cnblogs.com/mchina/archive/2012/05/17/2507102.h ...
- CentOS 7 下 JDK1.8+Maven+Nginx+MySql+Git+Redis环境安装
CentOS 7 下 JDK1.8+Maven+Nginx+MySql+Git+Redis环境安装 安装目录准备 新建data目录,用来放下载的软件 mkdir -p /data 切换到该data目录 ...
- Vue 2.x 3.x 配置项目开发环境跟线上环境
先找到package.json (这是nuxt版的vue 可能会跟一般vue不一样 当然总体上差不多的) "scripts": { "dev": " ...
- 记一次线上环境 ES 主分片为分配故障
故障前提 ElasticSearch 版本:5.2 集群节点数:5 索引主分片数:5 索引分片副本数:1 线上环境ES存储的数据量很大,当天由于存储故障,导致一时间 5个节点的 ES 集群,同时有两个 ...
- rsync实现负载均衡集群文件同步,搭建线上测试部署环境
闲来无事,搭建一个负载均衡集群,至于负载均衡集群搭建过程,找时间写下.这次主要写集群之间的文件同步,以及线上测试环境的搭建. 笔者看过很多公司都没有线上测试环境,真是崩溃了,不造怎么确保线上线下环境一 ...
- 搭建windows环境下(nginx+mysql+php)开发环境
搭建windows环境下(nginx+mysql+php)开发环境 1. 所需准备应用程序包 1.1 nginx 程序包nginx-1.0.4.zip或其他版本(下载地址: http ...
随机推荐
- UPC 2019年第二阶段我要变强个人训练赛第六场
传送门 A.上学路线 题目描述 小D从家到学校的道路结构是这样的:由n条东西走向和m条南北走向的道路构成了一个n*m的网格,每条道路都是单向通行的(只能从北向南,从西向东走). 已知小D的家在网格的左 ...
- linux加载和卸载模块
模块建立之后, 下一步是加载到内核. 如我们已指出的, insmod 为你完成这个工作. 这个 程序加载模块的代码段和数据段到内核, 接着, 执行一个类似 ld 的函数, 它连接模块中 任何未解决的符 ...
- 【t091】油滴扩展
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 在一个长方形框子里,最多有N(0≤N≤6)个相异的点.在其中任何一个点上放一个很小的油滴,那么这个油滴 ...
- Jmeter压力测试教程(入门篇)
2.4 添加HTTP镜像服务器 在运行测试之前,如何验证我们发送的信息是否有误?如何可以理直气壮的告诉别人自己发送的测试请求没有问题?这里推荐添加HTTP镜像服务器进行校验测试. HTTP镜像服务器并 ...
- new Date(2019-08-24 12:30:00)和new Date(2019-08-29T02:15:08.000+0000)在ios的兼容NAN问题
new Date()在安卓和pc端上正常显示,但是却在ios上显示 NAN的问题 正常写法: var time = new Date("2019-08-24 12:30:00"); ...
- JS异步解决方案
前言 异步最早的解决方案是回调函数,如ajax,事件的回调,setInterval/setTimeout中的回调.但是回调函数有回调地狱的问题; 为了解决回调地狱的问题,社区提出了Promise解决方 ...
- jQuery 工具类函数-检测对象是否为空
在jQuery中,可以调用名为$.isEmptyObject的工具函数,检测一个对象的内容是否为空,如果为空,则该函数返回true,否则,返回false值,调用格式如下: $.isEmptyObjec ...
- Linux 内核子系统
一个子系统是作为一个整体对内核一个高级部分的代表. 子系统常常(但是不是一直)出现 在 sysfs 层次的顶级. 一些内核中的例子子系统包括 block_subsys(/sys/block, 给块 设 ...
- vue-learning:17- js - methods
methods 函数是十分优雅的语言特性,它让我们可以采用可复用的方式存储一段逻辑,从而不用重复代码就可以在多处调用.函数.组件.模块等都有复用代码的考虑,函数应该是最早组织复用代码的实现. 在vue ...
- 转 java面试题及答案(基础题122道,代码题19道)
JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时 ...