备注:
   nginx  unit  nginx 开源的新的nginx 开发平台,但是说白了,个人感觉一般,而且官方文档也不是很好,
api 接口目前暂时文档比较。。。。,以前写过虚拟机&&物理机安装部署的方式,今天写一个使用docker
进行安装部署的方式,同时添加golang语言的使用,算是比较全了,毕竟大部分公司再用容器。
 
1. 参考项目
https://github.com/rongfengliang/nginx-unit-docker-demo
2. 项目说明
a. 项目结构

├── Dockerfile   // docker 构建
├── Jenkinsfile // jenkins 构建
├── README.md
├── app.go // golang 语言支持
├── docker-compose.yml // docker-compose 构建
├── run.sh // 应用配置,通过rest 接口
├── start.json // 应用配置 php && golang
└── website
└── index.php // php 语言 b. 代码说明(使用docker多阶段构建) Dockerfile docker 构建 FROM golang:stretch AS build-env
RUN apt-get update
# RUN apt-get install -y build-essential
RUN git clone https://github.com/nginx/unit.git /go/src/github.com/nginx/unit ## 注意分之的版本 必须和你的unit 一致,不然报错,这个觉得不好,可能和目前生产可用性有关系吧 ## 这个主要是golang sdk 的构建
RUN cd /go/src/github.com/nginx/unit && git checkout tags/1.1 && ./configure && ./configure go && make go-install ADD . /go/src/github.com/rongfengliang/nginx-unit-go
RUN cd /go/src/github.com/rongfengliang/nginx-unit-go && go build -o /appdemo app.go FROM nginx/unit:1.1-full
WORKDIR /appdemo
ADD start.json /appdemo/start.json
COPY website /appdemo/website/
COPY --from=build-env /appdemo /appdemo/website/appdemo
EXPOSE 8080 8000 8081
CMD ["/usr/sbin/unitd", "--no-daemon","--control", "0.0.0.0:8000"] Jenkinsfile jenkinspipeline 构建 pipeline {
agent {
node {
label 'docker-65'
}
}
stages {
stage('docker-compose build') {
steps {
sh 'docker-compose build'
}
}
stage('docker-compose run ') {
steps {
sh 'docker-compose up -d'
}
}
stage('deploy service') {
steps {
sh './run.sh'
}
}
}
} app.go golang 支持 package main import (
"math"
"net/http"
"nginx/unit" ## 注意unit 版本,感觉做的有点不好,因为版本因为无法发布服务
) func term(ch chan float64, k float64) {
ch <- 4 * math.Pow(-1, k) / (2*k + 1)
} func handler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("appdemorong"))
} func main() {
http.HandleFunc("/", handler)
//http.ListenAndServe(":8080", nil)
unit.ListenAndServe(":8089", nil)
} docker-compose.yml 比较简单,不用说了 version: "3"
services:
nginx-unit:
build:
context: .
image: myunit
ports:
- "9080:8080"
- "9000:8000"
- "9001:8081" run.sh 服务注册的shell
#!/bin/sh
curl -X PUT -d @$PWD/start.json http://localhost:9000 start.json 服务配置的说明 {
"listeners":{
"*:8080":{
"application":"phpindex"
},
"*:8081":{
"application":"golang"
}
},
"applications":{
"phpindex":{
"type":"php",
"processes":30,
"root":"/appdemo/website",
"index":"index.php"
},
"golang":{
"type":"go",
"processes":30,
"working_directory": "/appdemo/website",
"executable": "appdemo"
}
}
} website/index.php php 语言支持 <?php
phpinfo()
?>
3. 构建&&启动
docker-compose build
docker-compose up -d
4. 发布服务
./run.sh
5. 效果
 
a. 注册的服务列表
b. golang 服务访问
 
c.  php 服务访问
 
6. 扩展
多版本切换以及多版本也比较简单,就是服务注册配置文件的处理,总的来说,挺好的功能,但是在微服务,以及service mesh 的大趋势之下,就显得没有那么好的,
也只是个人的观点
7. 参考资料
http://unit.nginx.org/
https://github.com/rongfengliang/nginx-unit-docker-demo
 
 
 
 

nginx-unit docker 运行以及php &&golang 简单使用的更多相关文章

  1. docker 运行nginx并进入容器内部、端口映射

    一.docker运行容器 1.从网易蜂巢镜像仓库下载nginx镜像 : 2.拉取镜像到本地,并查看本地的镜像: $ docker pull hub.c..com/library/node:latest ...

  2. docker运行nginx为什么要使用 daemon off

    再返回Nginx的docker仓库仔细查看说明,其实是有说明的 /捂脸- 就是在CMD后面加上exec nginx -g 'daemon off;',如下: command: /bin/bash -c ...

  3. docker 运行容器,安装Nginx

    ########################################## #运行容器 #安装Nginx #搜索.下载镜像 docker search nginx docker pull n ...

  4. docker 运行jenkins及vue项目与springboot项目(四.docker运行nginx)

    docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...

  5. Docker 拉取Nginx镜像 和运行

    Docker 镜像拉取 docker pull [OPTIONS] NAME[:TAG|@DIGEST] 镜像拉取命令 OPTIONS说明: -a :拉取所有 tagged 镜像 --disable- ...

  6. nginx Unit 服务器

    转自: https://github.com/nginx/unit/pull/18/ 感谢: https://www.v2ex.com/t/389528 English 简体中文 繁體中文 NGINX ...

  7. 在 Azure 上使用 Docker运行 Mono

    Docker 是最近相当热门的一个名词,它是一个基于 Linux Container 的轻量化的虚拟技术,而微软也相当积极与 Docker 合作,在 Azure 上支持这个火热的技术,并且提供简单的方 ...

  8. Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例

    目录 [TOC] 1.环境准备 ​ 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...

  9. Docker初步认识安装和简单实例

    前话 问题 开发网站需要搭建服务器环境,FQ官网下载软件包,搭建配置nginx,apache,数据库等.官网没有直接可用的运行版本,担心网络流传的非官方发布软件包不安全还得自行编译官方源码安装,忘记步 ...

随机推荐

  1. clipboard.js使用方法

    HTML data-clipboard-action=“ copy ”  或者“cut” data-clipboard-target="#domName" data-clipboa ...

  2. Esper——内存计算、事件驱动、SQL支持

    教程简介Esper是一个事件流处理(ESP)和事件关联引擎(CEP的,复杂事件处理).Esper的目标是针对实时事件驱动架构(EDA).当Esper监测到事件流中又符合条件的时间发生时,即可触发Pla ...

  3. JavaScript中的call、apply、bind是怎么回事?

    在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢.在说区别之前还是先总结一下三者的相似之处:1.都是用来改变函数的this对象的指向的.2.第一个参数都是this要指向的对 ...

  4. hdu4309

    题解: 暴力枚举 然后网络流 代码: #include<iostream> #include<cstdio> #include<cstring> using nam ...

  5. UML_01_画图工具

    一.推荐工具 1.processon 在线画图,类型丰富 www.processon.com 2.StarUML staruml.io 破解方法 StarUML 3.0.2 (Crack + Keyg ...

  6. LeetCode OJ:House Robber II(房屋窃贼II)

    After robbing those houses on that street, the thief has found himself a new place for his thievery ...

  7. django中如何将多个app归到一个目录下。

    1.当startapps 生成多个app后,为了便于管理,可新建一个apps目录,把应用全部剪切进apps. 如果是在pycharm中,会提示是否自动更新路径,这里要全部选择取消. QQ群交流:697 ...

  8. Linux系统下超级用户密码的修改

    1)重启系统:在虚拟机刚启动界面,不停地按上下键,停止系统的自动引导(界面底部有提示) 2) 按 e 进入编辑模式 3) 编辑内容如下:完成后按Ctrl+x    (具体编辑内容为下图:删除倒数第三行 ...

  9. PostgreSQL 系统参数调整及并行设置(转)

    转自:https://yq.aliyun.com/teams/5 OS 准备 # yum -y install coreutils glib2 lrzsz sysstat e4fsprogs xfsp ...

  10. 访问IO设备

    http://blog.csdn.net/goodluckwhh/article/details/16986871 内存屏障主要解决的问题是编译器的优化和CPU的乱序执行.编译器在优化的时候,生成的汇 ...