ToB企服应用市场:ToB评测及商务社交产业平台

标题: 使用宝塔在Linux面板搭建网站,并实现公网远程访问 [打印本页]

作者: 杀鸡焉用牛刀    时间: 2024-6-11 08:15
标题: 使用宝塔在Linux面板搭建网站,并实现公网远程访问
前言

宝塔面板作为简单好用的服务器运维管理面板,它支持Linux/Windows体系,我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等,通过Web端轻松管理服务器。
以下教程,我们将演示使用宝塔面板快速简单搭建本地web网站,并做内网穿透,实现不在同个局域网下的用户也可以访问到本地web站点,无需公网IP,也不用设置路由器。
1. 环境安装

安装apache服务器,在宝塔面板中我们点击网站,然后会提示安装apache服务器。

选择极速安装

然后等待安装完成即可,安装完成在左边消息列表会提示

2. 安装cpolar内网穿透

   https://www.cpolar.com/
  
  1. curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
复制代码


登录cpolar官网,点击左侧的验证,查看自己的认证token,之后将token贴在下令行里
  1. cpolar authtoken xxxxxxx
复制代码


  1. sudo systemctl enable cpolar
复制代码

  1. sudo systemctl start cpolar
复制代码

在宝塔面板中选择安全.然后开放9200端口


然后局域网ip访问9200端口即可出现cpolar管理界面,输入cpolar邮箱账号进行登岸

3. 内网穿透

登录cpolar web UI管理界面后,我们创建一个http隧道,指向80端口,由于apache服务默认是80端口

点击创建

创建乐成后我们打开在线隧道列表复制创建的公网地点

然后我们打开宝塔面板,点击网站,选择添加站点,把复制的公网地点粘贴到域名的参数框,然后点击提交

这个时候我们可以看到站点创建乐成

然后我们再使用复制的公网地点,打开欣赏器访问,出现欢迎页表示乐成

4. 固定http地点

由于刚刚创建隧道使用的是随机临时地点,该地点会在24小时内发生厘革,为了长期远程访问,我们接下来将这个公网地点配置为固定的。
   需升级至基础套餐或以上才支持配置二级子域名
  登录cpolar官网配景,点击左侧仪表盘的预留,找到保留二级子域名,为http隧道保留一个二级子域名。


本例保留一个名称为mywebsitegame的二级子域名。子域名保留乐成后,我们将子域名复制下来,接下来需要将其配置到隧道中去。

5. 配置二级子域名

登录cpolar web ui管理界面。点击左侧仪表盘的隧道管理——隧道列表,找到需要配置二级子域名的隧道(本例中为apache website隧道),点击右侧的编辑

修改隧道信息,将二级子域名配置到隧道中:

修改完成后,点击更新

隧道更新乐成后,点击左侧仪表盘的状态——在线隧道列表,可以看到隧道的公网地点,已经更新为二级子域名了,将公网地点复制下来。

然后我们打开宝塔面板,找到站点,点击设置

添加一个我们固定的公网地点域名

然后把之前创建的随机地点删除

然后我们打开欣赏器,使用固定的公网地点进行访问,以上我们就配置好了站点远程访问

6. 创建一个测试页面

点击站点根目次路径,直接点击

新建一个名字为game.html页面

然后双击文件编辑,把下面代码复制进去(贪吃蛇小游戏),然后Ctrl+S保存
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.         <title>贪吃蛇</title>
  5.         <meta charset="UTF-8">
  6.         <meta name="keywords" content="贪吃蛇">
  7.         <meta name="Description" content="这是一个初学者用来学习的小游戏">
  8.         <style type="text/css">
  9.         *{margin:0;}
  10.         .map{margin:100px auto;
  11.                 height:600px;
  12.                 width:900px;
  13.                 background:#00D0FF;
  14.                 border:10px solid #AFAEB2;
  15.                 border-radius:8px;
  16.         }
  17.         </style>
  18. </head>
  19. <body>
  20. <div class="map">
  21. <canvas id="canvas" height="600" width="900">
  22.        
  23. </canvas>
  24. </div>
  25. <script type="text/javascript">
  26. //获取绘制工具
  27.         /*
  28.         var canvas = document.getElementById("canvas");
  29.         var ctx = canvas.getContext("2d");//获取上下文
  30.         ctx.moveTo(0,0);
  31.         ctx.lineTo(450,450);*/
  32.         var c=document.getElementById("canvas");
  33.     var ctx=c.getContext("2d");
  34.     /*ctx.beginPath();
  35.     ctx.moveTo(0,0);
  36.     ctx.lineTo(450,450);
  37.     ctx.stroke();
  38.     */
  39.     var snake =[];//定义一条蛇,画蛇的身体
  40.     var snakeCount = 6;//初始化蛇的长度
  41.         var foodx =0;
  42.         var foody =0;
  43.     var togo =0;
  44.     function drawtable()//画地图的函数
  45.     {
  46.             for(var i=0;i<60;i++)//画竖线
  47.             {
  48.                     ctx.strokeStyle="black";
  49.                     ctx.beginPath();
  50.                     ctx.moveTo(15*i,0);
  51.                     ctx.lineTo(15*i,600);
  52.                     ctx.closePath();
  53.                     ctx.stroke();
  54.             }
  55.         for(var j=0;j<40;j++)//画横线
  56.             {
  57.                     ctx.strokeStyle="black";
  58.                     ctx.beginPath();
  59.                     ctx.moveTo(0,15*j);
  60.                     ctx.lineTo(900,15*j);
  61.                     ctx.closePath();
  62.                     ctx.stroke();
  63.             }
  64.            
  65.             for(var k=0;k<snakeCount;k++)//画蛇的身体
  66.                         {
  67.                         ctx.fillStyle="#000";
  68.                         if (k==snakeCount-1)
  69.                         {
  70.                                 ctx.fillStyle="red";//蛇头的颜色与身体区分开
  71.                         }
  72.                         ctx.fillRect(snake[k].x,snake[k].y,15,15);//前两个数是矩形的起始坐标,后两个数是矩形的长宽。
  73.                        
  74.                         }
  75.                         //绘制食物       
  76.                     ctx.fillStyle ="black";
  77.              ctx.fillRect(foodx,foody,15,15);
  78.              ctx.fill();
  79.            
  80.     }
  81.    
  82.     function start()//定义蛇的坐标
  83.     {
  84.             //var snake =[];//定义一条蛇,画蛇的身体
  85.         //var snakeCount = 6;//初始化蛇的长度
  86.                
  87.                 for(var k=0;k<snakeCount;k++)
  88.                     {
  89.                             snake[k]={x:k*15,y:0};
  90.                            
  91.             }
  92.                        
  93.                   drawtable();
  94.           addfood();//在start中调用添加食物函数
  95.     }
  96.     function addfood()
  97.         {
  98.         foodx = Math.floor(Math.random()*60)*15; //随机产生一个0-1之间的数
  99.         foody = Math.floor(Math.random()*40)*15;
  100.                
  101.                 for (var k=0;k<snake;k++)
  102.                 {
  103.                         if (foodx==snake[k].x&&foody==sanke[k].y)//防止产生的随机食物落在蛇身上
  104.                         {       
  105.                         addfood();
  106.                         }
  107.                 }
  108.        
  109.        
  110.         }       
  111.                    
  112.    function move()
  113.    {
  114.         switch (togo)
  115.         {
  116.         case 1: snake.push({x:snake[snakeCount-1].x-15,y:snake[snakeCount-1].y}); break;//向左走
  117.         case 2: snake.push({x:snake[snakeCount-1].x,y:snake[snakeCount-1].y-15}); break;
  118.         case 3: snake.push({x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y}); break;
  119.         case 4: snake.push({x:snake[snakeCount-1].x,y:snake[snakeCount-1].y+15}); break;
  120.         case 5: snake.push({x:snake[snakeCount-1].x-15,y:snake[snakeCount-1].y-15}); break;
  121.         case 6: snake.push({x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y+15}); break;
  122.         default: snake.push({x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y});
  123.         }
  124.     snake.shift();//删除数组第一个元素
  125.            ctx.clearRect(0,0,900,600);//清除画布重新绘制
  126.            isEat();
  127.         isDead();
  128.         drawtable();
  129.    }                        
  130.    
  131.    function keydown(e)
  132.    {
  133.    switch(e.keyCode)
  134.                 {
  135.          case 37: togo=1; break;
  136.                  case 38: togo=2; break;
  137.                  case 39: togo=3; break;
  138.                  case 40: togo=4; break;
  139.                  case 65: togo=5; break;
  140.                  case 68: togo=6; break;
  141.                 }
  142.    }
  143.    
  144.    function isEat()//吃到食物后长度加1
  145.    {
  146.     if(snake[snakeCount-1].x==foodx&&snake[snakeCount-1].y==foody)
  147.    {
  148.                 addfood();
  149.                 snakeCount++;
  150.                 snake.unshift({x:-15,y:-15});
  151.    }
  152.    
  153.    }
  154.    //死亡函数
  155.    function isDead()
  156.    {
  157.     if (snake[snakeCount-1].x>885||snake[snakeCount-1].y>585||snake[snakeCount-1].x<0||snake[snakeCount-1].y<0)
  158.                 {
  159.         
  160.                 window.location.reload();
  161.                 }
  162.    }
  163.    
  164.     document.onkeydown=function(e)
  165. {
  166.         keydown(e);
  167. }
  168. window.onload = function()//调用函数
  169. {
  170.         start();
  171.         setInterval(move,150);
  172.         drawtable();
  173.        
  174.        
  175. }
  176. </script>
  177. </body>
  178. </html>
复制代码

然后我们欣赏器使用公网地点加这个html文件访问,即可看到我们部署的小游戏。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4