文章目錄
- 前言
- 1. 環境安裝
- 2. 安裝cpolar內網穿透
- 3. 內網穿透
- 4. 固定http地址
- 5. 配置二級子域名
- 6. 創建一個測試頁面
正文開始前給大家推薦個網站,前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站。
前言
寶塔面板作為簡單好用的服務器運維管理面板,它支持Linux/Windows系統,我們可用它來一鍵配置LAMP/LNMP環境、網站、數據庫、FTP等,通過Web端輕松管理服務器。
以下教程,我們將演示使用寶塔面板快速簡單搭建本地web網站,并做內網穿透,實現不在同個局域網下的用戶也可以訪問到本地web站點,無需公網IP,也不用設置路由器。
1. 環境安裝
安裝apache服務器,在寶塔面板中我們點擊網站,然后會提示安裝apache服務器。
選擇極速安裝
然后等待安裝完成即可,安裝完成在左邊消息列表會提示
2. 安裝cpolar內網穿透
https://www.cpolar.com/
- 打開寶塔終端命令窗口,使用cpolar一件安裝腳本:
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
- token認證
登錄cpolar官網,點擊左側的驗證
,查看自己的認證token,之后將token貼在命令行里
cpolar authtoken xxxxxxx
- 向系統添加服務
sudo systemctl enable cpolar
- 啟動cpolar服務
sudo systemctl start cpolar
- 開放9200端口
在寶塔面板中選擇安全.然后開放9200端口
- 登錄cpolar web UI 管理界面
然后局域網ip訪問9200端口即可出現cpolar管理界面,輸入cpolar郵箱賬號進行登陸
3. 內網穿透
登錄cpolar web UI管理界面后,我們創建一個http隧道,指向80端口,因為apache服務默認是80端口
- 隧道名稱:可自定義,注意不要重復
- 協議:http
- 本地地址:80
- 端口類型:隨機域名
- 地區:China vip
點擊創建
創建成功后我們打開在線隧道列表復制創建的公網地址
然后我們打開寶塔面板,點擊網站,選擇添加站點,把復制的公網地址粘貼到域名的參數框,然后點擊提交
這個時候我們可以看到站點創建成功
然后我們再使用復制的公網地址,打開瀏覽器訪問,出現歡迎頁表示成功
4. 固定http地址
由于剛剛創建隧道使用的是隨機臨時地址,該地址會在24小時內發生變化,為了長期遠程訪問,我們接下來將這個公網地址配置為固定的。
需升級至基礎套餐或以上才支持配置二級子域名
登錄cpolar官網后臺,點擊左側儀表盤的預留
,找到保留二級子域名
,為http隧道保留一個二級子域名。
- 地區:選擇服務器地區
- 名稱:填寫您想要保留的二級子域名(可自定義)
- 描述:即備注,可自定義填寫
本例保留一個名稱為mywebsitegame
的二級子域名。子域名保留成功后,我們將子域名復制下來,接下來需要將其配置到隧道中去。
5. 配置二級子域名
登錄cpolar web ui管理界面。點擊左側儀表盤的隧道管理
——隧道列表
,找到需要配置二級子域名的隧道(本例中為apache website隧道),點擊右側的編輯
修改隧道信息,將二級子域名配置到隧道中:
- 域名類型:改為選擇
二級子域名
- Sub Domain:填寫我們剛剛所保留的二級子域名(本例為
mywebsitegame
)
修改完成后,點擊更新
隧道更新成功后,點擊左側儀表盤的狀態
——在線隧道列表
,可以看到隧道的公網地址,已經更新為二級子域名了,將公網地址復制下來。
然后我們打開寶塔面板,找到站點,點擊設置
添加一個我們固定的公網地址域名
然后把之前創建的隨機地址刪除
然后我們打開瀏覽器,使用固定的公網地址進行訪問,以上我們就配置好了站點遠程訪問
6. 創建一個測試頁面
點擊站點根目錄路徑,直接點擊
新建一個名字為game.html頁面
然后雙擊文件編輯,把下面代碼復制進去(貪吃蛇小游戲),然后Ctrl+S保存
<!DOCTYPE html>
<html>
<head><title>貪吃蛇</title><meta charset="UTF-8"><meta name="keywords" content="貪吃蛇"><meta name="Description" content="這是一個初學者用來學習的小游戲"><style type="text/css">*{margin:0;}.map{margin:100px auto;height:600px;width:900px;background:#00D0FF;border:10px solid #AFAEB2;border-radius:8px;}</style>
</head><body>
<div class="map">
<canvas id="canvas" height="600" width="900"></canvas>
</div><script type="text/javascript">//獲取繪制工具/*var canvas = document.getElementById("canvas");var ctx = canvas.getContext("2d");//獲取上下文ctx.moveTo(0,0);ctx.lineTo(450,450);*/var c=document.getElementById("canvas");var ctx=c.getContext("2d");/*ctx.beginPath();ctx.moveTo(0,0);ctx.lineTo(450,450);ctx.stroke();*/var snake =[];//定義一條蛇,畫蛇的身體var snakeCount = 6;//初始化蛇的長度var foodx =0;var foody =0;var togo =0;function drawtable()//畫地圖的函數{for(var i=0;i<60;i++)//畫豎線{ctx.strokeStyle="black";ctx.beginPath();ctx.moveTo(15*i,0);ctx.lineTo(15*i,600);ctx.closePath();ctx.stroke();}for(var j=0;j<40;j++)//畫橫線{ctx.strokeStyle="black";ctx.beginPath();ctx.moveTo(0,15*j);ctx.lineTo(900,15*j);ctx.closePath();ctx.stroke();}for(var k=0;k<snakeCount;k++)//畫蛇的身體{ctx.fillStyle="#000";if (k==snakeCount-1){ctx.fillStyle="red";//蛇頭的顏色與身體區分開}ctx.fillRect(snake[k].x,snake[k].y,15,15);//前兩個數是矩形的起始坐標,后兩個數是矩形的長寬。}//繪制食物 ctx.fillStyle ="black";ctx.fillRect(foodx,foody,15,15);ctx.fill();}function start()//定義蛇的坐標{//var snake =[];//定義一條蛇,畫蛇的身體//var snakeCount = 6;//初始化蛇的長度for(var k=0;k<snakeCount;k++){snake[k]={x:k*15,y:0};}drawtable();addfood();//在start中調用添加食物函數}function addfood(){foodx = Math.floor(Math.random()*60)*15; //隨機產生一個0-1之間的數foody = Math.floor(Math.random()*40)*15;for (var k=0;k<snake;k++){if (foodx==snake[k].x&&foody==sanke[k].y)//防止產生的隨機食物落在蛇身上{ addfood();}}} function move(){switch (togo){case 1: snake.push({x:snake[snakeCount-1].x-15,y:snake[snakeCount-1].y}); break;//向左走case 2: snake.push({x:snake[snakeCount-1].x,y:snake[snakeCount-1].y-15}); break;case 3: snake.push({x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y}); break;case 4: snake.push({x:snake[snakeCount-1].x,y:snake[snakeCount-1].y+15}); break;case 5: snake.push({x:snake[snakeCount-1].x-15,y:snake[snakeCount-1].y-15}); break;case 6: snake.push({x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y+15}); break;default: snake.push({x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y});}snake.shift();//刪除數組第一個元素ctx.clearRect(0,0,900,600);//清除畫布重新繪制isEat();isDead();drawtable();} function keydown(e){switch(e.keyCode){case 37: togo=1; break;case 38: togo=2; break;case 39: togo=3; break;case 40: togo=4; break;case 65: togo=5; break;case 68: togo=6; break;}}function isEat()//吃到食物后長度加1{if(snake[snakeCount-1].x==foodx&&snake[snakeCount-1].y==foody){addfood();snakeCount++;snake.unshift({x:-15,y:-15});}}//死亡函數function isDead(){if (snake[snakeCount-1].x>885||snake[snakeCount-1].y>585||snake[snakeCount-1].x<0||snake[snakeCount-1].y<0){window.location.reload();}}document.onkeydown=function(e)
{keydown(e);}
window.onload = function()//調用函數
{ start();setInterval(move,150);drawtable();}
</script>
</body>
</html>
然后我們瀏覽器使用公網地址加這個html文件訪問,即可看到我們部署的小游戲。