使用 VNC Server 遠端管理 GCP,並建置內容管理系統

用 VNC Server 建立 GCP 遠端桌面


先在 GCP 建立 Compute Engine VM,作業系統選 Ubuntu,再把外部 IP 設為靜態 IP。

VM設定靜態IP.png

 

VM設定靜態IP2.png

開啟 GCP 提供的瀏覽器 Terminal。

使用平臺提供的瀏覽器Terminal.png

 

使用平臺提供的瀏覽器Terminal2.png

安裝必要套件,再執行 vnc4server:

sudo apt-get update && sudo apt-get upgrade

sudo apt-get install ubuntu-desktop gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal

sudo apt-get install vnc4server

vnc4server


安裝與執行vnc4server.png

修改 ~/.vnc/xstartup

輸入語法: sudo vim .vnc/xstartup

下圖是 Ubuntu 內建的 vim 編輯畫面。

畫面是使用ubuntu的內建vim編輯器.png

按 I 進入編輯模式,貼上以下四行:

gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &

輸入 :wq 儲存並離開。

vncserver -kill :1

vncserver :1

完成後即可透過 VNC 連線遠端桌面。

GCP 防火牆需要開放 PORT 5901。

GCP需要開啟防火牆.png

安裝 RealVNC Viewer

使用 35.229.134.113:5901 連線。這是建立 VM 時設定的外部靜態 IP。

下載RealVNC.png

 

下載RealVNC2.png

遠端桌面方便後續查看資料結構或上傳程式。

在 Google Cloud 的 Ubuntu 上用 PostgreSQL、Nginx 與 Gunicorn 建置 Django


前置條件:1. Compute Engine 執行個體已啟動。2. 網域已指向 VM(這裡先用 FreeDNS 的 gcp.mooo.com,申請正式 Domain 後再修改)。3. 若要使用 Cloud DNS,可參考 Google Cloud DNS 設定說明。

回到 GCP Terminal 安裝以下套件。

執行語法:

sudo apt update 

sudo apt install python3-pip python3-dev libpq-dev postgresql-contrib nginx curl

安裝套件跟postgresql.png

在 GCP 的操作介面中找到 SQL,建立 Cloud SQL 執行個體。

建立GCP的SQL資料庫.png

Cloud SQL 與 VM 要使用相同區域。

位置區域要跟VM的位置區域一樣.png

建立完成後,畫面顯示的公開 IP 會用於 Django 站臺連線。

建立SQL後下面顯示的公開IP是到時候程式連線需要.png

編輯連線設定,只允許 VM 的 IP 連線,填入 GCP 的靜態外部 IP。

編輯連線設定設定只有VM的IP可以連線.png

資料庫準備好後,接著在 VM 建立 Django 專案。

在 VM 建立 Wagtail CMS 專案


接著安裝並建立內容管理系統。此時 GCP 的主要設定已完成;內容管理系統的試用心得可參考:內容管理系統CMS

流程分成 6 步:1. 建立 Python 虛擬環境。2. 安裝 Django、Gunicorn 與 CodeRed CMS。3. 設定連線字串。4. 執行 python manage.py migrate 初始化。5. 建立 Gunicorn 服務。6. 設定 Nginx。

建立 Python 虛擬環境

執行以下命令安裝虛擬環境:

sudo -H pip3 install --upgrade pip 

sudo -H pip3 install virtualenv

建立 WagtailDir 資料夾、虛擬環境,然後切換到該環境:

mkdir ~/WagtailDir 

cd ~/WagtailDir 

virtualenv WagtailEnv 

source WagtailEnv/bin/activate

下圖是建立 Python 虛擬環境後的資料夾。

建立資料夾與python的虛擬環境.png

安裝 Django、Gunicorn 與 CodeRed CMS

執行:

pip install django gunicorn psycopg2-binary

pip install coderedcms

coderedcms start WagtailProject --sitename "網站名稱"

這幾個命令會建立 Django 專案並安裝 CodeRed CMS;可在 VNC Viewer 中查看產生的資料夾。

還有CodeRed CMS 的套從VNC Viewer可看到資料夾.png

 

還有CodeRed CMS 的套從VNC Viewer可看到資料夾2.png

設定連線字串

連線設定檔位於 /settings/base.py。

修改連線字串連線字串在basepy.png

欄位名稱可參考 Django 的資料庫連線設定;使用者名稱與密碼沿用前面在 GCP 建立的資料庫帳號。

連線字串與使用者是上面在GCE設定的.png

連上遠端 SQL 後,接下來的命令會建立資料表與 Schema。

執行 python manage.py migrate 初始化

開始建立資料庫的Table與Schema.png

執行語法:

cd WagtailProject
python manage.py migrate
python manage.py makemigrations
python manage.py createsuperuser
python manage.py runserver
python manage.py collectstatic

看到 http://127.0.0.1:8000,代表 Application Web Server 已在本機啟動。

看到以下畫面有顯示表示已經在本機跑起來.png

建立 Gunicorn 服務

建立 Gunicorn 服務,先開啟以下兩個設定檔:sudo vim /etc/systemd/system/gunicorn.socket

建立Gunicorn連接起程式.png

sudo vim /etc/systemd/system/gunicorn.service

建立Gunicorn連接起程式2.png
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=sutsagent
Group=sutsagent
WorkingDirectory=/home/sutsagent/WagtailDir/WagtailProject
ExecStart=/home/sutsagent/WagtailDir/WagtailEnv/bin/gunicorn \
     --access-logfile - \
     --workers 3 \
     --bind unix:/run/gunicorn.sock \
     WagtailProject.wsgi

[Install]
WantedBy=multi-user.target

最後啟動服務、設定開機啟用並檢查狀態。

sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket
sudo systemctl status gunicorn.socket
file /run/gunicorn.sock
sudo systemctl status gunicorn
curl --unix-socket /run/gunicorn.sock localhost
sudo systemctl status gunicorn
sudo systemctl daemon-reload
sudo systemctl restart gunicorn

設定 Nginx

建立自訂的 Nginx 設定檔;這裡使用 gcp.mooo.com。

sudo vim /etc/nginx/sites-available/gcp.mooo.com

Nginx 設定的重點是讓 server_name 對應 Domain,並設定 location 路徑。

server 
{
    listen 80;
    listen [::]:80;

    server_name gcp.mooo.com www.gcp.mooo.com;

    location = /favicon.ico {
        access_log off;
        log_not_found off;
    }

    location /static/ {
        root /home/sutsagent/WagtailDir/WagtailProject;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

最後把設定檔連結到啟用網站的目錄:

sudo ln -s /etc/nginx/sites-available/pgcp.mooo.com /etc/nginx/sites-enabled

測試 Nginx 設定後重新啟動:

sudo nginx -t
sudo service nginx restart

後續開發


後續我改用 VS Code 的 Remote SSH 直接連到遠端修改設定檔,操作比較快。使用方式另記在:

使用VSCode遠端SSH開發
使用VSCode遠端SSH開發——本指南教你從環境需求、金鑰設定到進階除錯、效能最佳化與安全實務,一次搞懂如何在本機用 VS Code 流暢開發遠端伺服器上的程式碼

參考資料:

【筆記】在GCP上建立可Remote dekstop的Ubuntu環境
前言
在GCP開啟Ubuntu遠端桌面
前言大數據之所以被稱做大數據,自然是因為其資料數量龐大,雖然現今個人電腦普及,但真正面對大數據時,以個人能力組出來的電腦可能無法負荷如此龐大的資料。筆者目前使用的電腦環境是i7-6700 + 16GB DDR4 + NVIDIA 1060 6GB,雖然以個人用途來說已經是很棒的硬體設備,但有時候處理大數據卻會出現OOM或運算速度過慢的問題。對於OOM的問題,最簡單的解決方法就是上GCP開一個RA
[Django] 在Ubuntu中運用Nginx、Gunicorn 架設 Django API Server
原文於此
Cloudbooklet AI - Cloudbooklet
Free AI chat and AI image generator. Edit images with AI online. Create and edit unlimited images with Cloudbooklet AI using Flux Kontext or chat with Deepseek
Author image
關於 Richard Zheng
About me 喜歡爬山,瑜伽,溜冰,喜歡新奇的事,最喜歡的還是寫程式帶來的成就感,對於資訊會不斷的出現新事物也能抱持好奇與熱忱。近期開始將學習的心得寫在Blog,發現思路更清晰也加深了記憶。 紙上得來終覺淺,絕知此事要躬行