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

系统环境

服务器:阿里云 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项目部署上线,新人部署环境遇到太多坑,感谢原贴作者精心整理,按照步骤部署在迁移数据库的时候遇到拒绝访问的问题已经贴出解决链接,希望能帮助更多新人。