服务器 (Ubuntu 20.04) 手动部署 LNMP

感谢

通过学习 Wi1dcard轻松部署 Laravel 应用 系列课程中的:
04. 手动部署 - 初始化系统
05. 手动部署 - 安装 Nginx
06. 手动部署 - 安装 PHP-FPM
07. 手动部署 - 安装 Git 和 Composer
08. 手动部署 - 部署应用代码
09. 手动部署 - 配置 Nginx 站点
根据以上课程完成的本次部署和笔记,课程后面的优化部分暂未学习。
再次感谢 Wi1dcard

服务器参数

配置:1核2G1M
系统:Ubuntu 20.04 server 64bit
PHP:8.0
Laravel:8

安装运行环境

刷新服务器软件源

软件源 服务器上获取一份最新的包列表并建立本地缓存,包括软件名称、描述、最新版本、下载地址等等。

在服务器执行:

apt update

执行后类似输出,稍等一会即可刷新完成。

root@ecs-84096:~# apt update
Hit:1 http://repo.huaweicloud.com/ubuntu focal InRelease
Get:2 http://repo.huaweicloud.com/ubuntu focal-updates InRelease [114 kB]
Get:3 http://repo.huaweicloud.com/ubuntu focal-backports InRelease [108 kB]
Get:4 http://repo.huaweicloud.com/ubuntu focal-security InRelease [114 kB]

最终输出结果:

176 packages can be upgraded. Run 'apt list --upgradable' to see them.

表示有 176 个软件包可以升级,执行apt list --upgradable 命令来查看它们。

执行升级:

升级不升级都可以,对后续部署基本没有影响,根据服务器性能不同升级快慢也不同。

apt upgrade

确认提示:

168 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
Need to get 225 MB of archives.
After this operation, 74.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

表示操作将占用 225 MB 空间,输入 y 或回车直接升级,等待升级完成即可。

小知识:在提供选项供用户选择时,以大写项为默认值,[Y/n] 那么 Y 即为默认值;同理,若是 [a/b/c/D/e],那么 D 即为默认值。

安装 Nginx

安装 Nginx:

apt install nginx -y

在命令后面加 -y,表示有选项时直接选默认值。

管理 Nginx

service nginx start # 启动 Nginx
service nginx stop # 停止 Nginx
service nginx restart # 重启 Nginx

使用 systemctl命令开关服务的开机自启:

通常情况下,在 APT 安装后已默认启用 Nginx 开机启动。

systemctl enable nginx # 启用 Nginx 开机启动
systemctl disable nginx # 禁用 Nginx 开机启动

查看 Nginx 是否正常运行

在浏览器内输入服务器公网 IP(或域名)并打开,出现默认欢迎页面说明 Nginx 安装成功并正常运行。

PHP


安装MySQL

参考:ubuntu如何安装mysql8.0.19 文章中的安装部分。

依次执行以下命令:

sudo apt-get install mysql-server -y

sudo apt install mysql-client -y

sudo apt install libmysqlclient-dev -y

安装成功!

篇幅有限,关于 MySQL 的配置和开启远程登陆查看:Ubuntu 20.04 安装和卸载 MySQL 8.0.27 学习笔记

mysql 常用命令

启动 mysql:

service mysqld start

停止 mysql:

service mysqld stop

重启 mysql:

service mysqld restart

登陆 mysql:

mysql -u root -p  //root 表示 用户


安装 PHP

配置第三方软件源

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

先安装 software-properties-common 软件包,它提供了快速管理软件源的实用脚本。

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

然后添加第三方 PHP 软件源。

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

添加成功后刷新一下服务器软件源。

apt update

安装 PHP

安装 PHP 实际上是安装 3 个软件包:

  1. PHP - PHP 自身。
  2. PHP-CLI - PHP 的命令行接口,通俗地说,在命令行内执行php 便依赖于此包。
  3. PHP-FPM - 全称为PHP FastCGI Process Manager,用于管理 PHP 进程,并提供 FastCGI 接口与 Nginx 交互;浏览网页时的请求便是由 Nginx 交由 PHP-FPM 处理的。

apt install 支持多参数,所以同时安装 3 个软件包:

这里安装的 PHP 是 8.0 版本。

apt install -y php8.0 php8.0-cli php8.0-fpm

管理 PHP-FPM 服务

通过 servicesystemctl 命令管理 PHP-FPM 服务:

service php8.0-fpm restart # 重启 PHP-FPM
service php8.0-fpm start # 启动 PHP-FPM
service php8.0-fpm stop # 停止 PHP-FPM

# 默认设置
systemctl enable php8.0-fpm # 启用 PHP-FPM 开机启动
systemctl disable php8.0-fpm # 禁用 PHP-FPM 开机启动

不同版本的 PHP-FPM 服务名是不一致的。例如 php8.0 为 php8.0-fpm,8.1 为 php8.1-fpm,以此类推。

查看 PHP-FPM 是否运行

ps aux | grep php
  1. ps aux 用于列出系统当前正在运行的所有进程的所有信息
  2. | 名为管道操作符,将前一条命令的标准输出连接到下一条命令的标准输入。
  3. grep 是一款文本搜索工具,常用来过滤命令行输出;php 是搜索的关键词。
  4. ps 将进程信息输出到 grep 进行过滤,后者筛选出包含 php 字样的行,再将它们输出。

输出结果:

root@ecs-84096:~# ps aux | grep php
root       56527  0.0  0.9 194608 19432 ?        Ss   18:07   0:00 php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)
www-data   56541  0.0  0.3 194848  6676 ?        S    18:07   0:00 php-fpm: pool www
www-data   56542  0.0  0.3 194848  6676 ?        S    18:07   0:00 php-fpm: pool www
root       56721  0.0  0.0   8900   736 pts/0    S+   18:20   0:00 grep --color=auto php

可以观察到有 php-fpm 在执行。

如果 php-fpm 未执行,输出为:

root@ecs-84096:~# ps aux | grep php
root       56749  0.0  0.0   8900   724 pts/0    S+   18:21   0:00 grep --color=auto php

安装 Git

使用 apt 安装:

apt install -y git

安装 Conposer

通过 PHP 安装 ,参照 :Composer 中文网 的安装方法。

第一步:下载安装脚本 - composer-setup.php - 到当前目录:

php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"

下载下来的 composer-setup.php 脚本将简单地检测 php.ini 中的参数设置,如果某些参数未正确设置则会给出警告;然后下载最新版本的 composer.phar 文件到当前目录。

第二步:执行安装过程:

php composer-setup.php

第三步:删除安装脚本:

php -r "unlink('composer-setup.php');"

第四步:全局环境变量:

将前面下载的 composer.phar 文件移动到 /usr/local/bin/ 目录下

sudo mv composer.phar /usr/local/bin/composer

到这里便安装完了,可以使用 composer -v 查看安装的 Composer 的版本。

执行可能会收到收到这样一条警告:

root@ecs-84096:~# composer -v
Do not run Composer as root/super user! See https://getcomposer.org/root for details

表示请勿使用 根用户 执行 Composer,这里暂时不管它,后续技术提高了再解决。

配置 Packagist 阿里云镜像

这个配置是可选的。

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

到这里就已经安装好基本的运行环境了,接下来就是将代码部署到服务器上。

将代码部署到服务器上

部署代码

使用 git 拉取项目代码到服务器。

存放代码的文件夹是:/var/www/ ,是 Nginx 默认的站点存放目录。

首先,切换到 /var/www/ 文件夹:

cd /var/www/

然后将仓库克隆到本地:

git clone git远程仓库URL

克隆成功后 /var/www/ 文件夹下能看到刚克隆下来的项目文件夹。

安装依赖

使用 Composer 安装 Laravel 必备的依赖包。
这里假设项目文件夹名为 laravel-1,首先切换至 laravel-1 文件夹:

cd /var/www/laravel-1

使用 Conposer 安装:

因为安装的 PHP 是 8.0 ,不匹配 composer.json 要求的版本,使用 composer install 安装报错,所以使用 --ignore-platform-reqs 设置忽略版本匹配。
参考:使用 Composer 安装时与 PHP 版本不匹配(Your requirements … packages.)

composer install --ignore-platform-reqs

等待安装完成即可。

配置环境变量

首先切换至 laravel-1 文件夹:

cd /var/www/laravel-1
php -r "file_exists('.env') || copy('.env.example', '.env');"

生成 App Key:

php artisan key:generate --ansi

配置文件所有者

由于目前所在的工作目录为 /var/www/laravel,所以可用表示当前工作目录的 . 代替之前的 /var/www/laravel,它们是等效的。

chown -R www-data:www-data .

在ubuntu上,www-data 是默认运行 web 服务的用户/组,一般在通过 apt 安装 web 服务程序时生成。搭建 web 服务的文件夹/文件一般要设置成 www-data 的。

不过也可以不用 www-data,自己建一个新的用户和组,然后对 apache/ngnix 等 web 服务程序进行配置。不过这样比较麻烦。

如果是编译的,不会生成 www-data 用户/组,需要自己配置。

配置 Nginx 站点

服务器上存放 Nginx 站点配置的目录为:/etc/nginx/sites-enabled/

创建站点配置文件

首先跳转至 /etc/nginx/sites-enabled/ 目录:

cd /etc/nginx/sites-enabled/

然后用 vim 文本编辑器生成配置文件,文件命名为 laravel-1.conf:

vim laravel.conf

提示:vim 文本编辑器使用方法自行查阅,这里不表。

配置文件内容

根据 Laravel 8.5 部署文档 的说明,Nginx 配置文件稍作调整:

server {
    listen 80;
    server_name example.com; # 必改项,替换为 服务器公网IP 或 域名
    root /var/www/example.com/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.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/php8.0-fpm.sock; # 必改项,对应 PHP 版本
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

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

以上文件要修改 3 个地方:server_namerootfastcgi_pass

重载 Nginx

配置完成后,请务必重启(Restart)或 重载(Reload)Nginx。
重载 Nginx

service nginx reload

# 另一种等效的方法
nginx -s reload

重启 Nginx

service nginx restart

重载或重启 Nginx 后,在浏览器输入 服务器公网IP 或 域名,即可访问到站点。

PHP

恭喜你,部署成功!

本作品采用《CC 协议》,转载必须注明作者和本文链接
敢于争先 @ 不正
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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