为了像我这样的人,想要在Heroku上发布一个采用Laravel+postgreSQL+Redis架构的个人开发Web服务,我为此提供了Docker选项

总结

我将介绍我个人为开发目的而构建的Docker开发环境。
简单概括如下:

建设内容

    • php-fpm

 

    • Nginx

 

    • postgreSQL

herokuではpostgreSQLがデフォルトのようなので一応postgreSQLにしています。MySQLでもできないことはないと思います。

redis

laravelでのセッション管理に使用します。predis不使用です。

其他

    • https-portalによるhttps化

 

    • xdebug設定

 

    gzip圧縮させたcssやjsファイルへの対応

执行环境

    • Windows 10 Pro

 

    Docker Deskptop for Windows (2.1.0.5)

GitHub仓库的模板

请留意

请参考其他人的qiita文章等,本文未提及有关Docker的基础知识。

文件的内容 de

目录结构

[laravel-project]
 ├── docker
 │  └── php
 │  │  └── Dockerfile
 │  │  └── php.ini
 │  └── web
 │     └── default.conf
 └── docker-compose.yml

当使用”laravel new [laravel-project]”等命令创建新项目时,”[laravel-project]”指的是新项目的目录名称。

Docker化的组合配置文件。

version: '3'
services:
  https-portal:
    image: steveltn/https-portal:1
    ports:
      - 80:80
      - 443:443
    depends_on:
      - web
    restart: always
    environment:
      DOMAINS: 'dockertest.com -> http://web:8000'
      STAGE: local
    volumes:
      - ssl-certs:/var/lib/https-portal
  web:
    image: nginx:1.15.6
    ports:
      - "8000:8000"
    depends_on:
      - app
    volumes:
      - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
      - .:/var/www/html
    command: [nginx, '-g', 'daemon off;']
  app:
    build: ./docker/php
    volumes:
      - ./docker/php/php.ini:/usr/local/etc/php/php.ini
      - .:/var/www/html
  db:
    image: postgres:10.1
    ports:
      - "5432:5432"
    environment:
      - "POSTGRES_USER=postgres"
      - "POSTGRES_PASSWORD=secret"
    volumes:
      - db-data:/var/lib/postgresql/data
  redis:
    image: redis:latest
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
volumes:
  ssl-certs:
  db-data:
  redis-data:

以下是php的释义:

FROM php:7.2-fpm
COPY php.ini /usr/local/etc/php/

# install composer
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
RUN apt-get update \
    && apt-get install -y git zip unzip vim libpq-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev

RUN docker-php-ext-install pdo_pgsql

RUN pecl install xdebug-2.9.8 && \
    docker-php-ext-enable xdebug

RUN pecl install redis && \
    docker-php-ext-enable redis

WORKDIR /var/www/html
post_max_size=10M
upload_max_filesize=10M

[date]
date.timezone="Asia/Tokyo"

[xdebug]
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9001

网络(nginx)

server {
    listen 8000;
    server_name dockertest.com;

    gzip on;
    gzip_types image/png image/gif image/jpeg text/javascript text/css;
    gzip_min_length 1000;
    gzip_proxied any;
    gunzip on;

    root  /var/www/html/public; 
    index index.php index.html index.htm;

    client_max_body_size 10m;

    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   app:9000;
        fastcgi_index  index.php;

        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME /var/www/html/public/index.php;
        fastcgi_param  PATH_INFO $fastcgi_path_info;
    }
}

其他

Redis的配置

由于Heroku Redis的连接信息REDIS_URL可能会发生更改,因此我们提前做好处理。
在Heroku上使用Laravel的Redis- Qiita
使用Redis存储会话的Laravel5.5(Heroku)- Qiita

<?php

if (getenv('REDIS_URL')) {
    $url = parse_url(getenv('REDIS_URL'));

    putenv('REDIS_HOST='.$url['host']);
    putenv('REDIS_PORT='.$url['port']);
    putenv('REDIS_PASSWORD='.$url['pass']);
}

use Illuminate\Support\Str;

环境

随着Docker的设置,将修改env文件。

DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432
DB_DATABASE=postgres
DB_USERNAME=postgres
DB_PASSWORD=secret

SESSION_DRIVER=redis

# REDIS_HOST=redis
# REDIS_PASSWORD=null
# REDIS_PORT=6379
REDIS_URL=redis://hoge:null@redis:6379

主持人

通过运行ipconfig命令,将其设置为显示在以太网适配器vEthernet (DockerNAT)->IPv4地址中的IP地址。

在进行Google的OAuth登录执行确认时,我发现无法在测试用顶级域名(例如.test)上进行设置,所以我选择了使用.com域名。

# [DockerNAT IPv4アドレス] [https-portalで設定したドメイン]
127.0.75.1 dockertest.com

启动.json文件

编辑器或IDE也会进行xdebug的配置。
以下是在vscode上的配置示例。
通过这样做,您就可以设置vscode上的断点并进行调试。

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for XDebug",
      "type": "php",
      "request": "launch",
      "port": 9001,
      "log": true,
      "pathMappings": {
        "/var/www/html": "${workspaceFolder}"
      }
    }
  ]
}

执行 (Shí

使用以下命令启动Docker容器。
(我是在安装了Docker扩展的VSCode中按下F1键来启动的)

docker-compose  up -d --build

只需要将浏览器连接到dockertest.com(通过https-portal设置的域名),就可以了。

最后

以下是我常用的docker内容。
我认为它并不适合所有人,但你可以完全复制它,或者根据自己的需要添加或自定义它。

在下面提供的链接中可以参考。

使用docker-compose创建Nginx + Laravel5.8 (PHP7.3) + PostgreSQL环境 – Qiita
使用https-portal将现有的docker环境转为https | RE:ENGINES
在Apache(Heroku)+laravel+vue.js环境下通过gzip压缩提高网站性能 – Qiita

广告
将在 10 秒后关闭
bannerAds