內容目錄

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跑大型應用。。。

我的 x86 VM 系統信息

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

我的 ARM VM 系統信息

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:

創建實例後的表單,填寫實例名、位置不變、系統映像改用Ubuntu22.04、CPU用免費的AMD。。。
網路部分我想改用已存下的公網IP,先不給,SSH KEY公鑰用舊有的上傳。。。
引導卷點開指定訂製,預設就是50G,OK。我要求使用傳輸加密。

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

截圖時的公網IP使用不理想,我已經換掉了。。。

添加公網IP:

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

(經過多次更換,圖中的公網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官网建议安装方法:

https://certbot.eff.org/lets-encrypt/ubuntufocal-nginx

选择 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

参考博客

搭建sftp服务器


VPS常用测试脚本

 wget -qO- bench.sh | bash

看來廣州到大阪線路很差,幾乎不能用。廣州到台北,機器雖老,但傳輸還勉強可用。。。

  • 大阪站:对美国、日本、上海、新加坡的下载性能都是万兆路由性能了,真香。
  • 台灣自己的100M老路由对几个大城的线路可以跑90多M,几乎满载了。。。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *