目标:服务器上搭建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. C++ 字符串、string、char *、char[]、const char*的转换和区别

    1.字符串 字符串本质就是一串字符,在C++中大家想到字符串往往第一反应是std::string(后面简称string) 字符串得从C语言说起,string其实是个类,C语言是没有class的,所以C ...

  2. Swagger发布服务器时错误 500 : { "Message": "An error has occurred." }

    在做Web API的文档自动生成时,本机调试都正常,发布到服务器上出现500错误 500 : { "Message": "An error has occurred.&q ...

  3. HttpException (0x80004005): 无法连接到 SQL Server 会话数据库

    ASP.NET 项目运行时出现错误提示:[HttpException (0x80004005): 无法连接到 SQL Server 会话数据库.] ,后排查问题发现是由于项目的Session模式是使用 ...

  4. 玩转大数据系列之Apache Pig高级技能之函数编程(六)

    原创不易,转载请务必注明,原创地址,谢谢配合! http://qindongliang.iteye.com/ Pig系列的学习文档,希望对大家有用,感谢关注散仙! Apache Pig的前世今生 Ap ...

  5. MFC安装与部署(程序打包)

    (发现csdn传照片实在是太麻烦, 不能够直接拖拽进来;所以我直接使用云笔记生成一张图片 直接完成!) (懒癌晚期-)

  6. bash之set命令

    set命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题.本文介绍它的基本用法,让你可以更安心地使用 Bash 脚本. 一.简介 我们知道,Bash 执行脚本的时候,会创 ...

  7. 二进制操作(1)–Bytes

    1,Bytes的单元被当作字符串处理. 例如: 有些介绍会声称上述程序会得到这样的结果:b'\x00\x00\x00\x00' 在python v2.7.10上是得不到此结果的. 实际上,如果 typ ...

  8. Django项目:CRM(客户关系管理系统)--61--51PerfectCRM实现CRM客户报名流程学生合同上传照片

    # sales_views.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.db import IntegrityError # 主动 ...

  9. 搭建nodejs代理服务器,从而解决跨域问题

    先在同级处新建js文件(app.js) 使用时npm 安装 Node.js 模块语法 也就是对应的文件所在地“npm install”一下 然后安装对应需要的模块: expresspathreques ...

  10. 提示框插件layer的使用讲解

    官方网站:http://layer.layui.com/ 在页面中引入: <script src="js/layer-v3.0.3/layer/layer.js">&l ...