目标:服务器上搭建Laravel环境,本地使用IDE进行开发,使用Homestead做本地调试环境,代码提交后自动部署到服务器Root目录下。 
下面是整个流程的示意图: 

1. 准备工作,搭建LNMP环境

搭建一个Linux服务器,安装好nginx、MySQLPHP

因为要用到Laravel 5.4,对安装的php有以下要求

PHP >= 5.6.4 
OpenSSL PHP Extension 
PDO PHP Extension 
Mbstring PHP Extension 
Tokenizer PHP Extension 
XML PHP Extension

我们用的是一个CentOS的服务器,安装信息如下:

[root@server ~]# nginx -v
nginx version: nginx/1.10.3 [root@server ~]# mysql --version
mysql Ver 14.14 Distrib 5.6.35, for linux-glibc2.5 (x86_64) using EditLine wrapper [root@server ~]# php -v
PHP 7.1.2 (cli) (built: Feb 21 2017 10:40:18) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.2, Copyright (c) 1999-2017, by Zend Technologies
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

编辑 nginx.config 配置好服务器root目录等信息,后面项目的路径会放到 /data/wwwroot/default/test/jokes 下面,而 Laravel 项目的 index.php 文件是在 public 文件夹下面,所以把root配成 /data/wwwroot/default/test/jokes/public 。主要的配置如下:

  server {
listen 80;
server_name _;
access_log /data/wwwlogs/access_nginx.log combined;
root /data/wwwroot/default/test/jokes/public;
index index.html index.htm index.php; location ~ [^/]\.php(/|$) {
#fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

2. 安装 Laravel

服务器准备好后,下面就可以在服务器上安装 Laravel 了,我们通过 PHP 的包管理工具 Composer 来进行安装 Laravel,首先要安装 Composer 。

由于某种你懂的原因,在国内可能无法连上 Composer的服务器。那么有两种选择: 连接VPN或者使用国内镜像。

我尝试了连接VPN,发现操作很繁琐,配置PPTP、路由、DNS 服务器等等,可能是线路质量的原因,最后效果还是不理想,安装Composer速度还是不行,而且我本地 SSH 服务器速度也不给力,最终还是选择用国内镜像。

这里介绍一个目前还很好用的国内镜像网站:http://www.phpcomposer.com/ 。Composer 和 Laravel 的安装都可以使用这个镜像。

(1) 安装 Composer

php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

执行第一条命令下载下来的 composer-setup.php 脚本将简单地检测 php.ini 中的参数设置,如果某些参数未正确设置则会给出警告;然后下载最新版本的 composer.phar 文件到当前目录。

上述 3 条命令的作用依次是: 
下载安装脚本 - composer-setup.php - 到当前目录。 
执行安装过程。 
删除安装脚本。

将 Composer 安装到系统环境变量 PATH 所包含的路径下面,然后就能够在命令行窗口中直接执行 composer 命令了。

sudo mv composer.phar /usr/local/bin/composer
  • 1
  • 1

(2) 配置镜像地址 
修改 composer 的全局配置文件

composer config -g repo.packagist composer https://packagist.phpcomposer.com
  • 1
  • 1

执行之后会发现 Composer 全局的/root/.config/composer/config.json 
文件下增加了如下内容:

{
"config": {},
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

(3) 安装 Laravel 
通过 Composer 安装 Laravel:

composer global require "laravel/installer"
  • 1
  • 1

将 Laravel 所在的路径添加 path,编辑文件:

vi /etc/profile
  • 1
  • 1

把 /root/.config/composer/vendor/bin 加到路径:

export PATH=/usr/local/nginx/sbin:/usr/local/php/bin:/usr/local/mysql/bin:/root/.config/composer/vendor/bin:/usr/local/git/bin:$PATH
  • 1
  • 1

执行 source /etc/profile 使配置生效

接下来就可以使用 laravel 命令来创建项目了, 使用命令laravel new LaravelProject ,就自动在当前目录下创建一个 LaravelProject 项目,Composer会自动下载安装相应的依赖库。

不过我们不在服务器上直接创建项目,而是在本地开发环境上创建,这是考虑到Git部署方便,后面将详细说明。

3. 在服务器上配置Git自动部署

(1) 创建git远程仓库

我们用一个独立的路径来做远程仓库,而不是直接用 Nginx 的 root 路径来做仓库。

首先创建一个专门的git用户:

# useradd gituser
# passwd gituser
  • 1
  • 2
  • 1
  • 2

另外也可以拷贝一个公钥到服务器上,后续在本地进行git操作时不需要输入密码,跟GitHub一样,需要的可以自行搜索,这里不详细介绍了。

然后在仓库的路径下,创建一个git裸仓库:

# git init --bare jokes.git
  • 1
  • 1

jokes.git是项目路径文件夹,加了 –bare参数后创建的就是裸仓库,裸仓库包含的文件相当于非裸仓库 .git 文件夹下的文件,裸仓库没有work tree,因而不能执行 git add 等一些命令,这就限制了在服务器上的git编辑行为。

为什么用裸仓库呢?这是为了避免用非裸仓库带来的一些问题,如果是非裸仓库,服务器上有一个work tree,本地客户端 push origin master 后会产生冲突,而裸仓库就没有这个问题。但是在裸仓库里是看不到我们的项目文件的,最多通过 git log命令查看commit记录,不过我们只把仓库作一个纯粹的存储作用,也不影响。

初始化之后,把仓库改成gituser所有:

# chown -R gituser:gituser jokes.git
  • 1
  • 1

git 默认是禁止push的,所有要设置允许push:

# vi config
  • 1
  • 1

修改或添加如下内容:

[receive]
denyCurrentBranch = ignore
  • 1
  • 2
  • 1
  • 2

(2) 编辑自动部署脚本 
自动部署用到git hooks,在git路径下有个hooks文件夹,里面有一些示例。我们把post-update.sample重命名为post-update,并进行编辑:

# mv post-update.sample post-update
# vi post-update
  • 1
  • 2
  • 1
  • 2
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update". #exec git update-server-info unset GIT_DIR NowPath=`pwd` DeployPath="/data/wwwroot/default/test/jokes" cd $DeployPath
git pull origin master
composer install cd $NowPath echo 'deploy success'
exit 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

这样每当push master分支到服务器时,都会自动切换到DeployPath,也就是Nginx root路径,执行 git pull origin master 从仓库拉去最新master分支,并执行composer install ,如果项目composer有变更则安装,没有变更则不会安装。

(3) 部署路径初始化 
先把空的仓库克隆到路径下:

# git clone jokes /data/git/jokes.git
  • 1
  • 1

对于要部署的路径,要把所有者该为gituser:

# chown -R gituser:gituser jokes
  • 1
  • 1

服务器的配置就级别完成了

4. 本地创建Laravel项目

(1) 安装Homestead 
本地用的 Windows 系统,打算用 PhpStrom 进行开发,开发过程还需要在本地进行调试。PhpStorm 编辑代码自然是比较方便,但是要在 Windows 下搭建 Laravel 运行环境显然比较坑,好在 Laravel 已经给我们提供了解决方案, 使用 Homestead 。

Homestead 是集成了 Laravel 运行所需一些的 Ubuntu 系统,使用时要先安装虚拟机软件(如VitrulBox)和 Vagrant,具体安装过程参考 Laravel 中文文档: 
http://d.laravel-china.org/docs/5.4/homestead

Homestead还提供了主机和虚拟机文件的共享映射,在任何一个系统修改都可以自动同步到另一个系统,因此我们可以在Windows上进行编辑,在Homestead上作为服务器来运行,并且在Windows的浏览器或者Postman等测试工具上也可以直接访问Homestead服务器的网址。

(2) 初始化项目

执行vagrant up 启动Homestead,进入到共享文件夹下的项目路径,执行laravel new jokes 创建jokes项目:

vagrant@homestead:~/Code$ laravel new jokes
Crafting application...
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 59 installs, 0 updates, 0 removals
- Installing doctrine/inflector (v1.1.0): Loading from cache
- Installing erusev/parsedown (1.6.2): Downloading (100%)
- Installing jakub-onderka/php-console-color (0.1): Downloading (0%)
Downloading (100%)
- Installing symfony/polyfill-mbstring (v1.3.0): Loading from cache
- Installing symfony/var-dumper (v3.2.7): Downloading (100%)
- Installing psr/log (1.0.2): Loading from cache
- Installing symfony/debug (v3.2.7): Downloading (100%)
- Installing symfony/console (v3.2.7): Downloading (100%)
- Installing nikic/php-parser (v3.0.5): Downloading (100%)
...
laravel/framework suggests installing symfony/dom-crawler (Required to use most of the crawler integrat ion testing tools (~3.2).)
laravel/framework suggests installing symfony/psr-http-message-bridge (Required to psr7 bridging featur es (0.2.*).)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/php-code-coverage suggests installing ext-xdebug (^2.5.1)
phpunit/phpunit suggests installing ext-xdebug (*)
phpunit/phpunit suggests installing phpunit/php-invoker (~1.1)
Generating optimized autoload files
> php -r "file_exists('.env') || copy('.env.example', '.env');"
> Illuminate\Foundation\ComposerScripts::postInstall
> php artisan optimize
Generating optimized class loader
The compiled services file has been removed.
> php artisan key:generate
Application key [base64:hsfP0smMv8yRhGYxJkBUi6JjBqUQFZ7jZgP0Rmuz9lI=] set successfully.
Application ready! Build something amazing.
  • 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
  • 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

这时候本地的项目就创建好了,访问Homestead里配置的地址,可以看到一个Laravel的欢迎界面: 

5. 推送git仓库

进入共享文件夹,执行git clone gituser@server_ip:/data/git/jokes.git 将远程的空仓库克隆下来。

执行git add -A 将创建的项目添加到git。

执行git commit -m "init" 提交变更。

执行git push origin master 推送到远程仓库

此时在登录到服务器,进入到仓库路径,可以看到这个裸仓库下依然没有任何jokes项目相关的文件,但是通过git log可以看到提交的commit:

[root@server jokes.git]# ls
branches config description HEAD hooks info logs objects refs [root@server jokes.git]# git log commit d593a9dafeebc332a5149b0f7718cc78ec43f959
Author: user<zhongchenyu***@***.com>
Date: Fri Apr 28 00:07:47 2017 +0800 init
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

再进到Nginx root路径,发现项目文件已经被部署过来了:

[root@server jokes]# ls
aapp composer.json database public server.php vendor
artisan composer.lock package.json resources storage webpack.mix.js
bootstrap config phpunit.xml routes tests yarn.lock
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

这个时候服务器的网址还是不能访问的,本地环境创建完项目后马上就能访问,那是因为Homestead已经把很多事情搞定了。在服务器上还要自己完成下面几个步骤。 
(1) 给项目的storage 和 bootstrap/cache路径添加写权限 
(2) 在项目路径下执行composer install 
(3) 创建环境信息文件,将 .env.example 重命名为 .env 
(4) 执行php artisan key:generate 生成app key

这个时候再访问服务器地址,好的,页面出来了: 

6. 开始开发

我们试着增加一条路由,返回Hello World。 
编辑Routes/web.php , 增加下面代码:

Route::get('foo', function () {
return 'Hello World';
});
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

然后git add, git commit, git push 推送到服务器。

访问服务器新的路由地址,成功: 

利用Git搭建自动部署的Laravel环境 - 钟晨宇的博客 - CSDN博客的更多相关文章

  1. Angular01 利用grunt搭建自动web前端开发环境、利用angular-cli搭建web前端项目

    搭建angular开发环境 一.下载并安装node 官网地址:点击前往 二.利用npm安装cnpm 安装好node后就可以使用npm命令啦 查看版本:npm -v 安装cnpm:npm install ...

  2. 记录使用gogs,drone搭建自动部署测试环境

    使用gogs,drone,docker搭建自动部署测试环境 Gogs是一个使用go语言开发的自助git服务,支持所有平台 Docker是使用go开发的开源容器引擎 Drone是一个基于容器技术的持续集 ...

  3. 使用gogs,drone搭建自动部署

    使用gogs,drone搭建自动部署 使用gogs,drone,docker搭建自动部署测试环境 Gogs是一个使用go语言开发的自助git服务,支持所有平台Docker是使用go开发的开源容器引擎D ...

  4. 利用IDEA搭建JDK源码阅读环境

    利用IDEA搭建JDK源码阅读环境 首先新建一个java基础项目 基础目录 source 源码 test 测试源码和入口 准备JDK源码 下图框起来的路径就是jdk的储存位置 打开jdk目录,找到sr ...

  5. 做了一个简易的git 代码自动部署脚本

    做了一个简易的git 代码自动部署脚本 http://my.oschina.net/caomenglong/blog/472665 发表于2个月前(2015-06-30 21:08)   阅读(200 ...

  6. Jenkins+Maven+SVN搭建自动部署、自动测试环境

    .打开http://10.3.15.78:8080/jenkins/,第一次进入里面没有数据,我们需要创建job,我们这有2个项目,需要创建2个job.http://10.3.34.163:9890/ ...

  7. 搭建git服务器及利用git hook自动布署代码

    注意:服务器:Ubuntu Server 14.04,我的项目比较小,所有操作都使用root,建议最好新建一个用户(需要有管理员权限,否则在后面使用hooks自动部署代码时会出现各种权限问题,很蛋疼的 ...

  8. 使用 Git Hook 自动部署 Hexo 到个人 VPS

    安装 Hexo 既然我的标题都已经那样写了,当然这个小节就不是本篇文章的重点了. 关于 Hexo 的安装跟配置,其实网上已经有很多很多文章了,随便一搜一大把.这里就有一篇超详细的,大家可以参考一下. ...

  9. 【前端】CentOS 7 系列教程之四: 配置 git 服务器自动部署

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/linux_4.html 安装pm2守护进程,备用 npm install -g pm2 创建/srv/www文件夹 ...

随机推荐

  1. Maven的作用及简介

    Maven的作用及简介 一.maven作用 项目之间都是有依赖的,比如A项目依赖于B项目,B项目依赖与C.D项目,等等.这样的依赖链可能很长. 但是,没有一个项目的jar包我们都要导入进去,我们要做的 ...

  2. Android基础控件ProgressBar进度条的使用

    1.简介 ProgressBar继承与View类,直接子类有AbsSeekBar和ContentLoadingProgressBar, 其中AbsSeekBar的子类有SeekBar和RatingBa ...

  3. Android基础控件ToggleButton和Switch开关按钮

    1.简介 ToggleButton和Switch都是开关按钮,只不过Switch要Android4.0之后才能使用! ToggleButton <!--checked 是否选择--> &l ...

  4. java.io.FileNotFoundException: E:\work\work (拒绝访问。)

    转载自:https://blog.csdn.net/YQS_Love/article/details/51959776 一.问题 在使用FileInputStream或FileOutputStream ...

  5. PAT甲级——A1087 All Roads Lead to Rome【30】

    Indeed there are many different tourist routes from our city to Rome. You are supposed to find your ...

  6. 【转载】Fiddler抓包及模拟服务端

    此文章转载公众号‘云测学院'链接:https://mp.weixin.qq.com/s/qXmBDh980nBJ8IchbRGC3Q 及公众号gloryroadtrain 在HTTP接口的测试过程中, ...

  7. wpf关闭窗口弹出是否确认关闭的提示

    if (MessageBox.Show("是否退出系统?", "退出系统?", MessageBoxButton.OKCancel, MessageBoxIma ...

  8. RTNETLINK answers: File exists错误解决方法

    >一.写在前面: 因为是我刚学习linux好多问题需要解决,bolg仅作为记录自己的在技术这条道路上的点点滴滴. 二.事件起因: 最近因为女友的原因消沉的好长时间,在马哥那里的课程的结束到现在已 ...

  9. hive新加入字段插入数据需要注意事项

    hive中新加字段需要注意如下 1)如果表中有分区字段,必须先删除分区才能插入数据否则为null; 2)insert override TABLE table1 select counm1,counm ...

  10. 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题

    导语 发布app后,开发者最头疼的问题就是如何解决交付后的用户侧问题的还原和定位,是业界缺乏一整套系统的解决方案的空白领域,闲鱼技术团队结合自己业务痛点在flutter上提出一套全新的技术思路解决这个 ...