阿里云 ECS 服务器 Ubuntu14.04 部署 Laravel 5.5 项目上线
72

系统环境

服务器:阿里云 ECS 公用镜像 ubuntu14.04 64位 本地:Mac OS
补充说明:国内服务器备案比较繁琐,购买了香港服务器,同系统按照此文步骤也部署成功。

准备工作

  1. 本地连接到服务器,个人使用 SecureCRT
  2. 下载语言包,解决不同语言之间可能发生的冲突
    sudo apt-get update
    sudo apt-get install -y language-pack-en-base

    -y参数的意思是直接安装无需确认
    安装完后运行

    locale-gen en_US.UTF-8
  3. 在服务器上安装 Git
    sudo apt-get install git

配置环境

一:安装 PHP 7.1
ppa 方式安装 php7.1 : sudo apt-get install software-properties-common
添加 php7 的 ppa sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
完成后再运行 sudo apt-get update 更新安装包把刚刚的添加包拉取下来,
运行 apt-cache search php7.1 检验是否安装成功,成功了就能安装php7.1了。
php7.1安装:sudo apt-get -y install php7.1
成功后运行 php -v 查看版本,应显示类似信息

PHP 7.1.0beta2 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.1.0beta2, Copyright (c) 1999-2016, by Zend Technologies


二:安装php7.1的各个模块

sudo apt-get -y install php7.1-mysql
sudo apt-get install php7.1-fpm
apt-get install php7.1-curl php7.1-xml php7.1-mcrypt php7.1-json php7.1-gd php7.1-mbstring

三:安装 mysql

sudo apt-get install mysql-server mysql-client

安装过程中需要输入 2 次密码确认,安装完成后 mysql -u root -p 登陆测试,能正常登陆即安装完成。exit; 退出 mysql

ubuntu14.04 直接安装的 mysql 不是较新版本,为了更好的兼容 Laravel 5.5 项目,因此要升级 mysql 为 5.7 版本

cd ~
wget https://dev.mysql.com/get/mysql-apt-config_0.8.1-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.1-1_all.deb

解压安装包后会弹出框,选择 mysql 5.7 版本后选择 ok 然后继续
更新包索引:sudo apt-get update
安装 MySQL-server:sudo apt-get install mysql-server
升级全部的 Mysql 数据库:sudo mysql_upgrade -u root -p
重启mysql server:sudo service mysql restart
登陆 mysql 查看是否已经升级完毕,成功升级 5.7 版本进入下一步


四:安装 Nginx
这里有点小坑,阿里云的纯净镜像应该是不带 Apache2 的,但是安装完 php7.1 后此时检查已经安装了 Apache2 在服务器上。在安装 Nginx 之前,把 Apache 卸载掉,不然之后萌新会遇到各种奇怪的错误。

sudo service apache2 stop
update-rc.d -f apache2 remove
sudo apt-get remove apache2

删除完了之后更新一下包列表sudo apt-get update
然后安装Nginx sudo apt-get install nginx
安装完成后可以输入公网地址访问,成功的话可以看到 Nginx 的自带欢迎页面


五:配置 PHP
sudo vim /etc/php/7.1/fpm/php.ini 命令行模式下输入/进入查找模式,搜索fix_pathinfocgi.fix_pathinfo=1改为cgi.fix_pathinfo=0


六:配置 Nginx
sudo vim /etc/nginx/sites-available/default

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /var/www/sample/public;
        index index.php index.html index.htm;
                charset utf-8;

        # Make site accessible from http://localhost/
        server_name 你的公网IP(有域名直接填域名);

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.php?$query_string;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }

        location ~ \.php$ {
                try_files $uri /index.php =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}

同服务器多个站点,可以再复制一次以上内容写入 default 文件中,注意要删除 default_server 默认站点只能添加一个。
配置好之后,运行 Nginx -t 如果出现报错,尝试删除其他站点的 ipv6only=on


七:安装 Composer

cd ~
curl -sS https://getcomposer.org/installer | php

再使用命令全局可用 Composer sudo mv composer.phar /usr/local/bin/composer
sudo apt-get install zip unzip 安装 zip unzip 包,避免 Composer 可能因缺少应用造成错误


八:创建新站点
cd /var/www目录下,使用 git clone 整个项目,然后 /var/www 目录下就有你的项目了
后面以 sample 项目为例子操作:git clone https://github.com/xxxxxx/sample.git
cd 进入/var/www/sample目录. cp .env.example .env
用 vim 更改一下配置文件vim .env ,vim 编辑器使用参考10分钟掌握Linux vi编辑器常见命令的使用,最简单的vi编辑器教程

APP_NAME=sample
APP_ENV=local
APP_KEY=base64:c656DOWHg7B9THMemhSV67+aRHOeOBypwNZrybaoGzs=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=sample
DB_USERNAME=root
DB_PASSWORD=数据库密码

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=log 
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

运行 mysql,创建一个新的数据库CREATE DATABASE sample CHARACTER SET =utf8
在/var/www/sample目录下运行命令composer install
完成后运行php artisan key:generate生成密钥
命令php artisan migrate迁移数据库,可能出现数据库拒绝访问的错误,解决方案参考MySQL5.7 实现远程连接
命令php artisan up上线
最后给目录授权

sudo chmod -R 775 storage/
sudo chown -R www-data:www-data /var/www/sample

九:重启Nginx
如果环境一致的话,按照步骤已经部署完成,重启Nginx

sudo service nginx restart
sudo service php7.1-fpm restart

此时在另一设备上从浏览器输入服务器的公网ip已经可以访问您的Laravel项目了!
部署完成!!


致谢
此文大部分内容转载于本地laravel项目部署上线,新人部署环境遇到太多坑,感谢原贴作者精心整理,按照步骤部署在迁移数据库的时候遇到拒绝访问的问题已经贴出解决链接,希望能帮助更多新人。

本帖由系统于 6个月前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 16

请问楼主有考虑过使用docker部署吗?

6个月前
Yvan

@xhh110 这个我试过,不知道什么原因部署失败了。。。

6个月前

@Yvan 我的 16.04 可以完美的运行

6个月前

No hint path defined for [sudosu] 在页面上提示这个需要怎么解决呢?
已解决。。。

6个月前

香港服务器的速度怎么样

6个月前

Class Illuminate\Session\middleware\AuthenticateSession does not exist
出现这个 文件是存在的

6个月前

很详细 哈哈 :stuck_out_tongue_closed_eyes:

5个月前

W: GPG error: http://repo.mysql.com trusty InRelease: The following signatures were invalid: KEYEXPIRED 1487236823 KEYEXPIRED 1487236823 KEYEXPIRED 1487236823
在更新数据库版本包索引时出的。更新失败了。。有什么解决办法吗

4个月前
AGD

阿里云国际不是要手机验证吗,楼主怎么弄上的?

4个月前

腾讯云ubuntu亲测可行。感谢楼主!!

4个月前
seano

请问怎么我配置完Nginx后打开网页还是Nginx的欢迎页面

3个月前
seano

谢谢楼主,配置了3遍终于配置完成。

3个月前

安装mysql的时候,没有5.7,只有5.6

file

3个月前

我错了,多点一步就看到了…………,尴尬了

3个月前

locale-gen en_US.UTF-8 也要使用 sudo 命令 :stuck_out_tongue_closed_eyes:

1个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!