快速开始

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同路径),并写入你的内容

    # 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 的默认配置),并写入如下内容

      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并写入如下内容

      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 地址,并填入。

    image-20220327000351433

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

注意

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

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