Laravel开发环境布署流程

罗伟志
2023-12-01

安装运行环境

接下来我们需要给新创建的服务器安装必要的运行环境,我们将通过一个脚本来安装,首先请确保通过 SSH 登录到了服务器上。

阿里云的按量付费服务器关机一段时间之后再开机,公网 IP 可能发生改变,需要仔细检查。如果发生改变需要在 Homestead 的
~/.ssh/config 里加入对应的新 IP。

1. 执行安装脚本

由于该脚本只支持 Ubuntu 16.04,请确保你的服务器系统无误。
然后执行如下命令

$ wget-qO- https://raw.githubusercontent.com/summerblue/laravel-ubuntu-init/master/download.sh - | bash

安装完毕之后会在屏幕上输出Mysql的 root 密码,请妥善保存。
同时按照屏幕上的指示,需要执行一下:

$ source~/.bash_aliases

2. 初始化站点配置、目录

接下来我们需要创建一个新的Nginx站点用于Laravel Shop 项目的访问,执行如下命令:

$ cd~/laravel-ubuntu-init/
$ ./16.04/nginx_add_site.sh

该脚本会询问项目名,我们输入 laravel-shop;站点域名我们输入 -,这是因为我们之后会直接通过 IP 来访问站点,不需要域名;最后会让我们确认输入是否正确,输入 y 并回车即可。

现在我们来看看这个脚本是否运行成功,执行一下命令:

$ cd/var/www/
$ ll

可以看到在 /var/www/ 目录下已经创建好了 laravel-shop 目录。

3. 测试 PHP

接下来我们要测试一下刚刚创建的站点能否正确解析 PHP 代码,执行以下命令:

$ cd /var/www/laravel-shop/
$ mkdir -p public
$ echo '<?phpphpinfo();'> public/index.php

然后在浏览器中输入云服务器的外网 IP:

发现输出了Nginx的默认页,与我们预期不符,这是因为Nginx有一个默认站点,当使用 IP 访问时会展示默认站点的内容,因此我们需要把这个默认站点配置删除,然后重启Nginx使之生效:

$ rm-f /etc/nginx/sites-enabled/default
$ systemctl restart nginx.service

现在再刷新页面看看:

可以看到 phpinfo() 的输出,说明能够正确执行 PHP 代码。

4. 安装Elasticsearch

接下来我们还需要安装Elasticsearch,执行以下命令:

$ cd~/laravel-ubuntu-init
$ ./16.04/install_elasticsearch.sh

在安装 JAVA 的时候可能会比较慢,需要耐心等待。这个脚本会安装最新版本的Elasticsearch以及对应版本的 IK 分词插件。

如果安装 JAVA 的过程持续超过 10 分钟,可以试试开一个新的终端窗口并ssh登录到服务器,然后执行

$ tail-f /var/log/laravel-ubuntu-init.log

这一列是平均下载速度,如果这个值比较低,可能是国际带宽不稳定,可以换一个时间再试试。
当屏幕显示『安装完毕』之后,我们来确认一下Elasticsearch是否正常运行,执行以下命令:

$ psaux|grepelasticsearch
$ curl127.0.0.1:9200

第一个命令是查看是否有Elasticsearch进程,第二个命令是尝试调用Elasticsearch的接口。正常的输出如下:

5. 创建Mysql用户

为了安全考虑,通常我们不会直接用Mysql的 root 账号作为项目中连接Mysql的账号,这样即使项目出现了 SQL 注入漏洞,也可以把风险控制在当前项目中,而不会影响到使用同一数据库的其他项目。
因此接下来我们需要给Laravel Shop 项目创建一个独立的Mysql用户以及对应的数据库,之前的安装脚本里有封装好的脚本,可以直接执行:

$ cd~/laravel-ubuntu-init/
$ ./16.04/mysql_add_user.sh

首先会询问Mysql的 root 密码,填入之前在屏幕上的 root 密码;用户名输入 laravel-shop;创建同名数据库输入 y

可以看到创建成功,同时屏幕上有新账户的密码,保存好。
现在我们来测试一下,输入以下命令:

$ mysql-u'laravel-shop'-p

Enter password: 处粘贴刚刚保存的密码并回车,如果密码正确可以看到以下界面:

现在我们来看看数据库是否创建成功:

mysql> show databases;

可以看到 laravel-shop 说明创建成功。

手动部署代码

接下来我们需要把我们的代码部署到云服务器上。

1. 下载项目代码

在部署代码到服务器之前,我们需要先在 Homestead 中将代码 PushGithub上:

$ cd/var/www/
// 删除之前创建的站点目录
$ rm-rfpro/
// 末尾的laravel-shop 不要漏,代表克隆项目到pro目录中
$ sudowww'git clone https://{你自己的github项目地址} laravel-shop'
$ cdpro/

如果我们用 root 身份去执行 git clone 命令,克隆下来的目录和文件会归属于 root 账户,而 PHP 和Nginx的运行账户都是 www-data,这就会导致Nginx / PHP 无法读写项目目录,从而导致我们的站点无法正常运行。
因此我们应该以 www-data 身份去执行命令,这样创建的目录和文件就归属于 www-data,之后所有可能生成文件的命令我们都应该以 www-data 身份去执行。
为了让我们更方便地以 www-data 身份执行命令,安装脚本提供了 sudowww 这个别名,它等价于 sudo -H -u www-data sh -c,使用时只需要在原命令两端加上单引号即可。
请确保上面每一步都成功之后再执行下一个的命令,最终输出如下:

2. 下载 Composer 依赖

接下来我们需要下载 composer 包,由于 composer install 命令会往 vendor 目录写文件,因此需要用 www-data 身份执行:

$ sudowww'composer install'

正式的部署应该要加上 --no-dev 参数来避免安装只有开发环境才需要的包,而这里没有加这个参数是因为我们之后需要执行 db:seed
来生成假数据,而 db:seed 会依赖于一个开发环境包 fzaninotto/faker

上面命令输出如下:

中间部分省略…

3. 下载Nodejs依赖

接下来我们需要下载Nodejs依赖,我们编译前端代码的时候需要用到这些依赖,同样由于 yarn 命令会写入文件,所以需要加上 sudowww

$ sudowww'SASS_BINARY_SITE=http://npm.taobao.org/mirrors/node-sass yarn'

网络环境不好的情况下可能会比较慢,耐心等待。

4. 创建 .env文件

接下来我们需要创建一个 .env 文件,先复制 .env.example.env

$ sudowww'cp .env.example .env'
// php命令也要用sudowww
$ sudowww'php artisan key:generate'
$ vim.env

然后将 .env 文件按如下内容修改:

APP_NAME="Laravel Shop"
APP_ENV=production
APP_KEY={保持原本的值}
APP_DEBUG=false
APP_URL=http://{你的服务器 IP}

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel-shop
DB_USERNAME=laravel-shop
DB_PASSWORD={刚刚创建的Mysql用户密码}

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=redis
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

ES_HOSTS=127.0.0.1:9200

5. 执行数据库迁移

接下来我们需要创建数据库表,执行命令:

$ sudowww'php artisan migrate'

由于我们把 .env 中的 APP_ENV 设成了 production,因此会询问我们是否确认操作,输入 yes 后回车:

然后是Elasticsearch的迁移命令:

$ sudowww'php artisan es:migrate'

6. 生成假数据

接下来我们通过 db:seed 命令生成假数据:

$ sudowww'php artisan db:seed'
$ sudowww'php artisan db:seed --class=DDRProductsSeeder'

同样会询问是否确认,均输入 yes 回车:

7. 导入管理后台数据

接下来我们需要把管理后台的菜单、权限、管理用户的数据导入到系统中,执行以下命令:

$ mysql-uroot-p laravel-shop < database/admin.sql

然后输入Mysql root 密码并回车:

现在访问 http://{外网 IP}/admin 并以用户 admin 密码 admin 登录:
能正常登陆说明后台数据导入成功。

8. 构建前端代码

接下来构建前端代码,需要以 www-data 身份执行:

$ sudowww'yarn production'
 类似资料: