GCP - Nginx 反向代理
Google Cloud Platform
建立 Compute Engine
這裡依照 Google Cloud Engine 免費方案 的地區以及機器設定配置。
開機磁碟配置。
WARNING
10 GB 在安裝完 OneinStack,所剩的儲存空間會不足後續使用。
設定 SSH
創建並取得 SSH 公鑰:
mkdir ~/.ssh
ssh-keygen -t rsa -f ~/.ssh/KEY_FILENAME -C USER_NAME -b 2048
cat ~/.ssh/KEY_FILENAME.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... cloudysanfrancisco
進入 VM 詳細資訊,點擊編輯,加入 SSH 公鑰。
測試 SSH 連線:
ssh -i ~/.ssh/KEY_FILENAME USER_NAME@EXTERNAL_IP
Ubuntu
設定 root
避免執行某些命令時需要一直重複加上sudo
的這個困擾,在開始前即可先初始化 root 的密碼:
sudo passwd root
切換至 root:
su -
OneinStack
至 OneinStack 官網 選擇自動安裝,依照自己需求選擇預設配置,可再針對預設配置做進一步的編輯。
執行 OneinStack 所產生的命令,需等待約 1 個小時左右:
wget -c http://mirrors.linuxeye.com/oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh --nginx_option 1 --db_option 2 --dbinstallmethod 1 --dbrootpwd YOUR_ROOT_PASSWORD --reboot
WARNING
需在 root 權限下執行。
MySQL
查看 MySQL 服務狀態:
service mysql status
● mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/init.d/mysqld; bad; vendor preset: enabled)
Active: active (running) since Mon 2021-11-08 19:13:26 CST; 6 days ago
Docs: man:systemd-sysv-generator(8)
Tasks: 28
Memory: 13.1M
CPU: 5min 23.182s
CGroup: /system.slice/mysqld.service
├─1838 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/mysql.pid
└─2895 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql-error.log --open-files-limit=65535 --pid-file=/data/mysql/mysql.pid
進入 MySQL CLI:
mysql -u root -p
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 40
Server version: 5.7.36-log MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
創建 Database:
CREATE DATABASE DATABASE_NAME CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
這時就可以利用前面所提到的 SSH 來連線資料庫。
TIP
推薦使用 DataGrip,使用方式這邊不多贅述。
Django Server
TIP
應用配置在 Django - WhatToEat 裡有詳細敘述,記得運行服務前需使用 screen。
JDK
上傳 JDK
下載 JDK 1.8,選擇 Linux x64 Compressed Archive。 使用 SCP 將檔案上傳至 GCP:
scp -i ~/.ssh/KEY_FILENAME ~/Downloads/jdk-8u301-linux-x64.tar.gz USER_NAME@EXTERNAL_IP:~
JDK 配置
解壓縮 tar.gz:
tar -zxvf jdk-8u301-linux-x64.tar.gz
移動 JDK 資料夾至 /usr/local/jdk/
之下:
mkdir /usr/local/jdk
mv jdk1.8.0_301 /usr/local/jdk/
新增捷徑目錄:
cd /usr/local/
ln -s jdk/jdk1.8.0_301/ java
TIP
之後 JDK 更版只要把 java 捷徑指向不同路徑即可,不再需要去調整環境變數。
加入環境變數設定:
vim /etc/profile
...
export JAVA_HOME=/usr/local/java
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JRE_HOME/lib
查看 Java 版本:
java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
Ktor Server
TIP
應用配置在 Ktor - WhatToEat 裡有詳細敘述,記得運行服務前需使用 screen。
Nginx
查看 Nginx 服務狀態:
service nginx status
● nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-11-10 14:59:11 CST; 5 days ago
Docs: http://nginx.org/en/docs/
Main PID: 21706 (nginx)
Tasks: 3
Memory: 4.4M
CPU: 3.595s
CGroup: /system.slice/nginx.service
├─21706 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.con
├─21711 nginx: worker process
└─21712 nginx: worker process
Nov 10 14:59:11 what-to-eat systemd[1]: Starting nginx - high performance web server...
Nov 10 14:59:11 what-to-eat nginx[21681]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
Nov 10 14:59:11 what-to-eat nginx[21681]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Nov 10 14:59:11 what-to-eat systemd[1]: Started nginx - high performance web server.
創建 Virtual Host
確認 Nginx 正常運行後,便可在 http://EXTERNAL_IP/###vhost 網頁中查看教學。
WARNING
新增完 Virtual Host 的域名後,記得去設定對應的 CNAME。
設定 Reverse Proxy
修改 Virtual Host 的設定檔:
vim /usr/local/nginx/conf/vhost/DOMAIN_NAME.conf
server {
listen 80;
listen [::]:80;
server_name DOMAIN_NAME;
access_log off;
location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) {
deny all;
}
location ~ {
proxy_pass http://127.0.0.1:SERVER_PORT_NUMBER;
}
}
TIP
SERVER_PORT_NUMBER 即是所架設服務的 Port 號。 例如:Django 預設為 8000,根據專案配置設定 Port 號。
更改完成後,重新啟動 Nginx:
service nginx restart
參考
Ubuntu 18.04 LTS+Apache+Django
Google Cloud Free Program
Connecting using third-party tools
Create an SSH key pair
Transfer files using SCP on Linux and macOS workstations
OneinStack
Linux 安裝 JDK 開發環境