Vic*_*tor 6 php laravel docker docker-compose
我正在尝试在本地计算机上设置一个由 caddy + PHP 组成的开发环境。
docker-compose.yaml:
version: '3'
services:
app:
build:
context: .
container_name: app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
volumes:
- ./:/var/www
- ./docker/php/local.ini:/usr/local/etc/php/conf.d/local.ini
webserver:
image: caddy
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
volumes:
- ./:/srv
- ./docker/caddy/Caddyfile/:/etc/caddy/Caddyfile
db:
image: mysql:8.0
container_name: db
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_USER: pingr
MYSQL_DB: pingr
MYSQL_PASSWORD: pingr
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
driver: local
Run Code Online (Sandbox Code Playgroud)
应用程序服务的 Dockerfile:
FROM php:7.4-fpm
# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/
# Set working directory
WORKDIR /var/www
# Install dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
curl \
libzip-dev \
libicu-dev
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install extensions
RUN docker-php-ext-install pdo_mysql zip exif pcntl intl
RUN docker-php-ext-configure gd --with-freetype --with-jpeg
RUN docker-php-ext-install gd
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
# Copy existing application directory contents
COPY . /var/www
# Copy existing application directory permissions
COPY --chown=www:www . /var/www
# Change current user to www
USER www
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]
Run Code Online (Sandbox Code Playgroud)
球童文件:
:80 {
root * /srv/public
php_fastcgi app:9000
file_server /uploads/*
encode gzip zstd
}
Run Code Online (Sandbox Code Playgroud)
当我打开 http://localhost 时,这会导致“找不到文件”。
我 100% 确定问题是因为 caddyfile 中的 root 以及应用程序和网络服务器服务中的卷不同。
当我让它们相同时,看起来好像有效。而且,我选择哪条路并不重要,我可以拥有/var/bar
例如。
但后来我不明白它是如何工作的。
在球童图像中,他们说工作目录是/srv
. 据我所知,这是应该放置站点文件的地方。
在 Caddyfile 中,我指定 Caddy 应该查看/srb/public
(因为我使用 Laravel)..
在 php-fpm 图像中,他们说工作目录是/var/www
. 这意味着..我不确定这是什么意思。如果我不使用 Docker,那么在我的本地计算机中我将拥有 caddy + php,只有 caddy“知道”源 .php 文件所在的位置。如果请求需要 .php 文件,Caddy 会将其代理给 php。也许我根本不需要这里的卷?
我很难理解同样的概念。我觉得:
Caddyfile
说文档根目录是/srv
,因此从该目录提供静态文件,并且您需要将项目(公共)目录绑定挂载到 caddy 服务DOCUMENT_ROOT
(设置为/srv
)和SCRIPT_FILENAME
(设置为/srv/index.php
)..这就是为什么您需要将项目公共目录也绑定安装到 php 服务,但/srv
不是绑定到 /var/www
.
归档时间: |
|
查看次数: |
2367 次 |
最近记录: |