日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

前言

這篇文章的內容在大概2周前就已經完成了,但是因為個人懶惰,所以一直沒有進行總結和更新記錄,大大的罪過啊,今天怎么也要開始重新梳理筆記了,接下來進入正題吧!

之前的博文記錄了安裝博客系統solo的過程,但是美中不足的是當時使用的是http,沒能用上https,后面在學習和實踐過程中,將個人博客地址 改成了https,這里記錄下其中的關鍵點。

本篇文章會包含前作的內容,所以前作你可以不看,將這篇文章作為solo的https的參考文章,僅供參考!


最近好好學習了Docker,所以想把線上環境的所有組件替換為Docker部署,對于Solo這個個人博客系統,至少需要部署3個Docker容器。

  1. MySQL
  2. Solo
  3. Nginx

其順序也是從上到下依次部署最為妥當,Docker部署簡單,對初學者而言難其中一個難點就是網絡通信,我這里就把各個過程做一個記錄。

準備工作

因為部署了3個docker容器,那么他們要互相訪問,就不能(更準確來講"不應該")通過傳統的localhost或者127.0.0.1了。

官方也不再建議使用 --link了,那么使用什么了?

官方推薦的是建立一個docker的網絡,代碼如下所示,其中hicode是我定義的網絡名,大家可以改成自己喜歡的:

docker network create -d bridge hicode

后續每一個容器在建立的時候,都應該加入這個網絡hicode,然后容器和容器之間就可以通過容器名進行訪問了。

MySQL

講真,這個東西是最浪費時間。在Docker化之前,我服務器上用的是MySQL8,當時就折騰了不少時間,雖然最終也部署起來了,但是后面考慮了下還是放棄了8這個版本,原因主要是如下幾點:

  • MySql8的資料相對較少,記錄的問題解決方案也比較少,要爬坑很久才能找到解決方案。
  • MySQL8的內存占用和CPU占用有點高,特別是內存占用持續高漲。我的云服務器是捋的騰訊羊毛,當時本來是1核2G的配置,我為了延長使用時間,把服務器配置降級成了1核1G了,所以對于MySql8的內存占用,我的小服務器有點扛不住。
  • 在可以預期的未來,我們公司包括整個行業還是會在5.X居多,所以8.0就留在后面有機會折騰了吧。

部署MySQL 5.X版本的指令如下所示

docker run --name mysql5.7 -p 3306:3306  
--network hicode --privileged=true --restart=always 
-v /lcf/docker-data/mysql5.7/data:/var/lib/mysql 
-v /lcf/docker-data/mysql5.7/conf:/etc/mysql/conf.d 
-e TZ=Asia/Shanghai 
-e MYSQL_ROOT_PASSword=yourpwd -d mysql:5.7.26 
--character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci 
--lower_case_table_names=1 --default-time_zone='+8:00' 

上述命令還是有幾個細節的,如下所示:

  • --network hicode是加入之前我們新建的橋接網絡hicode
  • --privileged=true 是保證MySQL具有操作外部映射出的文件的權限
  • --restart=always是自動啟動,類似Win的自動重啟
  • -v /lcf/docker-data/mysql5.7/data:/var/lib/mysql  將mysql的數據映射到磁盤上,避免新建容器后數據丟失。
  • -v /lcf/docker-data/mysql5.7/conf:/etc/mysql/conf.d 將mysql的配置放置在外部磁盤,方便修改
  • -e TZ=Asia/Shanghai 指定mysql的時區為 東八區,也就是我們中國時間
  • -e MYSQL_ROOT_PASSWORD=yourpwd 是需要你自己設置的密碼

對于mysql的配置文件,因為我們映射到了外部,所以mysql沒有自動創建。如果在不映射外部的情況下,去看看mysql的內部配置文件,你會發現mysql官方幫我們定義了3個配置文件

  • docker.cnf 專門為docker做的優化
  • mysqldump.cnf dump的時候做的優化
  • mysql.cnf 需要你自己定義

當然為了方便我們不需要這么麻煩,我們就合二為一創建一個mysql.cnf就夠了,命令如下:

cd /lcf/docker-data/mysql5.7/conf
touch mysql.cnf

然后在mysql.cnf添加如下內容(其實這部你省略也是沒有問題的)

[mysql]
# 以下是docker.cnf的內容
skip-host-cache
skip-name-resolve
# 以下是mysqldump.cnf的內容
quick
quote-names
max_allowed_packet  = 16M
# 以下內容如有需要請自己添加

然后重啟mysql就行了

docker restart mysql5.7

=============以下步驟Docker安裝的MySQL應該是不需要的,默認都可以訪問=========如果你需要指定mysql所有ip都訪問

docker exec -it mysql5.7 /bin/bash
mysql -h 127.0.0.1 -u root -p 
# 此時要求你輸入MySQL密碼

# 此處特別注意了,需要你替換'yourpwd'為你的密碼
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpwd' WITH GRANT OPTION;
FLUSH PRIVILEGES;

=============以上步驟不需要,默認都可以訪問=========

solo

solo的安裝注意2個細節即可,我們先看命令:

docker run -d  --restart=always --name solo 
    --network hicode
    --env RUNTIME_DB="MYSQL" 
    --env JDBC_USERNAME="root" 
    --env JDBC_PASSWORD="yourpwd" 
    --env JDBC_DRIVER="com.mysql.jdbc.Driver" 
    --env JDBC_URL="jdbc:mysql://mysql5.7:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" 
    b3log/solo --listen_port=8080 --server_scheme=https --server_host=www.hicode.club

細節部分請注意了:

  • --network=hicode加入hicode這個網絡
  • --env JDBC_DRIVER="com.mysql.jdbc.Driver" 因為我使用的是MySQL 5.7所以是這樣的
  • --env JDBC_PASSWORD="yourpwd"是安裝myql時候時候指定的密碼
  • --server_host=www.hicode.club 需要你自己修改host
  • --env JDBC_URL="jdbc:mysql://mysql5.7:3306/ 這個地方我寫的不是localhost也不是127.0.0.1,而是使用的mysql容器的名稱mysql5.7
  • --server_scheme=https 如果要通過https訪問,那么此處必須是https

Nginx

證書申請

https相對比http,最核心的一個東西就是證書,證書有免費的也有收費的,我這里介紹下幾個免費獲取的途徑

騰訊云

免費渠道:SSL證書選購 - 騰訊云

利用docker部署solo并升級為https

 

請注意選擇域名免費版DV.

然后根據自己的情況進行資料填寫。

利用docker部署solo并升級為https

 

接下來就是驗證域名歸屬,只有驗證成功后才會給你頒發證書。

如上所示,認證辦法通常有2類

  • 修改DNS記錄:推薦使用,在DNS提供商(騰訊云、阿里云等)的解析中添加一條txt的值。
  • 文件驗證:省略

確定申請后,會出現如下圖

利用docker部署solo并升級為https

 

那么在添加txt記錄的時候,主機記錄和記錄值分別做上述添加即可。

具體的流程可以參考:

  • SSL 證書 域名型(DV)免費證書申請流程 - 操作指南 - 文檔中心 - 騰訊云
  • SSL 證書 域名驗證指引 - 操作指南 - 文檔中心 - 騰訊云

阿里云

免費渠道:阿里云通用售賣

利用docker部署solo并升級為https

 

FreeSSL

免費渠道:FreeSSL首頁 - FreeSSL.cn一個提供免費HTTPS證書申請的網站

視頻教程:如何使用 FreeSSL 申請免費證書?

關于證書的100問:FreeSSL 申請證書常見問題 100 問 FAQ?

同時這個網站有大量通俗易懂的文章,推薦新手看看。

其他

Certbot

說明 · acmesh-official/acme.sh Wiki · GitHub

證書下載

當驗證了域名歸屬后,對應的機構就會給你頒發證書了,不同的HTTP服務器,需要不同的證書類型,下面是我在騰訊云申請的證書,默認提供了4類。

利用docker部署solo并升級為https

 

因為我用的是Nginx,所以記錄如下:

  • xxx.key 就是你的私鑰文件,不要泄漏給別人哦。
  • xxx.crt 是你的證書文件

配置Nginx

在證書下載下來后,接下來就是配置證書和反向代理了。

首先創建nginx的配置文件nginx.conf

cd /lcf/docker-data/nginx/conf
touch nginx.conf

接下來請把2個證書相關的文件移動到nginx.conf的同級目錄,然后進行如下配置。

worker_processes 1;
events {
    worker_connections 1024;
}
http {
    include mime.types;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    default_type Application/octet-stream;
    log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" "$request_body"';
    access_log /var/log/nginx/logs/access.log  main;
    sendfile on;
    #開啟gzip壓縮
    gzip on;
    gzip_disable "MSIE [1-6].";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_min_length 256k;
    gzip_types text/plain application/JAVAscript text/css application/json application/x-JavaScript text/xml application/xml text/javascript;
    
    #后端的服務器
    upstream backend {
        server solo:8080 max_fails=3 fail_timeout=30s;
    }
    
    #個人博客
    server {
        # 最新寫法,ssl on 的寫法已經不推薦了!
        listen 443 ssl;
        server_name hicode.club www.hicode.club;
      	# 證書相關,https新增
        ssl_certificate hicode.club_bundle.crt;
        ssl_certificate_key hicode.club.key;
        ssl_session_timeout 5m;

        access_log /var/log/nginx/logs/hicode/access.log  main;
        location / {
            proxy_pass http://backend$request_uri;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header http_x_forwarded_for $remote_addr;
            client_max_body_size 10m;
        }
    }
    server {
        # http跳轉到https,這樣就只存在http的博客了
        listen 80;
        server_name hicode.club www.hicode.club;
        rewrite ^(.*)$	https://$host$1	permanent;
    }
}

上述內容中有2個server

  • 第一個是 https的配置,關鍵是其中證書的配置。
  • 第二是http跳轉到https的配置。

安裝Nginx

然后執行如下命令啟動nginx的容器

docker run -p 80:80 -p 443:443 -m 200m --restart always 
 --name nginx --network hicode 
 -v /lcf/docker-data/nginx/www:/www 
 -v /lcf/docker-data/nginx/conf/:/etc/nginx/ 
 -v /lcf/docker-data/nginx/logs:/var/log/nginx/logs 
 -v /lcf/docker-data/nginx/wwwlogs:/wwwlogs 
 nginx
  • 相比于單純的http,多一個443的端口映射。

其他

基本上,按照上面操作,就可以搞定了,docker用好了,很方便,因為一行指令搞定的時候,不需要再折騰環境了。

有朋友擔心資源占用的問題,這里我截圖,給大家看看情況:

利用docker部署solo并升級為https

 

好了,差不多寫到這里,有問題,歡迎留言。

最后歸納下同http部署方式的不同:

  • 申請證書
  • solo指定為https
  • nginx多映射一個443端口

如果本文對你有幫助,歡迎評論、點贊、轉發、收藏、關注!本文原創于程序猿猩球,轉載請注明出處~

分享到:
標簽:docker solo
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定