docker-compose 配置 nginx + node + mysql 网站环境

news/2024/5/21 0:35:27/文章来源:https://blog.csdn.net/qq_25243451/article/details/88316654

本文需要熟悉 DockerNodeNginx 的基础知识,如果不熟悉的同学需要查看文档了解学习后阅读。

  • Docker - 从入门到实践
  • Node.js v10.15.3 文档
  • Nginx 入门指南

这里开始正文

准备测试代码

初始化一个项目目录,并配置基础的测试代码
简单的一些代码下面不会给出,自行添加一些测试代码

$ mkdir node_project
$ cd node_project

添加如下文件,并自行添加一些简单的测试代码

+-- nginx-conf		// nginx 配置目录
|   +-- nginx.conf		// 配置文件
+-- views		// 页面测试文件
|   +-- index.html
|   +-- other.html
|   +-- css
+-- .dockerignore		// docker 配置文件
+-- docker-compose.yml		// docker-compose 配置文件+-- Dockerfile		// node 容器配置文件
+-- index.js		// node 入口
+-- package.json

这里贴出一部分测试代码和配置文件

index.js

const express = require('express');
const app = express();
const router = express.Router();const path = __dirname + '/views/';
const port = 8080;router.use(function (req,res,next) {console.log('/' + req.method);next();
});router.get('/',function(req,res){res.sendFile(path + 'index.html');
});router.get('/other',function(req,res){res.sendFile(path + 'other.html');
});app.use(express.static(path));
app.use('/', router);app.listen(port, function () {console.log(`Example app listening on port ${port}!`)
})

.dockerignore

node_modules
npm-debug.log
Dockerfile
.dockerignore
.git
README.md
.gitignore

Node

添加完测试代码在本地跑一下,没有问题就可以配置 docker

docker-compose.yml

version: '3'services:nodejs:build:context: .dockerfile: Dockerfileimage: nodejscontainer_name: nodejsrestart: unless-stoppedports:- "8080:8080"networks:- app-networknetworks:app-network:driver: bridge  

上面的代码配置了一些容器的基本行为

  • image: 指定镜像
  • restart: 重启规则
  • prots: 暴露端口,后面会删除掉配置,使端口只可以在内部访问,然后通过 nginx 反向代理
  • networks: 加入网络

这里就可以先测试一下了,运行容器,然后访问对应主机的 8080 端口,就可以看到上面 node 代码返回的 index.html 页面

$ sudo docker-compose up -d --build

可以通过命令查看容器运行状态,如果不是 up 通过对应的命令查看日志排查错误

$ sudo docker-compose ps

在这里插入图片描述
如果不是 up状态,查看日志

$ sudo docker-compose logs [containerId, containerName]

Nginx

然后修改 nginx 的配置文件

nginx-conf/nginx.conf

server {listen 80;listen [::]:80;server_tokens off;root /var/www/html;index index.html index.htm;# 修改为自己的域名server_name www.test.com test.com;# 访问 / 路径时执行反向代理location / {# 这里 nodejs 是 node 容器名proxy_pass http://nodejs:8080;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;# 后端的Web服务器可以通过 X-Forwarded-For 获取用户真实 IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 允许客户端请求的最大单文件字节数client_max_body_size 15M;# 缓冲区代理缓冲用户端请求的最大字节数client_body_buffer_size 128k;}
}

上面配置了 nginx的一些简单行为,可以查看相关的文档自己丰富配置

然后再次修改 docker-compose.yml 文件

version: '3'services:nodejs:build:context: .dockerfile: Dockerfileimage: nodejscontainer_name: nodejsrestart: unless-stoppednetworks:- app-networkwebserver:image: nginx:stable-alpinecontainer_name: webserverrestart: unless-stoppedports:- "80:80"volumes:- web-root:/var/www/html- ./nginx-conf:/etc/nginx/conf.ddepends_on:- nodejsnetworks:- app-networkvolumes:certbot-etc:certbot-var:web-root:driver: localdriver_opts:type: nonedevice: /home/wjw/www/blog/views/o: bind

这里去掉了 nodejs 端口的配置,这样外部就访问不到 8080 端口,访问 / 路径时,通过 nginx 反向代理获取到资源

  • depends_on: nginx 的启动依赖于 node
  • volumes: 卷宗,把服务器的路径绑定到容器中对应的路径,. 指代上下文环境,一般是 docker 配置文件的位置

然后关闭刚才的容器,重新启动

$ sudo docker-compose up -d --build

加入 --build 指令会自动关闭并创建,但是会产生垃圾镜像,使用下面的命令可以清除掉不使用的镜像

$ sudo docker image prune -a -f

然后打开对应域名或主机的 IP 就可以看到刚才的测试页面了,访问 www.test.com/toher 发现也是可以访问的,说明 node 服务代理正常,因为nginx启动在 80 端口,所以不需要写端口号

mysql

然后我们继续配置 mysql
继续编辑 docker-compose.yml文件

version: '3'services:nodejs:build:context: .dockerfile: Dockerfileimage: nodejscontainer_name: nodejsrestart: unless-stoppednetworks:- app-networkwebserver:image: nginx:stable-alpinecontainer_name: webserverrestart: unless-stoppedports:- "80:80"volumes:- web-root:/var/www/html- ./nginx-conf:/etc/nginx/conf.ddepends_on:- nodejsnetworks:- app-networkdb:image: mysql:5.7container_name: dbrestart: unless-stoppedports:- "9999:3306"environment:- MYSQL_ROOT_PASSWORD=root- MYSQL_USER=dbwjw   #创建test用户- MYSQL_PASSWORD=dbwjw  #设置test用户的密码- TZ=Asia/Shanghai # 设置时区volumes:- ./mysql:/var/lib/mysqlcommand: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_cinetworks:- app-networkvolumes:certbot-etc:certbot-var:web-root:driver: localdriver_opts:type: nonedevice: /home/wjw/www/blog/views/o: bindnetworks:app-network:driver: bridge

这里的配置文件就是最后的配置
增加了 db 的配置

  • environment: 环境变量,配置了数据库的用户等信息
  • command: 数据库的编码等配置
  • 上面把数据库的默认端口 3306 暴露为 9999

然后再次启动容器

$ sudo docker-compose up -d --build

清除没有使用的 image

$ sudo docker image prune -a -f

然后查看运行情况

$ sudo docker-compose ps

在这里插入图片描述
如果全部都是 up 说明启动是没有问题的

找一个数据库的管理工具连接一下数据库
在这里插入图片描述
连接成功,这里已经 OK 了
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_855211.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为你的网站配置一个小巧的框架( CodeIgniter)

现在的web开发确实已经到了无框架卜欢乐的状态,无论是前端:JavaScript(vue.js\react.js\angular.js框架和jQuery库),CSS(bootstrap),还是后端:PHP(CI/thinkPH…

使用postman测试需要登陆认证网站的api

postman作为一款web开发中必备的神器,有很多只是需要我们去学习 如果想要使用postman测试需要登陆认证网站的api,只需开启一个按钮: 然后在头部添加cookie以及X-CSRFToken(因为项目是django)

用户点击与网站目标 - 基于Google Analytics的应用

转载出处: http://webdataanalysis.net/tool-for-web-analytics/click-and-goal/ 用户在网站的行为其实无非就是输入和点击,而点击又是最常见的行为,其实用户行为分析一大部分就是在分析用户各种各样的点击行为。我们可以通过各种途径来监控用户点击行为…

三招教你提升团购网站流量转化率(上)

转载出处: http://hi.baidu.com/%CE%A4%B2%AE%C4%C9%CB%B9/blog/item/21f173c3275b82c7d10060a0.html/cmtid/8501cf90d0feb311d21b70ea 本人负责经营美心计化妆品团购网站,日常推广需要对流量进行分析。而流量分析中的核心是分析流量的价值,流量的价值是…

学习Web 开发技术的16个国外最佳教程网站和博客

转载地址: http://www.w3cfuns.com/article-788-1.html 互联网经过这么多年的发展,已经出现了众多的 Web 开发技术,像 .Net/Java/PHP/Python/Ruby 等等。对于 Web 开发人员来说,不管是初学者还是有一定经验的开发人员都需要时刻学习新的开发…

触摸屏网站开发系列(一)-ios web App应用程序(ios meta)

转载地址: http://www.iptu.net/index.php/archives/2955.iptu 触摸屏网站的开发其实现在来讲比前几年移动端网站开发好多了,触摸屏设备IOS、Android、BBOS6等系统自带浏览器均为WEBKIT核心,这就说明PC上面尚未立行的HTML5 CSS3能够运用在这里&#xff…

css横幅_CSS3:创建网站横幅

css横幅Inspired by Tamsin Baker’s beautiful Photoshop brushes “Urban Scrawl” 1 and 2, I was trying to create some shadowed banners using some CSS3 properties. Visit Tamsin’s site and check out all her inspiring artwork including the free Photoshop brus…

谷歌nexus9刷机_Google Nexus网站菜单

谷歌nexus9刷机View demo 查看演示Download Source 下载源Today I want to show you how to reconstruct the sidebar menu of the Google Nexus 7 page. It slides out with a really nice effect where some subitems get expanded as well. When hovering over a special me…

教你使用“百度统计”黑科技,根据不同维度分析网站的访问质量

废话不多说,先上几张百度统计的分析效果图: 实时访客明细: 今日流量: 跳出率指的是只访问了入口页面(例如网站首页)就离开的访问量与所产生总访问量的百分比。跳出率计算公式:跳出率访问一个页面…

今天码云(gitee.com)网站打不开,难道被封了?教你正确姿势上码云

今天下午2点50分左右,码云官网(gitee.com)突然访问不了了,公司代码仓库无法连接使用,不明所以。于是我迅速打开QQ,找到码云官方交流群,发现全国各地已经有很多人在反映这个问题。然后我看到了红…

如何添加百度收录的自动推送代码到帝国CMS网站中

站长近期的收录情况。第一步:获取代码百度资源站点:https://ziyuan.baidu.com 没有站点的要先创建站点。第二步:新增模板变量。变量名随意,我的是:[!--temp.baidu-js-push--]第三步:编辑内容。将第一步里复…

deepin使用Nginx创建站点

配置nginx站点 复制/etc/nginx/conf.d/default.conf 粘贴到当前文件夹,重命名swooletest.conf image.png修改目录和域名 image.png项目根目录创建目录,并且赋予权限 image.png修改/etc/hosts image.png重载nginx sudo nginx -s reloadimage.pngimage.pn…

将线上网站打包成exe可执行文件

1、首先电脑需要有node环境。 去nodejs的官网 https://nodejs.org/en/ 下载,一直下一步就行 检验安装是否成功,cmd命令输入如下命令,出现nodejs的版本号,说明安装成功 npm -v 2、安装nativefier GitHub上开源地址:h…

阿里云账号实名认证、域名实名制与网站备案的区别在哪里

初来乍到的新同学对阿里云账号实名认证、域名实名制与网站备案会比较迷惑,都是实名制又是不同内容。魏艾斯博客会在下面详细解释这三者的不同及如何申请审核。 一、账号实名认证: 根据管局要求,一个阿里云账户只能对应一个主体,为…

阿里云账号实名认证、域名实名制与网站备案的区别是什么

初来乍到的新同学对阿里云账号实名认证、域名实名制与网站备案会比较迷惑,都是实名制又是不同内容。魏艾斯博客会在下面详细解释这三者的不同及如何申请审核。 一、账号实名认证: 根据管局要求,一个阿里云账户只能对应一个主体,为…

阿里云添加网站解析教程

在熟悉了阿里云云解析后,现在我们开始做网站解析,把域名指向服务器IP地址,让网站可访问。说白了是给域名指一条路,到服务器的路。 要想添加域名解析,就要购买域名和服务器。可以都在阿里云上面购买,阿里云是…

阿里云服务器1核1G内存1M带宽可以放几个网站及多少流量 看过来

阿里云服务器1核1G内存1M带宽能放几个网站及多少流量?好多人买了阿里云1核1G内存1M带宽的服务器,却不知道能跑多少流量,也不知道能放几个网站。毕竟都是真金白银买来的,如果在使用期内能够最大限度的利用这个额度,让服…

Window服务器建站图文教程 新手看过来

如果能够有自己的网站,那么该是一件多么荣耀的事情。老魏从20年前就很盼望着能有自己的网站,也曾经在各大网络建立博客。并以能够建立自己的网站为梦想。那时候只知道网站需要服务器和域名,不知道怎么建站,现在陆续操作了下来&…

阿里云轻量应用服务器怎么一键安装ECShop镜像搭建小型电商网站?

阿里云轻量应用服务器能够快捷安装ECShop镜像,搭建小型电商网站。下面来介绍如何使用轻量应用服务器的ECShop镜像搭建一个小型电商网站。 创建服务器 访问轻量应用服务器购买页面,选择ECShop镜像,并选择套餐、购买时长,确认订单支…

阿里云网站ICP备案详细操作步骤教程

依据工信部的要求国内网站必须有备案号才能开通,阿里云网站ICP备案是每个在阿里云搭建网站的用户都要操作的。以下的信息务必真实有效,不能有差错,后面阿里云自查、管局检查出来会给你打回来重新填写,耽误下备案号时间。 如果你使…