【2020 年最新】新手从零配置 服务器的 LNMP 及 Laravel 环境 超纯净无报错 (Linux、Nginx、MySQL、PHP、Laravel)

Php (65) 2023-03-24 21:04

大家好,我是编程小6,很高兴遇见你,有问题可以及时留言哦。

材料准备:

  • 服务器(我用的是 aliyun Ecs 用哪个平台的都可以)
  • 服务器是 Linux 系统(我用的就是 Ubuntu 18.04)
  • 命令行(我是通过 Windows cmd 远程 ssh 服务器的,你是 mac 就也用 mac 自带的命令行工具就行)

接下来,还愣什么,起锅烧油

本教程同样也会列出平常不会出现的易错点,便于有些人万一遇到可以解决,当然,若你没有出现对应的错误按照教程提示跳过对应步骤即可

内容有点多,但大多都是讲解的注释,毕竟要看个明白,学个明白吧,最大限度避免出错,即使出错也知道为什么

看完本章你可以学会:配置 LNMP 及 Laravel 环境、理解配置命令的作用、得到一个完全可以运行的 Laravel 项目

在你学会了配置这些基础的后端环境后,你一般都会迫切的想要为你的网站配置域名、SSL 证书进行 Https 访问,配置 Https 有很多好处,我都在我的另一篇博客中做了详细的讲解,如果你感兴趣,点此查看


正文 👇

1. 保持服务器的开启状态

2. 打开命令行通过以下命令连接服务器

1)ssh root@你的服务器 ip 地址
2)接下来会提示:
    Are you sure you want to continue connecting (yes/no)?
3)输入 yes 回车
4)再继续会提示输入密码,设置过密码的输入密码,没设置过的直接回车
// 易错点【2 个】:
// 1. 如果你之前通过 ssh 连接过这个服务器那么可能会报如下错误:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:DgOTQpOBiF4sEPI+mGQSJEx3CYUZ9UdXtYkPFJYc6iU.
Please contact your system administrator.
Add correct host key in C:\\Users\\admin/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\admin/.ssh/known_hosts:4
ECDSA host key for 35.189.xxx.xxx has changed and you have requested strict checking.
Host key verification failed.
解决方案:
1)打开你电脑的 C:\Users\你的用户名\.ssh 这个目录会看到一个叫 known_hosts 的文件(mac 电脑请网上搜你的 .ssh 目录在哪)
2)记事本打开会看到文本中会有一行以你的服务器 ip 地址开始后面是各种英文字母的一段文字
3)删除从你服务器 ip 起始及到后面英文字母结束至换行的地方并保存
4)重新通过 ssh 命令即可进入服务器了

// 2. 如果你的服务器是使用 Google Cloud 通过 ssh 登录被拒
解决方案:
1)通过 Google Cloud 控制台找到服务器列表
2)在你对应的服务器的后面会有一个 ssh 的按钮点击一下将会进入 ssh 网页版
3)等待加载完成可以输入命令时
4)输入 sudo -i 切换到 root 用户(有时候输入 sudo -i 不行那就试试 sudo -l)
5)sudo passwd 管理员设置密码
6)vim /etc/ssh/sshd_config 准备编辑该配置文件不要点键盘(涉及 vim 命令不会命令乱按可能会出错,跟着下方教程走即可,你也可以去学一下 vim 命令)
7)点击键盘上的 i 就会进入 INSERT 模式,就可以输入东西了
8)文件的底部添加两行
    PermitRootLogin yes // 开启 root 用户访问
    PasswordAuthentication yes // 开启密码登陆
9)输入上方内容后点击键盘 ESC 再输入 :wq 回车即可(ESC 用来取消编辑 w 即 write 表示写入 q 即 quit 表示退出)
9)reboot 重启,等待重启完成后即可通过命令行进入了

3. 请进入 root 角色(接下来我们本教程全章都是在 root 角色下进行配置的,如果你不是可能会出错)

// 进入 root 角色就表示你拥有操作此台 Linux 主机的最高权限
// 那么如何判断我又没有进入 root 角色
// 给大家看看我的命令行
root@iZwz9e82xlhob2ln3blq14Z:~#
// 我的命令行里有个 root 即表示进入了 root 角色
// 如果不是通过
su - root
// 继续输入密码即可进入
// 还不行网上查... 过于简单这里就不说了

4. 更新 apt

apt-get update
// 为什么更新,因为 Nginx、MySQL、PHP 啥的都是通过 apt 下载的,初始化的 apt 不更新它找不到该去哪下载

5. 安装 Nginx

apt-get install nginx
// 接下来的提示是否确定时输入:Y
// 检查是否安装成功:
Nginx -v
// 如果显示版本号之类的就表示安装完成

6. 安装 MySQL

apt-get install mysql-server
// 接下来的提示是否确定时输入:Y
// 检查是否安装成功:
mysql -v
// 如果显示版本号之类的就表示安装完成
// 上方命令可能会让你进入 mysql 程序中那么你的命令行等待输入的地方就会变成
mysql>
// 输入 quit 即可退出

7. 安装 PHP 及其扩展

// 1)
apt install php7.2-cli
// 接下来的提示是否确定时输入:Y
// 检查是否安装成功:
php -v
// 如果显示版本号之类的就表示安装完成

// 2)
// 安装 php-fpm
apt-get install php-fpm
// 接下来的提示是否确定时输入:Y
// 3)
// 安装扩展
// 先查看现有扩展列表
php -m

// 我的输出是这样的
[PHP Modules]  
calendar       
Core           
ctype          
date           
exif           
fileinfo       
filter         
ftp            
gettext        
hash           
iconv          
json           
libxml         
openssl        
pcntl          
pcre           
PDO            
Phar           
posix          
readline       
Reflection     
session        
shmop          
sockets        
sodium         
SPL            
standard       
sysvmsg        
sysvsem        
sysvshm        
tokenizer      
Zend OPcache   
zlib           

[Zend Modules] 
Zend OPcache
4// Laravel 对 PHP 版本和扩展有一定要求,请比对
PHP >= 7.1.3
PHP OpenSSL 扩展
PHP PDO 扩展
PHP Mbstring 扩展
PHP Tokenizer 扩展
PHP XML 扩展
PHP Ctype 扩展
PHP JSON 扩展

// 根据比对我们还需安装以下扩展,如果你缺少什么就在下方命令后面增加对应的就行
apt-get install php-mysql php-xml php-mbstring php-ctype php-zip php-curl
// 接下来的提示是否确定时输入:Y

8. 为了管理 PHP 依赖我们还需安装 ComposerComposer 是什么请网上查,简单来讲就是通过 Composer 可以安装各种东西,达到你编码的目的)

// 1)
// 进入 ubuntu 的 home 路径
cd ~

// 2)
// 下载安装脚本 - composer-setup.php - 到当前目录
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"

// 3)
// 执行安装过程
php composer-setup.php

// 4)
// 删除安装脚本
php -r "unlink('composer-setup.php');"

// 5)
// 全局将 Composer 配置到系统中,全局安装是将 Composer 安装到系统环境变量 PATH 所包含的路径下面,然后就能够在命令行窗口的任何路径下直接执行 composer 命令了
sudo mv composer.phar /usr/local/bin/composer

// 6)
// 修改权限
chmod u+x /usr/local/bin/composer

// 7)
// 验证 Composer 是否安装成功
composer -v
// 输出版本号之类的即安装成功

// 8)
// 全局修改 Composer 镜像地址(为什么要修改,因为 Composer 在国外,众所周知访问慢所以修改)
// 注意:下方有两个配置的地址,选一个即可,
// 现在你所看的 composer 安装教程是 https://pkg.phpcomposer.com 的官方推荐,但是我用该网站
// 只有在装我 Windows 本地测试的时候可以但在 aliyun 主机上 不太行,有些东西下载不到,所以我用的是下方的链接一
    一、composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
    二、composer config -g repo.packagist composer https://packagist.phpcomposer.com
// 修改后会有一行橙色的警告
Do not run Composer as root/super user! See https://getcomposer.org/root for details
// 提示不要在 root 权限下修改 Composer,官方这样做是为了避免一些第三方代码拥有超级管理员的权限来执行一些脚本之类的
// 警告只是提示一下,不会影响你配置的代码

// 9)
// 验证上个步骤是否配置成功
composer config -lg
// 在接下来的输出中会有一行
[repositories.packagist.org.url] https://mirrors.aliyun.com/composer/
// 这样的,如果你的地址是上一步中配置的地址,那么就配置对了

我们配置的镜像的官方地址在此,上方的命令也都是用该官方的推荐的,感兴趣可以看看,想要支持的也可以去其网页右上角支持赞助一下

9. 安装 NPM(可对前端资源进行整理的工具,比如你改有些 sass、css 啥的就需要 npm run dev 编译一下,涉及到前端方面了,这里不讲)

apt-get install npm
// 接下来的提示是否确定时输入:Y
// 安装该工具也会顺便安装 Node.js,默认的 NPM 版本比较低,我们可以通过这个命令对其进行升级
npm install -g npm
// 升级后需要输入命令 reboot 重启主机或需要退出或打开新的窗口登录服务器
// 再 npm -v 才会看到现在安装的最新版本

10. 安装 Git

apt-get install git
// 接下来的提示是否确定时输入:Y

// 为主机生成 ssh key(将双引号里的换成你的账号就行)
ssh-keygen -t rsa -C "your@mail.com"
// 上面的命令输入后连续按回车即可,好像是三次

// 我们这里安装 git 只是为了在 git 上 clone 代码,如果你不使用 git,就不需要查询 ssh key
// 若查询 ssh key 直接在命令行中输入
cat ~/.ssh/id_rsa.pub

11. 创建 Laravel 项目

1)
// 我们将 Laravel 项目创建到 Linux 主机的 /var/www 目录下 // 首先进入目录 cd /var/www/
// ls 可以看当前目录下的文件,会看到有一个 html 的文件夹 2) 创建 Laravel 项目(2 种方式) // 第一种:直接通过 Composer 安装 composer create-project laravel/laravel Laravel60 --prefer-dist "6.*"
    // 第二种(推荐):虽然我们已经在安装 Composer 的过程中配置了比较快的镜像地址,但有些时候可能还是会比较慢 // 在这里我为大家创建了一个完全新的 Laravel 项目,其 Laravel 版本是 6.18.2 // 由于我们前面已通过 Git 在 GitHub 中 clone 准备好的纯净 Laravel 项目 git clone https://github.com/sq57133/Laravel60.git
    // 该项目的 GitHub 网页地址 https://github.com/sq57133/Laravel60
    
3)
上条步骤安装成功后,此时你就可以开始开发你的项目了

12. 初始化、配置项目

1// 进入你的项目
cd /var/www/Laravel60

2// 执行安装(该安装是指安装你 Laravel 项目根目录下 composer.json 里引用的东西,如果你安装过程中输出的内容
// 中会有挺多 failed 或者你安装完后运行也不好用,那么你应该去本教程步骤 8 的第 8 个小步骤中直接选新的地址后重新 composer install 试试
// 即可,里面我也写了我用的是哪个)
composer install

3// 初始化前端依赖、前端资源
npm install
npm run prod
// 如果在运行 npm run prod 的过程中报错,可以尝试通过在 package.json 中指定 cross-env 的路径来解决:
"scripts": {
    ...
    "prod": "npm run production",
    "production": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},

13. 修改项目权限、创建软链

cd /var/www
chown -R www-data:www-data Laravel60/
// Laravel60 是你的 Laravel 你的项目文件夹名
// 如此一来就一劳永逸解决了 Laravel 项目权限问题

// 在 Laravel 项目的 public 目录下创建一个指向 storage/app/public 目录的软链 storage:
cd /var/www/Laravel60
php artisan storage:link

14. 重启 Nginx、MySQL、PHP

// 刚安装完的项目不重启初始化一下可能会出错,重启它们
service nginx restart
service mysql restart
service php7.2-fpm restart // 这里要注意如果你不是跟着教程安装的 7.2 就要改成你的

15. 创建线上数据库

1// 登录数据库
mysql -u root -p
// 默认密码为空,若提示输入密码直接回车即可

2// 为数据库创建密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your-password';
// 将 your-password 替换为你的密码,不要去掉单引号

3// 在数据库中创建一个数据库
create database laravel60 default charset utf8 collate utf8_general_ci;
// 至此,我们就创建了一个名为 laravel60 的数据库了

4// 退出 MySQL 命令行
quit

16. 更新 Laravel .env 配置

1)
// 若你还不了解 Laravel 的相关操作,那么到现在其实已经相当于创建了 Laravel 项目但是还没配置 // 接下来我们会将 Laravel 项目配置到可以通过域名访问,那么如果你只是想跟着教程到最后能够完成配置可以继续看下去 // 但是毕竟你是要开发 Laravel 项目的,如果你不会就算配置完了能运行实际上也是没有太大意义的 // 推荐一个学习的网站 // https://xueyuanjun.com/books/laravel-tutorial-6 2) // 复制 .env.example 文件新文件文件名为 .env cp .env.example .env 3) // 准备编辑 .env // Laravel60 根目录下 vim .env 4) // 编辑并配置 .env(如何用 vim 编辑在本章大步骤 2 中的易错点 2 中可以看到 vim 的基本编辑使用方式) APP_NAME=Laravel60 APP_URL=http://你的域名 DB_DATABASE=Laravel60 DB_USERNAME=root DB_PASSWORD=xxxxxx // APP_NAME 改为你的项目名 // APP_URL 你的域名,不写也可以 // DB_DATABASE 为你第 15 步中创建的数据库名称 // DB_USERNAME 数据库用户名 // DB_PASSWORD 为你第 15 步中创建的密码 5) // 生成 Application key 想看直接到 key 值的后面加上 " --show" 不包括双引号 php artisan key:generate 

17. 数据库迁移、填充测试数据

php artisan migrate
// 没有报错即成功

// 运行填充命令初始化测试数据(若你不懂或者没有写测试数据可以不运行)
php artisan db:seed

18. 配置 Nginx 让 Laravel 项目可以访问

1// 进入 nginx 配置目录
cd /etc/nginx/sites-available/
// ls 命令可以看到当前目录下有一个文件 default

2// 备份 default 文件方便配置错了可以恢复
cp default defaultBackup
3)
// vim default 文件,这里我直接把我的 default 配置粘贴出来告诉你们改了哪里

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;
        
        # !!!这里改了,要改到你当前 Laravel 项目的 public 文件夹!!!
        root /var/www/Laravel60/public;
        
        # Add index.php to the list if you are using PHP
        # !!!这里改了,加了一个 index.php 不然就不会去解析 index.php 文件了!!!
        index index.php index.html index.htm index.nginx-debian.html;
        
        # !!!这里没改,如果你有域名的话把 _ 换成你的域名就可以了!!!
        server_name _;
        
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                
                # !!!这里改了将 try_files $uri.... =404 换成了下下行的了,不然你现在访问你的 Laravel 网页应该是报 404 的!!!
                # try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.php?$query_string;
        }
        # pass PHP scripts to FastCGI server
        #
        # !!!这里改了,解除了注释!!!
        location ~ \.php$ {
                # !!!这里改了,解除了注释!!!
                include snippets/fastcgi-php.conf;
        #
        # # With php-fpm (or other unix sockets):
                
                # !!!这里改了,解除了注释,原来是 php7.0-fpm.sock 换成了 7.2 不然找不到对应版本可能会报错!!!
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        # # With php-cgi (or other tcp sockets):
        # fastcgi_pass 127.0.0.1:9000;
        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        # !!!这里改了,解除了注释!!!
        location ~ /\.ht {
                deny all;
        }
}
# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
# listen 80;
# listen [::]:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
# 
# location / {
# try_files $uri $uri/ =404; 
# } 
#}

19. 大功告成

浏览器访问你的 ip 地址即可进入你的 Laravel 网站了,配置了域名的童鞋还得去你购买域名的平台配置相应的解析才可以通过域名访问,我是 aliyun 买的就得去 aliyun 控制台 => 域名 => 域名解析 => 添加配置配置相应内容 才可以通过域名访问的到,如果你不会,也不到担心,点击 👇 下方的链接,我在里面清晰的讲解了相关的配置

在你学会了配置这些基础的后端环境后,你一般都会迫切的想要为你的网站配置域名、SSL 证书进行 Https 访问,配置 Https 有很多好处,我都在我的另一篇博客中做了详细的讲解,如果你感兴趣,点此查看

写作不易,不多说了,手指头还在的就点赞吧!

It's not easy to write. If the finger is still on your hand, Please tap the like button on the website.

Thank you!

发表回复