为什么写这篇文章
完成 第二套 教程后,正好手上有一台闲置的服务器,所以就想着搭建到服务器上。一开始以为很简单(因为之前弄过一次),没想到还是弄了快一天才弄好。所以这里记录一下这次的搭建过程,以便下次省点力。
本次搭建的环境为 Ubuntu 18.04 LTS 。我会从初始化开始到安装软件再到部署 Laravel 代码。
注:本文命令全在 root 用户下执行,如果你的是普通用户,命令执行不成功,请在命令前面加上 sudo
安装软件
我是用的是 LNMP 所以要安装 Nginx
,MySQL
,PHP
。因为涉及到缓存,故要安装 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`。<br />配置完成后,执行 `php artisan migrate` 来运行迁移文件,创建数据表。
### 配置 Nginx 站点
首先进入 Nginx 的配置目录,接着创建配置文件:
$ cd etc/nginx/sites-enabled $ vim laraveltow.conf
根据 [laravel 文档](https://learnku.com/docs/laravel/7.x/deployment/7452#62e0b5) 我们可以快速写出 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;
# Laravel 默认重写规则;删除将导致 Laravel 路由失效且 Nginx 响应 404。
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
别忘了开启你的 PHP-FPM 进程管理
$ systemctl reload php7.4-fpm
``` 至此,访问你的服务器 IP 公网地址,即可看到网站主页。
参考链接
- Ubuntu 18.04 通过 apt 安装 MySQL 5.7
- 轻松部署 Laravel 应用
- 鸟哥的 Linux 私房菜