Wednesday, August 5, 2020

Jul 21, 2020 日誌

練習建立 Ubuntu 20.04 server (較完整)

查詢 IP 位址(已安裝 net-tools)

ifconfig 

netplan 設定 (only IPv6) :

重新命名 00-installer-config.yaml 成 net.yaml,為了之後修改網路設定時方便輸入。

cd /etc/netplan
sudo mv *.yaml net.yaml

修改網路設定檔

sudo vi net.yaml

將網路設定成純 IPv6 環境,IPv6 網路位址是 16 進制,所以只能使用0~9和 a~f 可以使用,在設定位址時需要注意一下。

設定檔內容(net.yaml):

# This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s25:
      addresses:
              - 2001:288:6004:17:02:cad::3150/64
      gateway6: 2001:288:6004:17::254
      nameservers:
              addresses:
                      - 2001:b000:168::1
  version: 2
sudo netplan apply

proxy 設定(only IPv6) : <---此步驟可以略過 (Aug,06,2020 更)

在純 IPv6 環境下無法 clone github 倉儲,所以需要設定代理主機(porxy)。

到 /etc/apt/apt.conf.d 目錄下修改 proxy 設定。

cd /etc/apt/apt.conf.d
sudo vi proxy.conf

proxy 設定檔內容(proxy.conf):

Acquire::http::proxy "http://[2001:288:6004:17::69]:3128";

修改後,更新 apt 設定。

sudo apt update

導入所需模組

安裝 python3 的 pip 模組

sudo apt install python3-pip

安裝 cmsimde 所需要的模組(flask、flask_cors、bs4、lxml)

sudo pip3 install flask flask_cors bs4 lxml

安裝 uwsgi 和 python plugin

sudo apt install uwsgi uwsgi-plugin-python3

安裝 nginx

sudo apt install nginx

建立 key and crt

練習時建立自己認證的 key 和 crt 。如果實際要架設 server 就需要第三方任成的 key。 key 和 crt 放在 /home/kmol2020 目錄下

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt

設定 nginx

導入 CMSIMDE 模組

在 git clone 前先設定 git 會用到的 proxy設定

git config --global http.proxy http://[2001:288:6004:17::69]:3128

為了練習架設網站,所以新建一個 3150_site 目錄在 /home/kmol2020 目錄下,專門來放 cmsimde 的資料。

mkdir 3150_site
cd 3150_site
git clone https://github.com/mdecourse/cmsimde.git

將 up_dir 目錄下的資料複製一份到 3150_site目錄,為了讓之後啟動網站時讀取資料的配置。

cp -r /home/kmol2020/3150_site/cmsimde/up_dir/* /home/kmol2020/3150_site

設定 nginx

將 /etc/nginx/nginx.conf 裡面的讀取目錄 sites-enabled 替換成 sites-available (第62行)。* 則是讀取到 default ,因為 sites-available 目錄下只有 default 這個檔案。

cd /etc/nginx
sudo vi nginx.conf
include /etc/nginx/sites-available/*

修改 sites-available 裡的設定,將 root 的讀取目錄換到 /home/kmol2020/3150_site 。

cd /etc/nginx/sites-available
sudo vi default
#root /var/www/html
root /home/kmol2020/3150_site;

重啟 nginx

sudo /etc/init.d/nginx restart

導入動態網站

sudo vi /etc/nginx/sites-available/default

加入 port 9443的設定,設定內如下:

server {

listen 9443 ssl;
listen [::]:9443 ssl;

# 指定 static 所在位置
location /static {
alias /home/kmol2020/3150_site/cmsimde/static/;
}

location / {
# 導入 uwsgi_params 設定參數
include uwsgi_params;
# 根目錄設為近端的 8080 port 
uwsgi_pass  127.0.0.1:8080;
}

ssl_certificate /home/kmol2020/localhost.crt;
ssl_certificate_key /home/kmol2020/localhost.key;
#ssl_certificate /etc/letsencrypt/live/test.kmol.info/fullchain.pem;
#ssl_certificate_key /etc/letsencrypt/live/test.kmol.info/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
try_files $uri $uri/ =404;
}

在 nginx 設定中, 導入 uwsgi_params,其網頁根目錄的資料可以由 uwsgi 網站程式提供。

因為 uwsgi 無 SSL 設置, 因此當內部動態網站以 localhost:8080 將資料送交 Nginx (9443) 之後,可以由 Nginx 提供聯外的 SSL 服務。

開啟 uwsgi 功能

cd /home/kmol2020/3150_site
sudo vi init.py

確認 CMSiMDE 中 init.py 設定 uwsgi = True, 表示動態網站系統要以 uwsgi 模式啟動

uwsgi = True

設定 uwsgi.ini

在 /home/kmol2020 新建 uwsgi_ini 目錄,專門存放 uwsgi 的設定。

mkdir uwsgi_ini
sudo vi uwsgi.ini

uwsgi.ini 的設定內容如下:

[uwsgi]
socket = :8080
uid = kmol2020
gid = kmol2020
plugins-dir = /usr/lib/uwsgi/plugins/
plugin = python3
master = true
process = 4
threads = 2
chdir = /home/kmol2020/3150_site/cmsimde
wsgi-file = /home/kmol2020/3150_site/cmsimde/wsgi.py

重啟 nginx

sudo /etc/init.d/nginx restart

若出現錯誤,有可能是 /etc/nginx/sites-available/default 內容有誤。訂正完重啟就可以了。

重新啟動 Nginx 並利用 uwsgi 指令測試 手動啟動 uwsgi 主機的指令︰

/usr/bin/uwsgi --emperor /home/kmol2020/uwsgi_ini

此時可以測試是否順利連上 http://[2001:288:6004:17:2:cad:0:3150]:80https://[2001:288:6004:17:2:cad:0:3150]:9443,若沒問題再設定防火牆。

防火牆設定 (ufw)

以 root 身分進行 ufw 設定,將22 80 9443 一起設定。設定完後可以使用 ufw status 查看防火牆設定。

sudo -s
ufw status
ufw allow from 2001:288:6004:17::/32 to any port 22
ufw deny 22
ufw allow from 2001:288:6004:17::/32 to any port 80
ufw deny 80
ufw allow from 2001:288:6004:17::/32 to any port 9443
ufw deny 9443
ufw enable

若要退出 root 模式: exit

假如網路不在系上網段, 則需要設定 140.130.17.4:3128 作為代理主機才能連線.

因為 ufw 設定都必須在 sudo 權限下, 因此使用 sudo -s 直接以 root 身份執行後續的指令. 初學者在練習 ufw 時可以在虛擬主機中設定, 避免在遠端連線時, 因設定錯誤而無法 ssh 至主機.

設定 uwsgi service

以管理者身分在 /etc/systemd/system 目錄中建立 cmsimde.service 檔案, 內容如下:

[Unit]
Description=uWSGI to serve CMSiMDE 
After=network.target

[Service]
User=kmol2020
Group=kmol2020
WorkingDirectory=/home/kmol2020/uwsgi_ini
ExecStart=/usr/bin/uwsgi --emperor /home/kmol2020/uwsgi_ini

[Install]
WantedBy=multi-user.target

接著將 cmsimde 服務設為隨系統開機啟動

sudo systemctl enable cmsimde

若要取消 cmsimde 服務隨系統開機啟動

sudo systemctl disable cmsimde

手動啟動 cmsimde.service 服務

sudo systemctl start cmsimde

手動停止 cmsimde.service 服務

sudo systemctl stop cmsimde

No comments:

Post a Comment

協同設計

2022 一開始, 將計算機程式與電腦輔助設計實習課程的期末報告導向 Github 倉儲的協同, 倉儲分別在 https://github.com/mdecourse/cp2021_final 與 https://github.com/mdecourse/cad2021_fin...