所需环境

环境安装

自动

手动

部署

  • 项目名称 example
  • 访问域名 example.test
  • 项目目录 /www/wwwroot/web

框架判断

  • 如果 /www/wwwroot/web 存在 composer.json 文件 那里面的 name 字段通常是 框架名称
  • 人肉分析

laravel || lumen

获取源代码

git 方式

运行
1
2
3
4
5
cd /www/wwwroot/

git clone --depth 1 git@github.com:puzzle/project.git web
# 或者
git clone --depth 1 https://github.com/puzzle/project.git web

文件 方式

  • 下载成压缩包 服务端解压

配置文件

大多都是类似的 具体可看相应注释

复制

1
2
cd /www/wwwroot/web
cp .env.example .env

修改 .env 文件

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
# 项目名称
APP_NAME=example
# 当前运行环境 可选值 local 本地 | production 线上 | ...
APP_ENV=production
# 密钥 需运行生成
APP_KEY=base64:hello
# 是否开启调试模式
APP_DEBUG=false
# 当前运行网址
APP_URL=http://example.test

# 数据库连接类型
DB_CONNECTION=mysql
# 数据库连接地址
DB_HOST=127.0.0.1
# 数据库端口
DB_PORT=3306
# 数据库表名
DB_DATABASE=deploy
# 数据库用户名
DB_USERNAME=root
# 数据库密码
DB_PASSWORD=root

# redis 连接地址
REDIS_HOST=127.0.0.1
# redis 密码
REDIS_PASSWORD=root
# redis 端口号
REDIS_PORT=6379

# session 储存位置 可选值 file | redis | ...
SESSION_DRIVER=redis

# 队列执行方式 可选值 sync 同步 | redis 异步 | ...
QUEUE_CONNECTION=redis

安装 composer 包

检查版本

composer --version

输出应该类似

1
Composer version 2.0.12 2021-04-01 10:14:59

安装扩展包

1
2
cd /www/wwwroot/web
composer install -vvv

输出应该类似

1
2
3
Package manifest generated successfully.
1 packages you are using are looking for funding.
Use the `composer fund` command to find out more!

这时候 /www/wwwroot/web 就会存在 vendorcomposer.lock 文件了

生成 key

1
2
cd /www/wwwroot/web
php artisan key:generate

运行成功后 .env 文件 APP_KEY 将会自动填充值

目录映射

1
2
cd /www/wwwroot/web
php artisan storage:link

优化应用

1
2
3
4
5
cd /www/wwwroot/web
# 修改 .env 文件后 需要重新运行此命令
php artisan config:cache
php artisan route:cache
php artisan view:cache

设置文件夹权限

  • 如果 当前终端登录用户 和 php-fpm 用户一致 可不用设置
1
2
cd /www/wwwroot/web
chmod 777 -R bootstrap storage

迁移数据库

根据 sql 判断执行顺序

根据实际情况运行迁移命令

1
2
cd /www/wwwroot/web
php artisan migrate

配置 nginx | apache

nginx

https://laravel.com/docs/8.x/deployment#nginx

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
server {
listen 80;
server_name example.test;
root /www/wwwroot/web/public;

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";

index index.php;

charset utf-8;

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

location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }

error_page 404 /index.php;

location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ /\.(?!well-known).* {
deny all;
}
}

apache

todo

访问验证

如果配置成功的话 访问 example.test 就可以看到页面了

定时任务(按需要添加)

1
* * * * * /usr/bin/php /www/wwwroot/web/artisan schedule:run >> /dev/null 2>&1

队列(按需要添加)

supervisor

1
2
3
4
5
6
7
8
[program:example]
process_name=%(program_name)s
command=/usr/bin/php /www/wwwroot/web/artisan horizon
autostart=true
autorestart=true
user=www
redirect_stderr=true
stdout_logfile=/www/wwwroot/web/storage/logs/supervisord.log

错误

  • 可根据 /www/wwwroot/web/storage/logs/ 排查

其他参考文档