背景
18年換工作期間正好趕上國慶,然后有一段時間的斷檔期不知道該干嘛临扮,正好雙十一阿里活動诅迷,就和好基友一起買了個云主機,準備搭建一個個人博客玩玩蔓挖,于是乎,買云主機馆衔,買域名瘟判,申請免費ssl證書,搭建WordPress博客系統(tǒng)角溃,搭建好后就是優(yōu)化了拷获。
想網站名字,以及網站介紹减细,找網站圖標匆瓜,找網站背景圖片,最后弄好了以后就擱置了未蝌,感覺網站還是不漂亮陕壹。
上周問同事一個問題,然后他給我發(fā)了一個博客树埠,看完后突然覺得這個博客好好看糠馆,簡潔,卻很炫酷怎憋。
我的個人博客vlog.issue98.com
部署概述
安裝docker --> docker安裝mysql --> docker安裝solo --> docker安裝nginx --> docker安裝lute
如果不做https的話又碌,只在本地測試,那么其實又MySQL和solo就夠了绊袋,不需要nginx毕匀,nginx的作用只是將https請求代理至solo
架構大概就上面這樣,訪問流量通過公網到系統(tǒng)網絡癌别,再到docker網橋皂岔,然后訪問nginx 443端口,nginx將流量轉到本地的80端口展姐,solo監(jiān)聽在80端口躁垛,然后solo通過JDBC協(xié)議訪問MySQL數據庫剖毯,nginx,solo教馆,MySQL都是用的主機網絡逊谋,所以在主機上都會監(jiān)聽對應端口。
安裝docker
docker分為企業(yè)版(docker-ee)和社區(qū)版(docker-ce)土铺,阿里的Centos鏡像源默認是docker-1.13胶滋,我們使用的是docker社區(qū)版,docker-ce-18.06
是18年6月發(fā)布的悲敷,目前大多數企業(yè)都使用的這個版本究恤,或者是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
- 啟動docker并設置為開機自啟動
systemctl start docker
systemctl enable docker
- 準備鏡像
docker pull b3log/solo
docker pull mysql:5.6
docker pull nginx
docker images #查看
安裝MySQL
# 安裝mysql:5.6,直接docker run 他會自動去官方鏡想下載
# MYSQL_ROOT_PASSWORD=你的數據庫密碼
docker run --name mysql -p 8306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
-p 8306:3306
:8306是宿主機監(jiān)聽的端口,3306是MySQL容器監(jiān)聽的端口后德,因為我機器上有WordPress部宿,所以80``3306
是被占用的,所以換了一個探遵,如果你本機3306端口沒有被占用窟赏,就都寫成3306就好
- 創(chuàng)建數據庫
# docker安裝的mysql默認允許遠程連接妓柜,可以使用xshell等軟件連接數據庫
# 進入容器mysql
docker exec -it mysql bash
# 進入數據庫 p后面跟你的密碼
mysql -uroot -p123456
# 創(chuàng)建數據庫(數據庫名:solo;字符集utf8mb4;排序規(guī)則utf8mb4_general_ci)
create database solo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
# 出現Query OK, 1 row affected (0.00 sec)表示成功
#退出數據庫
exit
#退出容器
exit
docker安裝solo
- 如果你本機的
80
端口被占用了箱季,可以用下面命令啟動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
參數說明
--env JDBC_PASSWORD="123456" 將 123456 換成你的密碼
--listen_port=8088 容器監(jiān)聽的端口
--server_scheme=http 請求方式,暫時使用 http棍掐,后面我們會換成 https
--server_host=192.168.16.4 你云主機的IP藏雏,如果你有域名可以寫域名
--server_port=8088 云主機監(jiān)聽的端口
注意:listen_port的端口要和server_port端口一致,不然進入網頁可能會出現 Latke 配置錯誤
命令成功執(zhí)行沒有報錯的話作煌,通過docker ps
查看執(zhí)行的容器列表中是否存在 solo掘殴,存在這表示啟動成功,直接訪問你的公網IP加:8088 即可訪問你的博客粟誓,http://180.76.178.229:8088
- 如果要使用https奏寨,就需要修改一下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" \
solo \
--listen_port=8080 \
--server_scheme=https \
--server_host=vlog.issue98.com \
--server_port=
--server_scheme=https
使用https協(xié)議,因為使用了https協(xié)議鹰服,所以就要配置nginx代理
docker安裝nginx
# 切換到服務器根目錄
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 證書
- 啟動 nginx
docker run --name nginx -p 8001:80 -d --rm nginx
由于solo使用了宿主機的80端口病瞳,所以這里使用宿主機的8001端口 - 導出配置文件
docker cp nginx:/etc/nginx/nginx.conf /dockerData/nginx/conf/nginx.conf
#導出配置文件 nginx.conf
docker cp nginx:/etc/nginx/conf.d /dockerData/nginx/conf/conf.d
#導出配置文件 nginx.conf
執(zhí)行docker stop nginx
,會自動刪除現在的 nginx 容器悲酷,然后執(zhí)行如下命令
- 啟動一個 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; #兩個證書文件的名字
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
- 啟動容器
docker run --detach --rm --network=host b3log/lute-http
- 停止 solo
docker stop solo
- 刪除 solo
docker rm solo
- 運行下列命令逗柴,重啟 solo,注意最后添加--lute_http=http://127.0.0.1:8249
如果你已經修改了solo的配置顿肺,添加了自己的文章等戏溺,不想丟失數據渣蜗,可以用docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]
命令來保存solo鏡像到本地
例如
docker commit e044f5c083cc solo-vlog:0.1
# 然后啟動的時候將b3log/solo換成solo-vlog:0.1就行,CONTAINER可以通過docker ps來查看
- 啟動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