cyue 2022-10-19

免費規則
- 永久免費算力:提供兩台 1/8 OCPU性能、1GB RAM 的永久免費 x86 虛擬主機(V M)可選用。
- 永久免費存儲:200GB免費空間。每台VM的引導存儲的要求為50GB以上,所以最多可開啟200/50=4台免費VM。
- 每月額外免費ARM運行時:提供4個ARM的 OCPU、總量24GB RAM。可隨意開一到四台的ARM虛擬主機。
- 公網IP:四個IPV4地址(3個臨時地址+1個預留地址),IPV6地址是/16的數量。建立VM時可以臨時要新IP,IP有問題時可以更換。在設定IP時可以同時保留到“預留的公共IP”池,重灌VPS時可到“预留的公共IP”取習慣用的舊IP,這樣DNS不必為此修改IP設定。
- 免費流量:10T/月出站流量,夠佛心的,現在的網速幾乎用不完。。。
- 其他甲骨文免費資源:除了VM實例,其他甲骨文服務目前我的VPS用不上。

甲骨文雲最多提供兩台永久免費x86虛擬機(VM),每台1GRAM,1/8 OCPU(相當於雙核CPU)。另外還有每月贈免費(非永久)使用時數的ARM虛擬機器。免費時數換算後,在目前政策下,相當於 4核/24G RAM 以下的 ARM 虛擬機能持續免費。每月10T免費流量,做普通網站還不錯。 參考:甲骨文永久免费vps注册和使用简单教程 架站。
我的架站選擇考量
不是每個Oracle基地都有足夠的架站資源,據說東京就很難申請到,我在大阪申請的是OK的,可以容易的取得ARM和x86資源(2022/10),但晚上網路明顯壅塞。鳳凰城似聽說還可以,就是有點遠,可能延遲會偏長。要考慮好基地位置,帳戶在申請時,就必須選定基地位置不能改,而大部分免費資源,只能在基地位置有效。
服務器規劃,剔除每月贈送的算力,真正永久的兩個x86虛擬機實例還是要用上,1GB的RAM嫌小,但當小型的網頁服務器是OK的。每月贈送的ARM的4核/24G RAM我想做一些開發實驗,就整合成一台算力較好的VM,存儲就給大一點做實驗吧。
我的設定如下:
- VM0: arm 4核/24GB 一台,自訂 100GB 存儲,做性能工作用途
- VM1: x86VM,自訂50GB 存儲,做網站用途,或提供其他服務。
- VM2:x86VM,自訂50GB 存儲,做網站用途,或當備用VPN(實測效果不好)。
由於x86VM只有1GB的RAM,1/8 的OCPU,性能普普,跑不動大應用。但當純文字PC、VPN、Wordpress架網站用還不錯,聽說可添加SWAP,讓VM跑大型應用。。。

ARM 和 x86機器都可安裝免費的Ubuntu或Oracle Linux。(x86還可裝Windows,OS要付費,還需擴容),我選擇常用的Linux安裝。Ubuntu 22.04安裝後, 初始用户是 ubuntu,没密码,使用較安全的ssh key 登入 ssh終端服務。(注意在本地保存好 key,否則會無法登入)

Oracle可保留公網IP,在重建VM時,選用習慣的舊IP就不必動DNS設定了。我把每個VM的公網IP都指向保留的IP,若發現IP被某牆國防火牆阻攔,可以更換IP。
關於DNS的使用
Freenom.com 提供免費DNS申請和DNS服務,申請方便,但免費DNS發現會有很多問題。。。(發現遇到衝突、DNS竄改,跳到欺騙網頁),實驗在Let’s Encrypt下,很有可能無法正確取得/續約證書。。。果然,代表網上身分的域名,還是需要小心奇怪的免費服務。(但甲骨文永久免費服務真香)
之前我在NameCheap申請了兩個付費Name(go2see.co、go2see.me),並在台灣服務器使用。我們可以在Namecheap的DNS添加 A record,建立三個三級子域名,指向Oracle的VM的三個公網IP,來建立VPS。
参考設定VPS:



最後點擊創建,創建了vm1實例 ,如下最後一個是最新的:

添加公網IP:
設定位置藏的有點深,從實例列表頁面點擊想選擇的實例名,再從側邊欄點擊“附加的VNIC”,再點擊“主要VNIC”的名稱進入VNIC頁,再從側邊欄點擊“IPv4地址”,從專用IP地址右方的彈出選單中點擊編輯,彈出如下選單:

從我之前預留的IP地址挑選IP。
1. 初始設定
1.0第一次登入–使用ssh金鑰和預設帳戶名
ubuntu 22.04服務器的初始化用戶名和密碼都是ubuntu。 oracle的ubuntu在初始化後,不讓用密碼登入,只能用建立VM時生成/提供的ssh金鑰登入。
我在Namecheap功能變數名稱管理服務中,把vm0.go2see. co功能變數名稱綁定到arm虛擬機器的公網IP地址了,所以我可以使用以下命令,採用標準的埠22,登入arm虛擬機器:
ssh -i ssh-arm.key -p 22 ubuntu@vm0.go2see.co
登入後,就可以開始做一些設定了。 大陸有時候連ssh埠(port 22)都擋,在之後的1.2節會添加一個備用埠。
1.1 步骤:进入root,調整時域
#之後的工作要在 root下做。。。。
sudo -s
# 調整系統時域
dpkg-reconfigure tzdata
# 按'A'後按上下選擇: Asia 然後 按't'後選擇 Taipei。
# (若時間服務異常)可更換時間服務器:
#apt-get install -y ntpdate ntp
#ntpdate time.stdtime.gov.tw
1.2 初始化防火牆、密碼
改用ufw防火牆設置工具,比直接用iptable管理防火牆好用。
Oracle子網域也需要可設定防火牆規則,對網域內機器都有效,需要同步設定規則或關閉他(允許所有連接)。
# 初始化 apt
# apt update && apt upgrade -y
apt update -y
# 改用 ufw 代替 iptable 关闭 iptable。
ufw disable
ufw reset
ufw default deny
ufw allow ssh
ufw allow http
ufw allow https
ufw allow from any to any port 3389 #RDP
ufw allow from any to any port 8082 #my vpn port
ufw enable
# 關閉本機ufw防火牆,直接用 oracle防火牆?
ufw disable
# 允許 ssh 用密碼登入(no 改 yes),不必一直用 ssh-key(可能影響登入安全):
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
# 添加帳戶的 ssh 密碼:
passwd ubuntu
1.3 更改主用户名
⚠️注意:更改用主戶名可能造成無法登入,執行前,請確認以下幾點已經做了:
# ⚠️需要完全在 root下工作
sudo -s
# ⚠️允許用密碼 ssh(no 改 yes),不必一直用 ssh-key(可能影響登入安全)登入:
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
# ⚠️要先给 ubuntu 账户加密码,否则更名之後可能无法 sudo 了。。。
passwd ubuntu
開始修改:
cd /
# 改变 /etc 下的 passwd、shadow、group 用户名。可以用 nano 编辑,或 sed 自动修改
# 账户密码的 户名、全名、工作目录:
sed -i 's/ubuntu/cyue/g' /etc/passwd
sed -i 's/Ubuntu/CYUE/g' /etc/passwd
# shadow的 户名:
sed -i 's/ubuntu/cyue/g' /etc/shadow
# 旧帐户加入的群组:
sed -i 's/ubuntu/cyue/g' /etc/group
# 工作目录名变换
mv /home/ubuntu /home/cyue
# nano /etc/sudoers,在root后添加新用户名(以cyue为例),为可以执行 sudo的用户。
echo 'cyue ALL=(ALL:ALL) ALL' >> /etc/sudoers
# reboot完成更名!!
reboot
# 之后 ssh 可以用 cyue + 密码 登入了。。。
2. 按裝網頁服務 LNMP+WP
2.1 安裝 LNMP
Linux適用的通用架站包 – Nginx+MarriaDB+PHP
echo
echo '# 1. 安装啟動 nginx'
echo
sudo apt update
sudo apt install nginx lynx -y #lynx是文字模式browser用于terminal中检查网页。
sudo systemctl restart nginx.service
sudo systemctl enable nginx.service
sudo ufw allow 'Nginx Full' # 防火牆打開 nginx
# 需要的話,檢查 nginx 網頁:
# lynx localhost
# sudo systemctl status nginx.service
echo
echo '# 2. 安装MariaDB'
echo
sudo apt install mariadb-server mariadb-client -y
sudo systemctl stop mariadb.service
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
# 数据库加密保护
sudo mysql_secure_installation
# 需要在此設定資料庫的 root 密碼,禁止遠程登入 root
###檢查數據庫安裝:####
# 1. 登入查看 mariaDB 数据库:
# sudo mysql -u root -p
# 2. 离开数据库:
# exit;
####################
echo
echo '# 3. 安装PHP'
echo
sudo apt install php-fpm php-opcache php-cli php-gd php-curl php-mysql -y
### 依據安裝版次修改php設定
# sudo nano /etc/php/8.1/fpm/php.ini
# 參考數值:
# max_execution_time = 360
# memory_limit = 256M
# cgi.fix_pathinfo = 0
# file_uploads = On
# upload_max_filesize = 100M
# allow_url_fopen = On
# date.timezone = Asia/Taipei
sudo systemctl restart nginx.service
sudo systemctl restart php8.1-fpm.service
2.2 安装 WordPress
2.2.1 下载 WordPress
从 WordPress TW 网站并下载最新版本,解压并放到 /var/www/
echo
echo 1. 下載安裝 WordPress
echo *** 从 WordPress TW 网站并下载最新版本,解压并放到 /var/www/
cd /tmp && wget https://tw.wordpress.org/latest-zh_TW.tar.gz
tar -zxvf latest-zh_TW.tar.gz
sudo mv wordpress /var/www/wordpress
echo *** 更换 wordpress 目录的用户与权限(使用用户 www-data:www-data, 权限 755 ):
sudo chown -R www-data /var/www/wordpress/
sudo chmod -R 755 /var/www/wordpress/
echo
echo 2. 配置 mariaDB(root 登入 marriaDB)
#接着要设定资料库了。。。
sudo mysql -u root -p
2.2.2 設定網站資料庫
- 資料庫設置參考:(為 vm0 vm1 vm2 建立資料庫)
# 若有舊的 DB刪除資料庫與帳號 #drop database vm0; #drop user uservm0; #drop database vm1; #drop user uservm1; drop database vm2; drop user uservm2; #建立資料庫與帳戶 ### vm0 #CREATE DATABASE vm0; #CREATE USER 'uservm0'@'localhost' IDENTIFIED BY 'MY_PASSWORD'; #GRANT ALL ON vm0.* TO 'uservm0'@'localhost' IDENTIFIED BY 'MY_PASSWORD' WITH GRANT OPTION; ### vm1 #CREATE DATABASE vm1; #CREATE USER 'uservm1'@'localhost' IDENTIFIED BY 'MY_PASSWORD'; #GRANT ALL ON vm1.* TO 'uservm1'@'localhost' IDENTIFIED BY 'MY_PASSWORD' WITH GRANT OPTION; ### vm2 CREATE DATABASE vm2; CREATE USER 'uservm2'@'localhost' IDENTIFIED BY 'MY_PASSWORD'; GRANT ALL ON vm2.* TO 'uservm2'@'localhost' IDENTIFIED BY 'MY_PASSWORD' WITH GRANT OPTION; # 保存设定并退出: FLUSH PRIVILEGES; EXIT;
2.2.3 nginx 建立 wordpress 服务器
- 在nginx建立初始化的 sites-available/wordpress 服务器文件:
# 在nginx建立初始化的 wordpress服务器文件:
sudo nano /etc/nginx/sites-available/wordpress
将内容填入配置文件,把关联的网址名写到 server_name 项目后方:
server {
root /var/www/wordpress;
index index.php index.html index.htm;
#server_name vm0.go2see.me vm0.go2see.co; ## 注意 name修改!!
#server_name vm1.go2see.me vm1.go2see.co; ## 注意 name修改!!
server_name vm2.go2see.me vm2.go2see.co; ## 注意 name修改!!
client_max_body_size 100M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
- 编完保存。
2.2.4 启用WordPress服务器
- 以 ln 建立连接方式将剛建立的文件 worepress 連接到可使用位置。
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
# 重啟 nginx 和 php服務
sudo systemctl restart nginx.service
sudo systemctl restart php8.1-fpm.service
# 這時瀏覽器應該可以看到Wordpress網站安裝畫面了
# http://vm1.go2see.co/wp-admin/setup-config.php
# 資料庫名、用戶名、密碼、主機位置記得用前面設定的。。。
2.3. Certbot 為網站提供免費證書
2.3.1 查看certbot官网建议安装方法:
选择 nginx + ubuntu20.04 ,看如何安装。
以下是 certbot建议的 nginx + ubuntu20.04 安装方法,Ubuntu 22.04 通用。
2.3.2 Certbot安裝自動更新證書
# Install snapd
sudo apt update -y
sudo apt install snapd
sudo snap install core; sudo snap refresh core
# remove prev. & install classic
sudo apt-get remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
# 建立網站證書,安装时回答Y或A允许即可。
# (我有三個網站,注意與DNS服務器匹配)
# sudo certbot --nginx -m cyue12@me.com -d vm0.go2see.co -d vm0.go2see.me
# sudo certbot --nginx -m cyue12@me.com -d vm1.go2see.co -d vm1.go2see.me
sudo certbot --nginx -m cyue12@me.com -d vm2.go2see.co -d vm2.go2see.me
# 看到 Congratulations! 就是有證書了。。。
# 手動更新證書(需要的話)
# sudo certbot certonly --nginx -m cyue12@me.com -d vm0.go2see.co -d vm0.go2see.me
# sudo certbot certonly --nginx -m cyue12@me.com -d vm1.go2see.co -d vm1.go2see.me
# sudo certbot certonly --nginx -m cyue12@me.com -d vm2.go2see.co -d vm2.go2see.me
# 開啟自動更新證書
sudo certbot renew --dry-run
# 檢查 certbot/let's encrypt 是否開啟了 snap.certbot.renew.timer 更新定時器
sudo systemctl list-timers
2.4 開始設定 WordPress 網頁
瀏覽器打開 vm1.go2see.co,可以開始設定了。。。
- 第一頁:資料庫名、用戶名、密碼、記得用前面資料庫設定的。。。

- 第二頁:內容不和資料庫綁定,可以自己定義。。。。(我懶,先用我的PC帳戶設定)

- 設定好就可以進入控制台,OK,搞定。。。

2.5 主題推薦(網站)
3. 安裝 OpenVPN 服务
一鍵命令安裝 OpenVPN,在Osaka基地验证成功,但效能不佳,幾乎動不了,聽說要更換不被干擾的IP。。。
1. Linux下载安装OpenVPN 服务端 (一键安装命令)
wget https://git.io/vpn -O openvpn-install.sh && sudo bash openvpn-install.sh
- 协议类型选择1:UDP、
- **端口从1194,换成其它(8082),
- DNS选择OpenDNS、最后安装即可。
- 1st client:cyueMBP ,对第一个ovpn配置文件命名。
安装好以后,通过WinSCP 把ROOT根目录下生成的OpnVPN的配置文件,导出来就可以在客户端上连接使用。
The client configuration is available in: /root/cyueMBP.ovpn
New clients can be added by running this script again.
⚠️注意:记得需要把 Oracle Cloud 子网路的 ovpn端口(我们给的 8082口)打开。。。
2. 添加OpenVPN client 账户法:
OpenVPN 每台客戶端登錄需要一個帳號。执行1 下載的安裝shell,選擇 1,Add a new client 即可添加新的配置文件:
sudo bash openvpn-install.sh
配置文件仍然放在 /root 下,放到客戶端app執行安裝。
4. 安裝 XRDP服務
⚠️不要在只有1GB RAM 的 x86安裝!!可能崩潰
#sudo apt install -y ubuntu-desktop-minimal xrdp
sudo apt install -y ubuntu-desktop xrdp
#adduser xrdp ssl-cert
sudo systemctl restart xrdp
#查看
sudo systemctl status xrdp
5. 安装SFTP服务
Sftp 是 SSH的一部分。可以把SSH和SFTP區分,有些客戶可以設計成只能在服務器上傳下載文件,不能SSH進服務器。
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。
sftp 与 ftp 有着几乎一样的语法和功能。*SFTP 为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实*在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统。 SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。*SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是*,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
部分 Ubuntu默认只安装openssh-client,需要手动安装openssh-server或者sftp-server。 (甲骨文提供的 Ubuntu22.04目前已安裝 openssh-server)
sudo apt update -y
sudo apt install openssh-server -y
目标
在Ubuntu系统上开通sftp文件服务,允许某些用户上传及下载文件。
但是这些用户只能使用sftp传输文件,不能使用SSH终端访问服务器,并且sftp不能访问系统文件。
系统管理员则既能使用sftp传输文件,也能使用SSH远程管理服务器。
操作步骤
sftp用户、用户组的创建
- 添加sftp用户,创建 sftp 用户组
sudo adduser cyue
sudo adduser johnny
sudo adduser tony
sudo adduser shari
sudo addgroup sftp-users
# 将cyue从所有其他用户组中移除并加入到sftp-users组,并且关闭其Shell访问
#/bin/false也可以替换为/sbin/nologin,目的是不允许该用户登录到系统中
#sudo usermod -G sftp-users -s /bin/false cyue
- 创建sftp服务器的管理员身份,并且加入 ssh 用户组(不限制他的shell操作权限)
sudo adduser admin
sudo addgroup ssh-users
# -a 表示以追加形式将 admin 加入 ssh-users
sudo usermod -a -G ssh-users admin
sudo adduser cyue ssh-users
sudo adduser johnny ssh-users
sudo adduser tony ssh-users
sudo adduser shari ssh-users
创建文件服务器目录
- 创建服务器文件目录
# 创建监狱目录
sudo mkdir /home/sftp_root
# 普通用户能够写入的共享文件目录
sudo mkdir /home/sftp_root/shared
# 设置共享文件夹的拥有者为管理员、用户组为 sftp-users
sudo chown admin:sftp-users /home/sftp_root/shared
# 拥有者、sftp用户组的成员具有一切权限
sudo chmod 770 /home/sftp_root/shared
权限配置(可選)
默认允许所有用户或者用户组登录。再此添加 /etc/ssh/sshd_config,若仅允许指定用户或者用户组访问,按照以下格式配置:
# 以空格间隔
#AllowUsers user1 user2
#AllowGroups group1 group2
sudo pico /etc/ssh/sshd_config
在sshd_config文件的最后,添加以下内容:
AllowGroups ssh-users sftp-users
Match Group sftp-users
ChrootDirectory /home/sftp_root
AllowTcpForwarding no
X11Forwarding no
ForceCommand internal-sftp
这样配置的目的是:
- 只允许ssh-uers及sftp-users通过SSH访问系统,其中ssh-uers用户组可以使用ssh,并且不受其他限制。而SFTP用户组仅能使用SFTP进行访问,且不能使用shell
- 针对sftp-users用户,额外增加一些设置:将“/home/sftp_root”设置为该组用户的系统根目录(因此它们将不能访问该目录之外的其他系统文件;
- 禁止TCP Forwarding和X11 Forwarding
另外需要注意的是:ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755。
需要注意的一点的是,现在所有需要远程连接的用户都必须加入 ssh-users 才行。
如将用户 Tony 加入 ,这样ta就可以使用ssh连接本机。
sudo usermod -a -G ssh-users tony
- 限制ssh连接的访问IP
編輯 /etc/ssh/sshd_config :
#sudo pico /etc/ssh/sshd_config
# Authentication:
#AllowUsers root@10.10.10.* #限制root用户只能通过10.10.10.*网段登录访问
#AllowUsers charles@10.10.10.* #限制charles用户只能通过10.10.10.*网段登录访问
AllowUsers cyue
AllowUsers tony
AllowUsers johnny
AllowUsers shari
重启SSH
# 亦可
# /etc/init.d/ssh restart
service ssh restart
参考博客
VPS常用测试脚本
wget -qO- bench.sh | bash
看來廣州到大阪線路很差,幾乎不能用。廣州到台北,機器雖老,但傳輸還勉強可用。。。
- 大阪站:对美国、日本、上海、新加坡的下载性能都是万兆路由性能了,真香。

- 台灣自己的100M老路由对几个大城的线路可以跑90多M,几乎满载了。。。