Ubuntu 14/16 下的 Laravel LNMP 线上环境自动部署脚本

分享 Summer ⋅ 于 1年前 ⋅ 最后回复由 god-lin 1天前 ⋅ 21767 阅读

file

说明

此脚本用于在一台全新的 Ubuntu 14.04 LTS( Ubuntu 16 请使用这个脚本) 上部署适合 Laravel 使用的 LNMP 生产环境。

此脚本参照了 Homestead 环境设置脚本 ,并做了更加适用于生产环境的效率和安全调优。

项目地址:https://github.com/summerblue/laravel-ubuntu-init

软件信息

  • Ubuntu 14.04 / Ubuntu 16 请使用这个脚本
  • Git
  • PHP 7.1
  • Nginx
  • MySQL 5.7
  • Sqlite3
  • Composer
  • Node 6 (With PM2, Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd

安装步骤

1). 下载 deploy.sh 脚本

wget https://raw.githubusercontent.com/summerblue/laravel-ubuntu-init/master/deploy.sh
chmod +x deploy.sh

2). 设置 MYSQL 密码

vi deploy.sh 根据情况修改以下:

# Configure
MYSQL_ROOT_PASSWORD="这里填写复杂的密码"
MYSQL_NORMAL_USER="estuser"
MYSQL_NORMAL_USER_PASSWORD="这里填写复杂的密码"

3). 开始安装

有需要的话可以使用网易镜像加速:

wget http://mirrors.163.com/.help/sources.list.trusty -O /etc/apt/sources.list

开始安装:

./deploy.sh

注:请使用 root 运行。

安装后会有类似输出:

--
--
It's Done.
Mysql Root Password: xxx你的密码xxx
Mysql Normal User: estuser
Mysql Normal User Password: xxx你的密码xxx
--
--

安装完以后的配置和注意事项

1. 修改站点目录权限

通过此脚本配置的 Nginx 将使用 www 用户权限,因此需要在你的站点根目录下运行以下命令更新权限。

cd /data/www/{你的网站目录}
chown www:www -R ./

2. 添加站点的 Nginx 配置

下面是站点的 Nginx 配置模板,写入按照域名命名的文件中,并放入到 /etc/nginx/sites-enabled 目录下。

如:/etc/nginx/sites-enabled/phphub.org

server {
    listen 80;
    server_name {你的域名};
    root "{站点根目录}";

    index index.html index.htm 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; }

    access_log /data/log/nginx/{你的网站标识}-access.log;
    error_log  /data/log/nginx/{你的网站标识}-error.log error;

    sendfile off;

    client_max_body_size 100m;

    include fastcgi.conf;

    location ~ /\.ht {
        deny all;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        #fastcgi_pass /run/php/php7.0-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

配置完以后重启 Nginx 即可。

service nginx restart

本文章首发在 Laravel China 社区

Practice makes perfect.

本帖已被设为精华帖!
本帖由系统于 1年前 自动加精
回复数量: 86
  • 帮你把 Mysql 版本号标注出来了。

    用过 Mysql 的 json 字段便离不开了。 :smile:

    1年前
  • Aufree 站长 @ ioscaff.com
    1年前
  • overtrue PHP @ Tencent

    @zhuzhichao :bug: 小能手

    1年前
  • Ubuntu 16.10.2版本的有没有

    1年前
  • 点赞一直失败,后来才发现自己没登陆,没提示登录了么?

    1年前
  • Summer 站长 @ laravel-china.org

    @宋小北 多谢反馈,已 fix

    1年前
  • 好像可以替代 forge 了

    1年前
  • 安装完默认的 web 服务器是 apache?

    1年前
  • Destiny 技术部 @ 一一得一科技有限公司

    :punch: 支持!

    1年前
  • Summer 站长 @ laravel-china.org

    @dinghua 这脚本没安装 apache,估计是你的 ubuntu 镜像里带着的,remove 掉即可。

    1年前
  • 我都重新配置服务器,结果
    Redis
    Beanstalkd
    这两个没有啊,咋回事

    1年前
  • debian的话,貌似修改一下也能用?

    1年前
  • 我想在阿里云上安装,但是不想安装mysql因为我在使用阿里云的RDS,我怎么做呢?

    1年前
  • 这个不错,省了好多事,不过是否能自定义选择一些组件,如我楼上的那样需求一样

    1年前
  • JobsLong CEO @ 优帆远扬

    @隔壁老王 只是一些安装脚本,可以考虑 fork 一份根据自己的需要修改;

    1年前
  • @zhuzhichao 再试试PostgreSQL的JSONB你会觉得MYSQL很渣。

    1年前
  • @cevin :+1: PostgreSQL 的 JSONB 确实先进,不过偶尔少量数据用Mysql 的 JSON 处理已经够用了,如果这类数据多了会使用 mongodb 里做存储的。

    1年前
  • ·service nginx restart· 提示 Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details. 不理解什么意思,也搜不到相关解释,重启服务器就好了。本地也是.

    1年前 2
  • 擦能靠谱点吗 文件件都不见了

    1年前
  • Summer 站长 @ laravel-china.org

    @ydxred 有 bug?愿听赐教

    1年前
  • @Summer 抱歉!我是操作有误...

    1年前
  • 为什么我配置完或者稍微改了一下配置nginx就启动不来了啊
    root@ydxred:/etc/nginx/sites-enabled# service nginx restart
    stop: Unknown instance:
    nginx stop/pre-start, process 3318
    root@ydxred:/etc/nginx/sites-enabled#
    这是什么原因啊

    1年前
  • @Class 我的也是这个情况

    1年前
  • @Summer
    ubuntu@VM-242-95-ubuntu:~$ systemctl status nginx

    • nginx.service - A high performance web server and a reverse proxy server
      Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
      Active: failed (Result: exit-code) since Thu 2017-03-09 07:55:04 CST; 1min 37s ago
      Main PID: 7222 (code=exited, status=0/SUCCESS)

    • Mar 09 07:55:04 VM-242-95-ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server...
    • Mar 09 07:55:04 VM-242-95-ubuntu nginx[18329]: nginx: [emerg] unknown directive "erver" in /etc/nginx/sites-enabled/laragh
    • Mar 09 07:55:04 VM-242-95-ubuntu nginx[18329]: nginx: configuration file /etc/nginx/nginx.conf test failed
    • Mar 09 07:55:04 VM-242-95-ubuntu systemd[1]: nginx.service: Control process exited, code=exited status=1
    • Mar 09 07:55:04 VM-242-95-ubuntu systemd[1]: Failed to start A high performance web server and a reverse proxy server.
    • Mar 09 07:55:04 VM-242-95-ubuntu systemd[1]: nginx.service: Unit entered failed state.
    • Mar 09 07:55:04 VM-242-95-ubuntu systemd[1]: nginx.service: Failed with result 'exit-code'.
      lines 1-12/12 (END)

    想哭

    1年前
  • 服务器ubuntu 选择32位和64位会有影响吗?

    1年前
  • Summer 站长 @ laravel-china.org

    @颜⑧ 不能直接用官方的 settler 脚本,里面有很多安全问题。

    1年前
  • Star、

    1年前
  • huazi PHP @ GreenWild

    @xhh110 我的也是这样 所有的软件都没有安装成功,好像是依赖的问题,我看到安装过程中 好多报错, 依赖不匹配。我是刚装的16.04

    1年前
  • @huazi 我也是依赖问题。。。所以直接换回centos。。。

    1年前
  • Summer 站长 @ laravel-china.org

    @xhh110
    @huazi 从你的报错信息看是站点没配置对,目测是把 server 黏贴为 erver

    Mar 09 07:55:04 VM-242-95-ubuntu nginx[18329]: nginx: [emerg] unknown directive "erver" in /etc/nginx/sites-enabled/laragh
    Mar 09 07:55:04 VM-242-95-ubuntu nginx[18329]: nginx: configuration file /etc/nginx/nginx.conf test failed
    1年前 1
  • 真是太好用了,一键安装 省时省力啊!但是大家线上的服务有用Centos 的吗!有什么脚本值得参考吗。

    1年前 1
  • 16.04下,依次执行:apt-get update apt-get -y upgrade apt-get install -y software-properties-common curl之后,再按照步骤走,就没问题了。不然会导致:software-properties-common 安装不上,然后各种问题。 阿里云初始化N次后总结出来的。希望后面同学注意安全。哈哈
    @Summer 老大,这个是网易镜像的问题吗?

    1年前
  • @Summer 我跟着这个教程上线了一个小博客,输入域名后提示EOF sumer哥能给指个方向吗?我以为是权限问题然后看了下权限是775,然后我改成了777,但访问是还是EOF.

    1年前
  • 请教一下,我运行完脚本后,做到设置Nginx的这一步,但是在etc下没有找到Nginx?@Summer

    file

    1年前
  • 日后升级的话如何升级,apt?

    11个月前
  • @Summer Supervisor 官方推荐的进程监控软件,有考虑弄到脚本里面吗?

    11个月前
  • 发现个问题,在16下运行脚本的时候由于安装php的时候会安装 apache 的依赖,导致在重启 nginx 的时候因为 80 被占用导致
    nginx 重启失败,所以需要移出 apache 相关的软件,可能上面回复 apache 的原因就是在此。

    10个月前
  • 在16下面进行安装,安装完成后nginx起不起来,发现需要执行apt-get purge apache2 后nginx才能起起来。

    9个月前 9
  • 隔壁京东云新买服务器,除了 composer 似乎出了问题,手动复制脚本代码执行外,其余成功安装。

    8个月前
  • /etc/nginx/sites-enabled# service nginx restart
    stop: Unknown instance:
    nginx stop/pre-start, process 21910 求教题主

    8个月前
  • @Summer 有几个问题请教一下。

    1. 为什么 nginx 不选择使用最新的稳定版,而选择使用开发版?
      * 'community':  Community Build
      * 'development':  NGINX Mainline
      * 'nightly':  Nightly Snapshot
      * 'stable':  NGINX Stable 
    2. 在部署脚本中没有关于php-fpm进程数量的优化,个人认为如果这样处理并发能力上会有缺陷。
    7个月前
  • 我就想问下,这个环境有mssql驱动吗?项目用的是sql server数据库

    7个月前
  • @Summer 这帖子还可以用吗?是不是 Laravel 5.5 需要PHP 7.1 以上了?

    6个月前
  • 着急

    第一次用这个脚本部署环境,部署完了把项目放进去提示:

    could not find driver

    6个月前
  • 我用deploy-16的脚本安装的环境,php的扩展一个都没有加载,配置文件也很难找,试试14版本的再说

    6个月前
  • 早点回去试试

    5个月前
  • 早点回去试试?

    5个月前
  • 请问17可以正常使用吗?

    5个月前
  • hedeqiang PHP @ LaravelCode

    Ubuntu 16.04 使用此脚本安装一切正常,唯独 composer 没有安装

    5个月前
  • 希望可以出个视频

    5个月前
  • @Class 我也是这个问题,请问是怎么解决的

    5个月前
  • lmaster phper @ 泛爱之家

    @Summer Ubuntu 16.04安装完成后发现php没mbstring扩展,这个怎么添加扩展

    4个月前
  • 在阿里云上使用ubuntu 16.04 安装记录:

    • 失败1: 安装 software-properties-common 失败, 提示python3 版本过高,使其依赖不能正常安装
    • 解决方式: 先apt-get update 然后, apt-get install -y software-properties-common, 然后 apt-get -y upgrade

    • 失败2: nginx 无法正常启动, 我这边的原因是 80 端口被 apache2 占用,最初删除了apache2, 当中可能在装依赖的时候又把apache2装上了
    • 解决方式:停止apache服务,删除它

    • 失败3: 执行composer install ,出现一系列的少php扩展的错误
    • 解决方式: 安装php扩展的时候指定前缀,如:php-mbstring php-xml 改成 php7.1-mbstring php7.1-xml 等
    4个月前 1
  • 老好人 物业负责人 @ 金马凯旋家居CBD

    阿里云 1核 1G入门云服务器安装成功,最后出现:

    --
    It's Done.
    Mysql Root Password: xxxxxx
    Mysql Normal User: estuser
    Mysql Normal User Password: xxxxx

    --

    3个月前
  • Ubuntu 14.04 使用此脚本安装正常

    3个月前
  • ubuntu 16 版本 安装后却是存在apache被安装,而且为默认服务器。

    3个月前 1
  • 问下 那个脚本 centos系统的话 怎么改能使用吗

    3个月前
  • 老好人 物业负责人 @ 金马凯旋家居CBD
  • 使用脚本安装完成后,需要自己建立 /data/www/{你的网站目录} 和/data/log/nginx/ 目录,否则nginx会出现错误无法重启。
    另外,安装脚本后,nginx如果ubuntu reboot不会重新启动,需要通过 /etc/init.d/nginx start或者 service nginx start进行启动,所以,如果想重启后直接启动,可以sudo chmod a+x /etc/init.d/nginx,然后 vi /etc/rc.local,在 exit0 前面增加一行 /etc/init.d/nginx start 即可。

    3个月前 2
  • @wuqi80 大佬,这个安装完后怎么用啊,直接把本地文件传到网站根目录吗

    3个月前
  • @wuqi80 知道了,谢谢大佬

    3个月前
  • 用腾讯云ubuntu14使用这份攻略安装无报错,
    但最后打开的网站却还是显示apache2(尽管端口80显示是nginx)。
    办法是清除apache2,上面说的apt-get purge apache2不够,
    我开始使用的命令为:
    sudo apt-get --purge remove apache-common

    sudo apt-get --purge remove apache
    sudo find /etc -name "apache" |xargs rm -rf
    sudo rm -rf /var/www
    sudo rm -rf /etc/apache2
    上述删除后发现还是不行,后面发现最关键的要到/etc/php/7.1中sudo rm -rf apache2(这个apache应该是安装php带上的),这时候打开网站就显示为nginx了

    后面发现楼上提到这篇文章很好:
    https://laravel-china.org/articles/8350/ali-cloud-ecs-server-ubuntu1404-deploys-laravel-55-project-online
    亲测可行,本文中的一键安装后面的步骤也可以参考上文

    2个月前
  • 一直在想怎样才能把 Homestead 的环境配置部署到服务器上,找了好久好久,终于找到了 :+1: :+1: :+1:

    2个月前
  • JeffLi Laravel工程师 @ 慧通管理咨询

    @haoxing a啊 我也是腾讯云 ubuntu16,执行./deploy-16.sh 的时候,报错

    root@VM-0-15-ubuntu:/home/ubuntu# ./deploy-16.sh
    deploy-16.sh: line 7: syntax error near unexpected token newline
    deploy-16.sh: line 7: <!DOCTYPE html>
    root@VM-0-15-ubuntu:/home/ubuntu#

    百度两天了没解决。。

    2个月前
  • 你好,我按照上面的流程执行了,没有问题。但是我执行phpize命令提示,phpize尚未安装 这个问题怎么解决? find / -name phpize 没有找到。phpize不是自带的吗

    1个月前
  • 出个docker 部署就更好了

    1个月前 1
  • @xiaoguo0426 试试安装 php7.x-dev

    1个月前
  • xin6841414 php开发 @ 山东手麦智能科技有限公司

    @MacDino 阿里云14.04 有这个问题, 安装完 浏览器访问 直接无法访问, 执行service nginx restart 失败 执行你的命令(apt-get purge apache2)后 nginx 才起来,但是 还是无法访问, 哭晕,这教程不适合萌新看啊,

    1个月前
  • file

    1个月前
  • file

    我不明白为什么会这样, 不知道是否有人与我遇到同样的问题, 如果你尝试帮我解决这个困惑, 我会非常感谢 :wink:

    4周前
  • --

    It's Done.
    Mysql Root Password: xwh0412
    Mysql Normal User: estuser
    Mysql Normal User Password: xwh0412

    --#!/usr/bin/env bash
    Error: MYSQL_ROOT_PASSWORD not define!!

    求助

    3周前
  • 执行php artisan migrate,报错:

    In Connection.php line 664:
        could not find driver (SQL: select * from information_schema.tables where table_schema = Test and table_name = test_migrations)
    In PDOConnection.php line 50:
        could not find driver
    In PDOConnection.php line 46:
        could not find driver

    求大神解答~,~

    2周前
  • 天上白玉京 接锅 @ php

    @lcyitar 建立/data/log/nginx/ 目录 log 添加777权限 :flushed:试试

    2周前
  • 请问mysql没有安装该怎么处理?
    service mysql 是未识别的命令
    运行脚本中的apt-get install -y mysql-server报错:
    mysql-server : Depends: mysql-server-5.5 but it is not going to be installed

    2周前
  • wget https://github.com/summerblue/laravel-ubuntu-init/blob/master/deploy-16.sh

    求解一下,下载下来 vi 编辑的时候文件里边是html代码?这个正确吗?

    执行 vi deploy-16.sh,求大佬帮助下

    file

    file

    1周前
  • 发现脚本里面的删除 apache 这个并没有删掉。然后nginx 的自启动没有,这样服务器宕机后重启的话,还需要单独打开nginx很不方便,建议改改。

    1周前
  • file
    前面都没出错,为什么重启的时候没总是失败呢,域名也访问不了,求教

    1周前
  • 出一个 CentOs 的呗 :grin:

    1周前
  • 安装完成,但是 composer 无法使用?

    file

    file

    1周前 1
  • UCloud ubuntu 16 同样的 composer 没有安装上,其他正常

    1周前
  • 另使用 root 运行很不安全吧

    6天前
  • ===> 开始下载...
    ===> 下载完毕

    安装脚本位于: /root/laravel-ubuntu-init
    ===> 正在初始化系统 [DONE]
    ===> 正在初始化软件源 [DONE]
    ===> 正在安装基础软件 [DONE]
    ===> 正在安装 PHP [DONE]
    ===> 正在安装 Mysql / Nginx / Redis / Memcached / Beanstalkd / Sqlite3 [DONE]
    ===> 正在安装 Nodejs / Yarn [DONE]
    ===> 正在安装 Composer [DONE]
    安装完毕
    Mysql root 密码:wb5XQCubN6rRDvZg5SzlIyrbeqXPmXR4
    请手动执行 source ~/.bash_aliases 使 alias 指令生效。

    已实践成功 :fireworks: :fireworks:

    3天前
  • vutlr 16.04 部分安装失败。。。

    2天前
  • 这是一个坑吧,哈哈哈。被玩死,知道是这样就自己装一遍了。

    1天前
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 250 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

Composer 中文文档

Elasticsearch-PHP 中文文档

Lumen 中文文档

GraphQL PHP 中文文档

社区文档撰写指南

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档