服務器從新部署踩坑記

服務器從新部署踩坑記

Intro

以前的服務器是 Ubuntu 18.04 ,上週週末想升級一下服務器系統,從 18.04 升級到 20.04,結果升級升掛了...
後來 SSH 始終連不上,索性刪除從新部署了一個,新部署了一個 Centos 8 的系統,新部署以後不少東西須要配置,折騰了好幾天,簡單記錄一下容易踩的坑。html

虛擬機配置

Azure 上的服務器默認新建的時候須要配置網絡安全組(NSG),此次新建以後想着使用以前的網絡安全組配置,這樣就不須要再配置一下端口白名單了,結果這樣部署了以後,SSH 常常超時,可是從內網走的話會很快,沒有問題,使用 Azure Cloud Shell SSH 沒有超時的問題,從另一個服務器上 SSH 也是正常的。
後來刪除了,又從新建了一個,此次徹底是新建的,沒有用以前的網絡安全組配置,此次 SSH 再沒有超時的問題了……linux

新建的時候能夠指定服務器要開放的端口,通常 22,80,443 先打開,SSH以及 web server 的端口先開放nginx

服務器新建完成後,修改 IP 地址,默認是動態 IP,修改成靜態 IP,這樣能夠方便作 DNS 解析git

新建的服務器和以前的 IP 不一致,須要修改域名解析,將原來的域名解析配置修改成新的服務器的 IPgithub

有幾個應用使用的是雲數據庫,須要修改數據庫服務器防火牆,把原來服務器的 IP 修改成新的服務器 IP 地址web

Nginx 配置

使用 suo yum install nginx -y 來安裝 nginx,安裝完成以後能夠經過上面配置的域名解析或者直接用 IP 地址在瀏覽器中訪問,應該能夠看到 nginx 的默認頁面docker

執行 sudo systemctl enable nginx 來配置開機啓動數據庫

安裝以後默認的配置是 /etc/nginx 目錄,默認的 nginx 配置修改 /etc/nginx/nginx.conf 文件,若是要新增配置能夠添加在 /etc/nginx/conf.d 目錄下面json

修改默認的 nginx 配置,將默認站點轉發到後端服務中,修改 location 配置,添加 proxy_pass後端

location / {
    proxy_pass http://172.18.0.2:31230;
}

添加了以後發現服務轉發有問題,後來終於在網上找了解決方案,原來默認 nginx 不能進行 Http 的轉發,要轉發須要配置一下 selinux 的一個配置 httpd_can_network_connect

能夠參考:https://stackoverflow.com/questions/27435655/proxy-pass-isnt-working-when-selinux-is-enabled-why

後來在配置 HTTPS 的時候讀取證書文件的時候出現了 Permission Denied 的狀況,後來排查下來也是 SELinux 的問題,關掉 SELinux 以後就能夠了,後來在網上看了看,不少人推薦直接關掉 SELinux,因而就索性直接把 SELinux 給關掉了。

HTTPS 配置

HTTPS 證書使用的是免費的 Let's Encrypt 的證書,使用 acme.sh 進行配置,安裝好 acme.sh,配置好 DNS 的 Access Key 執行一行命令就能夠了,並且還會生成一個 crontab 定時任務按期會更新證書(Let's Encrypt 免費證書默認 90 天內有效)

經過執行 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

執行以後會看到相似下面這樣的截圖:

acme.sh

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 配置

SELinux(Security-Enhanced Linux) 是美國國家安全局(NSA)對於強制訪問控制的實現,是 Linux歷史上最傑出的新安全子系統。可是配置起來非常繁瑣,很容易由於這個致使不少問題,浪費不少時間,因此仍是直接關掉好了。

SELinux 有三種狀態,分別是:

  • Enforcing: 默認的配置,默認強制使用,發生權限問題的時候就直接報錯,阻止應用程序的執行
  • Permissive:容許訪問,當出現權限問題的時候不會阻止應用程序的執行,可是會記錄一條 Wanring 級別的日誌
  • Disabled: 徹底禁用,應用程序的執行不會被 SELinux 所影響,也不會有任何日誌

經過 sestatus 能夠查看 SELinux 當前的狀態

若是要臨時修改 selinux 的狀態能夠經過命令 sudo setenforce 0 禁用 selinux 或 sudo setenforce Permissive

若是要永久性的修改 selinux 狀態須要修改配置文件 /etc/selinux/config

Docker 配置

參考 docker 官方文檔或者參考 Centos 安裝 docker

須要注意的是,你可能會須要配置 docker group,把須要的用戶配置到 docker 這個用戶組裏以避免每次 docker ps 的時候都要使用管理員權限 sudo

K8S 配置

本身玩 k8s 的話推薦使用 kind 部署 k8s,我本身就是在使用 kind 部署 k8s,具體的安裝步驟能夠參考以前的文章介紹

http://www.javashuo.com/article/p-ecedhxjz-bz.html

以前的 kind 都會有一個問題,每次系統重啓或 docker daemon 重啓的時候會致使原來的建立的集羣不可用,須要從新建立才能夠,從 0.8 版本開始,kind 再也不須要從新建立集羣了,基於這個集羣的資源部署也會自動重啓,無需再手動從新部署了,很是方便了

SSR 配置

SSR 的配置在 Github 上找了一個基於 docker 部署的,能夠參考 https://github.com/winterssy/SSR-Docker

開啓 BBR

首先能夠執行 lsmod | grep bbr 命令,若是已經有 bbr 則證實已經開啓了 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

執行以後再執行 lsmod | grep bbr 命令,若是已經有 bbr 則證實已經開啓了 BBR 加速

安裝 docker-compose

若是沒有安裝 docker-compose 能夠執行下面的命令來進行安裝

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 到服務器上,若是沒有安裝 Git,能夠 sudo yum install git -y 來安裝,以後 git clone https://github.com/winterssy/SSR-Docker.git

克隆到本地以後能夠根據本身須要修改 /etc/config.json 文件中的配置

config.json 配置能夠參考:https://github.com/winterssy/SSR-Docker/blob/f0439c232add3a4addbbce68f3c1be32464e0d18/etc/README.md

能夠根據須要修改 docker-compose 映射到本地的端口

配置好以後執行 docker-compose up -d 便可啓動 SSR 服務,啓動以後在虛擬機對應的網絡安全組配置中開放須要的端口​

More

還有一些配置,腳本須要準備一下來部署服務,索性大多數的服務我都是有 k8s deploy yaml 的,只是有些 configMap 裏的數據要更新一下。
整理一下放在服務器上,最後整理出一個 k8s 服務部署腳本

若是出現了什麼意外狀況或者要從新部署 k8s 只要執行一下這個腳本便可~

其餘服務的 Nginx 配置,須要新增服務配置的時候只要在 /etc/nginx/conf.d 目錄下增長對應服務的配置便可

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;
    }
}

折騰的遇到最多的問題就是服務器 SSH 超時問題和 Nginx SELinux 的問題,之後再部署的時候服務器資源要徹底新建,SELinux 要禁用

Reference

相關文章
相關標籤/搜索