練習建立 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]:80和 https://[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