環境準備
站點伺服器: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:
-
基礎包安裝
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 -
hexo重建問題
Hexo生成部落格遇到的坑:https://blog.csdn.net/zhongyuemengxiang/article/details/122510536
Linux系統在SSH客戶端關閉後繼續執行程式:https://blog.51cto.com/u_12956289/2917058 -
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