不懂就问,在本地开发使用Docker如何配置nginx文件

因为没有百度到答案所以来此提问。
1.最近在用docker搭建环境,我有很多项目,代码都是放在本机上,然后nginx是用的docker容器,我要在nginx里配置项目的conf文件,Root项该如何配置路径呢,如果是做数据卷映射的话,那岂不是把所有项目都映射进去了?还是有其他解决方法
2.目前我重载nginx服务是通过docker exec进入nginx容器内部然后nginx -s reload,在容器外有方法重载吗(重启docker容器的话nginx服务会停止一会吧)?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 9
slowlyo
docker exec 容器 bash -c "echo Hello~"

在容器外执行命令

1个月前 评论

容器外重启nginx

docker exec {容器名称or容器ID} nginx -s reload
1个月前 评论

直接重启容器完事了

1个月前 评论

推荐使用 gitee.com/xiaoyucc521/dnmp ,文档比较全

1个月前 评论

如果是fpm项目或者静态文件那只能映射,如果本地开发Laravel,都没必要用到nginx

1个月前 评论

映射是必然的,而且项目映射到 Nginx 容器和 FPM 容器中的目录最好是一致的,例如:

docker-compose.yaml 配置:

services:
  nginx:
    image: nginx:${NGINX_IMAGE_TAG}
    restart: always
    volumes:
      - ../services/nginx:/etc/nginx
      - ${PROJECT_PATH_IN_HOST}:${PROJECT_PATH_IN_CONTAINER}
    hostname: nginx
    container_name: nginx
    environment:
      - TZ=${TZ}
  fpm:
    image: payssion/php:${PHP_IMAGE_TAG}
    build:
      context: ../services/fpm
      dockerfile: Dockerfile
      args:
        - TAG=8.1-fpm
        - WORKDIR=${PROJECT_PATH_IN_CONTAINER}
    restart: always
    volumes:
      - ../services/fpm/etc:/usr/local/etc
      - ${PROJECT_PATH_IN_HOST}:${PROJECT_PATH_IN_CONTAINER}
    hostname: fpm
    working_dir: ${PROJECT_PATH_IN_CONTAINER}
    container_name: fpm

.env 文件配置

# Project path in host
PROJECT_PATH_IN_HOST=/projects

# Project path in container
PROJECT_PATH_IN_CONTAINER=/var/www

项目的 Nginx 配置文件:

server {
    listen 80;
    server_name admin.local;

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name admin.local;

    set $base /var/www/admin;
    root $base/public;
    index index.php;

    access_log off;

    include components/ssl.conf;

    include components/security.conf;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # additional config
    include components/general.conf;

    # handle .php
    location ~ \.php$ {
        root $base/public;
        fastcgi_pass fpm:9000;
        include components/fastcgi.conf;
    }
}

我们本地开发也是强制 HTTPS,避免在业务层中做各种判断……

1个月前 评论
sanders

目前本地开发用 sail 所以没 nginx 什么事。但如果要用的话,建议尽量本地一个 nginx 容器挂所有项目,毕竟能节省资源。至于重载 nginx 的问题,反正也不是生产环境,直接删了容器重新创建最简单粗暴。

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!