惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
WordPress大学
WordPress大学
V
V2EX
Jina AI
Jina AI
S
Schneier on Security
Cyberwarzone
Cyberwarzone
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
PCI Perspectives
PCI Perspectives
美团技术团队
小众软件
小众软件
L
LangChain Blog
N
Netflix TechBlog - Medium
大猫的无限游戏
大猫的无限游戏
T
Threatpost
T
Tor Project blog
K
Kaspersky official blog
Microsoft Security Blog
Microsoft Security Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Security Latest
Security Latest
H
Heimdal Security Blog
N
News and Events Feed by Topic
T
Threat Research - Cisco Blogs
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tailwind CSS Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
M
MIT News - Artificial intelligence
Apple Machine Learning Research
Apple Machine Learning Research
N
News | PayPal Newsroom
I
Intezer
博客园 - 聂微东
U
Unit 42
Cisco Talos Blog
Cisco Talos Blog
量子位
T
The Exploit Database - CXSecurity.com
Last Week in AI
Last Week in AI
博客园_首页
月光博客
月光博客
Webroot Blog
Webroot Blog
I
InfoQ
The Cloudflare Blog
Attack and Defense Labs
Attack and Defense Labs
人人都是产品经理
人人都是产品经理
Project Zero
Project Zero
Hacker News: Ask HN
Hacker News: Ask HN
IT之家
IT之家
Google DeepMind News
Google DeepMind News
C
Cisco Blogs

f2h2h1's blog

使用yii3实现一个微框架 claw养殖技术 计算机网络基础知识 定时任务 ACME的使用经验 magento2加上varnish缓存 开发Magento2的模块 在magento2中使用persisted-query socket编程 一些开发笔记 一段CSDN文章主要内容的油猴脚本 电子邮件的不完整总结 git的笔记 在Windows下配置PHP服务器 终端,控制台和外壳 PHP各种运行方式的不完整总结 把网页导出成PDF 和颜色相关的笔记 HTTP认证方式的不完整总结 SEO的经验 密码学入门简明指南 文件的上传和下载 用纯CSS3实现的滑动按钮 在VSCode里调试PHP Linux的GUI 关于字符编码的一些坑 nc的使用和原理 在Windows下安装Magento2 对JS原型链的理解 使用docker-compose部署magento2 浏览器和服务器通讯方式的不完整总结 观察网站性能 一些关于Linux的笔记 telnet的不完整总结 在Windows下安装pear MySQL的时间类型和时间相关的函数 Windows下通过PEB读取进程的环境变量 关于 在VSCode里使用Xdebug远程调试PHP 在Windows下搭建git服务 关于环境变量的不完整总结 使用shell实现的kv数据库 如何完成以xx管理系统为选题的毕业设计 数字号码资源 各种标记语言 使用PowerShell实现的http服务器 kind相关经验 DNSSEC简介 nginx+ffmpeg+websocket实现的直播例子 使用Tesseract识别字符验证码 使用docker部署nuxt FirstData后台的设置 paypal,firtdata,支付宝的不完整接入指南 微信支付的不完整接入指南 mongodb分片 练习
用docker-compose部署lnmp环境
2020-06-22 · via f2h2h1's blog

这篇文章最后更新的时间在六个月之前,文章所叙述的内容可能已经失效,请谨慎参考!

运行环境

  • 宿主机系统 CentOS Linux release 7.2.1511 (Core)
  • docker 版本 19.03
  • docker-compose 版本 1.26.0
  • nginx:1.19
  • php:7.4-fpm-buster
  • mysql:8.0
  • phpmyadmin:5

安装 docker

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

sudo yum install -y docker-ce docker-ce-cli containerd.io

sudo systemctl start docker

# 设为开机启动
sudo systemctl enable docker.service

sudo docker run hello-world

安装 docker compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

拉取镜像

docker pull nginx:1.19
docker pull php:7.4-fpm-buster
docker pull mysql:8.0
docker pull phpmyadmin/phpmyadmin:5

新建相关的文件夹

# 下文的其它操作都在 lnmp 目录下进行
mkdir ./lnmp
cd lnmp
mkdir ./config
mkdir ./log
# 网站根目录
mkdir ./www
touch docker-compose.yml
# 因为官方镜像的php没有 pdo_mysql 和 redis 拓展,所以这里要重新构建一个镜像
touch dockerfile-php.yml

修改 nginx 的配置

  1. 把 nginx 的配置文件从容器里复制出来
# 先运行一次 nginx 容器
docker run --rm -d --name nginx nginx:1.19
# 把配置文件复制出来
docker cp nginx:/etc/nginx ./config/
# 修改配置文件
vi ./config/nginx/conf.d/default.conf
  1. 把 default.conf 文件改成这样子
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        # root   /usr/share/nginx/html;
        root    /var/www;
        index  index.php index.html index.htm;
    }

    #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;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
       root           /var/www;
       fastcgi_pass   php:9000;
       fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
       include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

主要是删掉了 location ~ \.php$ 部分的注释, 和修改了这三句,这三个的值要保持一致。

location / root 的路径
location ~ \.php$ root 的路径
location ~ \.php$ fastcgi_param SCRIPT_FILENAME

还有 fastcgi_pass 要改为 php 容器的 ip 或容器名

dockerfile-php.yml

vi dockerfile-php.yml
FROM php:7.4-fpm-buster

RUN usermod -u 1000 www-data \
    && apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
        openssl \
        libssl-dev \
    && docker-php-ext-install -j$(nproc) gd pdo_mysql

RUN pecl install redis-4.0.0 \
    && pecl install mongodb-1.4.2 \
    && docker-php-ext-enable redis mongodb
EXPOSE 9000
CMD ["php-fpm"]

docker-compose.yml

vi docker-compose.yml
version: '3'
services:
  php:
    build:
      context: .
      dockerfile: Dockerfile-php
    restart: always
    volumes:
      - ./www:/var/www
    environment:
      TZ: Asia/Shanghai

  nginx:
    image: nginx:1.19
    restart: always
    ports:
      - 80:80
    depends_on:
      - php
    volumes:
      - ./www:/var/www
      - ./config/nginx:/etc/nginx
    environment:
      TZ: Asia/Shanghai

  mysql:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      TZ: Asia/Shanghai

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:5
    restart: always
    ports:
      - 8080:80
    depends_on:
      - mysql
    environment:
      PMA_HOST: mysql
      TZ: Asia/Shanghai

运行

第一次启动

docker-compose up -d

停止

docker-compose stop

停止后再次启动

docker-compose start

删除

docker-compose down

这些命令都是在 lnmp 目录下使用