为了像我这样的人,想要在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