1 Star 1 Fork 0

fieos / dnmp

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

项目说明

DNMP(Docker + Nginx + MySQL8 + PHP8 + Redis + ElasticSearch),一款简易的LNMP一键安装程序,支持Arm CPU。

项目结构

  dnmp
  ├── docker-compose.yml      -- 基础配置文件
  ├── .env.example            -- 环境配置文件,拷贝 .env.example  .env
  ├── services                -- 服务目录
  │   ├── php
  │   │   └── conf            -- 配置文件 
  │   │   └── extensions      -- 扩展目录
  │   │   └── Dockerfile      -- 镜像构建文件
  │   └── ...
  ├── data                    -- 数据目录
  │   ├── redis
  │   │   ├── appendonly.aof  -- AOF 数据库保存文件
  │   │   ├── dump.rdb        -- RDB 数据库保存文件
  │   │   └── redis.log       -- Redis 日志文件
  │   ├── mysql               -- MySQL 数据目录
  │   └── ...
  ├── log
     ├── nginx               -- Nginx 系统错误日志
     │   ├── access.log
     │   └── error.log
     └──redis                -- Redis错误日志
     └──php                  -- PHP错误日志
  └── www                     -- 项目代码目录
      └── site                -- 具体项目目录
         └──index.php

快速使用

拉取代码 国内Gitee地址

git clone git@github.com:fieos/dnmp.git
cd dnmp       

新建配置文件

cp env.example .env

开启容器服务,并以守护进程执行

docker-compose up -d

-d 表示以守护进程在后台执行 重新构建服务,并以守护进程执行 docker-compose up --build -d

单独重启容器服务

docker-compose up --no-deps -d nginx -- php

如:在配置 docker-compose.yml中增加了nginx的端口号映射

Nginx管理

  • 站点管理目录为services/nginx/sites-available,在当前目录创建conf文件,并指向项目目录

    列如:services/nginx/sites-available/localhost.conf

  • 配置文件端口必须和 docker-compose.ymlports - 8088:80中的映射出来的端口一一对应

    列如:conf/conf.d/www.conf中配置端口为 80,则映射端口也80,对应的映射端口为:8088:80

  • 重新加载配置文件 docker exec -it nginx nginx -s reload

    或者 docker exec dnmp-nginx nginx -s reload

  • 容器默认时区为UTC时间,需要设置其他时区,

    修改.env文件,设置Timezone参数为Asia/Shanghai 重新构建docker容器 docker up --build

MySQL管理

  • 进入容器:docker exec -it mysql /bin/bash

    Windows 环境使用:docker exec -it mysql bash

PHP管理

  • docker安装PHP扩展常用命令

    • docker-php-source

      此命令,实际上就是在PHP容器中创建一个/usr/src/php的目录,里面放了一些自带的文件而已。我们就把它当作一个从互联网中下载下来的PHP扩展源码的存放目录即可。事实上,所有PHP扩展源码扩展存放的路径: /usr/src/php/ext 里面。

    • docker-php-ext-install

      这个命令,就是用来启动 PHP扩展 的。我们使用pecl安装PHP扩展的时候,默认是没有启动这个扩展的,如果想要使用这个扩展必须要在php.ini这个配置文件中去配置一下才能使用这个PHP扩展。而 docker-php-ext-enable 这个命令则是自动给我们来启动PHP扩展的,不需要你去php.ini这个配置文件中去配置。

    • docker-php-ext-enable

      这个命令,是用来安装并启动PHP扩展的。命令格:docker-php-ext-install “源码包目录名”

    • docker-php-ext-configure

      一般都是需要跟 docker-php-ext-install搭配使用的。它的作用就是,当你安装扩展的时候,需要自定义配置时,就可以使用它来帮你做到。

    • Docker php安装扩展步骤

  • 进入 php 容器 docker exec -it dnmp-php /bin/bash

    如果提示:bash: export: [/bin/bash,': not a valid identifier。删除配置文件vim ~/.bashrc末尾部分:[/bin/bash, -c, source ~/.bashrc]

  • 重启 php 服务 docker-compose restart php

    修改核心配置文件 php.ini,可使用该命令重新加载配置文件。
    修改扩展配置文件 www.conf,可使用该命令重新加载配置文件。

  • 服务管理

    • 配置测试:docker exec -it dnmp-php bash -c "/usr/local/php/sbin/php-fpm -t"
    • 启动:docker exec -it dnmp-php bash -c "/usr/local/php/sbin/php-fpm"
    • 关闭:docker exec -it dnmp-php bash -c "kill -INT 1"
    • 重启:docker exec -it dnmp-php bash -c "kill -USR2 1"
    • 查看 php-fpm 进程数:docker exec -it dnmp-php bash -c "ps aux | grep -c php-fpm"
    • 查看 PHP 版本:docker exec -it dnmp-php bash -c "/usr/local/php/bin/php -v"
  • 编译安装扩展

    • 1、下载:cd /opt && git clone https://github.com/php/pecl-encryption-mcrypt.git
    • 2、生成配置文件:/usr/local/php/bin/phpize --with-php-config=/usr/local/php/bin/php-config
    • 3、检测配置文件:./configure --with-php-config=/usr/local/php/bin/php-config
    • 4、编译:make -j2
    • 5、安装:make install
    • 6、修改php.ini配置文件:vim /usr/local/php/etc/php.ini
    • 7、重启php-fpmkill -USR2 1
  • 服务器开机自动启 PHP 容器,Ubuntu 18.04 rc.local systemd 设置

    #!/bin/sh -e
    
    # docker-compose php container
    /usr/local/bin/docker-compose -f /home/www/dnmp/docker-compose.yml up -d
    
    # docker tab cron start
    sleep 10; docker exec lnmp-php bash -c "/etc/init.d/cron start"
    
    exit 0

    编辑文件vim /etc/rc.local,添加以上内容 以上主要是解决服务器重启后,PHP 容器不能够重启以及 PHP 容器之内的 Crontab 服务不能够启动的的问题,目前没有其他解决方案

Redis管理

  • 连接 Redis 容器:docker exec -it dnmp-redis redis-cli -h 127.0.0.1 -p 63789
  • 通过容器连接:docker exec -it dnmp-redis redis-cli -h dnmp-redis -p 63789
  • 单独重启 redis 服务 docker-compose up --no-deps -d redis
  • 外部宿主机连接:redis-cli -h 127.0.0.1 -p 63789

容器管理

images

  • 查看容器网络

    $ docker network ls
  • 连接容器到用户自定义网桥

    $ docker run -itd --name dnmp_yearning --network dnmp_backend -p 8000:8000 -e MYSQL_ADDR=dnmp-mysql:3306  zhangsean/yearning
  • 重新单独构建镜像

    $ docker-compose build          # 重建全部服务
    $ docker-compose build php74    # 重建单个服务
  • 进入 Docker 容器

    • Linux 环境 $ docker exec -it dnmp-php bash
    • Windows 环境 $ winpty docker exec -it dnmp-php bash
  • 关闭容器并删除服务docker-compose down

  • 单独重启 redis 服务 docker-compose up --no-deps -d redis

    如果用户只想重新部署某个服务,可以使用 docker-compose up --no-deps -d <SERVICE_NAME> 来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。

  • 单独加载配置文件,列如修改了 nginx 配置文件www.conf中的内容,如何即使生效,请使用以下命令重启容器内的 Nginx 配置文件生效:

    docker exec -it lnmp-nginx nginx -s reload

    lnmp-nginx为容器名称(NAMES),也可以指定容器的 ID 。nginx为服务名称(docker-compose.yml

  • 修改docker-compose.yml文件之后,如何使修改的docker-compose.yml生效?

    docker-compose up --no-deps -d  nginx

    以上表示只是修改了docker-compose.yml中关于 Nginx 相关服务器的配置

  • 容器资源使用情况

    • 所有运行中的容器资源使用情况:docker stats
    • 查看多个容器资源使用:docker stats dnmp-nginx dnmp-php dnmp-mysql dnmp-redis
    • 自定义格式的 docker 统计信息:docker stats --all --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" dnmp-nginx dnmp-php
  • docker-compose 常用命令

    • 启动docker-compose.yml定义的所有服务:docker-compose up

    • 重启docker-compose.yml中定义的所有服务:docker-compose restart

    • 停止docker-compose.yml中定义的所有服务(当前目录配置):docker-compose stop

    • 停止现有 docker-compose 中的容器:docker-compose down(重要)

      如果你修改了docker-compose.yml文件中的内容,请使用该命令,否则配置文件不会生效

      例如:Nginx 或者 MySQL 配置文件的端口

    • 重新拉取镜像:docker-compose pull

    • 后台启动 docker-compose 中的容器:docker-compose up -d

  • 查看容器详细信息

    • 获取实例的 IP 地址:docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $INSTANCE_ID
    • 获取实例的 MAC 地址:docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $INSTANCE_ID
    • 获取实例的日志路径:docker inspect --format='{{.LogPath}}' $INSTANCE_ID
    • 获取实例的镜像名称:docker inspect --format='{{.Config.Image}}' $INSTANCE_ID

容器导出和导入

Docker镜像的导入导出,用于迁移、备份、升级等场景。涉及的命令有export、import、save、load

save 导出镜像

docker save -o composer-1.10.16.tar composer:1.10.16

注:composer:1.10.16 是本地已经存在的镜像。完成后会在本地生成一个 composer-1.10.16.tar 压缩包文件

load 导入镜像

导入之前先删除本地已经有的镜像

$ docker rmi composer:1.10.16
Untagged: composer:1.10.16
Untagged: composer@sha256:b78ead723780b67237069394745f85284cd153ab6176b85f4be65b02db484224
Deleted: sha256:eb14965007ad5c4427d4a3d9747b221a9ff9a2592e114db26280f434658f3dc8

开始导入镜像

$ docker load -i composer-1.10.16.tar
ace0eda3e3be: Loading layer [==================================================>]  5.843MB/5.843MB
4f34707acc6f: Loading layer [==================================================>]  3.025MB/3.025MB
c84148fa85b6: Loading layer [==================================================>]  11.78kB/11.78kB
ea7d729a7e1b: Loading layer [==================================================>]   5.12kB/5.12kB
84dc4b3d5140: Loading layer [==================================================>]  10.37MB/10.37MB
f2721b9bd68e: Loading layer [==================================================>]  4.096kB/4.096kB
8757a2dd4b44: Loading layer [==================================================>]  63.18MB/63.18MB
1a7224379637: Loading layer [==================================================>]  12.29kB/12.29kB
de8d4e13caf2: Loading layer [==================================================>]  60.42kB/60.42kB
cd74717e6911: Loading layer [==================================================>]  94.64MB/94.64MB
58d1af8009b9: Loading layer [==================================================>]    510kB/510kB
209722ef17f3: Loading layer [==================================================>]  4.096kB/4.096kB
8ae1fee25a6c: Loading layer [==================================================>]  2.005MB/2.005MB
644ab4ff51a2: Loading layer [==================================================>]   2.56kB/2.56kB
b56d854a67b1: Loading layer [==================================================>]  1.536kB/1.536kB
Loaded image: composer:1.10.16

使用命令docker images 查看已经导入镜像

注意:export import 导出的是一个容器的快照, 不是镜像本身, 也就是说没有 layer。你的 dockerfile 里的 workdir, entrypoint 之类的所有东西都会丢失,commit 过的话也会丢失。快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也更大。

区别和联系

  • docker save 保存的是镜像(image),docker export 保存的是容器(container)
  • docker load 用来载入镜像包,docker import 用来载入容器包,但两者都会恢复为镜像
  • docker load 不能对载入的镜像重命名,而 docker import 可以为镜像指定新名称

证书管理

本地生成 HTTPS

生成本地 HTTPS 加密证书的工具 mkcert,一个命令就可以生成证书,不需要任何配置。

  • 本地本地C:\Windows\System32\drivers\etc\hosts文件,添加以下内容

    127.0.0.1	dnmp.com
    127.0.0.1	www.dnmp.org
    127.0.0.1	www.dnmp.cn

空文件

简介

dnmp 环境搭建 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/fieos/dnmp.git
git@gitee.com:fieos/dnmp.git
fieos
dnmp
dnmp
master

搜索帮助