精华内容
下载资源
问答
  • docker部署php环境运行web项目

    万次阅读 热门讨论 2019-01-12 22:02:23
    写这篇文章的目的一个是自己个笔记,以防以后忘记,再一个网上关于运行php容器到部署web项目的资料实在是少,是互相复制一下,无法真正运用到实际生产环境中。 为什么要用docker,docker基本的一些命令不再本...

    写这篇文章的目的一个是自己做个笔记,以防以后忘记,再一个网上关于运行php容器到部署web项目的资料实在是少,都是互相复制一下,无法真正运用到实际生产环境中。

    为什么要用docker,docker基本的一些命令不再本文章的讨论范围。

    docker部署web项目需要用到几个服务:php,nginx,redis等等,本篇文章讲一下PHP,nginx以及redis的使用,更多的服务流程跟启动这三个服务雷同。php使用5.6版本。当然也可以使用最新版,流程是一样的

    首先把先把用到的镜像拉到本地:

    docker pull php:5.6-fpm
    docker pull nginx
    docker pull redis

    启动之前先创建一个docker网络,使用docker来连接多个容器。

    docker network create -d bridge php-net

    因为代码我们都是在本地修改,然后做个映射到各个docker中去就可以了。首先启动redis,因为redis不需要做映射,启动最简单:

    docker run --name redis-web -d --network php-net -p 6380:6379 redis

    下面开始启动php跟nginx容器,因为我们是在本地开发,所以需要挂载主机web目录到容器,假设我们本地web目录为/www/wwwroot/ac,然后由容器服务来运行这个web项目

    docker run --name php-web -d --network php-net -p 9001:9000 -v /www/wwwroot/ac:/data  php:5.6-fpm
    docker run --name nginx-web -d --network php-net -p 80:80 -v /www/wwwroot/ac:/data  nginx

    这样3个容器就启动了,他们在统一docker网络内,可以通过ip互相进行访问。

    接下来划重点部分  配置nginx,以及安装php扩展。因为官方的php是一个纯净的php环境,需要我们一个个扩展去安装。

    首先进入nginx容器找到nginx配置文件配置

    docker exec -it nginx-web bash
    cd  /etc/nginx/conf.d
    vim default.conf

    在default.conf配置文件中填入以下内容

    server{
        listen 80;
        server localhost;
        location / {
            root /data;  #对应主机挂载到nginx容器中的/data代码目录
            index index.php index.html index.htm;
        }
        location ~\.php(.*)$ {
            root /data;     #对应主机挂在到php容器中的/data代码目录
            fastcgi_pass 172.19.0.3:9000;   #此地址为php容器的内网ip
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /data$fastcgi_script_name;  
            fastcgi_param PATH_INFO $1;   #此行配置pathinfo,tp框架必须使用pathinfo
            include fastcgi_params;
        }
    }

    编辑完配置文件之后进行重载配置

    service nginx reload

    之后再进入到php-web容器里面开始安装用到的扩展,这里我们安装几个比较常用的扩展,流程基本都一样

    docker exec -it php-web bash
    cd /usr/local/bin  
    ./docker-php-ext-install pdo_mysql  
    ./docker-php-ext-install mysql
    docker-php-ext-install bcmath
    docker-php-ext-install mbstring
    apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev
    docker-php-ext-install -j$(nproc) iconv
    docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
    docker-php-ext-install -j$(nproc) gd
    pecl install redis-4.0.1 && pecl install xdebug-2.6.0 && docker-php-ext-enable redis xdebug

    一口气安装了mysql,bcmath,gd,mbstring,redis等扩展

    重启php容器服务

    docker restart php-web

    这样一个完整的web项目就使用docker部署完成了,没有安装mysql容器,因为安装方式雷同,在连接的时候注意使用他们的内网ip去连接,如果想要连接宿主机,那么使用ifconfg命令找到docker0开头的那行,那个ip就是宿主机的ip,通过这个ip可以请求宿主机,比如我们在宿主机上又个mysql,那么可以使用ip:port来访问,容器之间也是使用内网ip来互相访问,进入每个容器然后cat /etc/hosts来获取ip

    展开全文
  • 现在容器用的是tomcat,维护比较多,因为程序老是升级,更新了class文件,必须重启环境,这样的话用户体验就非常差,而且耽误时间,实际开发中我用了jrebel插件倒是没什么问题,但是生产环境好像不推荐这个...

    Java Web项目如何做到升级不断掉服务,同时涉及到的相关问题

    原文地址:https://m.oschina.net/question/737237_2203576

    现在容器用的是tomcat,做维护比较多,因为程序老是要升级,更新了class文件,必须要重启环境,这样的话用户体验就非常差,而且耽误时间,实际开发中我用了jrebel插件倒是没什么问题,但是生产环境好像都不推荐这个东西,想问下大型的项目是如何做到的呢?

     

    一般是这样,首先,网站架设成,负载均衡器+应用服务器+Session服务器的模式。Session服务器常见的用redismemcache都有。更新的时候,先把一部分(比如1/3)应用服务器下线,更新应用,再重新上线。之后再逐步更新剩下的部分。一次更新1/3的话就分三次上线完成。

    可以使用nginx做一台backup服务器,先更新backup服务器,测试完成以后,更新其他非backup服务器。

    那现在2/3的服务器上是新代码,1/3的服务器上是老代码。 访问这两组的用户看到的功能是不是不一样?这个怎么解决呢?

    tomcatglassfishjboss等都是支持热部署的,修改一个类是不用自己手动重启web服务器的,只有修改外部jar包中的类则必须重启,不然jar包会冲突,不会替换,当然这种热部署是重新加载web容器,性能不佳。生产环境是不建议开启热部署的。

     

    你可以在网上搜索一下java服务器代码class类热更新,有一大堆资料,当然你也可以用groovyjrubyscale这些本身运行于jvm而且可热更新的脚本语言,甚至jdk自带一套解析运行js脚本的引擎,还有一种方案就是用业务规则引擎,比如Drools,不过这个也要学习另外一种脚本。

     

    大且稳健和高并发的项目往往不是单一的语言能做好的,需要多方面的结合,java组件框架这么多,就需要优秀的架构师去利用整合了。我们并不一定能生成开发出多么优秀的东西,但应该合理利用其它优秀的东西。

     

    影响有多大,你一台Tomcat,估计用户也不会多到哪里去吧,凌晨进行。几秒种而已

     

    1session可以挂Redis或者Memcached.应用服前面挂nginx或者haproxy做负载均衡。或者只做反向代理也行,nginxhaproxy基本是秒起的,不过不建议这么做。

     

    2tomcat是可以开启热加载的,不过一般不建议开启,热加载易导致PermGen space溢出。

     

    3jdk7以后开始可以做classloader的卸载,jdk8以后从permgen替换到了metaspace,理论上可以避免permgen的溢出问题,有兴趣可以试试自己写一个应用服务器实践一下。

    1:旧数据兼容新功能问题。

    升级后,比如报表功能新增了字段,那么历史数据可能没有新增加的字段的功能。

     

    2:升级的时候session的问题。

    升级的时候,如果负载均衡使用的是黏性策略(session不共享),那么升级服务的时候,肯定有些用户的功能会断掉的,所以一般选择晚上,或者人少的时候升级系统。

    升级的时候如果负载均衡策略是session共享,同样有问题,有的用户前一秒连上服务器A,下一秒连上服务器B,那么如果B服务器上的功能是新的,但是还不流程并不兼容之前的老服务,那么用户的操作可能进行不下去。

     

    最好的策略是黏性策略和Nginx搭配起来用,首先一部分服务器空出来,直到没人用这些空出来的服务器之后,开始进行升级。升级之后。已经连接上旧服务的用户,还是使用之前的服务器进行连接,新接入的用户,旧转接到新的服务器上去。等旧服务所在的服务器已经没有人用的时候,再将旧服务器进行更新。

    转载于:https://www.cnblogs.com/mkl34367803/p/10630258.html

    展开全文
  • 任何不错的开源项目都有 project-cli 脚手架、我们用它生成往往能快速配制出最佳的、理想的脚手架 我通常使用 <em>cli</em> 生成项目骨架再在之基础上进行个人修改。 什么是 CLI 命令行界面(英语:...
  • //这里一般指后端项目API的前缀,例如 /baidu/*/*/1.api /mi/*/*/2.api const BASE_API = "" export function axiosIntercept(Vue, router) { const axiosIntercept = axios.create({ ...
  • javaweb项目运转流程

    2017-09-06 12:23:11
    做web项目,不仅,还需要了解其工作流程,为什么这么!这些知道了。其他的是渣渣。上图!对于web 项目了解他的运行流程之后,基本其他的不是问题。web项目还是很简单的 这是简化的开发时常用的流程。...

    javaweb项目运转流程

    做web项目,不仅要会做,还需要了解其工作流程,为什么这么做!这些知道了。其他的都是渣渣。上图!对于web 项目了解他的运行流程之后,基本其他的都不是问题。web项目还是很简单的

    这是简化的开发时常用的流程。生产的比这个要复杂的多。但是也是对各个节点进行扩展而已。因为实际生产环境中可能碰到各种各样的问题,需要一些技术手段来解决,这些就不列在里面了。web工程还是挺简单的


    展开全文
  • 项目的概念很抽象,它取决于你用Gradle 做什么项目可以是 一个 Jar 库或者一个 web 程序。也可以是一个 zip 压缩包,也可以是将项目部署到生产环境等等; 一个项目是由一个或多个任务组成的;任务是构建工作的...

    项目 & 任务

    Gradle 的一切都是基于项目和任务的。

    构建由一个或多个项目组成。项目的概念很抽象,它取决于你要用Gradle 做什么 。项目可以是 一个 Jar 库或者一个 web 程序。也可以是一个 zip 压缩包,也可以是将项目部署到生产环境等等;

    一个项目是由一个或多个任务组成的;任务是构建工作的原子单位,最小的工作单元。例如:编译字节码,创建 jar 。

    Hello World

    创建一个简单的任务,输出 Hello World!.

    Groovy

    task hello{
        doLast {
            println 'Hello World.'
        }
    }

    Kotlin

    tasks.register("hello"){
        doLast {
            println ("Hello World.")
        }
    }

    输入命令 运行该任务

    gradle hello

    行结果

    创建一个简单的构建

    新建一个目录

    使用 init 命令创建构建项目

    Gradle 现在支持两种--Kotlin DSL 和 Groovy DSL .默认是 基于Groovy的,如果要使用 Kotlin 可以 使用 --dsl kotlin

    gradle init --dsl kotlin

    初始化

    会生成如下目录

    生成的目录

    其中 .gitigonre 是 git 忽略文件;.gradle 是 gradle 的一些信息。

    需要我们关注的是下面这些文件

    ├── cradle
    │ └── wrapper
    │ ├── gradle-wrapper.jar
    │ └── gradle-wrapper.properties
    ├── build.gradle.kts
    ├── gradlew
    ├── gradlew.bat
    └── settings.gradle.kts

    • warpper 是 Gradle Wrapper 使用的目录
    • gradle-wrapper.jar 是执行 Gradle Wrapper 使用的
    • gradle-wrapper.properties 是 配置 Gradle Wrapper 属性的
    • build.gradle.kts 用于配置当前项目的Gradle构建脚本
    • gradlew 是 Unix 机器上的 执行脚本
    • gradlew.bat 是 window 上的执行脚本
    • settings.gradle.kts 是 用于配置Gradle构建的Gradle设置脚本

    创建任务

    Gradle提供了通过Groovy或基于kotlin的DSL创建和配置任务的api。项目包含一组任务,每个任务执行一些基本操作。

    Gradle提供了一个任务库,我们可以在自己的项目中配置这些任务。例如,有一个核心类型的 Copy 任务,它可以复制文件。
    下面我们就配置这个 任务来使用一下。

    创建一个目录 src
    在 src 下创建一个文件名称任意,例如 myFile.txt。添加任意内容,例如 Hello World!
    在 配置脚本(build.gradle.kts) 添加 一个 Copy 类型的 copy 任务,从 src 目录复制到 dest 目录

    Gradle 在执行时会自动创建 dest 目录。

    Kotlin

     tasks.register<Copy>("copy"){
         description = "Copies sources to the dest directory"
         group = "Custom"
         from("src")
         into("dest")
        
     }

    Groovy

    task copy(type: Copy, group: "Custom", description: "Copies sources to the dest directory") {
        from "src"
        into "dest"
    }

    description 和 group 都是可选的,可以随便你定义;也是可以省略的;

    执行 copy 任务

    gradle copy

    检查里面的 myFile.txt 是否复制完成。

    使用插件

    Gradle 提供了大量的插件,在 Gradle 插件站 可以查到

    今天使用 一个 base 插件 结合它的核心类型 Zip 任务,实现打包压缩包的任务。

    使用 base 插件

    Kotlin

    plugins {
        id("base")
    }
    
    ... rest of the build file ...

    Groovy

    plugins {
        id "base"
    }
    
    ... rest of the build file ...

    创建一个 zip 任务,扩展自 核心类型 Zip

    Kotlin

    tasks.create<Zip>("zip") {
        description = "Archives sources in a zip file"
        group = "Archive"
    
        from("src")
        setArchiveName("basic-demo-1.0.zip")
    }

    Groovy

    task zip(type: Zip, group: "Archive", description: "Archives sources in a zip file") {
        from "src"
        setArchiveName "basic-demo-1.0.zip"
    }

    执行 zip

    gradle zip

    至此,一个简单的构建完成了。

    分析构建过程

    Gradle 提供了一个基于 web的构建视图——构建扫描

    在执行时 使用 --scan 选项或者明确使用构建扫描插件都可以免费的在 https://scans.gradle.com 创建一个扫描视图分析

    gradle zip --scan

    在同一服务条款后会直接发送到 构建扫描的平台,复制下面的连接打开即可。

    构建扫描

    打开之后会有详细的项目构建分析

    构建分析

    End

    转载于:https://www.cnblogs.com/skymxc/p/create-basic-project.html

    展开全文
  • 什么是集群、分布式和微服务?

    多人点赞 2020-11-26 09:41:31
    最近微服务架构非常流行,10个人的小公司项目也要求把微服务架构为硬性条件,网站日访问量不到1000的web应用也要求用微服务架构,那么到底使用微服务架构好不好,我来通俗的讲一下。弄清楚这个问题,需要...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非局限于游戏吧,RES、SRC资源有,在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...
  • Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非局限于游戏吧,RES、SRC资源有,...
  •  最后,本书假设读者已经了解了Web 是如何工作的,能够使用集成开发环境,并对数据驱动的应用的典型问题有某些了解。你可能是一个经验丰富的开发者或管理员,但是对于在Cassandra 的世界里使用到的工具可能偶尔也...
  • 19、对于开发和测试环境,下列说法正确的是:开发和测试环境必须能反映生产环境 /生产环境同开发和测试环境必须分离/应按照开发和测试计划中设置的标准配置来建立环境 /为了实现对项目的控制,需要注意同步开发和...
  • 1:源码开放对同行客户有很大的吸引力,因为很多大客户都怕受制于人,例如一期项目预算是10万,但是若想进行二期项目必须50万才可以,否则不给你更新系统不升级系统等等或者修改任何一个小功能都要收费,由于第一期...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    接口:说明事物行为的契约(做什么) 实现:事物是如何工作的特殊细节(如何做) 扩展机制 约 束:允许对模型元素添加新的规则 构造型:基于已有的建模元素引入新的建模元素 标记值:允许为模型元素添加新的特性,是...
  • 对于开发、测试、运维、架构师等技术人员来说k8s已经成为的一项重要的技能,下面列举了国内外在生产环境使用kubernetes的公司:   国内在用k8s的公司: 阿里巴巴、百度、腾讯、京东、360、新浪、头条、知乎、...
  • Guide 哥注:下面这几个项目都是非常适合 Spring Boot 初学者学习的,下面的大部分项目的总体代码架构我看过,个人觉得还算不错,不会误导没有实际项目的老哥,特别是前两个项目 vhr 和 favorites-web 。...
  • 应用案例 - 用户身份验证 / 英制单位与公制单位互换 / 掷骰子决定做什么 / 百分制成绩转等级制 / 分段函数求值 / 输入三条边的长度如果能构成三角形就计算周长和面积 Day04 - 循环结构 循环结构的应用场景 - ...
  • JAVA自学之路

    2012-09-21 20:39:46
    HTML CSS JavaScript,这些东西是做web项目必需的内容 。 Servlet JSP,服务器端必需。 XML AJAX,新的流行趋势不能不了解。 作一些小项目吧。比如BBS、留言系统、学籍管理、商城等等,随便着一些业务逻辑比较...
  • 但是投放到生产环境下去渲染一个真实的组件时,就会发现性能问题非常明显。 这个架构下虽然有性能问题,但以我的能力想解决这个问题也并不是太困难。另一个问题(原生能力受限)是这个架构...
  • 软件工程知识点

    2012-12-02 21:34:25
    软件定义是软件项目的早期阶段,主要由软件系统分析人员和用户合作,针对有待开发的软件系统进行分析、规划和规格描述,确定软件是什么,为今后的软件开发准备。这个时期往往需要分阶段地进行以下几项工作。 1....
  • // 开发环境和生产环境对应不同的目录 var viewDir = debug ? 'src' : 'assets'; // 处理静态资源和入口文件 app.use(serve(path.resolve(__dirname, viewDir), { maxage: 0 })); app = ...
  • 这也是 的无线淘宝团队打算要做的事情,有信仰总归是更可爱一些的吧。 <h3>6. 完全被小瞧了的前端技术 好吧,我个人表示 WebPack 和 Browserify 难堪大用。 以 Browserify 为例,来对比下理想和...
  • 就意味着每个 <code>stage</code> 都要重新完整装一次 <code>node_modules</code>,这样的时间和网络成本都不低,所以我们选择将这些文件缓存下来。 但是,缓存也要讲究实效性,例如我在第...
  • Visual Studio程序员箴言--详细书签版

    热门讨论 2012-10-16 20:37:39
    技巧4.23 为什么要让工具窗口处于浮动状态 88 4.2.4 选项卡式文档状态 89 技巧4.24 使用选项卡式文档最大化工具窗口 89 4.2.5 键盘导航 90 技巧4.25 使用Alt+F7键和Alt+Shift+F7键移到下一个或前一个工具...
  • 第1章至第4章是基础篇,包括数据库建模、oracle体系结构、网络结构、备份恢复和使用oem,这些对于刚刚从事dba或者试图转dba的朋友是必备知识。第5章至第9章是中级篇,专门讨论性能调整,包括性能优化原理、...
  • windows 程序设计

    2011-07-24 21:16:30
    包括Macintosh和Windows的所有图形环境,其实都要归功于Xerox Palo Alto Research Center(PARC)在70年代中期所作的开拓性研究工作。 Windows是由微软在1983年11月(在Lisa之后,Macintosh之前)宣布,并在两年后...
  • 外文翻译 stus MVC

    2010-05-28 15:02:31
    Struts can help you control change in your Web project and promote specialization. Even if you never implement a system with Struts, you may get some ideas for your future servlets and JSP page ...
  • 新版Android开发教程.rar

    千次下载 热门讨论 2010-12-14 15:49:11
    � 良好的盈利模式( 3/7 开),产业链条的各方:运营商、制造商、独立软件生产可以获得不错的利 益 。 将移动终端的评价标准从硬件向软件转变,极大的激发了软件开发者的热情。 � Android 的源代码遵循 Apache...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

web项目生产环境都要做什么