-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlaravel.html
153 lines (128 loc) · 38.9 KB
/
laravel.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Laravel 最佳实践 | Docker LNMP Docs</title>
<meta name="generator" content="VuePress 1.7.1">
<meta name="description" content="">
<link rel="preload" href="/assets/css/0.styles.4bdbd8d9.css" as="style"><link rel="preload" href="/assets/js/app.209f2259.js" as="script"><link rel="preload" href="/assets/js/2.8af6cdaa.js" as="script"><link rel="preload" href="/assets/js/56.b6a02619.js" as="script"><link rel="prefetch" href="/assets/js/10.be6825a7.js"><link rel="prefetch" href="/assets/js/100.03d20cb7.js"><link rel="prefetch" href="/assets/js/101.e786fe82.js"><link rel="prefetch" href="/assets/js/102.6c9d2de9.js"><link rel="prefetch" href="/assets/js/103.93d73ab5.js"><link rel="prefetch" href="/assets/js/104.9e50d9a7.js"><link rel="prefetch" href="/assets/js/105.f3f9432d.js"><link rel="prefetch" href="/assets/js/11.5ace5492.js"><link rel="prefetch" href="/assets/js/12.755ab736.js"><link rel="prefetch" href="/assets/js/13.3f1cae5e.js"><link rel="prefetch" href="/assets/js/14.77b9cd63.js"><link rel="prefetch" href="/assets/js/15.e1d177bf.js"><link rel="prefetch" href="/assets/js/16.dfd1de0f.js"><link rel="prefetch" href="/assets/js/17.1b359d8a.js"><link rel="prefetch" href="/assets/js/18.9269c7d7.js"><link rel="prefetch" href="/assets/js/19.781915cc.js"><link rel="prefetch" href="/assets/js/20.21128e97.js"><link rel="prefetch" href="/assets/js/21.dc763957.js"><link rel="prefetch" href="/assets/js/22.0626debe.js"><link rel="prefetch" href="/assets/js/23.a089e602.js"><link rel="prefetch" href="/assets/js/24.eb210250.js"><link rel="prefetch" href="/assets/js/25.9ccc7a03.js"><link rel="prefetch" href="/assets/js/26.88883549.js"><link rel="prefetch" href="/assets/js/27.e060a936.js"><link rel="prefetch" href="/assets/js/28.a219e9bf.js"><link rel="prefetch" href="/assets/js/29.4f674c07.js"><link rel="prefetch" href="/assets/js/3.b55cf771.js"><link rel="prefetch" href="/assets/js/30.2bb6ea0b.js"><link rel="prefetch" href="/assets/js/31.54b20cf7.js"><link rel="prefetch" href="/assets/js/32.4c3406bc.js"><link rel="prefetch" href="/assets/js/33.d54cec12.js"><link rel="prefetch" href="/assets/js/34.3f5de6f2.js"><link rel="prefetch" href="/assets/js/35.beff2e39.js"><link rel="prefetch" href="/assets/js/36.f9a34636.js"><link rel="prefetch" href="/assets/js/37.3dc04856.js"><link rel="prefetch" href="/assets/js/38.6d855a6e.js"><link rel="prefetch" href="/assets/js/39.fc73f21d.js"><link rel="prefetch" href="/assets/js/4.6d0e0c17.js"><link rel="prefetch" href="/assets/js/40.af31e3da.js"><link rel="prefetch" href="/assets/js/41.671019c4.js"><link rel="prefetch" href="/assets/js/42.2294d29b.js"><link rel="prefetch" href="/assets/js/43.db6a01ac.js"><link rel="prefetch" href="/assets/js/44.dd24a4b9.js"><link rel="prefetch" href="/assets/js/45.49453970.js"><link rel="prefetch" href="/assets/js/46.fd24200c.js"><link rel="prefetch" href="/assets/js/47.1949af45.js"><link rel="prefetch" href="/assets/js/48.79ae6536.js"><link rel="prefetch" href="/assets/js/49.fcde6b7f.js"><link rel="prefetch" href="/assets/js/5.0b207204.js"><link rel="prefetch" href="/assets/js/50.3b4d4418.js"><link rel="prefetch" href="/assets/js/51.edfa61cd.js"><link rel="prefetch" href="/assets/js/52.1b769c3f.js"><link rel="prefetch" href="/assets/js/53.dd0bc9d8.js"><link rel="prefetch" href="/assets/js/54.39176a80.js"><link rel="prefetch" href="/assets/js/55.573b9c31.js"><link rel="prefetch" href="/assets/js/57.f8ed8637.js"><link rel="prefetch" href="/assets/js/58.3c7e3293.js"><link rel="prefetch" href="/assets/js/59.a1bc011e.js"><link rel="prefetch" href="/assets/js/6.aa1ab838.js"><link rel="prefetch" href="/assets/js/60.3d64fb37.js"><link rel="prefetch" href="/assets/js/61.1d72bf34.js"><link rel="prefetch" href="/assets/js/62.ff909897.js"><link rel="prefetch" href="/assets/js/63.65e0c100.js"><link rel="prefetch" href="/assets/js/64.5b81f0b9.js"><link rel="prefetch" href="/assets/js/65.7b5fd5e7.js"><link rel="prefetch" href="/assets/js/66.10a94919.js"><link rel="prefetch" href="/assets/js/67.b4203de5.js"><link rel="prefetch" href="/assets/js/68.3334bcd9.js"><link rel="prefetch" href="/assets/js/69.076289e0.js"><link rel="prefetch" href="/assets/js/7.7f24f1db.js"><link rel="prefetch" href="/assets/js/70.d3dd1b6a.js"><link rel="prefetch" href="/assets/js/71.a63a7128.js"><link rel="prefetch" href="/assets/js/72.1ce4ef4e.js"><link rel="prefetch" href="/assets/js/73.1b194ce3.js"><link rel="prefetch" href="/assets/js/74.2cafcc32.js"><link rel="prefetch" href="/assets/js/75.811dfed4.js"><link rel="prefetch" href="/assets/js/76.9ecc5669.js"><link rel="prefetch" href="/assets/js/77.2d332363.js"><link rel="prefetch" href="/assets/js/78.1abbc712.js"><link rel="prefetch" href="/assets/js/79.7f694bba.js"><link rel="prefetch" href="/assets/js/8.dd0082e7.js"><link rel="prefetch" href="/assets/js/80.0c834a8c.js"><link rel="prefetch" href="/assets/js/81.e68b030b.js"><link rel="prefetch" href="/assets/js/82.ee15fd72.js"><link rel="prefetch" href="/assets/js/83.6630a350.js"><link rel="prefetch" href="/assets/js/84.c80210c2.js"><link rel="prefetch" href="/assets/js/85.84af9d91.js"><link rel="prefetch" href="/assets/js/86.c8eed3fa.js"><link rel="prefetch" href="/assets/js/87.158128c8.js"><link rel="prefetch" href="/assets/js/88.2d5efaec.js"><link rel="prefetch" href="/assets/js/89.e355abb7.js"><link rel="prefetch" href="/assets/js/9.d899d975.js"><link rel="prefetch" href="/assets/js/90.15e01064.js"><link rel="prefetch" href="/assets/js/91.a2f1ddf4.js"><link rel="prefetch" href="/assets/js/92.a40c425c.js"><link rel="prefetch" href="/assets/js/93.34101b59.js"><link rel="prefetch" href="/assets/js/94.2f5ec23e.js"><link rel="prefetch" href="/assets/js/95.7a3dabc9.js"><link rel="prefetch" href="/assets/js/96.2ecdb225.js"><link rel="prefetch" href="/assets/js/97.864e2d0f.js"><link rel="prefetch" href="/assets/js/98.3dad48c6.js"><link rel="prefetch" href="/assets/js/99.97e12689.js">
<link rel="stylesheet" href="/assets/css/0.styles.4bdbd8d9.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><!----> <span class="site-name">Docker LNMP Docs</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/" class="nav-link">
使用指引
</a></div><div class="nav-item"><a href="/ee/" class="nav-link">
商业版
</a></div><div class="nav-item"><a href="https://github.com/khs1994-docker/lnmp" target="_blank" rel="noopener noreferrer" class="nav-link external">
GitHub
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><a href="https://zan.khs1994.com" target="_blank" rel="noopener noreferrer" class="nav-link external">
捐赠
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><a href="https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=3a5255852d5db99dcd5da4c72f05df61&from=console" target="_blank" rel="noopener noreferrer" class="nav-link external">
腾讯云服务器限时秒杀
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div> <!----></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/" class="nav-link">
使用指引
</a></div><div class="nav-item"><a href="/ee/" class="nav-link">
商业版
</a></div><div class="nav-item"><a href="https://github.com/khs1994-docker/lnmp" target="_blank" rel="noopener noreferrer" class="nav-link external">
GitHub
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><a href="https://zan.khs1994.com" target="_blank" rel="noopener noreferrer" class="nav-link external">
捐赠
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><a href="https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=3a5255852d5db99dcd5da4c72f05df61&from=console" target="_blank" rel="noopener noreferrer" class="nav-link external">
腾讯云服务器限时秒杀
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div> <!----></nav> <ul class="sidebar-links"><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>Introduction</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/" aria-current="page" class="sidebar-link">khs1994-docker/lnmp 支持文档</a></li><li><a href="/why.html" class="sidebar-link">项目初衷</a></li><li><a href="/docker.html" class="sidebar-link">安装 Docker</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>安装</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/install/linux.html" class="sidebar-link">Linux/macOS 上安装</a></li><li><a href="/install/windows.html" class="sidebar-link">Windows 上安装</a></li><li><a href="/mysql.html" class="sidebar-link">MySQL</a></li><li><a href="/update.html" class="sidebar-link">更新</a></li><li><a href="/cli.html" class="sidebar-link">命令行工具</a></li><li><a href="/init.html" class="sidebar-link">初始化过程</a></li><li><a href="/path.html" class="sidebar-link">本地路径和 Docker 内路径对应关系</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>开发环境</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/development.html" class="sidebar-link">开发环境</a></li><li><a href="/phpmyadmin.html" class="sidebar-link">phpMyAdmin</a></li><li><a href="/custom.html" class="sidebar-link">个性化方案</a></li><li><a href="/lrew.html" class="sidebar-link">lrew</a></li><li><a href="/backup.html" class="sidebar-link">备份恢复</a></li><li><a href="/cleanup.html" class="sidebar-link">清理</a></li><li><a href="/config.html" class="sidebar-link">软件配置</a></li><li><a href="/port.html" class="sidebar-link">服务端口开放</a></li><li><a href="/command.html" class="sidebar-link">PHPer 常用命令容器化</a></li><li><a href="/lpm.html" class="sidebar-link">包管理工具 lpm</a></li><li><a href="/compose.html" class="sidebar-link">Docker Compose</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>nginx</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/nginx/" class="sidebar-link">NGINX</a></li><li><a href="/nginx/config.html" class="sidebar-link">一键生成 nginx 配置</a></li><li><a href="/nginx/issue-ssl.html" class="sidebar-link">申请 SSL 证书</a></li><li><a href="/nginx/https.html" class="sidebar-link">NGINX HTTPS 配置文件</a></li><li><a href="/nginx/unit.html" class="sidebar-link">NGINX Unit</a></li><li><a href="/nginx/arg.html" class="sidebar-link">Nginx 内置变量</a></li><li><a href="/nginx/http3.html" class="sidebar-link">http3</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>PHP</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/php.html" class="sidebar-link">PHP 扩展列表</a></li><li><a href="/xdebug.html" class="sidebar-link">Xdebug in Docker + PhpStorm</a></li><li><a href="/laravel.html" aria-current="page" class="active sidebar-link">Laravel 最佳实践</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/laravel.html#安装-laravel" class="sidebar-link">安装 Laravel</a></li><li class="sidebar-sub-header"><a href="/laravel.html#设置-laravel-env-文件" class="sidebar-link">设置 Laravel .env 文件</a></li><li class="sidebar-sub-header"><a href="/laravel.html#安装-laravel-ide-helper" class="sidebar-link">安装 laravel-ide-helper</a></li><li class="sidebar-sub-header"><a href="/laravel.html#windows-运行-laravel-响应缓慢的问题" class="sidebar-link">Windows 运行 Laravel 响应缓慢的问题</a></li><li class="sidebar-sub-header"><a href="/laravel.html#php-相关的-vscode-扩展" class="sidebar-link">PHP 相关的 vsCode 扩展</a></li><li class="sidebar-sub-header"><a href="/laravel.html#运行-laravel-队列-queue" class="sidebar-link">运行 Laravel 队列(Queue)</a></li><li class="sidebar-sub-header"><a href="/laravel.html#运行-laravel-调度器-schedule" class="sidebar-link">运行 Laravel 调度器(Schedule)</a></li><li class="sidebar-sub-header"><a href="/laravel.html#运行-laravel-horizon" class="sidebar-link">运行 Laravel horizon</a></li></ul></li><li><a href="/composer.html" class="sidebar-link">Composer 最佳实践</a></li><li><a href="/phpunit.html" class="sidebar-link">PHPUnit in Docker + PHPStorm 最佳实践</a></li><li><a href="/xhprof.html" class="sidebar-link">XHProf</a></li><li><a href="/swoole.html" class="sidebar-link">Swoole</a></li><li><a href="/composer/" class="sidebar-link">Composer</a></li><li><a href="/composer/satis.html" class="sidebar-link">Satis</a></li><li><a href="/symfony.html" class="sidebar-link">Symfony</a></li><li><a href="/php_eol.html" class="sidebar-link">使用 EOL 的 PHP 版本</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>生产环境</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/production.html" class="sidebar-link">配置</a></li><li><a href="/swarm/" class="sidebar-link">Docker Swarm</a></li><li><a href="/kubernetes/" class="sidebar-link">在 Kubernetes 集群部署 LNMP</a></li><li><a href="/kubernetes/docker-desktop.html" class="sidebar-link">K8s on Docker Desktop</a></li><li><a href="/registry.html" class="sidebar-link">Docker Registry</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>计划任务</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/crontab.html" class="sidebar-link">Crontab 计划任务</a></li><li><a href="/supervisord.html" class="sidebar-link">Supervisord</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>镜像构建</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/manifest.html" class="sidebar-link">构建支持多种架构的 Docker 镜像</a></li><li><a href="/buildx.html" class="sidebar-link">docker buildx</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>数据卷 Volumes</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/volumes/nfs.html" class="sidebar-link">NFS Volume(NFSv4)</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>集群</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/clusterkit/" class="sidebar-link">ClusterKit</a></li><li><a href="/clusterkit/memcached.html" class="sidebar-link">Memcached</a></li><li><a href="/clusterkit/mysql.html" class="sidebar-link">MySQL 复制</a></li><li><a href="/clusterkit/redis_cluster.html" class="sidebar-link">Redis 集群版 (redis-cli --cluster)</a></li><li><a href="/clusterkit/redis_replication.html" class="sidebar-link">Redis 主从版 (M-S) 复制模式 replication</a></li><li><a href="/clusterkit/redis_sentinel.html" class="sidebar-link">Redis 哨兵版 Sentinel</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>参考</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/dockerd.html" class="sidebar-link">dockerd</a></li><li><a href="/dockerfiles.html" class="sidebar-link">Dockerfile 注意事项</a></li><li><a href="/systemd.html" class="sidebar-link">systemd</a></li><li><a href="/journalctl.html" class="sidebar-link">systemd 日志管理</a></li><li><a href="/git.html" class="sidebar-link">Git Tips</a></li><li><a href="/gpg.html" class="sidebar-link">Git GPG</a></li><li><a href="/network.html" class="sidebar-link">国内网络问题</a></li><li><a href="/mirror.html" class="sidebar-link">Docker 常用镜像站点</a></li><li><a href="/windows/container.html" class="sidebar-link">Windows Container</a></li><li><a href="/arm.html" class="sidebar-link">ARM 架构</a></li><li><a href="/ab.html" class="sidebar-link">ab command</a></li><li><a href="/minio.html" class="sidebar-link">Minio</a></li><li><a href="/windows/wsl2.html" class="sidebar-link">WSL2</a></li><li><a href="/powershell.html" class="sidebar-link">PowerShell</a></li><li><a href="/go.html" class="sidebar-link">Go</a></li><li><a href="/github.html" class="sidebar-link">GitHub</a></li><li><a href="/vscode.html" class="sidebar-link">VSCode</a></li><li><a href="/cgroupv2.html" class="sidebar-link">cGroupv2</a></li><li><a href="/iscsi.html" class="sidebar-link">ISCSI</a></li><li><a href="/mount.html" class="sidebar-link">文件挂载相关命令</a></li><li><a href="/cfssl.html" class="sidebar-link">CFSSL</a></li><li><a href="/ssh.html" class="sidebar-link">SSH</a></li><li><a href="/encrypt.html" class="sidebar-link">加解密文件</a></li><li><a href="/coding/ci.html" class="sidebar-link">【玩转腾讯云】在 CODING DevOps 持续集成中使用 Buildx 构建 Docker 镜像</a></li></ul></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="laravel-最佳实践"><a href="#laravel-最佳实践" class="header-anchor">#</a> Laravel 最佳实践</h1> <h2 id="安装-laravel"><a href="#安装-laravel" class="header-anchor">#</a> 安装 Laravel</h2> <div class="language-bash extra-class"><pre class="language-bash"><code>$ <span class="token builtin class-name">cd</span> app
$ lnmp-laravel new laravel
<span class="token comment"># 上面的命令会安装 Laravel 最新的主线版本(10.x),如果你要安装特定版本可以加上 **版本号**</span>
<span class="token comment"># $ lnmp-laravel new FOLDER VERSION</span>
<span class="token comment"># $ lnmp-laravel new laravel5.5 5.5</span>
<span class="token comment"># 你也可以使用 `composer` 安装</span>
<span class="token comment"># $ lnmp-composer create-project laravel/laravel laravel5.5 "5.5.*"</span>
</code></pre></div><p>具体请查看 <a href="/command.html">这里</a></p> <h2 id="设置-laravel-env-文件"><a href="#设置-laravel-env-文件" class="header-anchor">#</a> 设置 Laravel .env 文件</h2> <p>正确配置服务的 <code>HOST</code>,填写 <code>127.0.0.1</code> 将连接不到服务,具体原因不再赘述。</p> <div class="language-bash extra-class"><pre class="language-bash"><code><span class="token assign-left variable">DB_HOST</span><span class="token operator">=</span>mysql
<span class="token assign-left variable">REDIS_HOST</span><span class="token operator">=</span>redis
<span class="token assign-left variable">MEMCACHED_HOST</span><span class="token operator">=</span>memcached
</code></pre></div><h2 id="安装-laravel-ide-helper"><a href="#安装-laravel-ide-helper" class="header-anchor">#</a> 安装 <a href="https://github.com/barryvdh/laravel-ide-helper" target="_blank" rel="noopener noreferrer">laravel-ide-helper<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></h2> <div class="language-bash extra-class"><pre class="language-bash"><code>$ lnmp-composer require --dev barryvdh/laravel-ide-helper
</code></pre></div><div class="language-bash extra-class"><pre class="language-bash"><code>$ lnmp-php artisan ide-helper:eloquent
$ lnmp-php artisan ide-helper:generate
$ lnmp-php artisan ide-helper:meta
$ lnmp-php artisan ide-helper:models
</code></pre></div><p><strong>.gitignore</strong></p> <div class="language-bash extra-class"><pre class="language-bash"><code><span class="token comment"># .gitignore</span>
.phpstorm.meta.php
_ide_helper.php
.php_cs.cache
</code></pre></div><h2 id="windows-运行-laravel-响应缓慢的问题"><a href="#windows-运行-laravel-响应缓慢的问题" class="header-anchor">#</a> Windows 运行 Laravel 响应缓慢的问题</h2> <ul><li>Docker Desktop 上 Docker 运行在虚拟机,项目文件位于 Windows</li> <li>Docker Desktop(WSL2) 上 Docker 运行在 WSL2(仍然是虚拟机),项目文件位于 Windows</li></ul> <p>以上两种情况项目文件位于 Windows 均为跨主机, 故存在文件性能问题。</p> <p>这些情况下 <code>vendor</code> 目录可以使用数据卷(数据卷存在于虚拟机中)。<a href="https://code.visualstudio.com/remote/advancedcontainers/improve-performance#_use-a-targeted-named-volume" target="_blank" rel="noopener noreferrer">vsCode<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a> 的说明和笔者提出的方案原理大致相同。</p> <p>由于文件性能问题,不推荐将项目文件放置于 Windows。</p> <p>另一个方案是将项目文件夹放置于 WSL2,有以下两种方案:</p> <h3 id="第一种方案是使用-vscode-remote-wsl-wsl-远程开发"><a href="#第一种方案是使用-vscode-remote-wsl-wsl-远程开发" class="header-anchor">#</a> 第一种方案是使用 <strong>vsCode remote WSL</strong> WSL 远程开发</h3> <blockquote><p>项目放置于 WSL2 也可以使用 PHPStorm,请参考 https://github.com/khs1994-docker/php-demo</p></blockquote> <p><strong>1. 在 Docker 设置中启用 WSL2 集成</strong></p> <p><code>Resources</code> -> <code>WSL INTEGRATION</code>-> <code>Enable integration with additional distros:</code> -> <code>开启你所使用的 WSL2 (例如:Ubuntu)</code></p> <p><strong>2. 安装 vsCode 扩展</strong></p> <div class="language-bash extra-class"><pre class="language-bash"><code>$ code --install-extension ms-vscode-remote.remote-wsl
</code></pre></div><p><strong>3. 在 <code>.env</code> 中修改变量</strong></p> <div class="language-bash extra-class"><pre class="language-bash"><code><span class="token assign-left variable">APP_ROOT</span><span class="token operator">=</span><span class="token punctuation">\</span><span class="token punctuation">\</span>wsl$<span class="token punctuation">\</span>ubuntu<span class="token punctuation">\</span>app
</code></pre></div><p><strong>4. 将 lnmp/bin 目录加入到 WSL2 PATH</strong></p> <div class="language-powershell extra-class"><pre class="language-powershell"><code><span class="token comment"># 在 Windows 终端执行</span>
$ cd ~<span class="token operator">/</span>lnmp<span class="token operator">/</span>bin
$ <span class="token variable">$env</span>:WSLENV=<span class="token string">"LNMP_BIN_WIN_PATH/p"</span>
$ <span class="token variable">$env</span>:LNMP_BIN_WIN_PATH=<span class="token variable">$PWD</span>
$ wsl <span class="token operator">-</span>d <WSL名称> <span class="token operator">--</span> sh <span class="token operator">-</span>c <span class="token string">'echo PATH=\\\$PATH:$LNMP_BIN_WIN_PATH >> ~/.bashrc; tail ~/.bashrc'</span>
<span class="token comment"># $ sudo usermod -aG docker $USER</span>
</code></pre></div><p><strong>以上步骤仅需执行一次,后续开发从以下步骤开始</strong></p> <p><strong>5. 启动 LNMP</strong></p> <div class="language-bash extra-class"><pre class="language-bash"><code>$ ./lnmp-docker up
</code></pre></div><p><strong>6. 安装 laravel 到 laravel 文件夹</strong></p> <div class="language-powershell extra-class"><pre class="language-powershell"><code>$ lnmp<span class="token operator">-</span>docker code
</code></pre></div><p>执行上述命令会出现 vsCode 窗口</p> <p>在 vsCode 中点击菜单栏 <code>查看</code> -> <code>终端</code>,在出现的终端中执行命令</p> <div class="language-bash extra-class"><pre class="language-bash"><code><span class="token comment"># 安装 laravel 到 laravel 文件夹</span>
<span class="token comment"># 安装 laravel 10 使用阿里云镜像会出现错误,暂时切换到其他镜像</span>
$ lnmp-composer config -g repos.packagist <span class="token function">composer</span> https://mirrors.cloud.tencent.com/composer/
<span class="token comment"># 切换回阿里云镜像</span>
<span class="token comment"># lnmp-composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/</span>
$ lnmp-laravel new laravel
<span class="token comment"># 文件可能因为权限问题无法编辑,更改权限</span>
$ <span class="token function">sudo</span> <span class="token function">chown</span> -R <span class="token number">1000</span>:1000 /app
$ <span class="token function">sudo</span> <span class="token function">chmod</span> -R <span class="token number">777</span> /app/laravel/storage/app
$ <span class="token function">sudo</span> <span class="token function">chmod</span> -R <span class="token number">777</span> /app/laravel/storage/logs
$ <span class="token function">sudo</span> <span class="token function">chmod</span> -R <span class="token number">777</span> /app/laravel/storage/framework
</code></pre></div><p>关闭 vsCode</p> <p><strong>8. 日常开发步骤</strong></p> <div class="language-powershell extra-class"><pre class="language-powershell"><code>$ lnmp<span class="token operator">-</span>docker code laravel
</code></pre></div><p>执行上述命令会出现 vsCode 窗口</p> <p>在 vsCode 中点击菜单栏 <code>查看</code> -> <code>终端</code>,在出现的终端中执行命令</p> <p>本例以添加 <code>laravel/jetstream</code> 组件为例:</p> <div class="language-bash extra-class"><pre class="language-bash"><code>$ lnmp-composer require laravel/jetstream
$ lnmp-php artisan jetstream:install inertia
$ lnmp-npm <span class="token function">install</span>
$ lnmp-npm run build
$ lnmp-php artisan migrate
<span class="token comment"># 打开 http://127.0.0.1/register 查看页面</span>
</code></pre></div><h3 id="第二种方案是使用-vscode-remote-container-容器远程开发"><a href="#第二种方案是使用-vscode-remote-container-容器远程开发" class="header-anchor">#</a> 第二种方案是使用 <strong>vsCode remote container</strong> 容器远程开发</h3> <p><strong>1. 在 Docker 设置中启用 WSL2 集成</strong></p> <p><code>Resources</code> -> <code>WSL INTEGRATION</code>-> <code>Enable integration with additional distros:</code> -> <code>开启你所使用的 WSL2 (例如:Ubuntu)</code></p> <p><strong>2. 安装 vsCode 扩展</strong></p> <div class="language-bash extra-class"><pre class="language-bash"><code>$ code --install-extension ms-vscode-remote.remote-containers
</code></pre></div><p><strong>3. 在 <code>.env</code> 中修改变量</strong></p> <div class="language-bash extra-class"><pre class="language-bash"><code><span class="token comment"># .env</span>
<span class="token assign-left variable">APP_ROOT</span><span class="token operator">=</span><span class="token punctuation">\</span><span class="token punctuation">\</span>wsl$<span class="token punctuation">\</span>ubuntu<span class="token punctuation">\</span>app
<span class="token comment"># 增加 vscode-remote-container-workspace 服务</span>
<span class="token assign-left variable">LNMP_SERVICES</span><span class="token operator">=</span><span class="token string">"nginx mysql php8 redis vscode-remote-container-workspace"</span>
</code></pre></div><p><strong>以上步骤仅需执行一次,后续开发从以下步骤开始</strong></p> <p><strong>4. 启动 LNMP</strong></p> <div class="language-bash extra-class"><pre class="language-bash"><code>$ ./lnmp-docker up
</code></pre></div><p><strong>5. 打开 vsCode</strong></p> <p>左下角 <code>打开远程窗口</code> -> <code>Remote-Containers: Attach to Running Container...</code> -> 选择 <code>lnmp_vscode-remote-container-workspace_1</code> 容器 -> 出现新窗口 -> 左面选择打开文件夹 -> 输入 <code>/app</code></p> <p>在 vsCode 中点击菜单栏 <code>查看</code> -> <code>终端</code></p> <p>在出现的终端中执行命令,本例以添加 <code>laravel/jetstream</code> 组件为例:</p> <div class="language-bash extra-class"><pre class="language-bash"><code><span class="token comment"># 安装 laravel 到 laravel 文件夹</span>
<span class="token comment"># $ composer create-project --prefer-dist laravel/laravel laravel</span>
<span class="token comment"># 文件可能因为权限问题无法编辑,更改权限</span>
<span class="token comment"># $ $WSL2_DIST=ubuntu</span>
<span class="token comment"># $ wsl -d $WSL2_DIST -u root -- chown -R 1000:1000 /app</span>
<span class="token comment"># $ wsl -d $WSL2_DIST -u root -- chmod -R 777 /app/laravel/storage/app</span>
<span class="token comment"># $ wsl -d $WSL2_DIST -u root -- chmod -R 777 /app/laravel/storage/logs</span>
<span class="token comment"># $ wsl -d $WSL2_DIST -u root -- chmod -R 777 /app/laravel/storage/framework</span>
$ <span class="token builtin class-name">cd</span> laravel
$ <span class="token function">composer</span> require laravel/jetstream
$ php artisan jetstream:install inertia
Vue scaffolding installed successfully.
Please run <span class="token string">"npm install && npm run dev"</span> to compile your fresh scaffolding.
Authentication scaffolding generated successfully.
</code></pre></div><p>在 Windows 终端中执行以下命令:</p> <div class="language-powershell extra-class"><pre class="language-powershell"><code>$ lnmp<span class="token operator">-</span>docker code<span class="token operator">-</span>run <span class="token operator">-</span>w <span class="token operator">/</span>app<span class="token operator">/</span>laravel npm install
$ lnmp<span class="token operator">-</span>docker code<span class="token operator">-</span>run <span class="token operator">-</span>w <span class="token operator">/</span>app<span class="token operator">/</span>laravel npm run dev
<span class="token comment"># 打开 http://127.0.0.1/register 查看页面</span>
</code></pre></div><h2 id="php-相关的-vscode-扩展"><a href="#php-相关的-vscode-扩展" class="header-anchor">#</a> PHP 相关的 vsCode 扩展</h2> <ul><li><code>xdebug.php-debug</code></li> <li>更多扩展请查看 https://github.com/khs1994-docker/lnmp/blob/master/.devcontainer/devcontainer.json <strong>extensions</strong> 项</li></ul> <h2 id="运行-laravel-队列-queue"><a href="#运行-laravel-队列-queue" class="header-anchor">#</a> 运行 Laravel 队列(Queue)</h2> <ul><li><strong>方案1:</strong> 使用 <strong>宿主机</strong> 的系统级的守护程序(systemd 等)来运行以下命令。具体请查看 <a href="/systemd.html">systemd</a></li></ul> <div class="language-bash extra-class"><pre class="language-bash"><code>$ lnmp-docker php8-cli php /app/laravel/artisan queue:work --tries<span class="token operator">=</span><span class="token number">3</span>
</code></pre></div><ul><li><strong>方案2:</strong> 参考 <code>config/s6</code> 或 <code>config/supervisord</code> 在一个容器中同时运行多个服务 (两钟方案中均包含了 Laravel 队列等示例)。</li></ul> <h2 id="运行-laravel-调度器-schedule"><a href="#运行-laravel-调度器-schedule" class="header-anchor">#</a> 运行 Laravel 调度器(Schedule)</h2> <p>参考上一节队列的说明。</p> <div class="language-bash extra-class"><pre class="language-bash"><code>$ lnmp-docker php8-cli php /app/laravel/artisan schedule:run
</code></pre></div><h2 id="运行-laravel-horizon"><a href="#运行-laravel-horizon" class="header-anchor">#</a> 运行 Laravel horizon</h2> <ul><li>https://laravel.com/docs/10.x/horizon</li></ul> <div class="language-bash extra-class"><pre class="language-bash"><code>$ lnmp-composer require laravel/horizon
$ lnmp-php artisan horizon:install
</code></pre></div><p><strong>配置</strong></p> <p><code>config/horizon.php</code> <code>environments</code> 数组必须包含当前 Laravel 运行的环境。</p> <p><strong>跳过验证</strong></p> <p><code>app/Providers/HorizonServiceProvider.php</code></p> <div class="language-php extra-class"><pre class="language-php"><code><span class="token keyword">protected</span> <span class="token keyword">function</span> <span class="token function">gate</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
Gate<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">define</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'viewHorizon'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token variable">$user</span> <span class="token operator">=</span> <span class="token constant">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token boolean constant">true</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> <span class="token function">in_array</span><span class="token punctuation">(</span><span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">email</span><span class="token punctuation">,</span> <span class="token punctuation">[</span>
<span class="token single-quoted-string string">'[email protected]'</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre></div><p>参考上一节队列的说明。</p> <div class="language-bash extra-class"><pre class="language-bash"><code>$ lnmp-docker php8-cli php /app/laravel/artisan horizon
</code></pre></div></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/khs1994-docker/lnmp/edit/master/docs/laravel.md" target="_blank" rel="noopener noreferrer">Edit this page</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div> <!----></footer> <div class="page-nav"><p class="inner"><span class="prev">
←
<a href="/xdebug.html" class="prev">
Xdebug in Docker + PhpStorm
</a></span> <span class="next"><a href="/composer.html">
Composer 最佳实践
</a>
→
</span></p></div> </main></div><div class="global-ui"></div></div>
<script src="/assets/js/app.209f2259.js" defer></script><script src="/assets/js/2.8af6cdaa.js" defer></script><script src="/assets/js/56.b6a02619.js" defer></script>
</body>
</html>