本帖最後由 javacomhk 於 2023-1-19 02:04 編輯
預告下一篇講 增加 subdomain, nginx fast php server 及 VS Code Server。
申請免費 Domain 及創建Home WebServer 不需在家 expose port forwarding
Step by Step Guide 真正由零開始,最容易的方法(10步就得)去設定免費的自家Home Server 唔使 DDNS 亦唔使 expose home router 的port forwarding. 你只需要安裝免費的 Docker Desktop 及用 browser 去申請及設定 domain name ,dns 及 tunnel.
首先使用 Web Browser 申請免費的服務
(1)申請 免費 domain name
到 https://freenom.com 申請免費 domain name (例如 hkhome.tk)
如選擇例如 .tk .ml .ga .cf ... 等可以選擇免費得到12months free 的 domain name
如新申請是要 verify email 後便可再 Login 後看見 Active 的 Status。
如果你要申請一些其他收費的 domain name 亦可以,但一些例如 3domains.net 的 free domain name 由於不能更改 custom DNS 就不可以使用本帖介紹的方法去申請以下cloudflare 的戶口及服務。
(2)開啟新的 Browser Tab 頁面申請免費 cloudflare 戶口
到 https://cloudflare.com 申請免費戶口,如新申請是要 verify email 後便可再 Login
輸入你剛才申請好的 domain name (例如 hkhome.tk) 然後選擇 Add site ,選擇最下的免費 Free Plan 選項然後click Continue
拉到下面然後 copy cloudflare 的 2 個 nameservers 準備在第(3) 步使用
(3) 回到 freedom.com 的Bowser 頁面選擇 Manage Domain 及 Management Tools -> Nameservers 及 Use custom nameservers 並輸入 第(2) 步 copy 好的 2個nameservers 最後 click Change Nameservers
(4) 等待 10-15分鐘以上(通常要等較長時間去等待更新nameserver registrars)再回到 cloudflare.com 的 Browser頁面 click Done, check nameservers
選擇 Always Use HTTPS 及 Save 其他都可選擇默認或及後選擇 Finish later
click Check nameservers 直至出現 Great news! Cloudflare is now protecting your site, 代表成功。
此時已成功設立 domain name 及 cloudflare 的 custom DNS,跟著便可以去自家Network設立 cloudflare tunnel 及 Home Server
設立 cloudflare tunnel 目的就係唔想在自己的 home router 去 expose port forwarding,亦唔使設定 dynamic DNS
(5) 回到 cloudflare.com 的Browser頁面左邊的菜單選擇 Zero Trust 及在 Access 內選擇 Tunnels 及 Complete Setup及 設立 Team Name (例如 hkhome)
選擇 Free Plan (只可少於50 users) 及 Process Payment, 雖然選擇 Free Plan 但仍然要輸入 信用卡信息 或 PayPal 都可以
再在 Access 內選擇 Tunnels
Click Create a Tunnel 及輸入自定 Tunnel名稱 例如 hkhometunnel 及 Save tunnel
Choose Your environment 時 選擇 Docker,當然你可以選擇其他 environments,但 Docker 就最容易設立,亦是本帖的示範。
選擇 Docker 後就 copy下面的 code 及 token 以便在自己 Home Server 的 Docker Application 內使用
(6) 在你的 Home Server 電腦安裝 Docker Host。
Linux,Windows,Mac 都可以,例如安裝 Docker Desktop for Linux(x86_64), Windows(x86_64) 或 Mac(Intel/Apple Silicon) 就最方便及容易,Linux 裝 Docker CE 都可以,不過 Docker Desktop 就比較方便及會跟埋 docker compose 及有其他 multi-platform features 或工具可使用。
安裝好 Docker Host 後在 command prompt 內查看本機IP 地址 (例如是 10.0.1.78),測試及啟動 cloudflare tunnel in background 即是要加 -d option 如下:- docker run -d cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoiZmXXXXXXXXXXXXXXX
複製代碼 此Home Server電腦要持續運行 cloudflare tunnel 及以下的 server applications 以確保外界可以連接相關 web 服務。
(7) 跟著回到 cloudflare browser頁面 在剛才新建的 Tunnel 內的 Public Hostname 頁面 tab 內輸入自定義的subdomain name (例如 wordpress)及 domainname (例如 hkhome.tk)
輸入你的 Home Server的 IP 地址(從第6步得到) 及 輸入自定義的 port number (例如是 8000),如選擇 Service HTTPS 並在下面選擇 No TLS Verify。
(8) 在你的 Docker server machine 設立 webserver 例如 ngnix 又或例如設立 Wordpress server 方法如下。
參考 https://catalins.tech/how-to-run-wordpress-locally-on-macos-with-docker-compose/
創建 docker-compose.yaml 文件
使用第7步的自定義 port number (例如 8000)去設定 wordpress server
根據以上這篇 在m1 mac 的 docker 下運行就要用 docker desktop for m1 的 multi-platform features 行 x86_64 code 就要加上這句
platform: linux/x86_64
或者根據這篇 https://betterprogramming.pub/my ... m1-mac-e55cbe093d4c 講用 mariadb 10.3 或 biarms/mysql:5.7 for arm64- version: "3.9"
- services:
- db:
- image: mysql:5.7
- volumes:
- - db_data:/var/lib/mysql
- restart: always
- environment:
- MYSQL_ROOT_PASSWORD: pass1
- MYSQL_DATABASE: wordpress_local
- MYSQL_USER: wordpress_db_user
- MYSQL_PASSWORD: pass2
- wordpress:
- depends_on:
- - db
- image: wordpress:latest
- volumes:
- - wordpress_data:/var/www/html
- ports:
- - "8000:80"
- restart: always
- environment:
- WORDPRESS_DB_HOST: db
- WORDPRESS_DB_USER: wordpress_db_user
- WORDPRESS_DB_PASSWORD: pass2
- WORDPRESS_DB_NAME: wordpress_local
- volumes:
- db_data: {}
- wordpress_data: {}
複製代碼 # 啟動 wordpress server
docker-compose up -d
(9) 在手機外網測試你設定好的的 Web Server 例如輸入
https://wordpress.hkhome.tk
(10) 如要增加其他 subdomain 及 webserver / web service只要選擇輸入不同的 subdomain, Server IP 地址或 port number 及只要重覆 第 (7) 至 (9) 步去設定及測試便可。
預告下一篇講 增加 subdomain, nginx fast php server 及 VS Code Server。 |