之前的服務(wù)器是 Ubuntu 18.04 ,上周周末想升級一下服務(wù)器系統(tǒng),從 18.04 升級到 20.04,結(jié)果升級升掛了...
后來 SSH 始終連不上,索性刪除重新部署了一個,新部署了一個 Centos 8 的系統(tǒng),新部署之后很多東西需要配置,折騰了好幾天,簡單記錄一下容易踩的坑。
Azure 上的服務(wù)器默認新建的時候需要配置網(wǎng)絡(luò)安全組(NSG),這次新建之后想著使用之前的網(wǎng)絡(luò)安全組配置,這樣就不需要再配置一下端口白名單了,結(jié)果這樣部署了之后,SSH 經(jīng)常超時,但是從內(nèi)網(wǎng)走的話會很快,沒有問題,使用 Azure Cloud Shell SSH 沒有超時的問題,從另外一個服務(wù)器上 SSH 也是正常的。
后來刪除了,又重新建了一個,這次完全是新建的,沒有用之前的網(wǎng)絡(luò)安全組配置,這次 SSH 再沒有超時的問題了……
新建的時候可以指定服務(wù)器要開放的端口,一般 22,80,443 先打開,SSH以及 web server 的端口先開放
服務(wù)器新建完成后,修改 IP 地址,默認是動態(tài) IP,修改為靜態(tài) IP,這樣可以方便做 DNS 解析
新建的服務(wù)器和之前的 IP 不一致,需要修改域名解析,將原來的域名解析配置修改為新的服務(wù)器的 IP
有幾個應用使用的是云數(shù)據(jù)庫,需要修改數(shù)據(jù)庫服務(wù)器防火墻,把原來服務(wù)器的 IP 修改為新的服務(wù)器 IP 地址
使用 suo yum install nginx -y
來安裝 nginx,安裝完成之后可以通過上面配置的域名解析或者直接用 IP 地址在瀏覽器中訪問,應該可以看到 nginx 的默認頁面
執(zhí)行 sudo systemctl enable nginx
來配置開機啟動
安裝之后默認的配置是 /etc/nginx
目錄,默認的 nginx 配置修改 /etc/nginx/nginx.conf
文件,如果要新增配置可以添加在 /etc/nginx/conf.d
目錄下面
修改默認的 nginx 配置,將默認站點轉(zhuǎn)發(fā)到后端服務(wù)中,修改 location 配置,添加 proxy_pass
location / {
proxy_pass http://172.18.0.2:31230;
}
添加了之后發(fā)現(xiàn)服務(wù)轉(zhuǎn)發(fā)有問題,后來終于在網(wǎng)上找了解決方案,原來默認 nginx 不能進行 Http 的轉(zhuǎn)發(fā),要轉(zhuǎn)發(fā)需要配置一下 selinux 的一個配置 httpd_can_network_connect
可以參考:https://stackoverflow.com/questions/27435655/proxy-pass-isnt-working-when-selinux-is-enabled-why
后來在配置 HTTPS 的時候讀取證書文件的時候出現(xiàn)了 Permission Denied 的情況,后來排查下來也是 SELinux 的問題,關(guān)掉 SELinux 之后就可以了,后來在網(wǎng)上看了看,很多人推薦直接關(guān)掉 SELinux,于是就索性直接把 SELinux 給關(guān)掉了。
HTTPS 證書使用的是免費的 Let's Encrypt 的證書,使用 acme.sh 進行配置,安裝好 acme.sh,配置好 DNS 的 Access Key 執(zhí)行一行命令就可以了,而且還會生成一個 crontab 定時任務(wù)定期會更新證書(Let's Encrypt 免費證書默認 90 天內(nèi)有效)
通過執(zhí)行 curl https://get.acme.sh | sh
來安裝 acme.sh
安裝成功之后配置 DNS 的配置,我的域名在阿里云上,從阿里云生成 AccessKey 來更新域名配置,會添加或更新一個 _acme-challenge
的域名解析記錄
我的域名在阿里云上,就以阿里云為例子,將下面的 Key 和 Secret 替換成自己實際的 Key 和 Secret
export Ali_Key="111111"
export Ali_Secret="222222"
申請泛域名證書,泛域名證書需要指定兩個 domain,如下面的示例:
acme.sh --issue --dns dns_ali -d *.weihanli.xyz -d weihanli.xyz
執(zhí)行之后會看到類似下面這樣的截圖:
Nginx 配置:
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /home/liweihan/.acme.sh/*.weihanli.xyz/*.weihanli.xyz.cer;
ssl_certificate_key /home/liweihan/.acme.sh/*.weihanli.xyz/*.weihanli.xyz.key;
if ($scheme = http) {
return 301 https://$host$request_uri;
}
SELinux(Security-Enhanced Linux) 是美國國家安全局(NSA)對于強制訪問控制的實現(xiàn),是 Linux歷史上最杰出的新安全子系統(tǒng)。但是配置起來很是繁瑣,很容易因為這個導致很多問題,浪費很多時間,所以還是直接關(guān)掉好了。
SELinux 有三種狀態(tài),分別是:
通過 sestatus
可以查看 SELinux 當前的狀態(tài)
如果要臨時修改 selinux 的狀態(tài)可以通過命令 sudo setenforce 0
禁用 selinux 或 sudo setenforce Permissive
如果要永久性的修改 selinux 狀態(tài)需要修改配置文件 /etc/selinux/config
參考 docker 官方文檔或者參考 Centos 安裝 docker
需要注意的是,你可能會需要配置 docker group,把需要的用戶配置到 docker 這個用戶組里以免每次 docker ps
的時候都要使用管理員權(quán)限 sudo
自己玩 k8s 的話推薦使用 kind 部署 k8s,我自己就是在使用 kind 部署 k8s,具體的安裝步驟可以參考之前的文章介紹
https://www.cnblogs.com/weihanli/p/12831225.html
之前的 kind 都會有一個問題,每次系統(tǒng)重啟或 docker daemon 重啟的時候會導致原來的創(chuàng)建的集群不可用,需要重新創(chuàng)建才可以,從 0.8 版本開始,kind 不再需要重新創(chuàng)建集群了,基于這個集群的資源部署也會自動重啟,無需再手動重新部署了,非常方便了
SSR 的配置在 Github 上找了一個基于 docker 部署的,可以參考 https://github.com/winterssy/SSR-Docker
首先可以執(zhí)行 lsmod | grep bbr
命令,如果已經(jīng)有 bbr 則證明已經(jīng)開啟了 BBR 加速,如果沒有進行下面的配置
sudo echo "net.core.default_qdisc=fq" | sudo tee --append /etc/sysctl.conf
sudo echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee --append /etc/sysctl.conf
sudo sysctl -p
執(zhí)行之后再執(zhí)行 lsmod | grep bbr
命令,如果已經(jīng)有 bbr 則證明已經(jīng)開啟了 BBR 加速
如果沒有安裝 docker-compose 可以執(zhí)行下面的命令來進行安裝
compose_version=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4)
sudo curl -L "https://github.com/docker/compose/releases/download/${compose_version}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
可以將項目 clone 到服務(wù)器上,如果沒有安裝 Git,可以 sudo yum install git -y
來安裝,之后 git clone https://github.com/winterssy/SSR-Docker.git
克隆到本地之后可以根據(jù)自己需要修改 /etc/config.json
文件中的配置
config.json
配置可以參考:https://github.com/winterssy/SSR-Docker/blob/f0439c232add3a4addbbce68f3c1be32464e0d18/etc/README.md
可以根據(jù)需要修改 docker-compose 映射到本地的端口
配置好之后執(zhí)行 docker-compose up -d
即可啟動 SSR 服務(wù),啟動之后在虛擬機對應的網(wǎng)絡(luò)安全組配置中開放需要的端口?
還有一些配置,腳本需要準備一下來部署服務(wù),索性大多數(shù)的服務(wù)我都是有 k8s deploy yaml 的,只是有些 configMap 里的數(shù)據(jù)要更新一下。
整理一下放在服務(wù)器上,最后整理出一個 k8s 服務(wù)部署腳本
如果出現(xiàn)了什么意外情況或者要重新部署 k8s 只要執(zhí)行一下這個腳本即可~
其他服務(wù)的 Nginx 配置,需要新增服務(wù)配置的時候只要在 /etc/nginx/conf.d
目錄下增加對應服務(wù)的配置即可
server {
listen 443;
server_name sparktodo.weihanli.xyz;
location / {
proxy_pass http://172.18.0.2:31256;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
折騰的遇到最多的問題就是服務(wù)器 SSH 超時問題和 Nginx SELinux 的問題,以后再部署的時候服務(wù)器資源要完全新建,SELinux 要禁用