文章參考自 kitten 的這篇文章
和 Ghost 官網王賽寫的這篇文章
那么既然已經有人寫了很詳細的文章蔼水,為什么我還要寫呢?因為坑是填不滿的,本人按照教程第一次搭建了兩天,沒搭成功箩祥,第二次又搭建了半天才完成,我會將教程+上我填上的坑告訴大家肆氓,希望大家能夠成功搭建成自己的博客。
一底瓣、購買域名
- 這個渠道很多谢揪,就不多加贅述蕉陋,這里我是在萬網上買的域名。
- 域名解析拨扶。
二凳鬓、購買服務器
- 我買的是阿里云 50 多塊錢的服務器,配置的是 ubuntu64 位系統(tǒng)患民。
- 如果前兩步我描述很簡單會為你配置造成困擾的話缩举,請移步這里查看 kitten 寫的前兩章節(jié)的內容,如果還是不夠解決你的問題匹颤,那么請自行百度仅孩,筆者也是從一個服務器一點不通的小白慢慢搭建成功的。
三印蓖、配置服務器
-
3.1 打開終端(terminal)
輸入命令行:
ssh root@你的IP地址
點擊回車辽慕,輸入你的服務器密碼。
如果出現(xiàn)以上文字赦肃,那么恭喜你溅蛉,進入服務器成功。
-
3.2 安裝 Node.js
依次在終端上輸入以下命令他宛,注釋除外(如果怕打錯請全部復制粘貼):
sudo apt-get update
sudo apt-get install -y python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
>注意:敲上面這句代碼可能會出現(xiàn)這樣的問題:
***add-apt-repository: command not found*** 說的是你的 command 沒有安裝船侧,解決方法就是先安裝命令:
sudo apt-get install python-software-properties
sudo apt-get install software-properties-common
安裝完成之后繼續(xù)執(zhí)行下面的命令:
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs
都執(zhí)行完之后用 -v 命令查看安裝是否成功:
node -v
v0.10.37
npm -v
1.4.28
+ ####3.3 安裝 Nginx
sudo apt-get install nginx
+ ####3.4 安裝 MySQL
- Ghost 默認采用 Sqlite3 數(shù)據(jù)庫,但是我還是建議用 MySQL厅各,避免將來由于數(shù)據(jù)多镜撩、訪問量多而導致性能下降。
sudo apt-get install mysql-server mysql-client
安裝過程中系統(tǒng)會讓你給 root(MySQL 數(shù)據(jù)庫的管理賬號) 用戶設置密碼讯检。
![-----2014-08-22-16-27-05.png](http://upload-images.jianshu.io/upload_images/266345-520433f5e5919bb5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
MySQL 安裝后琐鲁,執(zhí)行以下指令進一步加強 MySQL 的安全設置:
sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
//輸入安裝 MySQL 時為 root 賬戶設置的密碼
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
You already have a root password set, so you can safely answer 'n'.
//是否修改 root 賬戶的密碼?前面設置過 root 賬戶的密碼了人灼,如果不打算修改密碼的話围段,輸入 'n'
Change the root password? [Y/n] n
... skipping.
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
//是否刪除匿名用戶?
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
//是否禁止 root 賬戶遠程登錄投放?
Disallow root login remotely? [Y/n] y
... Success!
By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
//是否刪除 MySQL 默認創(chuàng)建的 test 數(shù)據(jù)庫奈泪,并刪除所有對 test 數(shù)據(jù)庫的權限設置?
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success! - Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
//是否重新加載權限表灸芳?
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
MySQL 到此安裝結束涝桅。
下面設置 utf8
執(zhí)行這行命令:
cd /etc/mysql
編輯 my.conf 文件
vi my.cnf
你將看到這么個文本擺在你的面前。
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
Here is entries for some specific programs
The following values assume you have at least 32M ram
This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
* Basic Settings
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
那么你的任務是什么呢烙样?將光標定位到 ```[mysqld]``` 位置冯遂,按 **"i"** ,這時可以修改了谒获,添加如下設置:
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
這是修改之后的文本:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
Here is entries for some specific programs
The following values assume you have at least 32M ram
This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
* Basic Settings
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
修改完成之后蛤肌,先按 ```esc``` 壁却,然后輸入 ```:wq``` ,退出MySQL。
之后我們來檢一下是否修改完成裸准?
1.進入 MySQL 命令行界面:
mysql -uroot -p
之后輸入之前你自己設置的MySQL密碼展东。
2.輸入指令
show variables like 'char%';
查看輸出是否如下所示:
![數(shù)據(jù)庫配置.png](http://upload-images.jianshu.io/upload_images/266345-1fa81dc04ce2be10.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
#####注意:這里如果和我這個 Vlaue 值有的對應不上需要重新啟動數(shù)據(jù)庫,那么怎么在 ubuntu 下重新啟動 MySQL 呢炒俱?輸入:
service mysql restart
這個時候再進入 mysql 去查看一下配置就和我這個一樣啦盐肃。
3.輸入指令
show variables like 'collation%';
檢查結果是否如圖:如果一樣,恭喜你可以跳入下一個坑权悟。
![屏幕快照 2015-10-29 下午7.37.31.png](http://upload-images.jianshu.io/upload_images/266345-443b3e85eb89babf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
+ ####3.5 創(chuàng)建數(shù)據(jù)庫
我們希望 Ghost 搭配 MySQL 數(shù)據(jù)庫運行砸王,因此需要為 Ghost 創(chuàng)建一個 MySQL 數(shù)據(jù)庫。前面已經安裝好 MySQL 了僵芹,現(xiàn)在我們就來創(chuàng)建數(shù)據(jù)庫吧:
mysql -uroot -p -e 'create database ghost;'
系統(tǒng)會提示你輸入 MySQL 數(shù)據(jù)庫的 root 賬戶密碼(還記得前一章節(jié)安裝 MySQL 時設置的密碼嗎处硬?)。指令執(zhí)行之后就創(chuàng)建了一個叫做 ghost 的數(shù)據(jù)庫拇派,將來荷辕,你的文章就是存在這里嘍!
+ ####3.6 配置Nginx
我們希望利用 Nginx 做 Ghost 的前端代理服務件豌。OK疮方, 輸入下面命令進入 */etc/nginx/sites-available/* 目錄:
cd /etc/nginx/sites-available/
然后輸入下面命令 , 編輯ghost.conf
sudo touch ghost.conf
sudo vi ghost.conf
server
{
listen 80;
server_name mitchell-dream-god.com; //替換為你自己的域名!
location / { proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}
}
完成之后按```etc``` , ```:wq``` 退出編輯茧彤。
然后我們?yōu)?ghost.conf 文件做一個軟鏈接到 */etc/nginx/sites-enabled/* 目錄下:
sudo ln -s /etc/nginx/sites-available/ghost.conf /etc/nginx/sites-enabled/ghost.conf
+ ####3.7 安裝 forever
如果是通過 npm start 啟動 Ghost 的話骡显,只要你關閉了遠程連接,Ghost 也就停了曾掂,這個我們當然不希望嘍惫谤。幸好,有 forever 工具幫我們解決這個問題珠洗。接下來執(zhí)行以下指令來安裝forever :
sudo npm install forever -g
+ ####3.8 安裝 Ghost
- #####3.8.1 下載解壓工具
sudo apt-get install unzip
- #####3.8.2 下載 Ghost 壓縮包
cd /srv/
sudo curl -L http://dl.ghostchina.com/Ghost-0.5.0.zip -o ghost.zip
>如果想下載更新的版本去 [Ghost 官網](!http://www.ghostchina.com/) 查看地址即可溜歪。
- #####3.8.3 解壓
sudo unzip ghost.zip -d ghost
現(xiàn)在,```/srv/ghost/``` 目錄下面就是我們的 Ghost 系統(tǒng)了许蓖!
- #####3.8.4 修改 Ghost 配置文件
我們進入 Ghost 系統(tǒng)目錄蝴猪,為 Ghost 增加配置文件并配置數(shù)據(jù)庫:
cd /srv/ghost/
sudo cp config.example.js config.js sudo
vi config.js
最后一條指令是用 vim 打開 config.js 文件進行編輯。我們只修改 production 一節(jié)的配置信息膊爪,修改為如下形式(注意按照你自己的實際情況替換W在濉):
// ### Production
// When running Ghost in the wild, use the production environment
// Configure your URL and mail settings here
production: {
url: 'http://ghostchina.com', //替換為你自己的域名。
mail: {},
database: {
updateCheck: false,
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'root', //我們暫且用 MySQL 的 root 賬戶
password : '123456', //輸入你的 MySQL 密碼
database : 'ghost', //我們前面為 Ghost 創(chuàng)建的數(shù)據(jù)庫名稱
charset : 'utf8'
}
},
server: {
// Host to be passed to node's net.Server#listen()
host: '127.0.0.1',
// Port to be passed to node's net.Server#listen()
, for iisnode set this to process.env.PORT
port: '2368'
}
},
完成之后按 ```etc``` ```:wq``` 退出編輯米酬。
- #####3.8.5 安裝 Ghost 依賴庫
打開 Ghost 系統(tǒng)的目錄下面的 package.json 文件沛豌,將 "sqlite3": "2.2.0", 這一行刪除掉(注意,你看到的 sqlite 版本可能會不一樣赃额,但是加派,只是 sqlite3 字樣阁簸,刪除即可,*不要注釋上,一定要把那一行刪除了*)哼丈。
接下來,進入存放 Ghost 系統(tǒng)的目錄并安裝 Ghost 所依賴的 npm
包:
cd /srv/ghost/
sudo npm install --production
很快筛严,所有依賴包就安裝好了醉旦,當前目錄下會多出一個 ```node_modules
``` 目錄。
- #####3.8.6 啟動 Ghost
執(zhí)行如下指令重啟 Nginx桨啃、啟動 Ghost:
>```
sudo service nginx restart
如果發(fā)現(xiàn)重新啟動失敗车胡,怎么辦?這里的原因是因為
/etc/nginx/sites-available
中的default
文件夾和我們創(chuàng)建的 ghost.conf
文件沖突產生的照瘾,解決方式就是刪除我們創(chuàng)建的文件匈棘,先進入/etc/nginx/sites-available
文件夾并使用刪除命令:
/etc/nginx/sites-available# rm -rf ghost.conf
這個時候你再次輸入上面代碼重新啟動 nginx 會發(fā)現(xiàn)成功了。接著執(zhí)行下面的命令析命。
cd /srv/ghost
sudo NODE_ENV=production forever start index.js
注意:至此主卫,所有的操作都做完了。現(xiàn)在打開瀏覽器并輸入你的域名查看一下狀態(tài)鹃愤!如果是這樣就成功了:
如果出現(xiàn) Nginx 歡迎頁面簇搅,那就出現(xiàn)問題啦!H硗隆4窠(我?guī)状味际翘稍诹诉@里,幾個大神貌似沒遇到這種問題凹耙,但是我確實遇到啦姿现!接下來我來說說怎么解決?)
四肖抱、最后的坑的解決方案
- 還記得我們所做的 Nginx 配置么备典? 進入我們的 Nginx 目錄,我們來查看一下我們的 Nginx 的引用虐沥,
cd /etc/nginx/
vi nginx.conf
查看 include 這兩行熊经,其實主要是下面這行,我們可以看到我們 Nginx 引用的是 nginx 文件夾下 sites-enabled 文件夾中的文件欲险,接著我們去看看 sites-enabled 中的文件是否配置正確镐依?
進入 sites-enabled 文件夾,查看文件
cd /etc/nginx/sites-enabled
ls
你將會看到兩個文件天试,一個是 default 和 ghost.conf 槐壳,還能想起來我們的 ghost.conf 么?我們是在 sites-available 中創(chuàng)建的 ghost.conf 并且軟鏈接到這里產生的 ghost.conf 文件喜每,那么你用 vim
來打開這個文件
vi ghost.conf
打開之后务唐,傻啦雳攘,啥東西都沒有啊,咋辦把之前在 available 中添加的那些內容添加到這里:
server
{
listen 80;
server_name mitchell-dream-god.com; //替換為你自己的域名枫笛!
location / { proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}
}
完成之后按etc
, :wq
退出編輯吨灭。