为什么我的 laravel 资源没有在 vitejs 中使用 HTTPS

问题描述 投票:0回答:1

我正在使用 vitejs 开发一个新的 laravel 11 应用程序,并尝试使用 Docker 部署它。一切在本地运行良好(使用 Docker Desktop),实时部署本身正在运行,但我的资产(css 和 js)是使用 HTTP 而不是 HTTPS 调用的,这会导致 (blocked:mixed-content) 错误。

该部分由 vitejs 处理,应该是自动的。我之前使用相同的配置部署了 laravel 8 项目,并且使用 HTTPS 调用资产。我的 Docker 配置中唯一改变的是我使用 php 8.2 而不是 8.1...vitejs 配置完全相同。

我尝试了几次更改,但无法使其发挥作用

我的 vite.config.js 文件:

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';

export default defineConfig({
    plugins: [
        laravel({
            input: [
                'resources/sass/style.scss',
                'resources/js/app.js',
            ],
            refresh: true,
        }),
    ],
    // base: process.env.APP_URL || '/',
    // server: {
    //     https: true,
    // },
    build: {
        manifest: true,
        outDir: 'public/build',
        emptyOutDir: true,
        rollupOptions: {
            output: {
                assetFileNames: '[name]-[hash][extname]',
            },
        },
    },
});

我尝试过使用和不使用

base
server
build
。一切都没有改变。

我的.env 文件:

APP_NAME=Laravel
APP_ENV=production
APP_KEY=setbutnotshown
APP_DEBUG=true
APP_TIMEZONE=UTC
APP_URL=https://myapp.example.com

除了数据库数据正确外,其余部分没有改变。我可以运行迁移。

我的 Dockerfile :

# Base image
FROM php:8.2-apache

# Set working directory in the container
WORKDIR /var/www/html

# Install system dependencies
RUN apt-get update && apt-get install -y \
    git \
    g++ \
    curl \
    libzip-dev \
    libjpeg-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    libpng-dev \
    libwebp-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip \
    && rm -rf /var/lib/apt/lists/*

# Configure GD extension
RUN docker-php-ext-configure gd \
    --with-freetype=/usr/include/ \
    --with-jpeg=/usr/lib/x86_64-linux-gnu \
    --with-webp=/usr/lib/x86_64-linux-gnu

# Install PHP extensions
RUN docker-php-ext-install -j$(nproc) gd pdo_mysql mbstring exif pcntl bcmath zip

# Configure Apache
RUN echo "ServerName laravel-app.local" >> /etc/apache2/apache2.conf
ENV APACHE_DOCUMENT_ROOT=/var/www/html/public
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
RUN a2enmod rewrite headers

# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Install Node.js (latest LTS version)
RUN apt-get update && curl -sL https://deb.nodesource.com/setup_18.x | bash - \
    && apt-get install -y nodejs \
    && npm install -g npm

# Copy the application files and set permissions
COPY --chown=www-data:www-data . /var/www/html

# Install PHP dependencies
RUN composer install --no-dev --optimize-autoloader

# Install Node.js dependencies and build assets
RUN npm install
RUN npm run build

# Set proper permissions for storage and bootstrap cache
# RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache
RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache /var/www/html/public

# Expose port 80
EXPOSE 80

# Start Apache in foreground
CMD ["apache2-foreground"]

我的docker-compose.yml

version: '3.8'

services:
  my-app:
    build:
      context: .
    container_name: my-app
    ports:
      - "9005:80"
    volumes:
      - .:/var/www/html
      - ./storage:/var/www/html/storage
      - ./bootstrap/cache:/var/www/html/bootstrap/cache
    env_file:
      - .env

我尝试过使用和不使用

volumes
,但也没有任何变化。

我检查了 apache 配置文件,一切都正确。 SSL、服务器名称...

docker vite laravel-11 mixed-content
1个回答
0
投票

我找到了解决方案...我在我的

ASSET_URL
文件中的
APP_URL
下面添加了一行
.env
,现在它可以工作了。

APP_URL=https://myapp.example.com
ASSET_URL=https://myapp.example.com
© www.soinside.com 2019 - 2024. All rights reserved.