ZKWeb 官網與演示站點的部署步驟 (Linux + Nginx + Certbot)

由於沒有給域名續費,加上私人時間不足,ZKWeb 的官網和演示站點已經中止了幾個月的時間。
最近時間開始變多,因此從新購買了別的域名和服務器把官網和演示站點從新部署上去。
在此前站點是託管在共享主機上的 Windows + IIS 上的,而如今已經換爲了 Linux + Nginx,費用比使用共享主機還要便宜。node

由於服務器是 OpenVZ 下的虛擬主機,不能使用 docker,如下的步驟會直接在服務器上運行網站程序。python

安裝 dotnet

wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.2 -y

安裝 libgdiplus (爲了支持 System.Drawing.Common)

sudo apt-get install libgdiplus libunwind8 openssl -y
ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll

安裝 nodejs (MVVMDemo 須要使用)

curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh
rm nodesource_setup.sh
sudo apt-get install nodejs

下載項目

sudo apt-get install git
cd /home/ubuntu
git clone https://github.com/zkweb-framework/ZKWeb
git clone https://github.com/zkweb-framework/ZKWeb.MVVMDemo
git clone https://github.com/zkweb-framework/ZKWeb.Plugins
git clone https://github.com/zkweb-framework/ZKWeb.Demo
git clone https://github.com/zkweb-framework/ZKWeb.Home

編譯和發佈項目

cd ~/ZKWeb.Demo && sh publish_ubuntu.sh

cd ~/ZKWeb.Home && sh publish_ubuntu.sh

cd ~/ZKWeb.MVVMDemo/src/ZKWeb.MVVMPlugins/MVVM.Angular.Website/static
sudo npm install -g @angular/cli
npm install
ng build --prod --aot
cd ~/ZKWeb.MVVMDemo && sh publish_ubuntu.sh

添加 systemd 服務

sudo vi /etc/systemd/system/zkweb-home.service

內容:nginx

[Unit]
Description=ZKWeb Home
After=network.target

[Service]
WorkingDirectory=/home/ubuntu/ZKWeb.Home.Publish/ZKWeb.Home.Ubuntu
ExecStart=/bin/sh -c "./ZKWeb.Home.AspNetCore server.urls=http://127.0.0.1:5000"
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=zkweb-home
User=ubuntu
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target
sudo vi /etc/systemd/system/zkweb-demo.service

內容:git

[Unit]
Description=ZKWeb Demo
After=network.target

[Service]
WorkingDirectory=/home/ubuntu/ZKWeb.Demo.Publish/ZKWeb.Demo.Ubuntu
ExecStart=/bin/sh -c "./ZKWeb.Demo.AspNetCore server.urls=http://127.0.0.1:5001"
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=zkweb-demo
User=ubuntu
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target
sudo vi /etc/systemd/system/zkweb-mvvm-demo.service

內容:github

[Unit]
Description=ZKWeb MVVM Demo
After=network.target

[Service]
WorkingDirectory=/home/ubuntu/ZKWeb.MVVMDemo.Publish/ZKWeb.MVVMDemo.Ubuntu
ExecStart=/bin/sh -c "./ZKWeb.MVVMDemo.AspNetCore server.urls=http://127.0.0.1:5002"
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=zkweb-mvvm-demo
User=ubuntu
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

啓動 systemd 服務

# 設置重啓後自動開始
sudo systemctl enable zkweb-home
sudo systemctl enable zkweb-demo
sudo systemctl enable zkweb-mvvm-demo

# 馬上開始
sudo systemctl start zkweb-home
sudo systemctl start zkweb-demo
sudo systemctl start zkweb-mvvm-demo

# 查看服務日誌
sudo journalctl -u zkweb-home
sudo journalctl -u zkweb-demo
sudo journalctl -u zkweb-mvvm-demo

安裝和啓動 nginx

sudo apt-get install nginx
sudo systemctl enable nginx
sudo systemctl start nginx

編輯配置與重啓 nginx

sudo vi /etc/nginx/sites-enabled/default
sudo systemctl restart nginx

內容:web

server {
    listen        80;
    server_name   zkweb.app.compiv.com;
    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

server {
    listen        80;
    server_name   zkweb-demo.app.compiv.com;
    location / {
        proxy_pass         http://localhost:5001;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

server {
    listen        80;
    server_name   zkweb-mvvm-demo.app.compiv.com;
    location / {
        proxy_pass         http://localhost:5002;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

安裝 certbot (支持自動申請與更新 lets encrypt 的 ssl 證書)

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx

申請 ssl 證書

證書會經過 nginx 模塊自動經過認證 (文件路徑形式) 與簽發。docker

sudo certbot --nginx -d zkweb.app.compiv.com
sudo certbot --nginx -d zkweb-demo.app.compiv.com
sudo certbot --nginx -d zkweb-mvvm-demo.app.compiv.com

測試更新 ssl 證書 (不會實際更新)

sudo certbot renew --dry-run

檢查更新 ssl 證書的定時器

經過以上方式安裝 certbot 之後會自動註冊定時器,用於自動更新 ssl 證書,如下命令能夠用來確認定時器的狀態。npm

sudo systemctl list-timers certbot.timer

以上就完成部署了,這個部署流程基本上是寫給本身看的,若是您有基於 zkweb 的網站也能夠拿來參考。
雖然很想用 docker 部署,可是服務器費用相差太大了。ubuntu

相關文章
相關標籤/搜索