最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

使用寶塔面板快速搭建網(wǎng)站,并內(nèi)網(wǎng)穿透實(shí)現(xiàn)公網(wǎng)遠(yuǎn)程訪問

2023-08-04 11:36 作者:cpolar  | 我要投稿

寶塔面板簡單幾步搭建本地web站點(diǎn),并做內(nèi)網(wǎng)穿透,實(shí)現(xiàn)公網(wǎng)用戶也可以正常遠(yuǎn)程訪問,無需公網(wǎng)IP,無需設(shè)置路由器。

1. 環(huán)境安裝

安裝apache服務(wù)器,在寶塔面板中我們點(diǎn)擊網(wǎng)站,然后會(huì)提示安裝apache服務(wù)器。

選擇極速安裝


然后等待安裝完成即可,安裝完成在左邊消息列表會(huì)提示


2. 安裝cpolar內(nèi)網(wǎng)穿透

打開寶塔終端命令窗口,使用cpolar一件安裝腳本:

curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

  • token認(rèn)證

登錄cpolar官網(wǎng)www.cpolar.com,點(diǎn)擊左側(cè)的驗(yàn)證,查看自己的認(rèn)證token,之后將token貼在命令行里

cpolar authtoken xxxxxxx

  • 向系統(tǒng)添加服務(wù)

sudo systemctl enable cpolar

  • 啟動(dòng)cpolar服務(wù)

sudo systemctl start cpolar

  • 開放9200端口

在寶塔面板中選擇安全.然后開放9200端口

  • 登錄cpolar web UI 管理界面

然后局域網(wǎng)ip訪問9200端口即可出現(xiàn)cpolar管理界面,輸入cpolar郵箱賬號(hào)進(jìn)行登陸

3. 內(nèi)網(wǎng)穿透

登錄cpolar web UI管理界面后,我們創(chuàng)建一個(gè)http隧道,指向80端口,因?yàn)閍pache服務(wù)默認(rèn)是80端口

  • 隧道名稱:可自定義,注意不要重復(fù)

  • 協(xié)議:http

  • 本地地址:80

  • 端口類型:隨機(jī)域名

  • 地區(qū):China vip

點(diǎn)擊創(chuàng)建

創(chuàng)建成功后我們打開在線隧道列表復(fù)制創(chuàng)建的公網(wǎng)地址


然后我們打開寶塔面板,點(diǎn)擊網(wǎng)站,選擇添加站點(diǎn),把復(fù)制的公網(wǎng)地址粘貼到域名的參數(shù)框,然后點(diǎn)擊提交

這個(gè)時(shí)候我們可以看到站點(diǎn)創(chuàng)建成功

然后我們?cè)偈褂脧?fù)制的公網(wǎng)地址,打開瀏覽器訪問,出現(xiàn)歡迎頁表示成功

4.固定http地址

由于剛剛創(chuàng)建隧道使用的是隨機(jī)臨時(shí)地址,該地址會(huì)在24小時(shí)內(nèi)發(fā)生變化,為了長期遠(yuǎn)程訪問,我們接下來將這個(gè)公網(wǎng)地址配置為固定的。

需升級(jí)至基礎(chǔ)套餐或以上才支持配置二級(jí)子域名

登錄cpolar官網(wǎng)后臺(tái),點(diǎn)擊左側(cè)儀表盤的預(yù)留,找到保留二級(jí)子域名,為http隧道保留一個(gè)二級(jí)子域名。

  • 地區(qū):選擇服務(wù)器地區(qū)

  • 名稱:填寫您想要保留的二級(jí)子域名(可自定義)

  • 描述:即備注,可自定義填寫

本例保留一個(gè)名稱為mywebsitegame的二級(jí)子域名。子域名保留成功后,我們將子域名復(fù)制下來,接下來需要將其配置到隧道中去。

5. 配置二級(jí)子域名

登錄cpolar web ui管理界面。點(diǎn)擊左側(cè)儀表盤的隧道管理——隧道列表,找到需要配置二級(jí)子域名的隧道(本例中為apache website隧道),點(diǎn)擊右側(cè)的編輯

修改隧道信息,將二級(jí)子域名配置到隧道中:

  • 域名類型:改為選擇二級(jí)子域名

  • Sub Domain:填寫我們剛剛所保留的二級(jí)子域名(本例為mywebsitegame

修改完成后,點(diǎn)擊更新

隧道更新成功后,點(diǎn)擊左側(cè)儀表盤的狀態(tài)——在線隧道列表,可以看到隧道的公網(wǎng)地址,已經(jīng)更新為二級(jí)子域名了,將公網(wǎng)地址復(fù)制下來。

然后我們打開寶塔面板,找到站點(diǎn),點(diǎn)擊設(shè)置

添加一個(gè)我們固定的公網(wǎng)地址域名

然后把之前創(chuàng)建的隨機(jī)地址刪除

然后我們打開瀏覽器,使用固定的公網(wǎng)地址進(jìn)行訪問,以上我們就配置好了站點(diǎn)遠(yuǎn)程訪問


6.創(chuàng)建一個(gè)測試頁面

點(diǎn)擊站點(diǎn)根目錄路徑,直接點(diǎn)擊

新建一個(gè)名字為game.html頁面

然后雙擊文件編輯,把下面代碼復(fù)制進(jìn)去(貪吃蛇小游戲),然后Ctrl+S保存

<!DOCTYPE html>

<html>

<head>

? ? <title>貪吃蛇</title>

? ? <meta charset="UTF-8">

? ? <meta name="keywords" content="貪吃蛇">

? ? <meta name="Description" content="這是一個(gè)初學(xué)者用來學(xué)習(xí)的小游戲">

? ? <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()//畫地圖的函數(shù)

? ? {



? ? ? ? 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";//蛇頭的顏色與身體區(qū)分開

? ? ? ? ? ? }

? ? ? ? ? ? ctx.fillRect(snake[k].x,snake[k].y,15,15);//前兩個(gè)數(shù)是矩形的起始坐標(biāo),后兩個(gè)數(shù)是矩形的長寬。


? ? ? ? ? ? }

? ? ? ? ? ? //繪制食物??

? ? ? ? ? ? ctx.fillStyle ="black";

? ? ? ? ?ctx.fillRect(foodx,foody,15,15);

? ? ? ? ?ctx.fill();


? ? }



? ? function start()//定義蛇的坐標(biāo)

? ? {

? ? ? ? //var snake =[];//定義一條蛇,畫蛇的身體

? ? ? ? //var snakeCount = 6;//初始化蛇的長度


? ? ? ? for(var k=0;k<snakeCount;k++)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? snake[k]={x:k*15,y:0};


? ? ? ? ? ? }


? ? ? ? ? drawtable();

? ? ? ? ? addfood();//在start中調(diào)用添加食物函數(shù)


? ? }


? ? function addfood()

? ? {

? ? foodx = Math.floor(Math.random()*60)*15; //隨機(jī)產(chǎn)生一個(gè)0-1之間的數(shù)

? ? foody = Math.floor(Math.random()*40)*15;


? ? ? ? for (var k=0;k<snake;k++)

? ? ? ? {

? ? ? ? ? ? if (foodx==snake[k].x&&foody==sanke[k].y)//防止產(chǎn)生的隨機(jī)食物落在蛇身上

? ? ? ? ? ? {? ?

? ? ? ? ? ? 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();//刪除數(shù)組第一個(gè)元素

? ? 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});

? ?}


? ?}

? ?//死亡函數(shù)

? ?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()//調(diào)用函數(shù)

{?

? ? start();

? ? setInterval(move,150);

? ? drawtable();




}

</script>

</body>

</html>

然后我們?yōu)g覽器使用公網(wǎng)地址加這個(gè)html文件訪問,即可看到我們部署的小游戲。


使用寶塔面板快速搭建網(wǎng)站,并內(nèi)網(wǎng)穿透實(shí)現(xiàn)公網(wǎng)遠(yuǎn)程訪問的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
思南县| 清徐县| 万宁市| 湟中县| 禹州市| 怀远县| 浑源县| 揭西县| 顺平县| 台中市| 兴国县| 华阴市| 漳浦县| 剑河县| 兴安盟| 嘉鱼县| 通渭县| 嵊泗县| 沂南县| 绥阳县| 荃湾区| 周至县| 竹北市| 丹江口市| 淅川县| 池州市| 京山县| 牡丹江市| 枞阳县| 东乌| 谷城县| 邢台市| 澄迈县| 邢台县| 晋中市| 望城县| 黔西| 濮阳县| 福泉市| 镇雄县| 海城市|