首页 > 其他分享 >Docker搭建lnmp环境

Docker搭建lnmp环境

时间:2023-06-13 17:11:14浏览次数:48  
标签:index lnmp nginx html Docker php docker 搭建

使用的服务器配置很低,而且快要到期了。到时候更换服务器再搭建lnmp,也挺花时间的,所以这里先未雨绸缪一波。

参考自博客园

首先使用命令行依次配置nginx/php-fpm/mysql,然后再使用docker-compose重新配置一次。

Nginx:

docker pull nginx	//简单的拉取镜像
docker create --name temp_nginx nginx	//创建一个容器,以便复制文件

这是项目的树形图:
[root@localhost lnmp]# tree
.
├── conf.d
├── data
├── html
│   ├── index.html
│   └── index.php
└── logs

docker cp temp_nginx:/etc/nginx/conf.d/default.conf ./con.d/	//直接复制基础的配置文件

docker network create lnmp	//创建一个网络

docker run --name lnmp_nginx --network lnmp -dp 80:80 -v /root/lnmp/html:/usr/share/nginx/html -v /root/lnmp/conf.d:/etc/nginx/conf.d nginx
//启动nginx镜像,包括别名,端口,配置文件,网页访问根目录,加入网络。

启动以后,直接浏览器访问http://虚拟机IP/index.html,就能看见html目录下的index.html文件了。
后续需要修改nginx的配置文件,直接修改./conf.d/default.conf,然后docker restart lnmp_nginx即可。
或者,docker exec -it lnmp_nginx nginx -s reload也可以。
或者docker exec -it lnmp_nginx /bin/sh	//直接进入容器的命令行,再运行 nginx -s reload也可以刷新配置文件。
可以进入容器使用nginx -t 检验配置文件是否出错。

php-fpm

docker pull php:5.6.40-fpm	//简单的拉取镜像

docker run --name lnmp_php --network lnmp -dp 9000:9000 -v /root/lnmp/html:/usr/share/nginx/html php:5.6.40-fpm		//这样写,在上面的html下面编写php文件就可以执行了
还是加入了同一个网络,这样在nginx配置文件里面就可以直接使用lnmp_php这个别名,而不用IP地址。

当然,非要使用IP地址也可以:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' phpfpm	//可能需要自己修改一些东西,我执行起来没问题,并且和我用portainer看见的ip一样。

docker ps,能看见php-fpm在运行就ok。或者自己进入php-fpm的容器,直接php index.php。看看运行有没有出错,就知道路径啥的配置正确没有。

php弄好了,就需要修改nginx的配置文件了。很容易看见conf配置文件里面注释了php的部分,略加修改即可。

大概是改成下面这样
location ~ \.php$ {
        root           /usr/share/nginx/html;	//这里很坑,默认是html,我忘了改。
        fastcgi_pass   lnmp_php:9000;	//加入一个网络,使用重命名也是ok的,否则,使用IP地址也可以
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; //这一行必须修改
        include        fastcgi_params;
    }
    
[13/Jun/2023:07:34:57 +0000] "GET /index.php HTTP/1.1" 404 27 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.43" "-"
2023/06/13 07:34:57 [error] 79#79: *86 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.133.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://172.19.0.3:9000", host: "192.168.133.129"
好久才发现,原来是nginx对php的路径有问题。root默认是html,我改成/usr/share/nginx/html,就可以正常访问了。

root那个路径不改,就会出现这样的问题。

后来试了一下,新建一个容器,但是不加入lnmp的网络,无论怎样修改nginx配置文件,使用别名也好,使用容器的IP也好,都是不能正常使用php的服务的。也就是实现了容器和网络之间的隔离。
2023/06/13 07:48:13 [error] 91#91: *104 upstream timed out (110: Connection timed out) while connecting to upstream, client: 192.168.133.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://172.17.0.3:9000", host: "192.168.133.129"


mysql

docker pull mysql:5.5.62

docker run --name lnmp_mysql --network lnmp -dp 3306:3306 -v /root/lnmp/data:/var/lib/mysql -v /root/lnmp/logs:/logs -e MYSQL_ROOT_PASSWORD=123456 mysql:5.5.62
mysql没有什么好说的。只是试了下能运行,能进入容器修改配置就ok了。

docker-compose

version: '3'
services:
  nginx:
    image: nginx
    ports:
      - 80:80
    volumes:
      - ./html:/usr/share/nginx/html
      - ./conf.d:/etc/nginx/conf.d
    depends_on:
      - php-fpm
    restart: always # 设置重启策略为always
    networks:
      - mylnmp
  php-fpm:
    image: php:5.6.40-fpm
    ports:
      - 9000:9000
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - mysql
    restart: always # 设置重启策略为always
    networks:
      - mylnmp
  mysql:
    image: mysql:5.5.62
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - ./data:/var/lib/mysql
    networks:
      - mylnmp
    restart: always # 设置重启策略为always

networks:
  mylnmp:
    name: mylnmp # 指定网络名称

和上面的几乎没什么区别,好在这样一个文件,就可以在切换服务器的时候,轻松搭建好环境,我需要做的,也只是提供html文件夹内的文件罢了。

docker-compose up -d	//执行即可

还是需要自己修改nginx的配置文件。

location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   php-fpm:9000;	//使用docker-compose中的服务名称
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;	//这里还是要改
        include        fastcgi_params;
    }

总的来说,搭建lnmp也不怎么复杂,使用docker-compose更简洁,方便

标签:index,lnmp,nginx,html,Docker,php,docker,搭建
From: https://www.cnblogs.com/dayq/p/17478163.html

相关文章

  • 使用nginx搭建https服务器
    最近在研究nginx,整好遇到一个需求就是希望服务器与客户端之间传输内容是加密的,防止中间监听泄露信息,但是去证书服务商那边申请证书又不合算,因为访问服务器的都是内部人士,所以自己给自己颁发证书,忽略掉浏览器的不信任警报即可。下面是颁发证书和配置过程。首先确保机器上安装了op......
  • centos7安装docker-compose插件
    引介docker-compose是docker的一款插件,常用来定义和运行多容器的docker应用。本篇文章就来介绍一下,如何在centos7的linux系统中安装docker-compose插件。安装方式docker-compose安装方式的主要可以分为两种,一是使用docker仓库进行安装,而是手动方式安装。使用docker仓库安装使......
  • javascript反编译工具javascript-obfuscator的环境搭建
    javascript-obfuscator的项目和文档地址:https://github.com/javascript-obfuscator/javascript-obfuscatorwindows端安装nodejs环境打开nodejs安装包,一直点NEXT,默认设置安装即可。安装后:#测试nodejs和npm是否已安装npm-v#如果有输出版本号,例如输出9.5.0,表示安装成功#查看......
  • window下安装docker并运行angular项目
    window下安装docker并运行angular项目1、使用场景本地有一个node项目,node版本是v16.13.2,在本地安装的angular是15.2.4但是测试服上面的node版本是14.19.3,angular是1.0.0-beta.28.3,会导致angular项目的ngbuild打包不了。但是不能升级版本,因为这个测试服务器上面的东西也......
  • 搭建springbootweb环境
    搭建springboot环境(idea环境)实现步骤:1.基础环境配置2.maven配置3.编写第一个程序helloworld(可能有两个小问题)4.运行(jar包运行,命令行运行)一.基础环境配置进入idea,点击file->new->project,在弹出的页面上,选择springinitiallzr并进行相关的配置点击next点击create,完成sp......
  • 重磅再推 | 基于OpenSearch向量检索版+大模型,搭建对话式搜索
    面向企业开发者的PaaS方案一周前,阿里云OpenSearch发布的LLM智能问答版,面向行业搜索场景,提供企业专属问答搜索服务。作为一站式免运维的SaaS服务,智能问答版基于内置的LLM大模型提供问答能力,为企业快速搭建问答搜索系统,详见链接:<https://developer.aliyun.com/article/1239380>除了Sa......
  • docker基础安装使用
    文章目录一、简介1、虚拟化2、Docker组件2.1Docker服务器与客户端2.2Docker镜像与容器2.3Registry(注册中⼼)3、小结4、Docker和虚拟机的区别二、安装Docker1、安装docker2、设置`ustc`的镜像3、docker的启动与停止三、常用命令1、镜像相关命令1.1查看镜像1.2搜索镜像1.3拉取......
  • 直播平台搭建,js 实现模糊搜索功能
    直播平台搭建,js实现模糊搜索功能封装一个公用的方法: //list是已有的数据,search是模糊搜索的关键字exportfunctionfuzzySearch(list,search){letdata=[];if(list.length!=0&&search){letstr=`\S*${search}\S*`;letreg=newRegExp(str);list.map(item=>{if(......
  • Eclipse环境搭建全集(个人使用的环境,Eclipse+SVN+Maven+JbossTo...
    评:1.JDK的配置去官网下载JDK,需要注意的是JDK32位,Eclipse也必须是32位.64位JDK对应Eclipse64位.1.安装JDK,安装过程中最好自定义安装目录等信息,如我们选择安装目录为E:\software\Java\jdk1.6.0_34.2.安装完成后,我的电脑点击属性,选择高级选项卡点击环境变量.3.在系统变量......
  • docker-compose搭建wordpress
    前言我们都知道,docker是一个运行容器的软件。同时它也配置了一个运行一组容器的软件,叫做docker-compose。当我们使用非常小规模容器化应用的时候,我们可以使用此docker-compose去做。 docker-compose的介绍根据官网的描述,docker-compose是一个能够管理多容器的工具,可以使用yam......