【发布时间】:2021-06-25 18:36:56
【问题描述】:
我正在使用 nginx-proxy-automation 运行我的 php 应用程序,该应用程序是使用 CodeIgniter 4 编写的,应用程序结构如下:
php-application
docker
php-fpm
config
php.ini
Dockerfile
src
node_modules
app
public
tests
vendor
writable
.env
composer.json
package.json
spark
docker-comopse.yml
index.php 文件位于public 文件夹中。
php-application 的 docker-compose.yml 包含以下内容:
nginx
nginx-proxy
docker-compose.yml
php-application
docker-compose.yml
在php-application/docker-compose.yml 里面我有这个:
version: '3.7'
services:
php-fpm:
container_name: boilerplate_app
restart: always
build:
context: .
dockerfile: ./docker/php-fpm/Dockerfile
volumes:
- ./src:/var/www/html
environment:
# NGINX-PROXY ENVIRONMENT VARIABLES: UPDATE ME
- VIRTUAL_HOST=mysite.com
- VIRTUAL_ROOT=/var/www/html/public
- VIRTUAL_PORT=9000
- VIRTUAL_PROTO=fastcgi
- LETSENCRYPT_HOST=mysite.com
- LETSENCRYPT_EMAIL=info@mysite.com
- NETWORK=proxy
# /END NGINX-PROXY ENVIRONMENT VARIABLES
ports:
- '9000:80'
expose:
- 9000
networks:
- proxy
database:
container_name: boilerplate_db
restart: always
build:
context: ./docker/database
environment:
- MYSQL_DATABASE=boilerplate
- MYSQL_USER=user
- MYSQL_PASSWORD=secret
- MYSQL_ROOT_PASSWORD=secret
volumes:
- ./docker/database/data.sql:/docker-entrypoint-initdb.d/data.sql
phpmyadmin:
container_name: boilerplate_phpmyadmin
image: phpmyadmin/phpmyadmin
restart: always
ports:
- 8088:80
environment:
- PMA_HOST=database
- MYSQL_USER=user
- MYSQL_PASSWORD=secret
- MYSQL_ROOT_PASSWORD=secret
depends_on:
- database
networks:
proxy:
external:
name: proxy
基本上我有三个服务:
- php-fpm:将应用程序文件挂载到
/var/www/html文件夹中,在environment部分,我将VIRTUAL_PORT指定为9000,因为php-fpm运行在fastcgi之上。然后我链接了proxy网络,这是您的图像的网络。 - 数据库:在应用网络中运行
- phpmyadmin:在应用网络中运行
php-fpm 的 Dockerfile 内容包含以下内容:
FROM php:8.0.2-fpm-alpine
WORKDIR /var/www/html
RUN docker-php-ext-install pdo_mysql
RUN docker-php-ext-install mysqli
RUN apk add icu-dev
# Install intl
RUN docker-php-ext-configure intl && docker-php-ext-install intl
# Install curl
RUN apk add --update libzip-dev curl-dev &&\
docker-php-ext-install curl && \
apk del gcc g++ &&\
rm -rf /var/cache/apk/*
COPY docker/php-fpm/config/php.ini /usr/local/etc/php/
# Install composer
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
# Install nodejs
RUN apk add --update nodejs nodejs-npm
RUN npm install gulp-cli -g
RUN npm install
COPY src src/
CMD ["php-fpm"]
EXPOSE 9000
当我使用docker-compose up --build -d 启动容器时,当我访问mysite.com 时收到此消息(我已隐藏真实域以保护隐私):
找不到文件。
使用sudo docker logs -f nginx 检查nginx 日志我得到:
[error] 30#30: *39 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 2.38.140.109, server: mysite.com, request: "GET / HTTP/2.0", upstream: "fastcgi://172.28.0.7:9000", host: "mysite.com"
mysite.com 2.38.140.109 - - [29/Mar/2021:17:52:31 +0000] "GET / HTTP/2.0" 404 16 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63"
为了解决这个问题,我将nginx.tmpl 更新为this 一个。
现在的问题是,当我加载我的网站时,所有静态文件(如 js/image/css)都返回 404。
我能做些什么来解决这个问题?
【问题讨论】:
-
php-application/docker-compose.yml环境部分是VIRTUAL_ROOT=/var/www/html,但你说它是/var/www/html/public。你确定你的php-application/docker-compose.yml吗?如果你让nginx从/var/www/html/执行一个index.html看看它是否工作正常呢? -
执行容器,然后
tail /var/log/nginx/error.log查看错误。之前,运行ls -l /var/log/nginx/error.log。如果它指向stderr,请删除此文件并运行nginx -s reload并再次运行您的站点,然后运行tail -f ...以查看错误 -
检查
/etc/resolve.conf。好像有解决问题。检查您的主机和容器。 -
查看此链接:community.letsencrypt.org/t/…,如果它解决了您的问题,请告诉我
-
您也可以在您的主机中使用这一行
nameserver 8.8.8.8创建/etc/resolve.conf,然后重新启动您的主机的网络并再次尝试您的任务.
标签: php docker nginx docker-compose jwilder-nginx-proxy