Laravel 애플리케이션용 도커 컨테이너를 시작하려고 합니다.
편집하다
Dockerfile.nginx
FROM nginx:alpine
COPY ./nginx/my-site-config.conf /etc/nginx/conf.d/default.conf
nginx/my-site-config.conf
server {
listen 8027;
server_name localhost;
# handle .php
location ~ \.php$ {
# 404
try_files $fastcgi_script_name =404;
# default fastcgi_params
include fastcgi_params;
# fastcgi settings
fastcgi_pass php-fpm-container:9000;
fastcgi_index index.php;
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
# fastcgi params
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$base/:/usr/lib/php/:/tmp/";
}
}
docker-compose.yml
#Nginx Service <-- doesn't work
# webserver:
# build:
# context: .
# dockerfile: Dockerfile.nginx
# container_name: webserver
# restart: unless-stopped
# tty: true
# ports:
# - "8027:80"
# - "443:443"
# networks:
# - app-network
# works
webserver:
image: nginx:alpine
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "8027:80"
- "443:443"
networks:
- app-network
주석 처리된 코드가 시작되지 않습니다:-
주석 처리되지 않은 코드를 사용하고 nginx:alpine
이미지로 제공 - 서버 호스팅 nginx 스플래시 화면. 내 문제가 있는 것 같습니다 Dockerfile.nginx
.
답변1
nginx:alpine
nginx 구성 확인
docker run -it --rm nginx:alpine /bin/sh
/ # cd /etc/nginx
/etc/nginx # ls -l
total 44
drwxr-xr-x 2 root root 24 Dec 17 15:01 conf.d
-rw-r--r-- 1 root root 1077 Dec 15 14:55 fastcgi.conf
-rw-r--r-- 1 root root 1007 Dec 15 14:55 fastcgi_params
-rw-r--r-- 1 root root 2837 Dec 15 14:55 koi-utf
-rw-r--r-- 1 root root 2223 Dec 15 14:55 koi-win
-rw-r--r-- 1 root root 5231 Dec 15 14:55 mime.types
lrwxrwxrwx 1 root root 22 Dec 17 15:01 modules -> /usr/lib/nginx/modules
-rw-r--r-- 1 root root 646 Dec 15 14:55 nginx.conf
-rw-r--r-- 1 root root 636 Dec 15 14:55 scgi_params
-rw-r--r-- 1 root root 664 Dec 15 14:55 uwsgi_params
-rw-r--r-- 1 root root 3610 Dec 15 14:55 win-utf
이것은 기본 nginx.conf입니다.
/etc/nginx # cat nginx.conf
user nginx;
worker_processes auto;
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;
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;
}
폴더 안에는 conf.d
기본 서버 구성이 있습니다
/etc/nginx # ls -l conf.d/
total 4
-rw-r--r-- 1 root root 1093 Dec 15 14:55 default.conf
아주 기본적인 서버 부분이 있습니다
/etc/nginx # grep -vE " *#|^ *$" conf.d/default.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
보시다시피 정적 컨텐츠만 서버하도록 구성되어 있고, *.php
지원되는 php-fpm으로 요청을 전달하는 부분은 없습니다.
일반적으로 이 파일을 교체해야 합니다(또는 더 많은 제어가 필요한 경우 완전히 덮어써야 합니다 nginx.conf
).
최소한 PHP 요청을 백엔드로 리디렉션하려면 서버 구성에 섹션이 필요합니다.
# handle .php
location ~ \.php$ {
# 404
try_files $fastcgi_script_name =404;
# default fastcgi_params
include fastcgi_params;
# fastcgi settings
fastcgi_pass php-fpm-container:9000; # <--- this is the PHP-FPM container
fastcgi_index index.php;
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
# fastcgi params
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$base/:/usr/lib/php/:/tmp/";
}
이 웹사이트를 이용하시면 됩니다DO의 NGINX 구성 도구애플리케이션의 전체 구성을 위한 좋은 시작점을 만드는 데 도움이 되며, 이후 nginx:apline
컨테이너에서 이를 재정의할 수 있습니다.
nginx 컨테이너와 php 컨테이너 모두 PHP 애플리케이션 파일에 액세스할 수 있어야 합니다.
편집 1
맞춤 nginx 이미지
FROM nginx:alpine
# If you have a bundle of config created by DO config file,
# you can copy them all to overwrite all the settings.
# or use
# to overwrite a single file
# COPY my-site-config.conf /etc/nginx/conf.d/default.conf
nginx 이미지의 사용자 정의 버전을 사용하려면 docker-compose를 업데이트하세요.
version: '3'
services:
#PHP Service
app:
build:
context: .
dockerfile: Dockerfile
image: digitalocean.com/php
container_name: app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www
networks:
- app-network
#Nginx Service
webserver:
build:
context: .
dockerfile: Dockerfile.nginx
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "8027:80"
- "443:443"
networks:
- app-network
편집 2
Docker 작동 방식과 다중 컨테이너 환경에서 작업하는 방법에 대한 몇 가지 핵심 부분이 누락된 것 같습니다. 우선 다음과 같은 작업 템플릿으로 시작하는 것이 좋습니다.하나(바인드 마운트 지점이 무엇을 의미하는지 이해하려면 모든 페이지를 읽으십시오.) 바인드 마운트를 통해 app
(PHP 컨테이너) webserver
파일을 보고 액세스할 수 있기 때문에 이 템플릿은 새 컨테이너를 구축하지 않고도 PHP 구성 및 nginx를 재정의할 수 있는 옵션도 제공합니다.
version: '3'
services:
#PHP Service
app:
build:
context: .
dockerfile: Dockerfile
image: digitalocean.com/php
container_name: app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www
volumes:
- ./:/var/www
- ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
networks:
- app-network
#Nginx Service
webserver:
image: nginx:alpine
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
volumes:
- ./:/var/www
- ./nginx/conf.d/:/etc/nginx/conf.d/
networks:
- app-network
#MySQL Service
db:
image: mysql:5.7.22
container_name: db
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: your_mysql_root_password
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- dbdata:/var/lib/mysql/
- ./mysql/my.cnf:/etc/mysql/my.cnf
networks:
- app-network
#Docker Networks
networks:
app-network:
driver: bridge
#Volumes
volumes:
dbdata:
driver: local