1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        從0到1快速搭建個人網(wǎng)站(域名備案 + https免費證書)

        共 8254字,需瀏覽 17分鐘

         ·

        2020-12-30 14:54

        (給前端大學(xué)加星標,提升前端技能.

        作者:yangwqonly

        cnblogs.com/winkin/p/14135677.html

        前言

        為什么選擇搭建個人博客?一方面是各個平臺經(jīng)常下架原創(chuàng)文章,另一個方面是為了熟悉整個建站流程。

        通過搭建個人博客,我們可以自由的發(fā)表文章不用擔(dān)心下架,而且可以鍛煉個人的SEO優(yōu)化能力,不管是運維還是運營這塊對個人的技術(shù)提升有著很大的幫助。

        本篇文章記錄了網(wǎng)站從零到一的過程,希望你也能根據(jù)本篇文章搭建出屬于自己的網(wǎng)站。大家有疑問可以一起討論。

        下面開始正題。

        環(huán)境介紹

        資源說明
        centosv7.2
        docker快速部署項目環(huán)境
        nginx反向代理,同時配置https證書
        halov1.4.2,開源博客項目
        Let's Encrypt 免費證書配置https

        效果演示

        https://yangwq.cn/

        前置環(huán)境安裝

        Docker安裝

        參考:

        https://www.cnblogs.com/winkin/p/14083574.html

        halo安裝

        準備halo配置文件

        #?下載配置文件到?/home/halo/.halo?目錄
        curl?-o?/home/halo/.halo/application.yaml?--create-dirs?https://dl.halo.run/config/application-template.yaml

        修改配置文件,將數(shù)據(jù)庫調(diào)整為mysql,默認是h2(可選)

        將上面h2的數(shù)據(jù)庫注釋,并把mysql的配置打開,注意,需要提前在mysql建立數(shù)據(jù)庫 halodb,相關(guān)的數(shù)據(jù)庫表halo會自動生成,如果mysql 和 halo都是容器創(chuàng)建的,這里配置的mysqlip應(yīng)該是mysql容器內(nèi)部的ip。

        #?查看mysql容器的ip,mysql-prod替換成mysql容器名稱或者容器id
        docker?inspect?--format='{{.NetworkSettings.IPAddress}}'?mysql

        修改后:

        下載并安裝halo

        #?拉取halo鏡像
        docker?pull?ruibaby/halo

        #?運行halo
        #?-p?8090:8090?指定宿主機端口與容器端口映射,這里是將宿主機的8090映射到docker的8090
        #?-v?/home/halo/.halo:/root/.halo?掛載halo配置文件,我們在上一步下載了配置文件在宿主機的/home/halo/.halo
        docker?run?--rm?-it?-d?--name?halo?-p?8090:8090??-v?/home/halo/.halo:/root/.halo?ruibaby/halo

        ##?查看容器狀態(tài),確認halo是否啟動成功,如果啟動失敗需要檢查下數(shù)據(jù)庫連接
        docker?ps

        #?配置防火墻,注意,阿里云需要同時配置安全組8090端口
        #?開放8090端口
        firewall-cmd?--permanent?--add-port=8090/tcp
        #重啟防火墻(修改配置后要重啟防火墻)
        firewall-cmd?--reload

        正常情況應(yīng)該如下:

        經(jīng)過上面的步驟創(chuàng)建的halo還不能通過外部ip訪問,我們現(xiàn)在配置一個nginx進行代理

        nginx安裝

        #?下載nginx鏡像
        docker?pull?nginx
        #?啟動nginx
        docker?run?-p?80:80?--name?nginx?-d?nginx

        #?我們需要nginx使用我們自定義的配置,最方便的方法將nginx現(xiàn)在有的配置復(fù)制一份到宿主機目錄?/home/nginx?
        docker?container?cp?nginx:/etc/nginx?/home/nginx

        #?移除我們剛創(chuàng)建的nginx,重新以宿主機配置目錄啟動
        docker?stop?nginx
        docker?rm?nginx
        #?編輯?conf.d?下的default.conf?文件,默認轉(zhuǎn)發(fā)到halo端口,ip地址為本機ip
        location?/?{
        ????root???/usr/share/nginx/html;
        ????index??index.html?index.htm;
        }
        改為,10.0.2.5 為本機ip,通過命令 ip addr 查看,端口是halo的端口:
        ?location?/?{
        ?????proxy_pass?http://10.0.2.5:8090;
        ?}

        #?重新創(chuàng)建nginx
        docker?run?-p?80:80?--name?nginx?\
        -v?/home/nginx/logs:/var/log/nginx?\
        -v?/home/nginx/nginx.conf:/etc/nginx/nginx.conf?\
        -v?/home/nginx/conf.d:/etc/nginx/conf.d?\
        -d?nginx

        #?配置防火墻,注意,阿里云需要同時配置安全組80端口
        #?開放80端口
        firewall-cmd?--permanent?--add-port=80/tcp
        #重啟防火墻(修改配置后要重啟防火墻)
        firewall-cmd?--reload

        #?到這里,我們可以通過ip訪問halo了

        到這一步如果不能使用ip直接訪問,首先確定halo啟動成功沒,然后查看nginx配置是否正確,最后再檢查防火墻和安全組。

        域名及網(wǎng)站備案

        目前我們只能通過ip訪問halo,我們可以通過配置域名進行訪問。

        首先我們得申請一個域名:

        https://wanwang.aliyun.com/domain

        申請完成后進行備案:

        https://beian.aliyun.com/

        備案注意事項:

        • 如果處于異地工作的情況,建議備案地點選擇老家,而且手上要有老家的手機號,如果選擇異地的話,需要你提供臨時居住證之類比較麻煩。
        • 阿里云備案時間在一周左右,一般提交申請會有人找你確認信息,之后按備案流程走就行了。

        配置https

        一般情況證書是需要購買的,但是也有一些平臺提供了免費證書,阿里云也有一年的免費證書,但是阿里云證書只能單個域名使用,如果要通配符證書是需要付費的。而Let’s Encrypt 證書即可以免費申請證書,又支持通配符,是個人開發(fā)者的上選。

        這里我們通過github項目配置免費證書(也可以手動安裝,不過自動安裝比較方便,下面兩種方式都會提到):letencrypt-certbot

        https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au

        使用此項目前我們配置一下前置環(huán)境:certbot 和 git

        安裝git

        yum?install?git

        安裝certbot

        #?安裝certbot,中間需要輸入y確認
        yum?install?epel-release
        yum?install?certbot?
        #?查看版本,如果安裝正常會顯示版本號
        certbot?--version

        申請證書

        特別注意的是,這里需要主機把80端口和443端口開放,上面我們已經(jīng)開放了80端口,這里開放443端口就行了

        #?配置防火墻,注意,阿里云需要同時配置安全組443端口
        #?開放443端口
        firewall-cmd?--permanent?--add-port=443/tcp
        #重啟防火墻(修改配置后要重啟防火墻)
        firewall-cmd?--reload

        重要提示:為避免遇到操作次數(shù)的限制,加入 dry-run 參數(shù),可以避免操作限制,等執(zhí)行無誤后,再進行真實的 renew 操作

        手動安裝證書+手動續(xù)期

        #?申請證書,需要填入你的郵箱和域名,?--dry-run?測試使用不會生成證書,我們先用這個命令看是否成功
        certbot?certonly?--email?你的郵箱@qq.com?-d?*.域名.cn?-d?域名.cn?--manual?--preferred-challenges?dns-01?--server?https://acme-v02.api.letsencrypt.org/directory?--dry-run
        #?如果沒有錯誤信息,去掉--dry-run真正生成證書
        certbot?certonly?--email?你的郵箱@qq.com?-d?*.域名.cn?-d?域名.cn?--manual?--preferred-challenges?dns-01?--server?https://acme-v02.api.letsencrypt.org/directory

        #?手動續(xù)期
        certbot?renew

        安裝過程中,需要確認選項,講一下手動安裝的重點:
        安裝成功后顯示:

        注意:證書90天后過期,我們手動續(xù)期的話比較麻煩,而且每次需要手動去DNS解析列表創(chuàng)建對應(yīng)的記錄,所以推薦下面的自動續(xù)期方式

        通過apikey 和secret生成證書+自動續(xù)期

        首先獲取api key 和secret:

        https://help.aliyun.com/knowledge_detail/38738.html

        這種方式其實是利用你開放的api key調(diào)用阿里云提供的接口,所以保險起見我們創(chuàng)建一個權(quán)限很小的用戶就行了。

        流程:

        • 為了安全,我們需要先創(chuàng)建RAM用戶,配置一個權(quán)限小的用戶;
        • 給新創(chuàng)建的用戶配置 AliyunDNSFullAccess(管理云解析(DNS)) 的權(quán)限;
        • 獲取apikey 和 secret。
        #?新建一個目標,拉取項目
        mkdir?/home/certbot
        cd?/home/certbot
        git?clone?https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
        cd?certbot-letencrypt-wildcardcertificates-alydns-au
        chmod?0777?au.sh

        #?編輯au.sh,加入我們上面申請的key
        vi?au.sh

        #填寫阿里云的AccessKey?ID及AccessKey?Secret
        #如何申請見https://help.aliyun.com/knowledge_detail/38738.html
        ALY_KEY=""
        ALY_TOKEN=""

        #?運行命令,加上--dry-run?測試,如果沒問題去掉?--dry-run?執(zhí)行,腳本目錄就是我們上面創(chuàng)建的?/home/certbot/certbot-letencrypt-wildcardcertificates-alydns-au
        certbot?certonly??-d?*.yangwq.cn?-d?yangwq.cn?--manual?--preferred-challenges?dns-01?--email?1075976874@qq.com??--manual-auth-hook?"/腳本目錄/au.sh?python?aly?add"?--manual-cleanup-hook?"/腳本目錄/au.sh?python?aly?clean"?--dry-run;

        #?配置自動續(xù)期,使用crontab實現(xiàn)
        vi?/etc/crontab

        #?加入以下命令,這個命令就是每周執(zhí)行一次腳本,如果需要續(xù)期就會自動更新
        0?0?*?*?0?root?certbot?renew?--manual?--preferred-challenges?dns?--deploy-hook??"docker?restart?nginx"?--manual-auth-hook?"/腳本目錄/au.sh?python?aly?add"?--manual-cleanup-hook?"/腳本目錄/au.sh?python?aly?clean"?--manual-public-ip-logging-ok;

        到這一步我們證書生成成功了,同樣存放在 /etc/letsencrypt/live/yangwq.cn/ 目錄,注意這里的文件是軟鏈接,我們實際上的文件在 etc/letsencrypt/archive/yangwq.cn 目錄

        nginx安裝證書

        #?編輯conf.d?下的default.conf
        server?{
        ????listen???????80?default;
        ????server_name?yangwq.cn;
        ?#?http自動轉(zhuǎn)https
        ????rewrite?^(.*)$??https://$host$1?permanent;
        ??
        }

        server?{
        ????listen?443?ssl;
        ????server_name?yangwq.cn;
        ????
        ????#?配置站點證書文件地址
        ????ssl_certificate??/etc/letsencrypt/archive/yangwq.cn/fullchain1.pem;
        ????#?配置證書私鑰
        ????ssl_certificate_key??/etc/letsencrypt/archive/yangwq.cn/privkey1.pem;
        ?
        ????
        ????#?配置服務(wù)器可使用的加密算法
        ????ssl_ciphers?'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

        ????#?指定服務(wù)器密碼算法在優(yōu)先于客戶端密碼算法時,使用?SSLv3?和?TLS?協(xié)議
        ????ssl_prefer_server_ciphers??on;
        ????
        ????#?ssl?版本?可用?SSLv2,SSLv3,TLSv1,TLSv1.1,TLSv1.2?
        ????#?ie6?只支持?SSLv2,SSLv3?但是存在安全問題,?故不支持
        ????ssl_protocols????????TLSv1?TLSv1.1?TLSv1.2;
        ????
        ????#?配置?TLS?握手后生成的?session?緩存空間大小?1m?大約能存儲?4000?個?session
        ????ssl_session_cache??????????shared:SSL:50m;
        ????#?session?超時時間
        ????ssl_session_timeout????????1d;
        ????
        ????#?負載均衡時使用?此處暫時關(guān)閉?詳情見?https://imququ.com/post/optimize-tls-handshake.html?
        ????#?1.5.9?及以上支持
        ????ssl_session_tickets?off;
        ????
        ????#?瀏覽器可能會在建立 TLS 連接時在線驗證證書有效性,從而阻塞 TLS 握手,拖慢整體速度。OCSP stapling 是一種優(yōu)化措施,服務(wù)端通過它可以在證書鏈中封裝證書頒發(fā)機構(gòu)的 OCSP(Online Certificate Status Protocol)響應(yīng),從而讓瀏覽器跳過在線查詢。服務(wù)端獲取 OCSP 一方面更快(因為服務(wù)端一般有更好的網(wǎng)絡(luò)環(huán)境),另一方面可以更好地緩存?以上內(nèi)容來自 https://imququ.com/post/my-nginx-conf-for-wpo.html
        ????#?1.3.7?及以上支持
        ????ssl_stapling???????????????on;
        ????ssl_stapling_verify????????on;
        ????#?根證書?+?中間證書
        ????ssl_trusted_certificate????/etc/letsencrypt/archive/yangwq.cn/fullchain1.pem;
        ????
        ????# HSTS 可以告訴瀏覽器,在指定的 max-age 內(nèi),始終通過 HTTPS 訪問該域名。即使用戶自己輸入 HTTP 的地址,或者點擊了 HTTP 鏈接,瀏覽器也會在本地替換為 HTTPS 再發(fā)送請求?相關(guān)配置見 https://imququ.com/post/sth-about-switch-to-https.html
        ????add_header?Strict-Transport-Security?max-age=60;
        ????
        ????#?在此填寫原本?http?協(xié)議中的配置
        ????location?/?{???????????????????????????#?定義首頁索引目錄和名稱
        ????????proxy_pass?http://172.24.35.32:8080;
        ????}
        ??error_page???500?502?503?504??/50x.html;
        ????location?=?/50x.html?{????????????????#重定向錯誤頁面到?/50x.html
        ????????root???/usr/share/nginx/html;
        ????}

        }

        注意:將上面yangwq.cn相關(guān)的路徑換成你的域名路徑。

        #?為了讓nginx能訪問到我們剛生成的證書,需要重新掛載證書路徑到nginx
        docker?stop?nginx
        docker?rm?nginx
        #?運行nginx,此處加入了443端口和證書路徑
        docker?run?-p?80:80?-p?443:443?--name?nginx?\
        -v?/home/nginx/logs:/var/log//nginx?\
        -v?/home/nginx/nginx.conf:/etc/nginx/nginx.conf?\
        -v?/home/nginx/conf.d:/etc/nginx/conf.d?\
        -v?/etc/letsencrypt/archive/:/etc/letsencrypt/archive/?\
        -d?nginx

        此時我們就可以通過https域名訪問項目了,而且這個時候也可以新建二級域名訪問項目的(二級域名同樣是https)。

        總結(jié)

        實際部署過程中博主是遇到很多問題的,比如項目訪問不了、https證書失敗、二級域名不生效等。本篇文章是經(jīng)過實踐后得出的流程,如果中間有碰到問題可以在下方評論我們可以一起解決。

        以上是完整的建網(wǎng)站流程,很簡單,只差一臺服務(wù)器了。搞編程建網(wǎng)站必須要一個服務(wù)器,最近正好阿里云年底做活動,最后5天時間了,建網(wǎng)站必備的阿里云服務(wù)器只要57元,這次是真的太便宜了,機會難得,還沒買的抓緊看看。


        瀏覽 61
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            一色综合| 91精品国产熟女 | 日本一级黄色操逼视频 | 欧美军人巨大粗爽gay | 欧美激情91 | 豆花视频色 | 亚洲男人天堂影院 | 色人网站| 安徽BBBBB视频BBB | 久久免费视频观看 |