【實作】專案部署至 Oracle Server
環境為:Oracle ubuntu22.04
此篇紀錄如何將專案放置 Oracle 雲端, 並且設置 Nginx , 讓專案可以在網路上被搜到
前置作業
- Oracle 主機
若沒有 Oracle 帳號可以看這個影片跟著申請
https://www.youtube.com/watch?v=5a5tdJh8mKY
- ssh 連進 Oracle 伺服器 ( 接下來的操作都在 Oracle 伺服器上 )
Nginx 安裝&設置
安裝 nginx
sudo apt update
sudo apt install nginx
Nginx 常用指令
// 啟動 nginx
sudo systemctl start nginx
// 確認 nginx 狀態
sudo systemctl status nginx
// 停止 nginx
sudo systemctl stop nginx
// 重啟 nginx
sudo systemctl restart nginx
// 測試 nginx conf 檔
sudo nginx -t
確認 Nginx 服務正常運行
使用 sudo systemctl status nginx 確認 Nginx 狀態, 有顯示 Active: active (running) 即確認可以
nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-09-09 02:49:43 UTC; 18min ago
Main PID: 1461 (nginx)
CGroup: /system.slice/nginx.service
├─1461 nginx: master process /usr/sbin/nginx -g daemon on; master_process on
└─1463 nginx: worker process
防火牆設置
這步驟網路上有許多教學使用 ufw 防火牆, 但由於 oracle 有預設的 iptables, 所以這邊直接跟隨官方文件教學
(不然就會跟我一樣踩了許多坑)
打開防火牆, 允許 http 和 https 通信
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
// 開port
sudo firewall-cmd --permanent --zone=public --add-port=3000/tcp
// 查目前開放清單
sudo firewall-cmd --zone=public --list-all
這邊在輸入第一行時, 會顯示系統找不到 firewall
安裝 firewall
提示雖然顯示 install firewall, 但記得要加個 d, 不然找不到
sudo apt-get install firewalld
回到官方教學
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
Oracle 雲端設置端口
- 進入 Oracle Cloud 控制台, 打開選單進入虛擬雲端網路
- 點選預設的 VCN
- 點選預設的子網路名稱
- 點選預設的安全清單名稱
- 點選新增傳入規則
- 來源 CIDR 输入0.0.0.0/0, IP 協議選 TCP,目的地連接埠输入 80,443(或分開新增)
- 點擊新增傳入規則,回到介面確認是否新增80, 443 兩個port
輸入 Oracle 該伺服器 IP 位置, 確認以下畫面
有出現 NGINX 預設畫面代表安裝成功
在伺服器上放上自己的專案
安裝 nvm 來安裝 node
// 安裝 nvm
apt-get update
apt-get install build-essential libssl-dev
curl https://raw.githubusercontent.com/creationix/nvm/v0.25.0/install.sh | bash
// 重啟連線
source ~/.profile
// 確認 nvm
nvm --version
// 取得所有 node 版本
nvm ls-remote
// 安裝node
nvm install v16.14.0
// 使用安裝版本
nvm use v16.14.0
// 預設node 版本
nvm alias default v16.14.0
下載專案到伺服器上並且build好
- git clone xxxx
- cd xxxx
- npm install
- npm run build
將專案複製到 Nginx 指定路徑
從 nginx 預設的 conf 檔可以看到指定路徑為 /var/www
sudo cp -R /home/ubuntu/xxxx/dist /var/www/webtest
新增 nginx conf
- 進入 nginx conf 路徑
cd /etc/nginx/sites-available
- 建立 conf 檔
sudo vim test.conf
server {
listen 80;
listen [::]:80;
server_name ORACLE_SEVER_IP;
root /var/www/webtest;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
- 建立軟連結
sudo ln -s /etc/nginx/sites-available/test.conf /etc/nginx/sites-enabled/test.conf
- 取消預設 nginx conf
sudo unlink /etc/nginx/sites-enabled/default
測試並重啟 nginx
- sudo nginx -t
- sudo systemctl restart nginx
輸入 IP 確認畫面
有顯示專案即成功, 但目前瀏覽器會顯示不安全,
這是因為目前主機並沒有 SSL , 可以自己申請免費SSL, 或者上網購買,
443 https 設定
為了解決目前瀏覽器會顯示我們 IP 位置不安全, 所以需要在 Nginx conf 加上 443 SSL 認證
前置作業
- SSL簽證
- 網域
這邊推薦使用 cloudflare, 購買網域後可以再上面申請 ssl, cloudflare會自動幫你續簽, 申請方法可參考另一篇文章
更改 test.conf
回到 /etc/nginx/sites-available
sudo vim test.conf
server {
listen 80;
listen [::]:80;
server_name test.jiangshuuu.com;
return 302 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name test.jiangshuuu.com;
root /var/www/webtest;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
## cloudflare 申請的 SSL 檔案位置
ssl_certificate_key /etc/ssl/cloudflare/key.pem;
ssl_certificate /etc/ssl/cloudflare/cert.pem;
}
測試並重啟 nginx
- sudo nginx -t
- sudo systemctl restart nginx