Yêu cầu thg 6 20, 2019 8:58 SA 555 0 2
  • 555 0 2
0

Sử dụng docker với laravel

Chia sẻ
  • 555 0 2

Mình có tìm hiểu để sử dụng docker, cụ thể là dùng với project laravel. Mình có làm theo 1 số hướng dẫn nhưng khi truy cập vào thì nó vào trang mặc định của nginx chứ không vào welcome của laravel. Mình không biết là có đang config sai ở đâu không, mọi người xem giúp mình với

Dockerfile

FROM php:7.2-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 \
    nano \
    unzip \
    git \
    curl

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install extensions
RUN docker-php-ext-install 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

# Change current user to www
USER www

# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]

docker-compose.yml

version: '3'
services:

  #PHP Service
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: app
    restart: unless-stopped
    tty: true
    environment:
      SERVICE_NAME: app
      SERVICE_TAGS: dev
    working_dir: /var/www
    volumes:
       - ./:/var/www
       
  #Nginx Service
  webserver:
    image: nginx:alpine
    container_name: webserver
    tty: true
    ports:
      - "8080:80"
      - "443:443"
    volumes:
      - ./:/var/www
      - ./vhost.conf:/etc/nginx/sites-enabled/default.conf

vhost.conf

server {
  listen 8080;
  index index.php index.html;
  error_log  /var/log/nginx/docker.error.log;
  access_log /var/log/nginx/docker.access.log;
  root /var/www/public;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass app:9000;
    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;
  }
}
Avatar Do Diep @diepz
thg 8 1, 2019 7:03 SA

Sao không dùng laradock 😀

2 CÂU TRẢ LỜI


Đã trả lời thg 6 20, 2019 10:46 SA
Đã được chấp nhận
+3

Bạn đang dùng image nginx:alpine thì không có folder /etc/nginx/sites-enabled và nginx không đọc config từ folder này nhé bạn.

Folder /etc/nginx/sites-enabled thường chỉ có trên Ubuntu/Debian thôi, nó là một convention thôi không phải mặc định.

Đường dẫn đúng ở đây phải là: /etc/nginx/conf.d/default.conf

Bonus: làm sao để biết? Đơn giản là vào trong container kiểm tra thôi : D

docker-compose exec webserver sh
ls /etc/nginx
cat /etc/nginx/nginx.conf
Chia sẻ
Đã trả lời thg 6 20, 2019 9:25 SA
0

trong file vhost.conf kia là cơ bản, bạn chưa config đúng đường dẫn thư mục laravel

root /var/www/public; ?????

Bạn đã config /etc/hosts chưa đối vs linux còn đối với window: C:\Windows\System32\Drivers\etc

Chia sẻ
thg 6 20, 2019 9:55 SA

Cái này là file config ở ngoài để copy vào trong container mà liên quan gì đến /etc/hosts của hệ điều hành đâu 🤔

Avatar WheeBoo @quanghung97
thg 6 20, 2019 1:32 CH

@quankm1097 bình thường thì dùng domain ảo cần config hosts cho dễ dàng, mới public được ra ngoài.

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí