【发布时间】:2022-01-09 04:03:49
【问题描述】:
我在配置我的 Laravel 应用程序以在我的网络服务器上运行时遇到问题。
问题是我收到了 Welcome to nginx!使用浏览器时页面而不是我的 laravel 应用程序。
设置如下
- 这是在 Ubuntu 20.04 LTS 上运行的服务器
- nginx服务直接安装在机器上(不使用docker)
- 我有一个 docker-compose 来运行 3 个容器:postgres(数据库)+ keycloak(身份验证服务器)+ 我的 laravel 应用程序。
Keycloak 和 postgres db 运行了几个月。
Laravel 应用路径 -> /var/www/dev.mycompany.com/
Laravel Dockerfile -> /var/www/dev.mycompany.com/Dockerfile
FROM php:8.0-fpm
# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www.dev.mycompany.com
# Set working directory
WORKDIR /var/www.dev.mycompany.com
# Install dependencies
RUN apt update && apt install -y \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
curl
# Clear cache
RUN apt clean && rm -rf /var/lib/apt/lists/*
# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
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.dev.mycompany.com
# Change current user to www
USER www
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]
Nginx - Laravel 配置路径:/etc/nginx/sites-available/www/dev.mycompany.com HTTP 尚未配置,我只是在编写规则以重定向所有无 https 请求之前使用 443 进行测试
server {
listen 443;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/dev.mycompany.com;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#fastcgi_pass dev.mycompany.com:9000;
fastcgi_pass unix:/var/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;
gzip_static on;
}
}
docker-compose.yml - 路径:srv/
version: '3.1'
volumes:
postgres_data:
driver: local
services:
postgres:
image: postgres:latest
restart: unless-stopped
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: **********************
POSTGRES_PASSWORD: **********************
networks:
- app-network
keycloak:
image: jboss/keycloak:latest
restart: unless-stopped
environment:
DB_VENDOR: POSTGRES
DB_ADDR: postgres
DB_DATABASE: keycloak
DB_USER: **********************
DB_PASSWORD: **********************
KEYCLOAK_USER: ************
KEYCLOAK_PASSWORD: **********************
PROXY_ADDRESS_FORWARDING: "true"
ports:
- 8080:8080
depends_on:
- postgres
networks:
- app-network
app-backend:
image: digitalocean.com/php
build:
context: .
dockerfile: /var/www/dev.mycompany.com/Dockerfile
restart: unless-stopped
container_name: web-backend
tty: true
environment:
SERVICE_NAME: app
SERICE_TAGS: dev
working_dir: /var/www/dev.mycompany.com
volumes:
- /var/www/dev.mycompany.com:/var/www/dev.mycompany.com
- ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
networks:
- app-network
networks:
app-network:
driver: bridge
非常感谢提前
不是盖尔
【问题讨论】:
-
为什么会这样:
#fastcgi_pass dev.mycompany.be:9000;被注释掉了? Dockerfile 运行php-fpm并公开端口 9000。由于所有容器都在同一台机器上运行,因此 php 容器应该可以通过 localhost 访问fastcgi_pass localhost:9000 -
你说得对,我已经像这样更改了我的 nginx 配置,但是 没有任何变化。仍然获得 Nginx 欢迎页面。
fastcgi_pass localhost:9000; #fastcgi_pass unix:/var/run/php/php8.0-fpm.sock; -
对 Dockefile 进行了更正
COPY composer.lock composer.json /var/www/dev.mycompany.com WORKDIR /var/www/dev.mycompany.com更改/var/www.dev.mycompany.com to /var/www/dev.mycompany.com但仍然......没有任何变化进入容器我检查了应用程序文件是否在 /var/www/dev .mycompany.com 并且 Laravel 应用程序运行正常。该应用程序已经构建并生成了密钥,...... php artisan 工作正常...... -
配置更改后,是否重新加载了nginx?
-
是的,我做到了。但最终还是从头再来。
标签: laravel docker nginx docker-compose