当前位置: 首页 > news >正文

Docker下部署自己的LNMP工作环境

普通PC环境也可以用以下配置,只是MYSQL那里换回mysql官方版本就可以。

Docker 安装

$ curl -sSL get.docker.com | sudo sh 
复制代码

工作目录

/lnmp/conf 存放虚拟主机配置 /lnmp/data/mysql 存放mysql数据库数据 /lnmp/log 存放nginx、mysql日志 /lnmp/workspace 存放各种项目文件

/lnmp/.env 启动docker时的环境变量配置 /lnmp/docker-compose.yml 构建时的配置文件 /lnmp/php/Dockerfile 编译PHP配置文件

构建Nginx

创建项目

先创建一个静态文件index.html /lnmp/workspace/default/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    Hello, Docker!
</body>
</html>
复制代码

添加构建时的环境变量

编辑.env文件

SOURCE_DIR=./workspace
HTTP_HOST=80

NGINX_VERSION=alpine
NGINX_CONFD_DIR=./conf/conf.d
NGINX_CONF_FILE=./conf/nginx.conf
NGINX_LOG_DIR=./log
复制代码

SOURCE_DIR=./workspace workspace文件夹挂载到nginx下的 /var/www/html HTTP_HOST=80 宿主机的80端口映射到nginx下的80端口 NGINX_VERSION=alpine nginx镜像使用alpine版本

NGINX_CONFD_DIR=./conf/conf.d conf.d文件夹挂载到nginx下的/etc/nginx/conf.d NGINX_CONF_FILE=./conf/nginx.conf nginx.conf挂载nginx的 /etc/nginx/nginx.conf NGINX_LOG_DIR=./log

Nginx.conf

创建/lnmp/conf/nginx.conf文件
user  nginx;
worker_processes  1;

pid        /var/run/nginx.pid;
error_log  /var/log/nginx/nginx.error.log warn;

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/nginx.access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}


复制代码

配置虚拟主机

创建/lnmp/conf/conf.d/default.conf文件 注意: root下的路径必须是以/var/www/html开头,default是我们本地workspace下的一个文件夹

server {
    listen       80;
    server_name  localhost default-server;
    root   /var/www/html/default;
    index  index.php index.html index.htm;

    access_log  /var/log/nginx/nginx.localhost.access.log  main;
    error_log  /var/log/nginx/nginx.localhost.error.log  warn;

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

复制代码

构建Nginx配置

编辑 docker-composer.yml 以下的${}都是上面.env文件里配置的变量

version: "3"
services:
  nginx:
    image: nginx:${NGINX_VERSION}
    ports:
      - ${HTTP_HOST}:80
    volumes:
      - ${SOURCE_DIR}:/var/www/html/:rw
      - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw
      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro
      - ${NGINX_LOG_DIR}:/var/log/nginx/:rw
    restart: always
复制代码

启动Nginx

运行命令之后,访问树莓派的IP,正常的话会显示 Hello, Docker!

$ docker-compose up
复制代码

构建PHP

编辑/lnmp/.env添加PHP构建变量

PHP_CONFIG_FILE=./conf/php.ini
PHP_FPM_CONFIG_FILE=./conf/php-fpm.conf
复制代码

因php.ini配置有点长,可以在下面地址复制 php.ini php-fpm.conf

添加Dockerfile

/lnmp/php/Dockerfile

ARG PHP_VERSION
FROM php:${PHP_VERSION}-fpm
RUN apt update
RUN apt-get install -y \
		libfreetype6-dev \
		libjpeg62-turbo-dev \
		libmcrypt-dev \
		libpng-dev \
        unixodbc-dev \
        gcc g++ make autoconf libc-dev pkg-config
复制代码

添加构建PHP

编辑 /lnmp/docker-compose.yml文件

version: "3"
services:
  nginx:
    image: nginx:${NGINX_VERSION}
    ports:
      - ${HTTP_HOST}:80
    volumes:
      - ${SOURCE_DIR}:/var/www/html/:rw
      - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw
      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro
      - ${NGINX_LOG_DIR}:/var/log/nginx/:rw
    restart: always
  php:
    build: 
      context: ./php
      args:
        PHP_VERSION: 7.2
    volumes:
      - ${SOURCE_DIR}:/var/www/html/:rw
      - ${PHP_CONFIG_FILE}:/usr/local/etc/php/php.ini:ro
      - ${PHP_FPM_CONFIG_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
    cap_add:
      - SYS_PTRACE
    restart: always
    networks:
      - default
复制代码

虚拟主机支持PHP解析

/lnmp/conf/conf.d/default.conf 下面fastcgi_pass php:9000的php,是指上面docker-compose.yml的一个service名称,可以用来针对某个项目指定PHP版本

#...其它代码

location ~ \.php$ {
    fastcgi_pass   php:9000;
    fastcgi_index  index.php;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}
复制代码

添加文件

/lnmp/workspace/default/index.php

<?php

echo ‘Hello, PHP!’;

复制代码

启动预览

如果之前没有终止进程的, 可以ctrl + c终止之后再运行下面的命令。 如无意外,访问树莓派的IP会显示 Hello, PHP!.

$ docker-compose up
复制代码

添加PHP扩展

/lnmp/.env 添加变量,下面以swoole扩展演示,其它的扩展参考下面的操作就可以

PHP_SWOOLE_VERSION=4.2.10
复制代码

/lnmp/docker-compose.yml 添加变量

php:
    build: 
      context: ./php
      args:
        PHP_VERSION: 7.2
        PHP_SWOOLE: ${PHP_SWOOLE_VERSION}
复制代码

/lnmp/php/Dockerfile 下载并编译swoole

# ...其它代码
ARG PHP_SWOOLE=false
RUN if [ ${PHP_SWOOLE} != false ]; then \
    curl -O http://pecl.php.net/get/swoole-${PHP_SWOOLE}.tgz -L \
    && pecl install swoole-${PHP_SWOOLE}.tgz \
    && docker-php-ext-enable swoole \
;fi
复制代码

重新编译

注意:Dockerfile有改动的话,必须加--build重新编译一次, 不然docker-compose up的时候不会生效

$ docker-compose up --build
复制代码

预览

编辑/lnmp/workspace/default/index.php保存,访问树莓派的IP,不出意外你可以找到swoole的扩展

<?php

phpinfo();
复制代码

构建MYSQL

MYSQL持久化

Docker容器服务删除了,保证数据不会丢失 创建/lnmp/data/mysql文件夹

构建时变量

编辑/lnmp/.env文件,添加mysql服务端口、登录密码与数据持久化文件夹。

MYSQL_HOST_PORT=3306
MYSQL_PASSWORD=1234
MYSQL_DATA_DIR=./data/mysql
复制代码

构建配置

version: "3"
services:
    #... 其它代码
    mysql:
      image: tobi312/rpi-mysql
      ports:
        - ${MYSQL_HOST_PORT}:3306
      volumes:
        - ${MYSQL_DATA_DIR}:/var/lib/mysql:rw
      environment:
        MYSQL_ROOT_PASSWORD: "${MYSQL_PASSWORD}"
复制代码

启动

启动后,用数据连接工具测试,链接地址:树莓派IP 端口:3306 用户名:root 密码:1234

$ docker-compose up
复制代码

到此为止,属于你自己的LNMP工作环境已经做好了。

相关文章:

  • 移动APP安全测试
  • 如何让一个矩形外围为同一个数
  • Spark入Hbase的四种方式效率对比
  • 如何用30分钟快速优化家中Wi-Fi?阿里工程师有绝招
  • Notepad++ 7.6.4 发布,不会再有可信任的 UAC 弹窗
  • SAP 联合忽米网、重庆高新区,共建「重庆中小企业智能化赋能中心」
  • Elasticsearch在后台启动
  • 小程序开发-8-流行页面编码与组件的细节知识
  • 向量的基本运算
  • 计算几何函数库(转)
  • java并发多线程显式锁Condition条件简介分析与监视器 多线程下篇(四)
  • 2019阿里云峰会-边缘计算专场,邀您共话大连接低时延场景下的技术探索与实践...
  • RPM 包的构建 - 实例
  • macOS Mojave 无法运行未签名程序的解决方案
  • js常见算法题
  • android 一些 utils
  • angular2开源库收集
  • CentOS6 编译安装 redis-3.2.3
  • Electron入门介绍
  • gulp 教程
  • Javascript编码规范
  • JavaScript创建对象的四种方式
  • Java读取Properties文件的六种方法
  • Mac转Windows的拯救指南
  • React 快速上手 - 07 前端路由 react-router
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Vue 重置组件到初始状态
  • 大整数乘法-表格法
  • 当SetTimeout遇到了字符串
  • 码农张的Bug人生 - 见面之礼
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 一个JAVA程序员成长之路分享
  • 源码安装memcached和php memcache扩展
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​Spring Boot 分片上传文件
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (11)MATLAB PCA+SVM 人脸识别
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (第61天)多租户架构(CDB/PDB)
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (六)软件测试分工
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .“空心村”成因分析及解决对策122344
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .Net core 6.0 升8.0
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端