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

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 20

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

6年前 评论

@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:

6年前 评论

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

5年前 评论

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

5年前 评论

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

5年前 评论
Vsen

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

5年前 评论
Vsen

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

5年前 评论

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

file

5年前 评论

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

5年前 评论

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

5年前 评论
server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;
        root /var/www/Egame/public;
        index index.php index.html index.htm;
                charset utf-8;
        server_name 39.105.111.181;
        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;
        #}
}
server {
        listen 8001;
        listen [::]:80;

        root /var/www/larablog/public;
        index index.php index.html index.htm;
                charset utf-8;
        server_name 39.105.111.181;
        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;
        #}
}

我直接访问39.105.111.181,可以打开默认的网站,但是通过39.105.111.181:8001,就无法打开,
nginx的error.log里也没有内容。
大佬,我该怎么办,百度也没找到解决这个问题的方法,我服务器的防火墙也没开启。

5年前 评论

楼主🐂🍺,我用那个自动部署任务弄半天都弄不好,参照您的教程一次成功。 :+1: :+1: :+1: :+1: :+1:

4年前 评论

403 Forbidden 怎么解决 一步一步按照步骤配置的

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!