使用docker搭建nginx掛載hexo部落格

weixin_34402408發表於2018-10-09

介紹

原先我的部落格是掛載在github pages上面的,但是因為github pages的伺服器在國外,國內訪問速度就會有點感人,於是就想把我的部落格掛載在自己阿里雲的伺服器上面。

環境

  1. 一臺有獨立ip的伺服器(centos 7)
  2. 在本地搭建好了hexo框架

實現

因為我的部落格是hexo寫的,眾所周知這是一個快速生成靜態部落格的框架,既然是靜態網頁,web伺服器方面當然是選擇nginx了,為什麼選擇nginx不選擇apache呢,因為nginx輕量級,同樣起web服務,比apache 佔用更少的記憶體及資源、抗併發,nginx 處理請求是非同步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高效能、高度模組化的設計,編寫模組相對簡單、社群活躍。等等的優點。
既然選擇了nginx,那選擇如何搭建了,普通安裝或者編譯nginx,多多少少會有各種殘留,這對一個系統潔癖的人來說,卻是非常痛苦的,所以我選擇了使用docker安裝nginx。

獲取nginx映象

  1. 拉取映象:

    docker search nginx

pull第一個nginx官方的映象

docker pull nginx

檢視獲取到的映象

➜ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED   SIZE
nginx               latest              06144b287844        2 weeks ago         109MB

可以看到映象已經pull下來了

安裝docker

➜ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

然後進入阿里雲docker庫首頁https://dev.aliyun.com/
登入
然後進入管理中心
點選加速器,複製連結

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["貼上那個連結"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

安裝docker-compose

下載shell指令碼

➜ sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

修改許可權

➜ sudo chmod +x /usr/local/bin/docker-compose

測試

➜ docker-compose --version
docker-compose version 1.22.0, build 1719ceb

通過docker-compose管理生成容器

➜ cd /home/   
➜ mkdir blog && cd blog   //建立一個blog的目錄
➜ vi docker-compose.yml   //建立一個名叫docker-compose.yml的檔案
#寫入
version: '3'
services:
  nginx:
    restart: 'always'
    image: 'nginx'
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - '/home/blog/www/public:/usr/share/nginx/html' #這裡的/home/blog/www/public是主機的目錄,意思是把這個目錄掛載到容器的/usr/share/nginx/html目錄中,該目錄防止了網頁的靜態檔案
      - '/home/blog/log:/var/log/nginx/' #同理,log資料夾裡是nginx的日誌檔案
      - '/home/blog/conf:/etc/nginx/conf.d'  #同理,配置檔案
#:wq儲存退出

建立掛載目錄
在/home/blog/下建立/www、/log、/conf三個目錄

➜ mkdir {www,log,conf}
➜ cd conf
➜ vi default.conf

新增以下內容

server {
listen       80;
server_name  localhost;

#charset koi8-r;
#access_log  /var/log/nginx/log/host.access.log  main;
root   /usr/share/nginx/html;
location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    ## 下面三行是新增的。
    autoindex on;
    autoindex_exact_size on;
    autoindex_localtime on;
}

#error_page  404              /404.html;

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
#    root           html;
#    fastcgi_pass   127.0.0.1:9000;
#    fastcgi_index  index.php;
#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#    include        fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}
}

上傳靜態檔案

在本地hexo的部落格目錄下
執行hexo g生成靜態檔案
他會在該目錄下生成一個public的一個檔案,裡面是關於你部落格的所有靜態檔案,然後這個檔案scp到伺服器的/home/blog/www/下

➜ scp /home/kevin/blog/public root@119.23.241.xxxx:/home/blog/www
# /home/kevin/blog/public是你本地的public目錄地址
# 119.23.24.xxxx表示你遠端伺服器的地址
# /home/blog/www/public表示上傳到遠端伺服器的位置

然後進入伺服器端

➜ cd /home/blog
➜ docker-compose up -d
# -d表示後臺執行的意思

然後在瀏覽器輸入你伺服器的ip
發現部落格已經掛在成功了,
因為我的伺服器是阿里雲的,所以還有加一步,去阿里的控制檯配置防火牆入口規則,新增80埠和443埠。

相關文章