【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!

相關文章
相關標籤/搜索