记一次 Laravel 代码部署到服务器上(Ubuntu 18.04)

为什么写这篇文章

完成 第二套 教程后,正好手上有一台闲置的服务器,所以就想着搭建到服务器上。一开始以为很简单(因为之前弄过一次),没想到还是弄了快一天才弄好。所以这里记录一下这次的搭建过程,以便下次省点力。

本次搭建的环境为 Ubuntu 18.04 LTS 。我会从初始化开始到安装软件再到部署 Laravel 代码。

注:本文命令全在 root 用户下执行,如果你的是普通用户,命令执行不成功,请在命令前面加上 sudo

安装软件

我是用的是 LNMP 所以要安装 NginxMySQLPHP。因为涉及到缓存,故要安装 Redis。另外还要安装版本控制工具:Git 和 PHP 包管理工具:Composer

更新软件源

安装软件之前,我们先要更新软件源:

$ apt update

然后升级软件

$ apt upgrade

输入 Y 或者直接回车,开始升级。

本地化配置

修改本地配置为 en_US.UTF-8

$ locale-gen en_US.UTF-8
$ update-locale LC_ALL=en_US.UTF-8

修改时区

$ timedatectl set-timezone Asia/Shanghai

安装 Nginx

使用如下命令安装 Nginx :

$ apt install nginx -y

这里添加了 -y 选项,表示同意下载软件,不会询问你是否同意安装软件,下同。

查看是否安装成功

$ nginx -v
# 输出
nginx version: nginx/1.14.0 (Ubuntu)

在 80 向外开放的前提下(在安全组中加上 80 端口),在浏览器中输入服务器的公网 IP ,会出现 Nginx 欢迎页面,则代表 Nginx 运行成功。

安装 PHP

添加软件源

由于 Ubuntu 的官方软件源通常不包含最新版本的 PHP,因此需要添加一个包含最新 PHP 的第三方软件源。

在添加之前,我们首先安装名为 software-properties-common 的软件包,它提供了快速管理软件源的实用脚本:

$ apt install -y software-properties-common

随后,执行以下脚本添加第三方 PHP 软件源:

$ add-apt-repository -y ppa:ondrej/php

成功后别忘记刷新:

$ apt-get update

安装 PHP 及其 拓展

我这里安装的是 PHP 7.4。执行下列命令,安装 PHP 及其拓展:

$ apt install -y php7.4 php7.4-cli php7.4-fpm php7.4-mbstring php7.4-xml php7.4-bcmath php7.4-curl php7.4-gd php7.4-mysql php7.4-opcache php7.4-zip php7.4-sqlite3

查看 PHP 是否安装成功:

$ php -v 
# 输出
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies

安装 MySQL

执行如下命令安装 MySQL:

$ apt install mysql-server -y

安装 MySQL 是我遇到的第一个坑,因为这里不会像安装其他 MySQL 版本一样提示设置 root 密码,而是通过一个脚本来进行交互。前前后后弄了半天也弄不好。好在找到这篇 文章 解决了这个问题。

查看 MySQL 是否安装成功

$ mysql --version
# 输出
mysql  Ver 14.14 Distrib 5.7.30, for Linux (x86_64) using  EditLine wrapper

安装 Redis

执行如下命令安装 Redis:

$ apt install redis -y

安装完成后,使用命令 redis-cli ping 输出 PONG 则代表 安装成功。

安装 Git

$ apt install -y git

查看 Git 是否安装成功

$ git --version
# 输出
git version 2.17.1

安装 composer

$ wget https://raw.githubusercontent.com/composer/getcomposer.org/master/web/installer -O - -q | php -- --filename=composer --install-dir=/usr/local/bin

这个下载可能有慢一点,建议多等一会。

检查是否安装成功:

$ composer -V
# 输出
Composer version 1.10.6 2020-05-06 10:28:10

配置 composer 镜像源:

$ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

全局下载 Composer 多线程下载的工具:

$ composer global require hirak/prestissimo

使用 systemctl 管理服务

安装完软件后,我们还要知道如何使用安装的服务,在 Linux 中,我们可以使用 systemctl 来管理服务的启动/开机启动与查看状态。

systemctl 的使用方法为:

$ systemctl [command] [unit]
command 主要有:
start    : 立即启动 unit
stop     : 立即关闭 unit
restart  : 重新启动 unit,即先执行 stop 在执行 strat 的意思
reload   : 不关闭 unit 的情况下,重新加载配置文件,让设置生效
enable   : 打开 unit 下次开机自启
disable  : 关闭 unit 下次开机自启
status   : 查看 unit 的状态

这里的 unit 则代表服务,例:Nginx 的服务就是 nginx.server 。

注意:PHP 的服务是 php7.4-fpm.service ,PHP-FPM 是用户管理 PHP 进程,并提供 FastCGI 接口与 Nginx 交互;浏览网页时的请求便是由 Nginx 交由 PHP-FPM 处理的。

查看 nginx 状态:

$ systemctl status nginx.server
# 会输出如下信息。
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-05-22 15:40:36 CST; 2min 17s ago
    .
    .
    .
  • Loaded:说明 nginx 是否开机自启,enabled 为开机自启,disabled 开机不会启动。可以看到 第二个选项是 enabled 说明是开机自启(注意,不要看到最后一个选项了,那是 vendor preset ,意为供应商预设)。如果是 disabled ,执行 systemctl enable nginx 命令来达到开机自启。
  • Active:说明 Nginx 是正在执行(running)还是没有执行(dead)。如果为 dead 的话,执行 systemctl start nginx 命令来启动 Nginx。

部署代码

在部署代码之前,我们先创建数据库:

$ mysql -u root -p
# 输入密码进入 mysql
# 创建数据库
mysql> CREATE DATABASE [your_databases_name] DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

拉取代码,并进行基础配置

# 切换至 www 目录
$ cd /var/www
# 使用 Git 拉取代码
$ git clone https://gitee.com/good_man_yikang/laraveltow.git
# 进入项目目录
$ cd laraveltow
# 使用 composer 安装依赖,不下载开发下的依赖
$ composer install --optimize-autoloader --no-dev
# 生成 .env 文件
$ php -r "file_exists('.env') || copy('.env.example', '.env');"
# 生成 APP_KEY
$ php artisan key:generate --ansi
# 修改目录文件用户和用户组
$ chown -R www-data:www-data .
# 修改文件权限
$ chmod -R 750 .
$ chmod -R 770 storage bootstrap/cache

根据自己的实际情况配置 .env 文件,线上的话要将 APP_ENV 设置为 production(生产环境),APP_DENUG 设置为 false

配置完成后,执行 php artisan migrate 来运行迁移文件,创建数据表。

配置 Nginx 站点

首先进入 Nginx 的配置目录,接着创建配置文件:

$ cd etc/nginx/sites-enabled
$ vim laraveltow.conf

根据 laravel 文档 我们可以快速写出 Nginx 配置文件:

server {
    listen 80;
    server_name 101.200.187.138; # 修改为服务器公网 IP 或域名
    root /var/www/laraveltow/public; # 指向站点根目录的 public 子目录

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    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; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 请注意核对 PHP 版本
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

配置完成后,使用 reload 来重新加载 nginx 配置文件:

$ systemctl reload nginx

至此,访问你的服务器 IP 公网地址,即可看到网站主页。

参考链接

  1. Ubuntu 18.04 通过 apt 安装 MySQL 5.7
  2. 轻松部署 Laravel 应用
  3. 鸟哥的 Linux 私房菜
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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