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

材料准备:php

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

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

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

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

看完本章你能够学会:配置 LNMP 及 Laravel 环境、理解配置命令的做用、获得一个彻底能够运行的 Laravel 项目node

在你学会了配置这些基础的后端环境后,你通常都会迫切的想要为你的网站配置域名、SSL 证书进行 Https 访问,配置 Https 有不少好处,我都在个人另外一篇博客中作了详细的讲解,若是你感兴趣,点此查看mysql


正文 👇

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 主机上 不太行,有些东西下载不到,因此我用的是下方的连接一
    1、composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
    2、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?://repo.packagist.org
// 这样的,若是你的地址是上一步中配置的地址,那么就配置对了
复制代码

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

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
复制代码

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/public
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)
// 数据库迁移
php artisan key:generate

4)
// 准备编辑 .env
// Laravel60 根目录下
vim .env

5)
// 编辑并配置 .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 步中建立的密码
复制代码

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 控制台 => 域名 => 域名解析 => 添加配置配置相应内容 才能够经过域名访问的到,若是你不会,也不到担忧,点击 👇 下方的连接,我在里面清晰的讲解了相关的配置nginx

在你学会了配置这些基础的后端环境后,你通常都会迫切的想要为你的网站配置域名、SSL 证书进行 Https 访问,配置 Https 有不少好处,我都在个人另外一篇博客中作了详细的讲解,若是你感兴趣,点此查看laravel

写做不易,很少说了,手指头还在的就点赞吧!git

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

Thank you!