solo開源個(gè)人博客搭建記錄

背景

18年換工作期間正好趕上國慶,然后有一段時(shí)間的斷檔期不知道該干嘛,正好雙十一阿里活動(dòng),就和好基友一起買了個(gè)云主機(jī),準(zhǔn)備搭建一個(gè)個(gè)人博客玩玩,于是乎,買云主機(jī),買域名,申請(qǐng)免費(fèi)ssl證書,搭建WordPress博客系統(tǒng),搭建好后就是優(yōu)化了。
想網(wǎng)站名字,以及網(wǎng)站介紹,找網(wǎng)站圖標(biāo),找網(wǎng)站背景圖片,最后弄好了以后就擱置了,感覺網(wǎng)站還是不漂亮。
上周問同事一個(gè)問題,然后他給我發(fā)了一個(gè)博客,看完后突然覺得這個(gè)博客好好看,簡潔,卻很炫酷。
我的個(gè)人博客vlog.issue98.com

部署概述

安裝docker --> docker安裝mysql --> docker安裝solo --> docker安裝nginx --> docker安裝lute
如果不做https的話,只在本地測試,那么其實(shí)又MySQL和solo就夠了,不需要nginx,nginx的作用只是將https請(qǐng)求代理至solo


image.png

架構(gòu)大概就上面這樣,訪問流量通過公網(wǎng)到系統(tǒng)網(wǎng)絡(luò),再到docker網(wǎng)橋,然后訪問nginx 443端口,nginx將流量轉(zhuǎn)到本地的80端口,solo監(jiān)聽在80端口,然后solo通過JDBC協(xié)議訪問MySQL數(shù)據(jù)庫,nginx,solo,MySQL都是用的主機(jī)網(wǎng)絡(luò),所以在主機(jī)上都會(huì)監(jiān)聽對(duì)應(yīng)端口。

安裝docker

docker分為企業(yè)版(docker-ee)和社區(qū)版(docker-ce),阿里的Centos鏡像源默認(rèn)是docker-1.13,我們使用的是docker社區(qū)版,docker-ce-18.06是18年6月發(fā)布的,目前大多數(shù)企業(yè)都使用的這個(gè)版本,或者是docker-ce-18.09.

  • 添加docker鏡像源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 查看所有docker-ce版本
yum list all --showduplicates docker-ce
  • 安裝docker-ce-18.06
yum install docker-ce-18.06.1.ce-3.el7
  • 啟動(dòng)docker并設(shè)置為開機(jī)自啟動(dòng)
systemctl start docker
systemctl enable docker
  • 準(zhǔn)備鏡像
docker pull b3log/solo
docker pull mysql:5.6
docker pull nginx
docker images   #查看

安裝MySQL

# 安裝mysql:5.6,直接docker run 他會(huì)自動(dòng)去官方鏡想下載
# MYSQL_ROOT_PASSWORD=你的數(shù)據(jù)庫密碼
docker run --name mysql -p 8306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

-p 8306:3306:8306是宿主機(jī)監(jiān)聽的端口,3306是MySQL容器監(jiān)聽的端口,因?yàn)槲覚C(jī)器上有WordPress,所以80``3306是被占用的,所以換了一個(gè),如果你本機(jī)3306端口沒有被占用,就都寫成3306就好

  • 創(chuàng)建數(shù)據(jù)庫
# docker安裝的mysql默認(rèn)允許遠(yuǎn)程連接,可以使用xshell等軟件連接數(shù)據(jù)庫
# 進(jìn)入容器mysql
docker exec -it mysql bash

# 進(jìn)入數(shù)據(jù)庫 p后面跟你的密碼
mysql -uroot -p123456

# 創(chuàng)建數(shù)據(jù)庫(數(shù)據(jù)庫名:solo;字符集utf8mb4;排序規(guī)則utf8mb4_general_ci)
create database solo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
# 出現(xiàn)Query OK, 1 row affected (0.00 sec)表示成功
#退出數(shù)據(jù)庫
exit
#退出容器
exit

docker安裝solo

  • 如果你本機(jī)的80端口被占用了,可以用下面命令啟動(dòng)solo容器
docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \
--env JDBC_PASSWORD="123456" \
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://127.0.0.1:8306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"  \
b3log/solo --listen_port=8088 --server_scheme=http --server_host=192.168.16.4 --server_port=8088

參數(shù)說明

--env JDBC_PASSWORD="123456" 將 123456 換成你的密碼
--listen_port=8088 容器監(jiān)聽的端口
--server_scheme=http 請(qǐng)求方式,暫時(shí)使用 http,后面我們會(huì)換成 https
--server_host=192.168.16.4 你云主機(jī)的IP,如果你有域名可以寫域名
--server_port=8088 云主機(jī)監(jiān)聽的端口

注意:listen_port的端口要和server_port端口一致,不然進(jìn)入網(wǎng)頁可能會(huì)出現(xiàn) Latke 配置錯(cuò)誤
命令成功執(zhí)行沒有報(bào)錯(cuò)的話,通過docker ps查看執(zhí)行的容器列表中是否存在 solo,存在這表示啟動(dòng)成功,直接訪問你的公網(wǎng)IP加:8088 即可訪問你的博客,http://180.76.178.229:8088


  • 如果要使用https,就需要修改一下solo容器的啟動(dòng)參數(shù)了
docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \
--env JDBC_PASSWORD="123456" \
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://127.0.0.1:8306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"  \
solo \
--listen_port=8080 \
--server_scheme=https \
--server_host=vlog.issue98.com \
--server_port=

--server_scheme=https使用https協(xié)議,因?yàn)槭褂昧薶ttps協(xié)議,所以就要配置nginx代理

docker安裝nginx

# 切換到服務(wù)器根目錄
cd /
# 創(chuàng)建主目錄
mkdir dockerData
# 創(chuàng)建文件
mkdir dockerData/nginx dockerData/nginx/conf dockerData/nginx/logs dockerData/nginx/www dockerData/nginx/ssl

dockerData/nginx 用于存放 docker 下 nginx 自定義文件
dockerData/nginx/conf存放 nginx 配置文件
dockerData/nginx/log 存放 nginx 日志文件
dockerData/nginx/www 存放 nginx 訪問的資源文件
dockerData/nginx/ssl 存放 ssl 證書

  • 啟動(dòng) nginx
    docker run --name nginx -p 8001:80 -d --rm nginx
    由于solo使用了宿主機(jī)的80端口,所以這里使用宿主機(jī)的8001端口
  • 導(dǎo)出配置文件
docker cp nginx:/etc/nginx/nginx.conf /dockerData/nginx/conf/nginx.conf 
#導(dǎo)出配置文件 nginx.conf
docker cp nginx:/etc/nginx/conf.d /dockerData/nginx/conf/conf.d 
#導(dǎo)出配置文件 nginx.conf

執(zhí)行docker stop nginx,會(huì)自動(dòng)刪除現(xiàn)在的 nginx 容器,然后執(zhí)行如下命令

  • 啟動(dòng)一個(gè) nginx 容器
docker run -d -p 80:80 -p 443:443 --name nginx-1 \
-v /dockerData/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /dockerData/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /dockerData/nginx/ssl:/ssl/ \
-v /dockerData/nginx/www:/usr/share/nginx/html \
-v /dockerData/nginx/logs:/var/log/nginx nginx
  • nginx配置文件
server {
    listen       443;
    server_name  vlog.issue98.com;
    ssl on;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    ssl_certificate /ssl/vlog.pem;          #兩個(gè)證書文件的名字
    ssl_certificate_key /ssl/vlog.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://vlog.issue98.com:8080;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}
server{
    listen 80;
    server_name vlog.issue98.com;
    rewrite ^(.*) https://$host$1 permanent;
}

下載證書,nginx類型,然后放到dockerData/nginx/ssl目錄下,名字和nginx配置文件里的匹配

docker 啟用LUTE

  • 獲取最新鏡像
docker pull b3log/lute-http
  • 啟動(dòng)容器
docker run --detach --rm --network=host b3log/lute-http
  • 停止 solo
docker stop solo
  • 刪除 solo
docker rm solo
  • 運(yùn)行下列命令,重啟 solo,注意最后添加--lute_http=http://127.0.0.1:8249
    如果你已經(jīng)修改了solo的配置,添加了自己的文章等,不想丟失數(shù)據(jù),可以用docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]命令來保存solo鏡像到本地

例如

docker commit e044f5c083cc solo-vlog:0.1
# 然后啟動(dòng)的時(shí)候?qū)3log/solo換成solo-vlog:0.1就行,CONTAINER可以通過docker ps來查看

  • 啟動(dòng)LUTE
docker run --detach --name solo-lute --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \
--env JDBC_PASSWORD="123456" \
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://127.0.0.1:8306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
solo-sibo:0.2 \
--listen_port=8080 --server_scheme=https --server_host=vlog.issue98.com \
--server_port= \
--lute_http=http://127.0.0.1:8249
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 《Docker從入門到實(shí)踐》閱讀筆記 原書地址: https://yeasy.gitbooks.io/docker...
    GuoYuebo閱讀 11,672評(píng)論 1 39
  • Docker簡介Docker是一個(gè)由GO語言寫的程序運(yùn)行的“容器”; 目前云服務(wù)的基石是操作系統(tǒng)級(jí)別的隔離,在同一...
    gakiww閱讀 657評(píng)論 0 0
  • 1.Docker簡介 1.1 什么是虛擬化 在計(jì)算機(jī)中,虛擬化(英語:Virtualization)是一種資源管理...
    EdwinGates閱讀 1,926評(píng)論 0 0
  • 明天又要遠(yuǎn)行,此刻在想些什 01 過完元宵節(jié),新年也就意味著該結(jié)束了。年前從天南海北陸...
    jenny簡愛閱讀 657評(píng)論 1 2
  • 這是二月中旬的午后時(shí)光。我自己一個(gè)人在原本熱鬧的辦公室里。百葉窗拉下來,斜西的陽光被擋在外面,室內(nèi)呈現(xiàn)微弱的光,更...
    江蘇白丁閱讀 888評(píng)論 9 4

友情鏈接更多精彩內(nèi)容