Anolis8.6 hexo+nginx 配置https

GK_Jerry發表於2024-06-24

環境準備

站點伺服器:Anolis8.6
個人PC:Vscode , nodejs , git , xshell遠端工具

搭建開始

家裡除了點情況,電閘跳了,由於沒ups,nas直接異常掉電,好在資料校驗發現沒問題,但是debian那臺虛機出毛病了nas上我開了兩臺虛機,另一臺gitlab伺服器重啟後一點問題沒有,所以我懷疑是不是debian不穩定。一開始vnc發現黑屏,而且無法操作,因為之前裝的帶g桌面的,感覺是g桌面壞掉了。
用遠端工具連線竟然連的上,但是執行命令出奇的慢,硬碟邏輯壞區檢查沒問題,讀寫速度也正常,記憶體也沒滿,但是就是很卡。百度了一些資料,說debian的gui確實相容性不是很穩定,建議更換別的桌面軟體,懶得去折騰。之前是專案原因需要接觸一下debian,現在暫時沒這個需求了,直接重灌吧,反正部落格資料在github,gitee和自建的gitlab都有備份,正好有的專案需要用到信創平臺,趁這個機會體驗一下國產化系統。

ups買的apc的390W,除了貴,unraid完美相容,插電+接通訊線秒識別。

Anolis8.6安裝與環境準備

Anolis OS映象下載地址:https://openanolis.cn/download,我這次選擇正式版本的GA穩定版本,新的23.0公測版好像是面向社群整合版,8.6GA才是正式版本

按照之前的經驗,需要安裝nginx,nodejs,hexo。考慮到國產化系統一般會安裝在非x86常規架構的裝置上,加上yum源的包可能不全,模擬一下這種場景下本地編譯安裝軟體包和依賴庫。nodejs比較大,我看yum有這個包就直接安裝了。
一般情況下龍蜥系統安裝後會安裝openssl和ssh服務,因為是預裝的,版本比較低,建議先rpm -e --nodeps nginx解除安裝再進行下一步

先下載這幾個包的原始碼壓縮包,是source包

nginx需要gzip、SSL、rewrite幾個模組
SSL功能需要openssl庫:http://www.openssl.org/
gzip模組需要zlib庫:http://www.zlib.net/
rewrite模組需要prce庫:http://www.pcre.org/
nginx下載地址:http://nginx.org/en/download.html

將這幾個包下載到本地

$ cd /tmp
$ wget https://www.openssl.org/source/openssl-3.0.8.tar.gz
$ wget http://www.zlib.net/zlib-1.2.13.tar.xz
$ wget https://github.com/PCRE2Project/pcre2/archive/refs/tags/pcre2-10.42.tar.gz
$ wget http://hg.nginx.org/nginx/rev/6b81c065e2d3

將openssl,zlib,pcre解壓,先進行配置

$ tar -zxvf openssl-3.0.8.tar.gz
$ tar -zxvf zlib-1.2.13.tar.xz
$ tar -zxvf pcre2-10.42.tar.gz
$ cd zlib-1.2.13 
$ ./configure --prefix=/usr/local/zlib
$ make && make install

$ cd pcre2-10.42
$ ./configure --prefix=/usr/local/pcre
$ make && make install

執行過程中可能會遇到openssl編譯,出現如下報錯

$ cd openssl-3.0.8
$ ./config --prefix=/usr/local/openssl
$ make && make install
Can't locate IPC/Cmd.pm in @INC (@INC contains: /root/Downloads/openssl-3.0.1/util/perl /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 . /root/Downloads/openssl-3.0.1/external/perl/Text-Template-1.56/lib) at /root/Downloads/openssl-3.0.1/util/perl/OpenSSL/config.pm line 18.
BEGIN failed--compilation aborted at /root/Downloads/openssl-3.0.1/util/perl/OpenSSL/config.pm line 18.
Compilation failed in require at /root/Downloads/openssl-3.0.1/Configure line 23.
BEGIN failed--compilation aborted at /root/Downloads/openssl-3.0.1/Configure line 2

這個問題一般是因為剛剛yum remove -y openssl使用yum把openssl解除安裝了,相關依賴包也一同被解除安裝了。百度一下基本上就是缺少了部分依賴包,直接裝回去就行yum install -y perl-CPAN perl-IPC-Cmd

這裡注意一下./configure --prefix=/usr/local/xxxx這條命令,一般source包中都會有一個configure配置命令(有部分包是config檔案),用於編譯前進行引數配置,--prefix引數用於指定編譯安裝的目錄,如果不加該引數,預設安裝在/usr/local/目錄下。

三個裝好以後,開始安裝ngnix,注意引數填寫

$ cd /tmp
$ tar -zxvf nginx-1.22.1.tar.gz
$ cd nginx-1.22.1 
$ ./configure --prefix=/usr/local/ngnix --with-http_ssl_module --with-pcre=/tmp/pcre2-10.42 --with-zlib=/tmp/zlib-1.2.13 --with-openssl=/tmp/openssl-3.0.8
$ make && make install
#--with-pcre= 後面是pcre source包解壓的路徑
#--with-zlib= 後面是zlib source包解壓的路徑
#--with-openssl=  後面是openssl source包解壓的路徑

提示編譯無誤後安裝,安裝速度會快很多,隨後進到預設安裝目錄進行測試

$ cd /usr/local/nginx/sbin
$ ./nginx -v
nginx version: nginx/1.22.1

如果正常返回版本資訊,說明安裝沒有問題,設定開機自啟,新增如下內容,並新增許可權

$ vi /etc/rc.local
#...
/usr/local/nginx/sbin
#...
$ chmod 755 /etc/rc.local

一般情況下,設定了ngnix自啟已經足夠了。為了後面配置核檢視ngnix資訊方便,可以建立ngnix連結。因為後面要用到openssl,所以也把軟連線做一下,並確認命令是否正常

$ ln -s /usr/local/nginx/sbin/ngnix /usr/sbin/ngnix
$ ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
$ ln -s /usr/local/openssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3
$ ln -s /usr/local/openssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3
$ openssl version
OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)
$ ngnix -v
nginx version: nginx/1.22.1

編輯ngnix配置檔案,將http轉成https

$ vi /usr/local/nginx/nginx.conf
#...
# http 80埠可以直接註釋掉,本專案暫時用不到
# 注意縮排格式
    # HTTPS server
    #
    server {
        listen       443 ssl;
        # 可填寫域名或者ip地址
        server_name  xxx.xxx.xxx.xxx;

        # ssl檔案目錄,直接丟到剛剛ngnix的安裝目錄裡/usr/local/nginx/conf
        ssl_certificate      /usr/local/nginx/conf/server.crt;
        ssl_certificate_key  /usr/local/nginx/conf/server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        # 這裡為站點的資源目錄,hexo靜態檔案存放在hexo專案根目錄xxx/public中
        root /xxx/xxx/public;
        # 這裡填寫根目錄,如果hexo上沒有設定子目錄就按預設填寫/即可,如果有設定就填寫/子目錄名/,proxy_pass位置同理
        location / {
             index index.html index.htm;
             proxy_pass http://xxx.xxx.xxx.xxx:4000/;
        }
    }
#...

建立ssl證書

#建立私有金鑰
$ openssl genrsa -out "/usr/local/nginx/conf/server.key" 2048

#建立私有證書,
$ openssl req -new -key "/usr/local/nginx/conf/server.key" -out "/usr/local/nginx/conf/server.csr"
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN          CN  #國家
State or Province Name (full name) []:SX      SX   #省份
Locality Name (eg, city) [Default City]:XA    XA   #城市  
Organization Name (eg, company) [Default Company Ltd]:    #空格
Organizational Unit Name (eg, section) []:                #空格
Common Name (eg, your name or your server's hostname) []:hexo.example.com    
Email Address []:123456@qq.com                 #郵箱地址
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456                # 密碼
An optional company name []:                  #空格

#ssl金鑰和證書都建立好以後,利用兩者建立crt簽署證書
$ openssl x509 -req -days 365 -in "/usr/local/nginx/conf/server.csr" -signkey "/usr/local/nginx/conf/server.key" -out "/usr/local/nginx/conf/server.crt"
Signature ok
subject=/C=CN/ST=SX/L=XA/O=Default Company Ltd/CN=hexo.example.com/emailAddress=123456@qq.com
Getting Private key

#利用openssl簽署pem證書
$ openssl dhparam -out /usr/local/nginx/conf/dhparams.pem  2048
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..............................+..............................................................................................................................................................................................................................+.+..........................................................+...........................................................................................................................................+...........................................................................................................................................................................................................................................................+.....................................................................................+.........................................

ssl證書建立好以後,重啟nginx服務,訪問hexo站點的https地址即可。

$ nginx -s reload

openEuler22.4安裝與環境準備(待更新,2023/3/1)

嘗試重起hexo服務

將hexo專案檔案從git上pull下來,將node_moudles目錄刪除直接npm install重新下載依賴庫,啟動hexo服務發現報錯

$ npx hexo server
#...
TypeError: Object.fromEntries is not a function... 
#...

百度搜集資料發現是nodejs版本過低,需要進行升級到14版本以上。因為之前是龍蜥yum源下載的nodejs,看了一下node版本才10版本,yum裡面也只有10版本的nodejs

$ yum list nodejs
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
上次後設資料過期檢查:0:05:37 前,執行於 2023年03月01日 星期三 15時53分18秒。
可安裝的軟體包
nodejs.x86_64                1:10.24.0-1.0.1.module+an8.7.0+10853+971f45d5                 AppStream

沒辦法只能自己安裝,順帶就試試nodejs的本地編譯安裝

$ cd /tmp
$ wget https://nodejs.org/dist/v18.14.2/node-v18.14.2.tar.gz
$ tar -zxvf node-v18.14.2.tar.gz
$ cd node-v18.14.2
$ ./configure --prefix=/usr/local/node
$ make && make install

nodejs的編譯時間比較長,需要等待比較長的時間,當時電腦就開了2C2G,跑了大概2個多小時,辛虧中途沒有報錯,不然真的自閉。安裝完成以後,可以檢視進到安裝目錄確認是否安裝成功,如果出現如下cli互動介面說明順利安裝。

$ cd /usr/local/node/bin
$ ./node
Welcome to Node.js v18.14.2.
Type ".help" for more information.
> .exit

然後建立軟連線,測試命令執行正常。

$ ln -s /usr/local/node/bin/node /usr/bin/node
$ ln -s /usr/local/node/bin/npm /usr/bin/npm
$ ln -s /usr/local/node/bin/npx /usr/bin/npx
$ node
Welcome to Node.js v18.14.2.
Type ".help" for more information.
> .exit

重新回到hexo專案目錄,再次將node_moudles目錄刪除npm install重新下載依賴庫,防止之前低版本node下載不完全,node啟動hexo專案,部落格站點恢復完成。

$ cd <hexo專案根目錄>
$ rm -rf node_moudles
$ npm install
$ npx hexo server
INFO  Validating config
INFO  Start processing
INFO  Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop.
INFO  
===================================================================
      ______ __  __  ______  __    __  ______                       
     /\__  _/\ \_\ \/\  ___\/\ "-./  \/\  ___\                      
     \/_/\ \\ \  __ \ \  __\\ \ \-./\ \ \  __\                      
        \ \_\\ \_\ \_\ \_____\ \_\ \ \_\ \_____\                    
         \/_/ \/_/\/_/\/_____/\/_/  \/_/\/_____/                    
                                                               
 ______  ______  _____   ______  ______ __  __   __  ______    
/\  == \/\  ___\/\  __-./\  ___\/\  ___/\ \/\ "-.\ \/\  ___\   
\ \  __<\ \  __\\ \ \/\ \ \  __\\ \  __\ \ \ \ \-.  \ \  __\   
 \ \_\ \_\ \_____\ \____-\ \_____\ \_\  \ \_\ \_\\"\_\ \_____\ 
  \/_/ /_/\/_____/\/____/ \/_____/\/_/   \/_/\/_/ \/_/\/_____/
                                                               
  Github: https://github.com/EvanNotFound/hexo-theme-redefine
      current version is v1.1.1,latest version is v1.1.5
===================================================================
Redefine v1.1.1 is outdated, please update to v1.1.5!

為保證遠端埠關閉,該服務還在執行(因為正常情況下,視窗關閉行為,儘管設定了後臺執行,該遠端視窗中所有執行過的語句都會收到中斷訊號,導致程序被殺掉),可用如下方式執行,關閉遠端視窗,hexo服務依舊正常執行

$ vi startserver
#!/bin/bash
cd <hexo專案根目錄>
hexo server &
$ chmod +x startserver
$ nohup ./startserver &

備份

得益於NAS,可以直接建立nfs空間進行虛機資料的備份,由於hexo僅僅是框架,只能依靠系統根目錄打包進行備份,結合cronb服務完成定時備份計劃。
和之前一樣,建立備份目錄,檢測遠端nfs伺服器掛載目錄,並將該目錄掛載到本地。檢視本地目錄有遠端nfs掛載說明已經掛載到指定目錄了。

$ mkdir -p /backup
$ showmount -e xxx.xxx.xxx.xxx
Export list for xxx.xxx.xxx.xxx:
/mnt/user/system-backup *
$ mount xxx.xxx.xxx.xxx:/mnt/user/system-backup /backup
$ df -h
檔案系統                                 容量  已用  可用 已用% 掛載點
devtmpfs                                 888M     0  888M    0% /dev
tmpfs                                    907M     0  907M    0% /dev/shm
tmpfs                                    907M  8.6M  898M    1% /run
tmpfs                                    907M     0  907M    0% /sys/fs/cgroup
/dev/mapper/xxxx                           30G  3.9G   27G   13% /
/dev/mapper/xxxx                           50G  2.2G   48G    5% /data
/dev/mapper/xxxx                          15G  140M   15G    1% /home
/dev/sda1                               1014M  283M  732M   28% /boot
tmpfs                                     79M     0   79M    0% /run/user/0
xxx.xxx.xxx.xxx:/mnt/user/system-backup  8.7T  349G  8.3T    4% /backup

編寫備份指令碼,參考網上帖子,有些目錄和當前系統使用的io裝置,硬體配置,掛載裝置相關,不需要進行備份,因此編寫如下備份指令碼

$ vi backup.sh

#!/bin/bash
tar cvzf /backup/backup_"`date +%Y%m%d`".tar.gz --exclude=/proc --exclude=/lost+found --exclude=/backup.tar.gz --exclude=/mnt --exclude=/dev --exclude=/etc --exclude=/fstab --exclude=/boot --exclude=/sys --exclude=/media /

該指令碼會將/proc/lost+found/mnt/sys/media除外,其餘目錄均進行打包備份,並且存放在掛載的NFS/backup目錄下,生成檔名包含以YYmmdd為格式的當前日期的tar.gz打包檔案。

指令碼編寫好以後進行儲存,然後編輯定時執行指令碼

$ crontab -e

0 0 */3 * * /root/backup.sh

該指令碼表示,每隔三天執行一次該指令碼,即三天進行一次備份。儲存以後需要重啟cron服務,以生效該配置。

$ systemctl restart crond.service

假如需要進行資料恢復的話,直接將檔案拷到進行移植恢復的裝置上解壓(確保系統版本和核心版本一致),重啟系統,該裝置就恢復到建立備份時的狀態了。

$ tar xvpfz backup.tar.gz -C /

最後編輯時間 2023/03/03 00:52

References:

  1. 基礎包安裝
    Anolis 龍蜥 內網安裝nginx、redis、jdk、tomcat 等(make 、gcc命令問題):https://blog.csdn.net/qq_40780434/article/details/127546137
    ubuntu安裝openssl出現openssl: error while loading shared libraries: libssl.so.3: cannot open shared obje...:https://blog.csdn.net/weixin_42283887/article/details/122766998
    ./configure --prefix 命令:https://blog.csdn.net/LeslieTsai2019/article/details/119153221

  2. hexo重建問題
    Hexo生成部落格遇到的坑:https://blog.csdn.net/zhongyuemengxiang/article/details/122510536
    Linux系統在SSH客戶端關閉後繼續執行程式:https://blog.51cto.com/u_12956289/2917058

  3. linux備份
    linux 系統 備份與恢復:https://www.cnblogs.com/chenjiye/p/11332387.html
    Linux crontab 命令:https://www.runoob.com/linux/linux-comm-crontab.html
    linux 定時任務crontab用法詳解:https://blog.csdn.net/axq19910228/article/details/127725373

相關文章