1.安装
# cd /usr/local/docker_compose/
#创建文件夹
mkdir myworkspace && cd myworkspace
#下载通用配置
git clone https://github.com/laradock/laradock.git
2.文件结构说明
关键文件
- .env 用于系统的所有环境配置,包括对外映射
- workspace容器 所有环境命令执行与安装的总入口。
- nginx,php-fpm ,mysql 执行php需要的环境
3.修改.env
cd laradock
# 复制demo配置
cp .env-example .env
# vim
# 往上跳一级,在myworkspace目录下
APP_CODE_PATH_HOST=../
#实际nginx 和 php用到的路径 是相对路径,要加上上面的APP_CODE_PATH_HOST
APP_CODE_PATH_CONTAINER=/var/www
#改数据库版本
- MYSQL_VERSION=latest
+ MYSQL_VERSION=5.7
# 存放数据的目录
- DATA_PATH_HOST=~/.laradock/data
+ DATA_PATH_HOST=./data
4.执行构建 启动
- 建议分开多个远程执行,提供下载速度
docker-compose build nginx
docker-compose build php-fpm
docker-compose build workspace
- 直接up 启动+构建
docker-compose up -d nginx mysql redis
# 注意 不要直接 不跟具体的镜像启动,会导致下载所有项目的images
执行中安装下载的问题
参考官方说明 github.com/laradock/la…
1.修改源
# 打开.env 文件
vi .env
# 开启�ubuntu国内源
CHANGE_SOURCE=true
# composer镜像源
WORKSPACE_COMPOSER_REPO_PACKAGIST=https://mirrors.aliyun.com/composer/
# nvm镜像源
WORKSPACE_NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
# npm镜像源
WORKSPACE_NPM_REGISTRY=https://registry.npmmirror.com
# workspace 下载慢
#在 laradock\php-fpm\Dockerfile RUN 和 apt-get update 中间加入
RUN set -xe; \
find /etc/apt/sources.list.d/ -type f -name "ondrej-ubuntu-php-xenial.list" -exec sed -i.bak -r 's#deb(-src)?\s*http(s)?://ppa.launchpad.net#deb\1 https\2://launchpad.proxy.ustclug.org#ig' {} \; && \
apt-get update -yqq && \
2.nvm下载不了
workspace 的 Dockerfile 修改
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
改为
curl -o- https://gitee.com/zhushaolong/zhubook/raw/master/install.sh | bash
5.本地项目上传配置与修改nginx配置
1.本地
cd /usr/local/docker_compose/myworkspace/
# 上传自己的项目如 myproject 到myworkspace
cp -r ./myproject /usr/local/docker_compose/myworkspace/
2.容器composer 创建测试项目
# 进入工作空间容器
docker-compose exec workspace bash
# 路径默认在 /var/www/
# 修改源
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/
# 创建项目
composer create-project laravel/laravel demo
# 安装库
composer install
# 如果提示错误 You can also run `php --ini`.. you can run Composer with `--ignore-platform-req=ext-mcrypt`
composer install --ignore-platform-req=ext-mcrypt #忽略错误
# 生成秘钥
php artisan key:generate # 生成后 .env会自动修改 APP_KEY=base64:OSCiRdGmmeZRDFqlX6D5XdCDbyhRjd4bULF5y8oiGbg=
# 调整app.php里的 key
cd config
vim app.php
'key' => env('APP_KEY'), # APP_KEY改成 生成的key
建议优先修改 .env 中的APP_KEY
composer和 前端node的 npm很类似,也有composer.json,也会下载依赖的库文件放在vendor
composer.json
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=5.6.4",
"barryvdh/laravel-cors": "^0.9.2",
"intervention/image": "^2.3",
"laravel/framework": "5.4.*",
"laravel/tinker": "~1.0",
"mews/captcha": "^2.1",
"overtrue/laravel-ueditor": "~1.0",
"qiniu/php-sdk": "^7.1"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~5.7"
},
"autoload": {
"classmap": [
"database",
"vendor/phptree/PhpTree.php",
"vendor/verify/Verify.php"
],
"psr-4": {
"App\\": "app/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"scripts": {
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall",
"php artisan optimize"
],
"post-update-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
"php artisan optimize"
]
},
"config": {
"preferred-install": "dist",
"sort-packages": true
}
}
vendor生成文件
6.配置nginx 与相关配置
cd laradock/nginx/sites
cp laravel.conf.example laravel.conf
laravel.conf
#server {
# listen 80;
# server_name laravel.com.co;
# return 301 https://laravel.com.co$request_uri;
#}
server {
listen 80;
listen [::]:80;
# For https
# listen 443 ssl;
# listen [::]:443 ssl ipv6only=on;
# ssl_certificate /etc/nginx/ssl/default.crt;
# ssl_certificate_key /etc/nginx/ssl/default.key;
server_name laravel.test;
root /var/www/myproject/public; # 主要是修改这里 laravel -> myproject
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass php-upstream;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fixes timeouts
fastcgi_read_timeout 600;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
location /.well-known/acme-challenge/ {
root /var/www/letsencrypt/;
log_not_found off;
}
error_log /var/log/nginx/laravel_error.log;
access_log /var/log/nginx/laravel_access.log;
}
修改.env的 mysql 与 redis
redis
REDIS_CLIENT=predis
REDIS_HOST=redis # 改为link方式
REDIS_PASSWORD=null
REDIS_PORT=6379
mysql
MYSQL_DATABASE=default
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
8. php打开错误提示 查看配置
数据库连接注意:
默认读取的是.env 里面的配置,不是config/database.php 里面的配置
laravel 打开配置 debug 提示
也是在 .env 中的 APP_DEBUG=true ,不在config/app.php
laravel项目
一般在所在项目的storage/logs、/error.log
普通php项目
修改 php.ini 一般在 /usr/local/php/etc/php.ini 或者 /usr/local/etc/php/php.ini
- error_reporting = E_ALL #将会向PHP报告发生的每个错误
- display_errors = On #满足上面条件会显示log
- log_errors = On #开启错误日志
- log_errors_max_len = 1024 #设置每个日志项的最大长度
- error_log =/usr/local/error.log #指定产生的 错误报告写入的日志文件位置
查看配置
上传test.php 到public文件夹下
<?php
phpinfo();
访问 http://ip:端口/test.php 下拉会显示已经安装的插件
9.laravel场景异常
1. # Whoops, looks like something went wrong.返回500 ,无其他信息
需要给 storage文件夹开通读写权限
chmod -R 777 storage/
由于日志也在 storage/logs,此时查看日志
cd storage/logs/
tail -f 100 laravel.log
2.local.ERROR: ErrorException: file_put_contents(...): failed to open stream: No such file or directory
local.ERROR: ErrorException: file_put_contents(/data/php/www/myproject/storage/framework/sessions/mx6z9D0ed1fB7JLoozRVIj9uJNP6e1OZCd1kOguk): failed to open stream: No such file or directory
这是因为php有缓存机制,所以会直接读取上一次部署的/storage/framework/sessions/文件夹信息
使用命令清空即可
docker exec -it laradock_workspace_1 bash
# 进行项目根目录
cd myproject
# 清除config
php artisan config:clear
# 非必要
php artisan cache:clear
php artisan config:cache
注意点
修改源
- nginx 使用的是 Alpine Linux
- php-fpm 使用的是 debian
- workspace 使用的是ubuntu
重新构建
-
如果你修改docker-compose.yml, .env 或者任何 dockerfile 文件, 你必须重新构建你的容器。
-
可以单独构建修改对应的镜像
docker-compose build nginx
workspace权限问题,使用laradock用户
docker-compose exec --user=laradock workspace bash
php artisan migrate
nginx reload
docker-compose exec nginx nginx -t
docker-compose exec nginx nginx -s reload
其他
# 完全重新构建
docker-compose build --no-cache {container-name}
# 查看日志
docker-compose logs -f {container-name}
其他异常:
1.Whoops, looks like something went wrong.
第一步把config/app.php文件内'debug' => env('APP_DEBUG', false),改成'debug' => env('APP_DEBUG', true),
2.No supported encrypter found.The cipher
我们注意到No supported encrypter found.The cipher and / or key length are invalid.这句,所以我们把本地.env文件的APP_KEY值复制下来修改config/app.php内
'key' => env('APP_KEY','base64:R+8tyPpcbK6ELMheXa4D8hsxdVvXDilVUSFCFqaH8vY='),
这个APP_KEY也可通过php artisan key:generate生成;
3. 数据库异常
修改数据库配置config/database.php
4.当登录后台总管理员时没有问题,但是登录添加的管理员时又报错
缓存问题,修改config/cache.php文件,
default' => env('CACHE_DRIVER', 'file')
改为
'default' => env('CACHE_DRIVER', 'array'),