摘要:前邊已經(jīng)學(xué)會(huì)在本地用進(jìn)行開發(fā)了,現(xiàn)在就讓我們將本地開發(fā)的項(xiàng)目部署到阿里云服務(wù)器,來次實(shí)戰(zhàn)操作,阿里云部署環(huán)境阿里,,使用服務(wù)器,登錄。
前邊已經(jīng)學(xué)會(huì)在本地用Homestead進(jìn)行開發(fā)了,現(xiàn)在就讓我們將本地開發(fā)的項(xiàng)目部署到阿里云服務(wù)器,來次實(shí)戰(zhàn)操作,阿里云部署環(huán)境:阿里ECS,Ubuntu,使用Nginx服務(wù)器,SSH登錄。一、服務(wù)器配置
如果你的服務(wù)器是剛申請的,則必須做一些基礎(chǔ)的配置,如安裝Nginx,MySQL,然后創(chuàng)建項(xiàng)目目錄,然后對Nginx進(jìn)行配置,我的項(xiàng)目放在 /var/www/ 目錄下。
Nginx的默認(rèn)root文件夾
/usr/share/nginx/html
Nginx的服務(wù)器配置文件所在目錄
/etc/nginx/sites-available/
上面兩個(gè)目錄記住就好,很常用,先擺出來
配置nginx服務(wù)器
> sudo vim /etc/nginx/sites-available/default
重啟 nginx:
> sudo service nginx restart;
5.配置新的php.ini
sudo vim /etc/php/7.0/fpm/php.ini #將cgi.fix_pathinfo=1這一行去掉注釋,將1改為0。
6.配置php-fpm
sudo vim /etc/php/7.0/fpm/pool.d/www.conf # 配置這個(gè) listen = /var/run/php/php7.0-fpm.sock
注意:這個(gè)文件php7.0-fpm.sock 的目錄每個(gè)服務(wù)器的安裝位置可能不同,我的是在 /var/run/php/php7.0-fpm.sock, 其他的可能是/var/run/php7.0-fpm.sock,具體可以自己查看,之前因?yàn)檫@個(gè)坑折騰了很久。
7.nginx 配置
sudo vim /etc/nginx/sites-enabled/default
配置相對應(yīng)的路徑和 location,(以laravel項(xiàng)目為例):
listen 80 default_server; listen [::]:80 default_server ipv6only=on; root your_website_root; # /var/www/weixin index index.php index.html index.htm; # Make site accessible from http://localhost/ server_name your_domain; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ /index.php?$query_string; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules } location ~ .php$ { try_files $uri /index.php =404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/var/run/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
注意這里的 fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 要和第6步的 php-fpm 配置:/var/run/php/php7.0-fpm.sock; 一致。
修改laravel項(xiàng)目的訪問權(quán)限
sudo chown -R :www-data /var/www/laravel sudo chmod -R 775 /var/www/laravel/storage二、克隆項(xiàng)目
將我們之前推到 github 倉庫的項(xiàng)目,使用 git clone 到我們的服務(wù)器,后邊就可以用 git pull 拉取github的代碼了。
root@im:/var/www# git clone https://github.com/corwien/digtime.git
然后進(jìn)行項(xiàng)目:
> cd /var/www/digtime
給網(wǎng)站的用戶寫權(quán)限:
root@iZ9:/var/www/digtime# sudo chmod -R 775 /var/www/digtime/storage三、生成配置文件
項(xiàng)目.env環(huán)境配置:
cp .env.example .env四、安裝擴(kuò)展包依賴
composer install
Problem 1 - This package requires php >=5.6.4 but your PHP version (5.5.9) does not satisfy that requirement.
如果在使用命令時(shí)出現(xiàn)阿里云服務(wù)器PHP版本過低的情況,請參照該博文進(jìn)行升級:Ubuntu 14 PHP 5.6 升級到PHP 7.0
重啟 nginx:
> sudo service nginx restart;
升級后的PHP版本:
root@iZ9:/home# php -v PHP 7.0.18-1+deb.sury.org~trusty+1 (cli) (built: Apr 11 2017 15:08:38) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.0.18-1+deb.sury.org~trusty+1, Copyright (c) 1999-2017, by Zend Technologies
更新composer版本
// 安裝解壓軟件 > sudo apt-get install zip unzip // 清除緩存,防止zlib_decode(): data error錯(cuò)誤發(fā)生 >composer clear-cache // 更新到最新版本 >sudo composer self-update
使用 Composer 遇到的坑
五、安裝前端資源如果你的服務(wù)器端沒有安裝Node.js,則先要使用下邊的命令進(jìn)行安裝:
Ubuntu apt-get命令安裝
命令格式如下:
sudo apt-get install nodejs sudo apt-get install npm
或者使用命令源碼編譯安裝:
以下部分我們將介紹在Ubuntu Linux下安裝 Node.js 。 其他的Linux系統(tǒng),如Centos等類似如下安裝步驟。 在 Github 上獲取 Node.js 源碼: $ sudo git clone https://github.com/nodejs/node.git Cloning into "node"... 修改目錄權(quán)限: $ sudo chmod -R 755 node 使用 ./configure 創(chuàng)建編譯文件,并按照: $ cd node $ sudo ./configure $ sudo make $ sudo make install
查看 node 版本:
$ node --version v0.10.25
其他平臺安裝方法:
Node.js 安裝配置
nodejs,npm安裝(ubuntu14.04下)
然后執(zhí)行npm命令安裝:
npm install
npm 升級:
// 最新的版本latest 3.10.10 npm install npm@latest -g
Node相關(guān)文章:
Node.js 概述之版本管理工具nvm
如果想在同一臺機(jī)器,同時(shí)安裝多個(gè)版本的node.js,就需要用到版本管理工具nvm。
$ git clone https://github.com/creationix/nvm.git ~/.nvm $ source ~/.nvm/nvm.sh
安裝以后,nvm的執(zhí)行腳本,每次使用前都要激活,建議將其加入~/.bashrc
文件(假定使用Bash)。激活后,就可以安裝指定版本的Node。
nvm 執(zhí)行腳本加入Bash:
在Linux里設(shè)置環(huán)境變量的方法(export PATH)
root@iZ:~# vim /root/.bashrc
在 .bashrc 文件末尾添加這樣一行:
# ADD NVM node-NPM 20170502 export PATH="$PATH:/root/.nvm/versions/node/v7.9.0/bin"
查看變量是否添加成功:
root@iZ94:~# echo $PATH /root/.nvm/versions/node/v7.9.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games root@iZ94:~# exec bash root@iZ94:~# node -v v7.9.0
NVM 相關(guān)操作:
# 安裝最新版本 $ nvm install node # 安裝指定版本 $ nvm install 0.12.1 # 使用已安裝的最新版本 $ nvm use node # 使用指定版本的node $ nvm use 0.12
nvm也允許進(jìn)入指定版本的REPL環(huán)境。
$ nvm run 0.12
如果在項(xiàng)目根目錄下新建一個(gè).nvmrc 文件,將版本號寫入其中,就只輸入nvm use 命令即可,不再需要附加版本號。
下面是其他經(jīng)常用到的命令。
# 查看本地安裝的所有版本 $ nvm ls # 查看服務(wù)器上所有可供安裝的版本。 $ nvm ls-remote # 退出已經(jīng)激活的nvm,使用deactivate命令。 $ nvm deactivate六、生成表
php artisan migrate
出現(xiàn)這樣的問題:
root@iZ94:/var/www/digtime# php artisan migrate Migration table created successfully. [IlluminateDatabaseQueryException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_name_unique`(`name `)) [PDOException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes root@iZ94:/var/www/digtime#
解決方法:Laravel 5.4 migrate時(shí)報(bào)錯(cuò): Specified key was too long error
手動(dòng)配置遷移命令migrate生成的默認(rèn)字符串長度,在AppServiceProvider 中調(diào)用 Schema::defaultStringLength 方法來實(shí)現(xiàn)配置:
use IlluminateSupportFacadesSchema; /** * Bootstrap any application services. * * @return void */ public function boot() { Schema::defaultStringLength(191); }
終于成功了:
root@iZ94:/var/www/digtime# php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table Migrating: 2017_04_15_235414_create_articles_table Migrated: 2017_04_15_235414_create_articles_table root@iZ94:/var/www/digtime#七、Nginx
Nginx 重啟失敗,查看原因:
service nginx restart * Restarting nginx nginx [fail] root@iZ94j7ehy5oZ:/var/www/digtime# sudo nginx -t nginx: [emerg] unknown directive "i" in /etc/nginx/nginx.conf:71 nginx: configuration file /etc/nginx/nginx.conf test failed root@iZ94j7ehy5oZ:/var/www/digtime# vim /etc/nginx/nginx.conf
這里的錯(cuò)誤提示,原來配置文件在修改時(shí)疏忽多加了一個(gè) "i" 字符,刪除即可。
又出現(xiàn)了一個(gè)坑:
GET http://xxx.cn/ 500 (Internal Server Error)
解決方法:
nginx提示:500 Internal Server Error錯(cuò)誤的解決方法
服務(wù)器拉取部署到github的代碼
root@iZ94:/var/www/digtime# git pull remote: Counting objects: 8, done. remote: Compressing objects: 100% (8/8), done. remote: Total 8 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (8/8), done. From https://github.com/corwien/digtime 74785bd..b01ad17 master -> origin/master Updating 74785bd..b01ad17 Fast-forward app/Models/User.php | 2 ++ database/migrations/2014_10_12_000000_create_users_table.php | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) root@iZ94:/var/www/digtime#
具體步驟是這樣的:
本地開發(fā)代碼,然后推送到github倉庫,服務(wù)器端克隆github的項(xiàng)目,再然后服務(wù)器從github拉取代碼,在線上即看到改變的代碼。
我們本項(xiàng)目使用 laravel-admin 開源的后臺:
1.安裝laravel-adminphp artisan admin:install2.換掉谷歌的地圖,加載時(shí)間過長
由于該前端資源有引入google地圖,所以,前端加載會(huì)非常慢,這里我們對源碼進(jìn)行一下修改:
/vendor/encore/laravel-admin/src/Form/Field/Map.php
/** * Get assets required by this field. * * @return array */ public static function getAssets() { // 本項(xiàng)目配置環(huán)境使用的語言包是zh-CN,"resources/lang/zh-CN/", 所以這里對zh_CN做出修改【20170501】 if (config("app.locale") == "zh-CN") { $js = "http://map.qq.com/api/js?v=2.exp"; } else { $js = "https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&key=".env("GOOGLE_API_KEY"); } return compact("js"); }3.重寫方法
/vendor/encore/laravel-admin/src/Form.php
重寫 store,update 方法
. . . /** * Store a new record. * $data array 獲取到的輸入的處理過的數(shù)據(jù) * @return IlluminateHttpRedirectResponse|IlluminateRoutingRedirector|IlluminateHttpJsonResponse */ public function store_v2(array $data) { $data = $data ? $data : Input::all(); // Handle validation errors. if ($validationMessages = $this->validationMessages($data)) { return back()->withInput()->withErrors($validationMessages); } if (($response = $this->prepare($data)) instanceof Response) { return $response; } DB::transaction(function () { $inserts = $this->prepareInsert($this->updates); foreach ($inserts as $column => $value) { $this->model->setAttribute($column, $value); } $this->model->save(); $this->updateRelation($this->relations); }); if (($response = $this->complete($this->saved)) instanceof Response) { return $response; } if ($response = $this->ajaxResponse(trans("admin::lang.save_succeeded"))) { return $response; } return $this->redirectAfterStore(); } /** * 重寫方法【20170501】 * Handle update. * * @param int $id * * @return SymfonyComponentHttpFoundationResponse */ public function update_v2($id, array $data) { $data = $data ? $data : Input::all(); $data = $this->handleEditable($data); $data = $this->handleFileDelete($data); if ($this->handleOrderable($id, $data)) { return response([ "status" => true, "message" => trans("admin::lang.update_succeeded"), ]); } /* @var Model $this->model */ $this->model = $this->model->with($this->getRelations())->findOrFail($id); $this->setFieldOriginalValue(); // Handle validation errors. if ($validationMessages = $this->validationMessages($data)) { return back()->withInput()->withErrors($validationMessages); } if (($response = $this->prepare($data)) instanceof Response) { return $response; } DB::transaction(function () { $updates = $this->prepareUpdate($this->updates); foreach ($updates as $column => $value) { /* @var Model $this->model */ $this->model->setAttribute($column, $value); } $this->model->save(); $this->updateRelation($this->relations); }); if (($result = $this->complete($this->saved)) instanceof Response) { return $result; } if ($response = $this->ajaxResponse(trans("admin::lang.update_succeeded"))) { return $response; } return $this->redirectAfterUpdate(); }
相關(guān)文章:
阿里云 ECS 部署:nginx+MySQL+Laravel+PHP7+Redis+Node.js
在阿里云的ECS上部署Laravel項(xiàng)目
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22887.html
摘要:查找保存下載用搭建自己的緩存?zhèn)}庫權(quán)限管理的好選擇基于封裝的后臺管理系統(tǒng),支持手機(jī)和端訪問支付寶風(fēng)格的驗(yàn)證器后臺系統(tǒng)微信接口的部署腳本開發(fā)的博客系統(tǒng)百度推送自動(dòng)記錄用戶行為擴(kuò)展一個(gè)項(xiàng)目管理系統(tǒng)根據(jù)生成對應(yīng)導(dǎo)航的狀態(tài) 1.debug https://github.com/barryvdh/l... showImg(https://segmentfault.com/img/bVmhWL); ...
摘要:自行建站服務(wù)器購買網(wǎng)站搭建網(wǎng)站維護(hù)全程自主,彈性靈活。網(wǎng)站部署常見網(wǎng)站類型有以下幾種個(gè)人博客常用于搭建個(gè)人博客網(wǎng)站,尤其適用于首次使用阿里云進(jìn)行建站的新用戶。若您需要在阿里云服務(wù)器上部署站點(diǎn)環(huán)境安裝應(yīng)用程序,可點(diǎn)此查看網(wǎng)站基礎(chǔ)環(huán)境搭建服務(wù)。相信很多新用戶會(huì)有這樣的疑惑,我要做個(gè)網(wǎng)站,到底要使用什么產(chǎn)品,如何能快速完成網(wǎng)站建站呢?搭建網(wǎng)站有兩種選擇,一種是直接購買建站模板,另一種則是自行建站。...
摘要:自行建站服務(wù)器購買網(wǎng)站搭建網(wǎng)站維護(hù)全程自主,彈性靈活。網(wǎng)站部署常見網(wǎng)站類型有以下幾種個(gè)人博客常用于搭建個(gè)人博客網(wǎng)站,尤其適用于首次使用阿里云進(jìn)行建站的新用戶。若您需要在阿里云服務(wù)器上部署站點(diǎn)環(huán)境安裝應(yīng)用程序,可點(diǎn)此查看網(wǎng)站基礎(chǔ)環(huán)境搭建服務(wù)。前言相信很多新用戶會(huì)有這樣的疑惑,我要做個(gè)網(wǎng)站,到底要使用什么產(chǎn)品,如何能快速完成網(wǎng)站建站呢?搭建網(wǎng)站有兩種選擇,一種是直接購買建站模板,另一種則是自行建...
摘要:原文發(fā)布于我的個(gè)人博客上原文點(diǎn)這里前面經(jīng)歷千辛萬苦,終于把博客的所有東西都準(zhǔn)備好了,現(xiàn)在就只等部署了。我的遠(yuǎn)程連接工具是用的是,文件上傳用的是。 原文發(fā)布于我的個(gè)人博客上:原文點(diǎn)這里 ??前面經(jīng)歷千辛萬苦,終于把博客的所有東西都準(zhǔn)備好了,現(xiàn)在就只等部署了。下面我介紹下我的部署過程: 一、購買服務(wù)器和域名 ??如果需要域名(不用域名通過ip也可以訪問,雖然不方便,但可以節(jié)約一年幾十塊錢的...
摘要:原文發(fā)布于我的個(gè)人博客上原文點(diǎn)這里前面經(jīng)歷千辛萬苦,終于把博客的所有東西都準(zhǔn)備好了,現(xiàn)在就只等部署了。我的遠(yuǎn)程連接工具是用的是,文件上傳用的是。 原文發(fā)布于我的個(gè)人博客上:原文點(diǎn)這里 ??前面經(jīng)歷千辛萬苦,終于把博客的所有東西都準(zhǔn)備好了,現(xiàn)在就只等部署了。下面我介紹下我的部署過程: 一、購買服務(wù)器和域名 ??如果需要域名(不用域名通過ip也可以訪問,雖然不方便,但可以節(jié)約一年幾十塊錢的...
閱讀 2457·2021-10-09 09:59
閱讀 2228·2021-09-23 11:30
閱讀 2621·2019-08-30 15:56
閱讀 1173·2019-08-30 14:00
閱讀 2970·2019-08-29 12:37
閱讀 1293·2019-08-28 18:16
閱讀 1683·2019-08-27 10:56
閱讀 1050·2019-08-26 17:23