欢迎光临
我们一直在努力

Docker 安装之 Nginx、PHP 环境和数据库

docker-compose 文件如下:

version: '3'

services:
  web:
    image: wyveo/nginx-php-fpm:latest
    ports:
      - '80:80'
      - '443:443'
    restart: always
    volumes:
      - ./www:/usr/share/nginx/
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - mysql
    networks:
      - web

  mysql:
    image: mysql:5.7
    restart: always
    ports:
      - '3306:3306'
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/logs:/var/log/mysql
      - ./mysql/conf:/etc/mysql/conf.d
    env_file:
      - mysql.env
    networks:
      - web
  mongo:
    image: mongo:4.4.3
    volumes:
      - ./mongdb/data/:/data/db
    ports:
      - '27017:27017'
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root # mongodb的用户名
      MONGO_INITDB_ROOT_PASSWORD: root # mongodb的密码
    networks:
      - web

networks:
  web:

这里我是将以前的 php 镜像和 nginx 镜像合并使用了一个 wyveo/nginx-php-fpm:latest 镜像,并且打包了许多常用的 php 扩展。

因此如果跟你目前正在使用的有冲突,可能需要自己调整下。

  1. 在目录中创建 docker-compose.yaml 文件,并写入以上内容
  2. 创建 mysql.env(与 docker-compose.yaml 同路径),并写入你的内容

     

    ENV

     

    # MySQL的root用户默认密码,这里自行更改
    MYSQL_ROOT_PASSWORD=你的root用户密码
    
    # MySQL镜像创建时自动创建的数据库名称
    MYSQL_DATABASE=自动创建的数据库
    
    # MySQL镜像创建时自动创建的用户名
    MYSQL_USER=自动创建的用户名
    
    # MySQL镜像创建时自动创建的用户密码
    MYSQL_PASSWORD=密码
    
    # 时区
    TZ=Asia/Shanghai
    
  3. 新建 nginx 目录
    1. 在 nginx 目录新建文件 nginx.conf(nginx 的默认配置),并写入如下内容

       

      NGINX

       

      user  nginx;
      worker_processes  1;
      
      error_log  /var/log/nginx/error.log warn;
      pid        /var/run/nginx.pid;
      
      
      events {
          worker_connections  1024;
      }
      
      
      http {
          include       /etc/nginx/mime.types;
          default_type  application/octet-stream;
          client_max_body_size 50m;
          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/access.log  main;
      
          sendfile        on;
          #tcp_nopush     on;
      
          keepalive_timeout  65;
      
          gzip  on;
      
          include /etc/nginx/conf.d/*.conf;
      }
      
    2. 在 nginx 目录下新建 conf.d目录,并在 conf.d 目录下新建文件 default.conf 并写入如下内容

       

      NGINX

       

      server {
          listen       80;
          root /usr/share/nginx/;
          index index.php index.html index.htm;
      
          access_log /var/log/nginx/lsky_access.log main;
      
          location ~ \.php$ {
             # try_files $uri $uri/ /index.php?$query_string;
              fastcgi_split_path_info ^(.+\.php)(/.+)$;
              fastcgi_pass unix:/run/php/php8.0-fpm.sock;
              fastcgi_index index.php;
              include fastcgi_params;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              fastcgi_param PATH_INFO $fastcgi_path_info;
          }
      
          location / {
            try_files $uri $uri/ /index.php?$query_string;
          }
      
      }
      
  4. 接下来返回根目录(docker-compose.yaml 同级目录),并新建 www 文件夹在 www 文件夹中新建一个文件夹,并写入对应内容,此时访问服务器地址 + 文件夹名即可看到对应内容。
  5. 数据库地址输入 ifconfig 查看本机 ip 地址,并填入。

    自动草稿

    例如我的就是 172.28.0.1,数据库可以通过命令或者可视化工具链接后继续新建或者使用启动容器时创建的数据库。

 注意

此系列文章中,我的所有配置文件都不会使用 ssl,因为我会用又拍云套用,在 cdn 端加入 ssl 证书。

这么做的原因主要是为了便于日后维护,这样就不需要每次证书过期后,申请很多证书然后在传入服务器,upyun 支持自动续期证书,因此个人使用的话我认为这是一个便捷高效的方案。

 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

除特别注明外,本站所有文章均基于CC-BY-NC-SA 4.0原创,转载请注明出处。
文章名称:《Docker 安装之 Nginx、PHP 环境和数据库》
文章链接:https://www.xpn.cc/399/fy.html
分享到: 更多 (0)

热门推荐

评论 抢沙发

登录

忘记密码 ?