记一次 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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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