--- title: 作業系統考試大補帖 --- # 指南瀏覽 - [灌Linux系統] - [Linux操作] - [ssh連線] - [Python Django操作(Windows cmd)] - [Python Django操作(Linux)] - [Nginx proxy事前準備] - [Nginx proxy正式操作] - [將SSL Error移除] - [將Django與Nginx結合] ## 灌Linux系統 1. 前往[proxmox](https://10.40.18.94:8006/#v1:0:18:4:::::::) 2. 輸入使用者和密碼  >[!Warning][Realm] 記得改成Proxmox VE authentication server > 3. 使用Console 即可看到畫面  4. 按下 Start Now後 看到下方的[PROMOX]LOGO 就按下Esc鍵  >[!Warning]如果沒有及時按Esc鍵 請進行[重開]步驟: > ===[重開] 開始 1. 按Commands下的[關機]  2. 按Start Now  [重開] 結束=== 5. 進入這個畫面後 按數字鍵2 (對應選項為:DVD/CD...)  6. 選擇Install  7. 選擇語言 (English)  (※這個符號後的文字用於確認您是否在正確的頁面) ※Choose the language to be used for the installation... 8. 選擇時區 (other)  ※The selected location will be used to set your... ================================================= (Asia)  ※The selected location will be used to set your... ================================================= (Taiwan 按字母鍵 T 就可以找到)  ※The selected location will be used to set your... 9. 選擇區域(United States)  ※There is no locale defined for the combination... 10. 選擇鍵盤(American English)  ※Keymap to use: 11. 設定電腦名稱(以我的舉例 user122214109)  ※Please enter the hostname for this system. 12. 設定網域(以我的舉例 user122214109)  ※The domain name is the part of your Internet... 13. 設定密碼 >[!Warning]要輸入兩次 不要忘記密碼! > ※You need to set a password for 'root'... 第二次輸入  ※Please enter the same root password... 14. 設定使用者名稱 >[!Warning]要輸入兩次 不要忘記名稱! >  ※a user account will be created for you... 第二次輸入  ※Select a username for the new account... 15. 設定使用者密碼 >[!Warning]要輸入兩次 不要忘記密碼! >  ※A good password will contain a mixture of letters... 第二次輸入  ※Please enter the same user password... 接下來等它跑完 16. 選擇安裝方式 (Guided - use entire disk)  ※The installer can guide you through... 17. 選擇磁碟(是的 只有一個選項)  ※Note that all data on the disk you select... 18. 檔案管理方式 (All files in one partition (recommended for new users))  ※Selected for partitioning:... 19. 確定磁碟分割 (Finish partitioning and write changes to disk)  ※This is an overview of your currently... 20. 再次確認 (Yes)  ※If you continue, the changes listed below will be... 接下來等它跑完 21. 是否要使用額外的磁碟 (No)  ※Scanning your installation media finds the label:... 22. 選擇鏡像站國家 (Go Back 請使用Tab鍵)  ※The goal is to find a mirror of the Debian... 23. 是否不使用鏡像站 (Yes)  ※No network mirror was selected 24. 是否允許收機資料 (No)  ※The system may anonymously supply the distribution... 25. 選擇要安裝的套件 (直接按Enter)  ※At the moment, only the core of the system... 接下來等它跑完 26. 安裝GRUB開機程式 (Yes)  ※It seems that this new installation is the only... 27. GRUB開機程式安裝位置 (/dev/sda)  ※You need to make the newly installed system bootable... 接下來等它跑完 28. 安裝完成 (Continue)  ※Installation is complete... 接下來會跑出一堆畫面 不要理他 不要按任何鍵 直到看到以下畫面↓  ## Linux操作 1. 取得權限 ``` su ``` 然後輸入密碼  >[!Warning]@前的root表示您現在擁有最高權限 在刪除任何東西時請特別注意!!! > 2. 移除預設套件來源 ``` rm /etc/apt/sources.list ``` 3. 新增本地套件來源 ``` echo 'deb [trusted=yes] http://10.40.8.78/my-apt-repo stable main' | tee /etc/apt/sources.list.d/localrepo.list ``` 4. 更新 ``` apt update ``` 5. 升級 ``` apt upgrade -y ``` 6. 安裝 ``` apt install -y sudo ssh wget curl ``` ## ssh連線 1. 打開Windows的cmd  2. 前往Linux查找ip ``` ip a ```  找到ip 在2:的地方找到[inet] 畫面上是:10.40.18.171 請記住自己的 3. ssh連線 ``` ssh -l user122214109 10.40.18.171 ssh -l [你的Linux帳號] [你剛剛ip a 的ip] ```  ``` yes ```  ``` 輸入密碼 打字時畫面不會動是正常的 ```  看到綠色的字 說明ssh連線成功 ※指令補充 登出 ``` logout ```  ## Python Django操作(Wincdows cmd) 1. 前往D槽 (C/D槽無影響 但D槽較乾淨) ``` D: ```  2. 操作 ※為了操作流暢性 接下來會減少配圖 建立專案目錄 ``` mkdir pyTest ``` 進入該目錄 ``` cd pyTest ``` 建立env虛擬環境(此步驟需要等他一下 完成後畫面不會有改動) D:\pyTest>py -m venv env ``` py -m venv env ``` 啟動虛擬環境(成功啟動後 會有(env) 表示您正在虛擬環境) D:\pyTest>env\Scripts\activate ``` env\Scripts\activate ``` >[!Tip] ※指令補充 請依情況決定是否要執行 ※退出虛擬環境 > ``` deactivate ``` 升級pip (env)D:\pyTest>py -m pip install -U pip  ``` py -m pip install -U pip ``` 在虛擬環境中安裝套件Django (env)D:\pyTest>pip install django  ``` pip install django ``` 測試Django是否正確安裝 (env)D:\pyTest>py -m django --version  ``` py -m django --version ``` 3. 建立Django專案 先回到D槽 ``` cd.. ```  建立專案 D:\>django-admin startproject myweb ``` django-admin startproject myweb ``` 進入myweb D:\>cd myweb ``` cd myweb ``` 啟動web server D:\myweb>py manage.py runserver ``` py manage.py runserver ```  >[!Tip] ※指令補充 請依情況決定是否要執行 ※關閉web server > ``` Ctrl C ``` ## Python Django操作(Linux) ※接下來使用cmd ssh連線 ※可以先執行 su 獲得root權限 1. 建立Virtual Enviornment(操作環境) ``` sudo apt-get install python3-venv ```  打Y (接下來等它跑完) ``` cd /home/user122214109 cd /home/[你自己的user名稱] ``` ``` python3 -m venv myvenv source myvenv/bin/activate ```  前面有(myvenv)表示成功建立虛擬環境 安裝Django ``` pip install Django ```  建立專案 ``` django-admin startproject myweb cd myweb python manage.py runserver ```  看到這個畫面(紅色字、黃色字)不用怕 這是正常的 代表您有成功啟動Django 還有一些東西要調整 我們先將伺服器關掉 ``` Ctrl C ```  ``` cd myweb nano settings.py ``` 會進入這個畫面↓  請找到 [ALLOWED_HOSTS]  改成這樣↓  ``` ALLOWED_HOSTS = ['127.0.0.1' , '10.40.18.171'] ALLOWED_HOSTS = ['127.0.0.1' , '您自己的ip'] (如果忘記自己的ip 請到Linux打ip a) ``` 改好之後 按Ctrl X 按Y 按Enter 回到這個畫面  (如果你的畫面有之前執行的指令 是正常的 我的畫面經過clear處理) 啟動伺服器 ``` python manage.py runserver ``` 會發生錯誤 這是正常的  請先執行: ``` cd .. (請注意cd和..中有空格) ```  再啟動伺服器 ``` python manage.py runserver 0.0.0.0:8000 0.0.0.0:8000 一定要打 ```  在瀏覽器輸入 ``` 10.40.18.171:8000 [您自己的ip]:8000 ```  完成 ## Nginx proxy事前準備 先確認位置  我們的伺服器正在啟動中(Django操作) 先 Ctrl C 關閉伺服器  然後關閉虛擬環境 ``` deactivate ```  接著回到根目錄 ``` cd ```  現在我們開始正式的Nginx proxy ## Nginx proxy正式操作 ※為了操作流暢性 接下來會減少配圖 1. 更新系統套件資料庫 ``` sudo apt update sudo apt upgrade -y ``` 2. 安裝Nginx ``` sudo apt install nginx -y ``` 3. 確認Nginx服務狀態 ``` sudo systemctl status nginx ```  看到這個畫面 請按 Ctrl C 就可以繼續操作了 如果不行 再按Enter 就可以繼續操作了 4. 安裝OpenSSL ``` sudo apt install openssl -y ``` 5. 驗證OpenSSl版本 ``` openssl version ``` ### 建立自簽SSL憑證 1. 建立存放憑證的目錄 ``` sudo mkdir -p /etc/nginx/ssl ``` 2. 生成私鑰和自然憑證(請直接複製貼上 反斜線\ 是因為指令太長) ``` sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/nginx.key \ -out /etc/nginx/ssl/nginx.crt ``` 執行成功後 會出現以下畫面↓  請看到畫面上的 Country Name(2 letter code)[AU]: 接下來會有: - 國家名稱 (Country Name) - 地區名稱 (State or Province Name) - 城市名稱 (Locality Name) - 組織名稱 (Organization Name) - 組織單位名稱 (Organizational Unit Name) - **通用名稱 (Common Name)** - 電子郵件地址 (Email Address) 我們的重點是 **通用名稱 Common Name** 其他部分直接按Enter **Common Name (e.g. server FQDN or YOUR name) []:** ``` st109.114os.tw st<您的學號>.114os.tw ※正式考試中可能會更動 這裡先以教材為例 ```  3. 設定權限 ``` sudo chmod 400 /etc/nginx/ssl/nginx.key sudo chmod 444 /etc/nginx/ssl/nginx.crt ``` ### 基本SSL設定 1. 編輯網站配置文件 ``` sudo nano /etc/nginx/sites-available/your_domain ※這段指令中的your_domain是檔案名稱 如果改成其他名稱 請自行記住 ``` 會進入這個畫面↓  2. 添加以下配置(※這段文字中的 st109.114os.tw 請改成先前設定的網域名稱) 可以使用txt用以編輯 ``` server { listen 80; server_name st109.114os.tw www.st109.114os.tw; #這裡要改 # HTTP 重定向到 HTTPS return 301 https://$host$request_uri; } server { listen 443 ssl; server_name st109.114os.tw www.st109.114os.tw; #這裡要改 # SSL 憑證設定 ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; # SSL 協議設定 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256'; # SSL 會話設定 ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_session_tickets off; # HSTS 設定 (HTTP Strict Transport Security) add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # 網站根目錄 root /var/www/html; index index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } } ``` 畫面如下↓  接下來 按Ctrl X 按Y 按Enter 3. 啟用網路配置 ``` sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/你的檔案名稱 /etc/nginx/sites-enabled/ ※這裡有 your_domain 的檔案名稱 記得要改 sudo nginx -t sudo systemctl reload nginx ``` 4. 測試SSL配置 ``` echo '<!DOCTYPE html><html><head><meta charset="UTF-8"></head><body><h1>SSL 測試頁面</h1><p>Nginx SSL 設定成功!</p></body></html>' | sudo tee /var/www/html/index.html ``` ※原本的上課教材會有亂碼 亂碼問題已解決 5. 在瀏覽器上輸入 ``` 10.40.18.171 您自己的ip ※不用打:8000 :8000是Django 我們現在是Nginx ```  如果您瀏覽器輸入您的網域 ``` 例如 st109.114os.tw ``` 會出現以下畫面↓  因為我們還沒有設定DNS ### 設定BIND9 DNS 伺服器 1. 安裝BIND9 ``` sudo apt install bind9 bind9utils dnsutils -y ``` 2. 編輯本地區域設定 ``` sudo nano /etc/bind/named.conf.local ``` 會出現以下畫面↓  3. 添加區域配置 (st109.114os.tw 請改成自己的網域) ``` # 前向區域 (Forward Zone) # 這裡要改 zone "st109.114os.tw" { type master; # 這裡要改 file "/etc/bind/zones/db.st109.114os.tw"; allow-transfer { none; }; }; ``` 請參考以下畫面↓  按 Ctrl X 按Y 按Enter 4. 創建區域文件目錄 ``` sudo mkdir -p /etc/bind/zones ``` 5. 創建前向區域文件 ``` sudo cp /etc/bind/db.local /etc/bind/zones/db.st109.114os.tw sudo cp /etc/bind/db.local /etc/bind/zones/db.[這裡要改] ``` 6. 編輯前向區域文件 ``` sudo nano /etc/bind/zones/db.st109.114os.tw sudo nano /etc/bind/zones/db.[這裡要改] ``` 進入以下畫面↓  改成 (st109.114os.tw請改成自己的網域 10.40.18.171 請改成自己的ip) (如果忘記自己的ip 請前往Linux 輸入ip a) ``` $TTL 604800 @ IN SOA ns1.st109.114os.tw. admin.st109.114os.tw. ( 2022051501 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.st109.114os.tw. @ IN A 10.40.18.171 ns1 IN A 10.40.18.171 www IN A 10.40.18.171 ``` 請參考以下畫面(將原本的內容覆蓋)  按 Ctrl X 按Y 按Enter 7. 檢查區域文件語法 ``` sudo named-checkzone st109.114os.tw /etc/bind/zones/db.st109.114os.tw sudo named-checkzone [這裡要改] /etc/bind/zones/db.[這裡要改] ```  8. 重啟BIND9 ``` sudo systemctl restart bind9 sudo systemctl status bind9 ```  看到這個畫面 請按 Ctrl C 就可以繼續操作了 如果不行 再按Enter 就可以繼續操作了 9. 設定乙太網路 在Windows下方搜尋"控制台"  點擊"網路和共用中心"  點擊"乙太網路 2"(淺藍色字樣)  點擊"內容"  點兩下"網際網路通訊協定第4版(TCP/IPv4)"  將"慣用DNS伺服器(P)"的ip改成自己的ip → 改好後按"確定"  看到類似的警告 按"是"  剩下的對話框都按"確定"或"關閉" 接下來在瀏覽器輸入 ``` st109.114os.tw [自己的網域] ```  按"進階"(在下方藍色按鈕的左邊) 往下滑  按"繼續前往st109.114os.tw網站(不安全)" 此處的網域會是自己的網域  完成 ## 將SSL Error移除 1. 下載火狐FireFox瀏覽器 在瀏覽器搜尋火狐  2. 選擇第一個(LOGO黑色+綠色的那一個)  3. 點選"下載Firefox"  4. 按"存檔"  5. 安裝Firefox(以下稱火狐)  6. 在火狐中輸入 → 點選"進階" ``` st109.114os.tw [您自己的網域] ```  7. 往下滑 → 點選"接受風險並繼續"  8. (因作業失誤 沒有圖片 但您一定可以) 關掉並重開網頁 完成  ## 將Django與Nginx結合 1. 更改配置 ``` sudo nano /etc/nginx/sites-available/your_domain ``` 會看到以下畫面↓  請將location部分改成 ``` location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } ``` 請參考以下畫面↓  按Ctrl X 按Y 按Enter 2. 測試並重新載入配置 ``` sudo nginx -t sudo systemctl restart nginx ``` 3. 更改Django設定 ``` python3 -m venv myvenv source myvenv/bin/activate ``` ``` cd /home ls ```  我的是user122214109 您的應該會不一樣 ``` cd user122214109 cd myweb cd myweb ※檔案結構是myweb中還有一個myweb 所以執行兩次 nano settings.py ``` 會進入這個畫面↓  找到 ``` ALLOWED_HOSTS = ['127.0.0.1' , '10.40.18.171'] ALLOWED_HOSTS = ['127.0.0.1' , '您自己的ip'] ``` 改成 ``` ALLOWED_HOSTS = ['127.0.0.1' , '10.40.18.171' , 'st109.114os.tw'] ALLOWED_HOSTS = ['127.0.0.1' , '您自己的ip' , '您自己的網域'] ``` 請參考以下畫面↓  按Ctrl X 按Y 按Enter 執行 ``` cd .. (請注意cd和..中有空格) ``` ``` python manage.py runserver 0.0.0.0:8000 0.0.0.0:8000 一定要打 ``` 如果看到以下問題↓  請執行 ``` pip install django ``` 再執行 ``` python manage.py runserver 0.0.0.0:8000 ``` 在火狐中重新開啟st109.114os.tw[您自己的網域] 完成 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up