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

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

在Ubuntu搭建Web站點,并將其發(fā)布到公網(wǎng)訪問

2023-09-21 10:42 作者:cpolar  | 我要投稿

前言

網(wǎng):我們通常說的是互聯(lián)網(wǎng);站:可以理解成在互聯(lián)網(wǎng)上的一個房子。把互聯(lián)網(wǎng)看做一個城市,城市里面的每一個房子就是一個站點,房子里面放著你的資源,那如果有人想要訪問你房子里面的東西怎么辦?

在現(xiàn)實生活中,去別人家首先要知道別人的地址,某某區(qū)某某街道,幾號,在互聯(lián)網(wǎng)中也有地址的概念,就是ip。通過ip我們就能找到在互聯(lián)網(wǎng)上面的站點,端口可以看做是這個房子的入口,不同的入口所看到的東西也就不一樣,如從大門(80端口)進是客廳,從窗戶(8080端口)進是書房。

接下來我們將通過簡單幾步來在ubuntu搭建一個web站點 html小游戲,并使用cpolar內(nèi)網(wǎng)穿透將其發(fā)布到公網(wǎng)上,使得公網(wǎng)用戶也可以正常訪問到本地web站點的小游戲。

1. 本地環(huán)境服務(wù)搭建

apach2是一個服務(wù),也可以看做一個容器,也就是上面說的房子,運行在ubuntu里,這個服務(wù)可以幫助我們把我們自己的網(wǎng)站頁面通過相應(yīng)的端口讓除本機以外的其他電腦訪問。

下載apach2

sudo apt install apache2 php -y

下載好后啟動apache2

sudo service apache2 restart

然后打開Ubuntu 瀏覽器,輸入:http://localhost?即可看到我們apache 默認的頁面,此時說明本地站點已經(jīng)搭建好了。

進入Apache默認服務(wù)器主目錄路徑,這個目錄放的是想要讓別人看到的資源,如一張圖片,一個html頁面等。

cd /var/www/html

進入后刪掉index.html這個文件,由于apache默認頁面并不是我們自己想要的頁面,我們想要換成自己喜歡的頁面,所以需要刪掉.執(zhí)行以下命令:

sudo rm -rf index.html

為了達到測試效果,我們設(shè)置一個html頁面小游戲,創(chuàng)建名稱為game.html的頁面

sudo vim game.html

按i鍵 進入編輯模式,復(fù)制以下html代碼進去(復(fù)制全部)

<!DOCTYPE html>

<html>

? ? <head><h4>Take it Easy!Please playing Game</h4></head>

? ? <body>

? ? ? ? <div></div>

? ? ? ? <!-- 4個board -->

? ? ? ? <div id="board1" style="position: absolute; width:80px; height:10px; left:420px;?

? ? ? ? top:555px; background-color: cadetblue;"></div>

? ? ? ? <div id="board2" style="position: absolute; width:80px; height:10px; left:520px;?

? ? ? ? top:555px; background-color: cadetblue;"></div>

? ? ? ? <div id="board3" style="position: absolute; width:80px; height:10px; left:620px;?

? ? ? ? top:555px; background-color: cadetblue;"></div>

? ? ? ? <div id="board4" style="position: absolute; width:80px; height:10px; left:720px;?

? ? ? ? top:555px; background-color: cadetblue;"></div>

? ? ? ? <!-- 小球 -->

? ? ? ? <div id="ball" class="circle" style="width:20px;?

? ? ? ? height:20px; background-color:crimson; border-radius: 50%; position:absolute;?

? ? ? ? left:600px; top:100px"></div>

? ? ? ? <!-- 框 -->

? ? ? ? <div id="box" style="border: 5px solid #555555; width:400px; height:550px; display=hide"></div>

? ? ? ? <!-- 分數(shù) 過的board越多,分數(shù)越高 -->

? ? ? ? <div id="score" style="width:200px; height:10px; position:absolute; left:900px;?

? ? ? ? ? ? font-family:'隸書'; font-size: 30px;">score: 0</div>

? ? ? ? <!-- 游戲結(jié)束 -->

? ? ? ? <div id="gg" style="width:200px; height:10px; position:absolute; left:550px; top:200px;

? ? ? ? font-family:'隸書'; font-size: 30px; display: none;">Game Over</div>

? ? ? ? <script>

? ? ? ? ? ? // 設(shè)置box的樣式

? ? ? ? ? ? var box = document.getElementById("box");

? ? ? ? ? ? box.style.position = "absolute";

? ? ? ? ? ? box.style.left = "400px";

? ? ? ? ? ? // 設(shè)置board的樣式

? ? ? ? ? ? var board1 = document.getElementById("board1");

? ? ? ? ? ? var board2 = document.getElementById("board2");

? ? ? ? ? ? var board3 = document.getElementById("board3");

? ? ? ? ? ? var board4 = document.getElementById("board4");

? ? ? ? ? ? // 聲音

? ? ? ? ? ? var shengyin = new Audio();

? ? ? ? ? ? shengyin.src = "聲音2.mp3";

? ? ? ? ? ? shengyinFlag = 0; // 用來表示小球在第幾塊board上

? ? ? ? ? ? // 鍵盤事件函數(shù)

? ? ? ? ? ? var ball = document.getElementById("ball");

? ? ? ? ? ? document.onkeydown = f;

? ? ? ? ? ? function f(e){

? ? ? ? ? ? ? ? var e = e || window.event;

? ? ? ? ? ? ? ? switch(e.keyCode){

? ? ? ? ? ? ? ? ? ? case 37:

? ? ? ? ? ? ? ? ? ? ? ? // 按下左鍵,小球左移,但不要超過左邊框

? ? ? ? ? ? ? ? ? ? ? ? if(ball.offsetLeft>=box.offsetLeft + 10)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ball.style.left = ball.offsetLeft - 8 + "px";

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? case 39:

? ? ? ? ? ? ? ? ? ? ? ? // 按下右鍵,小球右移,但不要超過由邊框

? ? ? ? ? ? ? ? ? ? ? ? if(ball.offsetLeft<=box.offsetLeft+box.offsetWidth-ball.offsetWidth-10)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ball.style.left = ball.offsetLeft + 8 + "px";

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? case 32:


? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? // 定義一個分數(shù)變量

? ? ? ? ? ? var fenshu = 0;

? ? ? ? ? ? // 定義一個函數(shù),移動給定的一個board

? ? ? ? ? ? function moveBoard(board)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? var t1 = board.offsetTop;

? ? ? ? ? ? ? ? if(t1<=0)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? // 如果board移到最上面了,就隨機換個水平位置,再移到最下面

? ? ? ? ? ? ? ? ? ? t2 = Math.floor(Math.random() * (720- 420) + 420);

? ? ? ? ? ? ? ? ? ? board.style.left = t2 + "px";

? ? ? ? ? ? ? ? ? ? board.style.top = "555px";

? ? ? ? ? ? ? ? ? ? fenshu += 1; //分數(shù)增加1

? ? ? ? ? ? ? ? ? ? document.getElementById("score").innerHTML = "score " + fenshu;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? //?

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? ? ? board.style.top = board.offsetTop - 1 + "px";

? ? ? ? ? ? }

? ? ? ? ? ? // 定義小球的速度變量

? ? ? ? ? ? var startSpeed = 1;

? ? ? ? ? ? var ballSpeed =startSpeed;

? ? ? ? ? ? // step函數(shù)是游戲界面的單位變化函數(shù)

? ? ? ? ? ? function step()

? ? ? ? ? ? {

? ? ? ? ? ? ? ? // board直接上下隔得太近,就逐個移動,否則,同時移動

? ? ? ? ? ? ? ? var t1 = Math.abs(board1.offsetTop - board2.offsetTop);

? ? ? ? ? ? ? ? var t2 = Math.abs(board2.offsetTop - board3.offsetTop);

? ? ? ? ? ? ? ? var t3 = Math.abs(board3.offsetTop - board4.offsetTop);

? ? ? ? ? ? ? ? // 定義一個board之間的間隔距離

? ? ? ? ? ? ? ? var t4 = 140;

? ? ? ? ? ? ? ? if(t1<t4)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? moveBoard(board1);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else if(t2<t4)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? moveBoard(board1);

? ? ? ? ? ? ? ? ? ? moveBoard(board2);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else if(t3<t4)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? moveBoard(board1);

? ? ? ? ? ? ? ? ? ? moveBoard(board2);

? ? ? ? ? ? ? ? ? ? moveBoard(board3);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? moveBoard(board1);

? ? ? ? ? ? ? ? ? ? moveBoard(board2);

? ? ? ? ? ? ? ? ? ? moveBoard(board3);

? ? ? ? ? ? ? ? ? ? moveBoard(board4);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? // 定義小球的垂直移動規(guī)則,1、向下勻加速運動,2、如果碰到board就被board持續(xù)抬上去,

? ? ? ? ? ? ? ? // 直到按左右鍵離開了該board


? ? ? ? ? ? ? ? // 如果小球的縱坐標(biāo)等于某個board的縱坐標(biāo),就被抬起

? ? ? ? ? ? ? ? var t5 = Math.abs(ball.offsetTop - board1.offsetTop);

? ? ? ? ? ? ? ? var t6 = Math.abs(ball.offsetTop - board2.offsetTop);

? ? ? ? ? ? ? ? var t7 = Math.abs(ball.offsetTop - board3.offsetTop);

? ? ? ? ? ? ? ? var t8 = Math.abs(ball.offsetTop - board4.offsetTop);

? ? ? ? ? ? ? ? if(t5<=ball.offsetHeight && t5>0 && ball.offsetLeft>=board1.offsetLeft-ball.offsetWidth && ball.offsetLeft<=board1.offsetLeft+board1.offsetWidth)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ball.style.top = board1.offsetTop - ball.offsetHeight + "px";

? ? ? ? ? ? ? ? ? ? ballSpeed = startSpeed;

? ? ? ? ? ? ? ? ? ? if(shengyinFlag != 1)

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? shengyin.play();

? ? ? ? ? ? ? ? ? ? ? ? shengyinFlag = 1;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else if(t6<=ball.offsetHeight && t6>0 && ball.offsetLeft>=board2.offsetLeft-ball.offsetWidth && ball.offsetLeft<=board2.offsetLeft+board2.offsetWidth)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ball.style.top = board2.offsetTop - ball.offsetHeight + "px";

? ? ? ? ? ? ? ? ? ? ballSpeed = startSpeed;

? ? ? ? ? ? ? ? ? ? if(shengyinFlag != 2)

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? shengyin.play();

? ? ? ? ? ? ? ? ? ? ? ? shengyinFlag = 2;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else if(t7<=ball.offsetHeight && t7>0 && ball.offsetLeft>=board3.offsetLeft-ball.offsetWidth && ball.offsetLeft<=board3.offsetLeft+board3.offsetWidth)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ball.style.top = board3.offsetTop - ball.offsetHeight + "px";

? ? ? ? ? ? ? ? ? ? ballSpeed = startSpeed;

? ? ? ? ? ? ? ? ? ? if(shengyinFlag != 3)

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? shengyin.play();

? ? ? ? ? ? ? ? ? ? ? ? shengyinFlag = 3;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else if(t8<=ball.offsetHeight && t8>0 && ball.offsetLeft>=board4.offsetLeft-ball.offsetWidth && ball.offsetLeft<=board4.offsetLeft+board4.offsetWidth)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ball.style.top = board4.offsetTop - ball.offsetHeight + "px";

? ? ? ? ? ? ? ? ? ? ballSpeed = startSpeed;

? ? ? ? ? ? ? ? ? ? if(shengyinFlag != 4)

? ? ? ? ? ? ? ? ? ? {? ?

? ? ? ? ? ? ? ? ? ? ? ? shengyin.play();

? ? ? ? ? ? ? ? ? ? ? ? shengyinFlag = 4;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ballSpeed = ballSpeed + 0.01; // 數(shù)字相當(dāng)于加速度

? ? ? ? ? ? ? ? ? ? ball.style.top = ball.offsetTop + ballSpeed + "px";

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? // ballSpeed = ballSpeed + 0.01; // 數(shù)字相當(dāng)于加速度

? ? ? ? ? ? ? ? // ball.style.top = ball.offsetTop + ballSpeed + "px";


? ? ? ? ? ? ? ? // 如果小球跑出來box,就結(jié)束游戲

? ? ? ? ? ? ? ? if(ball.offsetTop==0 || ball.offsetTop>=box.offsetTop+box.offsetHeight)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? clearInterval(gameover);

? ? ? ? ? ? ? ? ? ? ball.style.display = 'none';

? ? ? ? ? ? ? ? ? ? board1.style.display = 'none';

? ? ? ? ? ? ? ? ? ? board2.style.display = 'none';

? ? ? ? ? ? ? ? ? ? board3.style.display = 'none';

? ? ? ? ? ? ? ? ? ? board4.style.display = 'none';

? ? ? ? ? ? ? ? ? ? var gg = document.getElementById("gg"); //顯示游戲結(jié)束

? ? ? ? ? ? ? ? ? ? gg.style.display = 'block';

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }


? ? ? ? ? ? var gameover = setInterval("step();", 8);

? ? ? ? </script>

? ? </body>

</html>

復(fù)制完后按Esc鍵退出編輯,接著輸入冒號:wq保存退出即可


2. 局域網(wǎng)測試訪問

接著瀏覽器輸入http://localhost/game.html,即可看到html頁面的小游戲站點,由于部署的是靜態(tài)站點,不需要重啟服務(wù)。

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

由于這個站點目前只能在本地被訪問到,為了使所有人都可以訪問,我們需要將這個本地基礎(chǔ)站點發(fā)布到公網(wǎng)。這里我們可以通過cpolar內(nèi)網(wǎng)穿透工具來實現(xiàn),它支持 http/https/tcp協(xié)議,無需公網(wǎng)IP ,也不用設(shè)置路由器,可以很容易將本地站點發(fā)布到公網(wǎng)供所有人訪問。

3.1 ubuntu本地安裝cpolar

如何在ubuntu上安裝cpolar內(nèi)網(wǎng)穿透,請參考這篇文章教程

  • Ubuntu用戶安裝Cpolar內(nèi)網(wǎng)穿透

3.2 創(chuàng)建隧道

cpolar安裝成功之后,在瀏覽器上訪問本地9200端口,登錄cpolar web UI管理界面。

點擊左側(cè)儀表盤的隧道管理——創(chuàng)建隧道:

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

  • 協(xié)議:http

  • 本地地址:80

  • 端口類型:隨機域名

  • 地區(qū):China vip

點擊創(chuàng)建

隧道創(chuàng)建成功后,點擊左側(cè)的狀態(tài)——在線隧道列表,可以看到剛剛創(chuàng)建的隧道已經(jīng)有生成了相應(yīng)的公網(wǎng)地址,將其復(fù)制下來,接下來測試訪問一下。

3.3 測試公網(wǎng)訪問

打開瀏覽器訪問剛剛所復(fù)制的公網(wǎng)地址,注意,后面要加上路徑/game.html,出現(xiàn)游戲界面即成功。

游戲控制使用:鍵盤上下左右鍵

4. 配置固定二級子域名

由于以上所創(chuàng)建的隧道選擇的是隨機域名,所生成的公網(wǎng)地址會在24小時內(nèi)隨機變化,對于需要長期訪問的用戶來講較為不方便。不過我們可以為其配置一個固定的二級子域名來進行訪問,改地址不會隨機變化。

注意:配置固定二級子域名功能需要升級至基礎(chǔ)版套餐或以上才支持。

4.1 保留一個二級子域名

登錄cpolar官網(wǎng)后臺,點擊左側(cè)的預(yù)留,找到保留二級子域名:

  • 地區(qū):選擇China VIP

  • 二級域名:可自定義填寫

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

點擊保留

提示子域名保留成功,復(fù)制所保留的二級子域名

4.2 配置二級子域名

訪問本地9200端口登錄cpolar web UI管理界面,點擊左側(cè)儀表盤的隧道管理——隧道列表,找到所要配置的隧道,點擊右側(cè)的編輯

修改隧道信息,將保留成功的二級子域名配置到隧道中

  • 域名類型:選擇二級子域名

  • Sub Domain:填寫保留成功的二級子域名,本例為test01

點擊更新

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

4.3 測試訪問公網(wǎng)固定二級子域名

我們使用任意瀏覽器,輸入剛剛配置成功的公網(wǎng)固定二級子域名+/game.html就可看到我們創(chuàng)建的站點小游戲了,且該地址不會再隨機變化了。



在Ubuntu搭建Web站點,并將其發(fā)布到公網(wǎng)訪問的評論 (共 條)

分享到微博請遵守國家法律
尉氏县| 大竹县| 杂多县| 融水| 衡南县| 刚察县| 芦山县| 铁岭县| 合肥市| 宿迁市| 香港 | 黔江区| 光山县| 偃师市| 临江市| 托克托县| 唐海县| 康马县| 固安县| 广河县| 青田县| 吉木萨尔县| 乐陵市| 鄢陵县| 乐昌市| 会昌县| 吉水县| 景洪市| 金塔县| 吴忠市| 阆中市| 花莲县| 双江| 柯坪县| 疏附县| 礼泉县| 新乐市| 全南县| 资源县| 南涧| 安平县|