Laravel 專案部署到雲伺服器(CentOS 7 系統)

tsin發表於2018-11-30

手頭有一臺買來搭梯子的搬瓦工雲伺服器,系統是Centos 7,正好拿來練習下部署Laravel專案。這裡使用XShell連結到雲主機,並且所有操作都在root賬號下操作,非root賬號時終端命令前面需新增sudo

LNMP 環境搭建

參考本論壇大牛的這篇:Laravel 之道特別篇一: yum 安裝 LNMP 環境

我的雲主機已經是Centos 7,所以不用安裝Centos 7 的步驟。期間可能會遇到nginx配置好了,訪問主機IP卻沒有效果的問題,這時候可以嘗試重啟nginx:systemctl restart nginx

安裝和配置git

  1. 開啟 Wandisco GIT 源,這樣能保證下載到較新版本的git。開啟方法:

    1. 雲主機終端輸入以下程式碼:
      vi /etc/yum.repos.d/wandisco-git.repo

      這樣就在 /etc/yum.repos.d/ 目錄新建了一個 yum 原始檔 wandisco-git.repo
      按鍵盤上的 io 進入編輯模式,複製貼上以下程式碼:

      [wandisco-git]
      name=Wandisco GIT Repository
      baseurl=http://opensource.wandisco.com/centos/7/git/$basearch/
      enabled=1
      gpgcheck=1
      gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco

      esc 鍵退出編輯模式,輸入 :wq 儲存並退出 vi/vim 編輯器。

    2. 匯入GPG keys
      rpm --import http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
    3. 安裝git
      yum install git
    4. 檢視版本號
      git --version

      我這裡安裝的版本是2.18.0 。

  2. 配置git
    執行以下命令:
    git config --global user.name "Your Name"
    git config --global user.email "youremail@yourdomain.com"

    使用者名稱和郵箱改為你自己的。

  3. 生成金鑰對

    參考文件: https://git-scm.com/book/zh/v2/伺服器上的-Git-生成-SSH-公鑰

金鑰對生成後,將公鑰 id_rsa.pub 的內容拷貝新增到你的github上,新增地址: https://github.com/settings/keys

安裝Composer

Composer 依賴 php-cli,該應用已經在搭建LNMP環境的時候安裝了,這裡不需要再次安裝。Composer 安裝步驟依次如下:

yum -y update
cd /tmp
curl -sS https://getcomposer.org/installer | php

讓composer全域性可用:

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

安裝redis

依次執行以下命令:

yum install epel-release
yum install redis -y
systemctl start redis.service
 systemctl enable redis

檢查執行狀態:

systemctl status redis.service

如看到Active: active (running) ...則表示redis已在執行中。
測試redis:

redis-cli ping

如輸出PONG,則表示redis已經可以連通。

Laravel專案安裝

拉取github上的Laravel專案程式碼

cd /www/wwwroot
git clone git@github.com:Your-User-Name/larabbs.git larabbs

將clone後面的地址替換成你自己的github上的專案地址。

安裝依賴

cd larabbs
composer install 

安裝過程中,如果缺少相關php擴充套件,會有報錯。從報錯資訊中,將所有缺少的擴充套件記錄下來,逐個安裝。
如,缺少pdo擴充套件,則執行yum -y install php72w-pdo,依此類推,安裝xxx擴充套件,則執行yum -y install php72w-xxx
安裝後重啟nginx和php-fpm,依次執行:systemctl restart nginxsystemctl restart php-fpm

配置環境變數

  1. 在專案目錄 larabbs 下複製 .env.example.env
    cp .env.example .env
  2. 生成APP_KEY
    php artisan key:generate
  3. 開啟.env進行配置
    vi ./.env
  4. 需更改的配置如下,依照備註進行修改
    APP_NAME=你的APP名字
    APP_ENV=production # 這裡設為生成環境
    APP_KEY=base64:前面生成的key不用改
    APP_DEBUG=false # 關閉除錯模式
    APP_URL=你的主機地址
    LOG_CHANNEL=stack
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=larabbs
    DB_USERNAME=root
    DB_PASSWORD=你的資料庫密碼
    BROADCAST_DRIVER=log
    CACHE_DRIVER=redis  # 這裡使用redis
    SESSION_DRIVER=file
    SESSION_LIFETIME=120
    QUEUE_DRIVER=redis # 這裡使用redis
    .
    .
    .
    MAIL_DRIVER=smtp
    MAIL_HOST=smtp.qq.com
    MAIL_PORT=25
    MAIL_USERNAME=你的QQ郵箱
    MAIL_PASSWORD=你的smtp服務的密碼
    MAIL_ENCRYPTION=tls
    MAIL_FROM_ADDRESS=你的郵箱地址
    MAIL_FROM_NAME=LaraBBS
    .
    .
    .
    BAIDU_TRANSLATE_APPID=你的百度翻譯APPID
    BAIDU_TRANSLATE_KEY=你的百度翻譯KEY

資料庫和資料表建立

登入資料庫後執行以下命令建立資料庫:

CREATE DATABASE larabbs DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

接著進行資料表遷移:

php artisan migrate

如出現這樣的報錯:could not find driver ...,可能缺少了pdo_mysql擴充套件,執行yum -y install php72w-pdo_mysql 安裝。安裝後同樣重啟 nginx 和 php-fpm 。

Nginx配置

在 /etc/nginx/conf.d 下面新建 larabbs.conf nginx配置檔案,輸入下列內容:

server {
    listen 80;
    server_name localhost;
    root /www/wwwroot/larabbs;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.php index.html index.htm;

    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$ {
        root /www/wwwroot/larabbs;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

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

注意 conf.d 的其他配置檔案,如有 listen 80,需把埠改為其他的,以免跟本配置衝突。

Crontab配置

由於程式中使用到了計劃任務,需要在系統中配置Crontab。執行以下命令:

export EDITOR=vi && crontab -e

在開啟的檔案中,複製貼上以下程式碼:

* * * * * php /home/vagrant/Code/larabbs/artisan schedule:run >> /dev/null 2>&1

esc鍵並輸入:wq儲存退出。

遇到的一些問題

  1. 執行composer update後輸出Killed
    原因:系統記憶體不足
    解決方法:
    1. 在本地環境執行composer update
    2. 上傳新的composer.lock檔案到伺服器
    3. 伺服器上執行composer install
      這樣就解決的依賴包更新的問題。
  2. 執行 composer 時提示:Do not run Composer as root/super user...
    雖然有提示,但還是可以正常執行,暫時不用解決。
  3. 檔案寫入許可權問題
    storage、uploads等檔案/資料夾沒有寫入許可權會報錯,這時需要給他們足夠的許可權。執行chmod -R 777 /path/to/filename授權。

  4. 更改配置後注意重啟 nginx 和 php-fpm 。
  5. 使用yum直接安裝 php、mysql 等軟體,版本都很低, 需要重新配置yum源。

結尾

在這過程中,感覺centos 7 的 yum 不是很好用,倉庫老舊,需要重新配置yum源,不知道這是什麼歷史遺留問題。
最後,驕傲地貼一下本次折騰的成果吧:http://144.34.151.40/

Was mich nicht umbringt, macht mich stärker

相關文章