2018年3月17日 星期六

[網站架設]Nginx + Passenger、新增系統管理帳號、自動化部署及部屬

接著回到iHower的Rails部署教學網頁,
要進行Nginx + Passenger的安裝
什麼是Nginx:
NGINX : 高效率的 Web Server -阿舍的隨手記記、隨手寫寫(內含大量ubuntu文章)
Apache vs. Nginx,究竟哪一個比較好 -IT邦幫忙 技術問答 我是老皮
全面了解Nginx到底能做什麼 -每日頭條 極客教程
Nginx是什么?Nginx介绍及Nginx的优点 -LNMP.org
Nginx 容器教程 -阮一峰的网络日志(此站也有PostgreSQL新手入門)
Ubuntu 16.04上使用Nginx Passenger 部署 Rails -博客
Ubuntu 16.04 安装 Redmine项目管理系统(Nginx) -WTF Daily Blog 斗大的熊猫
Installing Passenger + Nginx on Ubuntu 16.04 LTS (with APT) -phusionpassenger.com

在 首次登入與線上求助 -鳥哥的Linux私房菜 提到
在Linux系統下最好常使用一般帳號來登入即可,所以上例中鳥哥是以自己的帳號dmtsai來登入的。 因為系統管理員帳號(root)具有無窮大的權力,例如他可以刪除任何一個檔案或目錄。因此若你以root身份登入Linux系統, 一個不小心下錯指令,這個時候可不是『欲哭無淚』就能夠解決的了問題的~ 
因此,一個稱職的網路/系統管理人員,通常都會具有兩個帳號,平時以自己的一般帳號來使用Linux主機的任何資源, 有需要動用到系統功能修訂時,才會轉換身份成為root呢!所以,鳥哥強烈建議你建立一個普通的帳號來供自己平時使用喔! 更詳細的帳號訊息,我們會在後續的『第十三章帳號管理』再次提及! 這裡先有概念即可!
進入第十三章新增一個帳號,不過內容很多,
在上方博客的連結內文有個新增帳號的簡單步驟,先使用再回頭了解。

使用新增的帳號進行Nginx安裝,
照著安裝教學很順利就完成了,打開瀏覽器輸入IP位置試試:







SUCCESS !!!

在網站尚未決定上架前,應該需要關閉,
所以擷取Nginx啟動和重開用法:
sudo service nginx start
sudo service nginx stop
sudo service nginx restart

裝完 Nginx教學文的下個步驟就是剛做過的新增user,
但教學文不使用密碼登入,以 SSH key登入更安全。
也可參考:遠端 SSH 免密碼登入(key) 設定 含新增帳號步驟-Leon's Blogging

這裡採用直接刪掉帳號,再重新創建一個,比較單純些,
刪掉帳號前先建議先
find / -user username
注意有無系統內例如例行性crontab檔案,查詢後很多檔案跑出來,
但我現在也不會判別這些檔案哪些該如何處置,
依常理判斷我僅是透過deploy(with passwd)安裝一些東西上去,
刪除應該是無傷大雅,所以就勇敢地將它刪除了,並創建新的deploy(without passwd),


印象中與第一次創建帳號不同的是,中間有要求填入full name, room number...
全部按Enter直接跳過也不影響。

接者設定自動化部署,用到一個名為 Capistrano的gem,參考:
Capistrano 自動化 deploy Rails -ihower { blogging }
Capistrano 自動化部署設定 -Leon's Blogging
百度百科 Capistrano

在本地端 gemfile加入 capistrano及相關 gem,
cap install時出現了錯誤訊息:
cap aborted!
No Rakefile found (looking for: capfile, Capfile, capfile.rb, Capfile.rb, /usr/lib/ruby/vendor_ruby/Capfile)
解決方案網站參考:
'No Rakefile found' error from the 'cap install' command -Stack Overflow
輸入
cap --rakefile /usr/lib/ruby/vendor_ruby/capistrano/templates/Capfile install
即可解決。
執行 cap production deploy:check
出現
cap aborted!
LoadError: cannot load such file -- capistrano/rails
改成 cap --rakefile /usr/lib/ruby/vendor_ruby/capistrano/templates/Capfile production deploy:check
出現
cap aborted!
NoMethodError: undefined method `append' for main:Object
Tasks: TOP => production
在不知如何解決的情況下輸入
bundle exec cap production deploy:check
結果進入登入遠端畫面,但需要密碼,
所以是新增免密碼登入的帳號有出錯嗎?
(明天繼續)

答案是!!
1.本地端與遠端操作要正確,頭腦要清楚
!!2."ssh-rsa "不須換行,複製會被忽略自己補上!!
以上兩點搞了兩天,終於突圍

要寫入config/secrets.yml一直出現 E212的問題,用root也一樣
https://stackoverflow.com/questions/8253362/etc-apt-sources-list-e212-cant-open-file-for-writing
且發現複製字串可能會被截字,要小心

暫時不設定自動化,時間要停損,當作售後服務吧。

後來要部署還是得寫入,但是出錯原因找到了,
要進入遠端user cd ~(project_name)底下的
shared/config去新增檔案寫入secrets.yml database.yml,
寫入後就可以繼續做下去囉!

設定完成後
cap production deploy:check 最下面紅字錯誤訊息消失,
接者要正式
cap production deploy 結果出錯:
bundle stderr: /usr/bin/env: 'bundle': No such file or directory

gem cleanup 幫你清除重複安裝的 rubygem -小蟹的Rails心得筆記
Ruby Gem 命令详解 -陈斌彬的技术博客

經詢問後得到這個回答:
哎喲~突然想到你在本地有裝rvm了嗎?!
如果沒有裝的是要裝一下的喔!!
但還沒裝之前先試試看把capistrano-rvm 刪掉只剩capistrano-bundler,然後再bundle、deploy試試看,如果不行的話就兩個都裝上且在本地要安裝rvm。
刪除gem: gem uninstall [gemname ~ver.]

解除安裝其他程式與安裝 rvm之後登出,ubuntu就不理人了,
安裝完執行結果有好多gem都消失,連bundle install都不能執行,
所以從 gem install bundler 再開始,但手誤打成 gem install bundle,
輸入 bundle install 後還是可以執行,只是安裝很久。

[筆記]Ruby的RVM,GEM,Bundler是什麼? -林克融

安裝完輸入 cap --v 有一些檔案找不到的訊息,
但後面很貼心有給指令,處理完還是不行,
不過還裝了gem rvm1-capistrano3, require 'rvm1/capistrano3',
在遠端home mkdir .rvm, .rvm/bin
執行deploy可以通過第一道,後面錯誤訊息還是差不多。

4/2 高手來解答,先把 gem整理不需安裝cap rvm/bundle,
也不用 require上述二者,
再到server端 sudo gem install bundler,
注意 secrets.yml在遠端的設定,
production:
  secret_key_base: #####(一堆數字)
這邊編輯不能使用 tab,兩個空白來代替,數字前也要空白,
secret那幾個字也要記得打!

接著再 deploy試試,我在這邊還有一個錯誤,
在 server端的 database.yml有打錯字 :
production"n"

所以:Debug真是要命。
經一事,長一智~叮咚叮咚

雲服務部署技巧 - 虛擬主機構買到環境建置一次搞定 - 六角學院
雲端主機租賃及部署 Node.js 服務- 六角學院 youtube
使用 express

沒有留言:

張貼留言