本文最后更新于 2024-03-24,文章内容可能已经过时。

将个人Ubuntu子系统电脑当作服务器使用,内网访问web服务器

Linux是一套免费使用和自由传播的类Unix操作系统是一个基于POSIXUNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位64位硬件。Linux继承了Unix网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

为什么要要在linux中搭建服务器

因为现在我正在渡劫,说白了是个穷比,主流服务器比较贵,买低配的容易崩,为了爱与和平,我选择了在Linux,哈哈开玩笑,如果是在linux服务器的话推荐CentOS 7 ,我比较喜欢ubuntu 就不做什么好坏之分了,我也是尝试中摸索,比较喜欢瞎搞,认真的说linux

① 开源 ,免费,②稳定性 ③安全④灵活性⑤自由⑥访问开源应用⑦容易更改

以前的我是拒绝Linux系统,但是在接触一段时间后开始喜欢上这种自由度高,可拓展性强的系统,现在还常常扣命令行,其实的说服务器也没有我曾经想的那样,非要说的话也可以算电脑的一种,只是服务器一般用来提供服务的,废话又说多了,开始沸腾

mySQL(关系型数据库管理系统)

MySQL是一个关系型数据库管理系统****,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

mysql

1Ubuntu 安装 MySQL

 $sudo apt-get installmysql-server
 $sudo apt-get install mysql-client
 $sudo apt-get install libmysqlclient-dev

或者进入root 权限下 去掉 sudo命令

image

安装net-tools(这个可以不安装,我重装时候没有安装也同样可以)

安装命令 : aptinstallnet-tools

查看安装情况 :mysql -V

返回安装情况 mysql  Ver 14.14 Distrib 5.7.25, for Linux (x86_64) using  EditLine wrapper

2设置mysql密码

查看用户的默认密码在输出文本中找到password后面的值,就是默认密码

sudo cat /etc/mysql/debian.cnf

以root用户和默认密码登录

mysql -u debian-sys-maint -p

修改密码,这里将root用户的密码改为123456

use mysql;
update mysql.user set authentication_string=password('123456') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password";
flush privileges;
quit;
apache(Web服务器)

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python解释器编译到服务器

apache

ubuntu 18 安装apache2
 apt-getinstallapache2 

按照操作一直y就可以,按装成功后,在浏览器地址栏输入http://localhost/ 或者输入http://127.0.0.1/
默认的文件根目录在 var /www/ 你可以把静态的文件放在html文件夹下在浏览器地址栏下访问比如你的程序叫做sopto,你就可以这http://127.0.0.1/sopto/

PHP (超文本预处理器)

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言语法吸收了C语言JavaPerl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了CJavaPerl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密优化代码运行,使代码运行更快。

ubuntu安装php
  sudo apt-get install software-properties-common
  sudo add-apt-repository ppa:ondrej/php && sudo apt-get update
  sudo apt-get -y install php7.2

安装过程会出错,多半是因为你安装过其他版本的php,或者卸载其他版本的php有依赖问题

安装扩展
  sudo apt-get -y install php7.2-fpm php7.2-mysql php7.2-curl php7.2-json php7.2-mbstring php7.2-xml  php7.2-intl php7.2-odbc php7.2-cgi

安装情况 php -v
PHP 7.2.16-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Mar 7 2019 20:23:29) ( NTS )

PhpMyAdmin

phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。

原文地址:https://blog.csdn.net/weixin_42557486/article/details/80827475
1安装phpMyAdmin(apt会提示附带安装php-mbstring和php-gettext)

$ sudo apt-get install phpmyadmin

2.设置软链接

$ sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

3浏览器地址栏输入127.0.0.1/phpmyadmin

内网访问ubuntu apache服务器

1 修改根目录
在 /etc/apache2/sites-available 中修改 000-default.conf 中的DocumentRoot /var/www/ 修改为想要的目录

 vim /etc/apache2/sites-available/000-default.conf

按需修改

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html    // 网站的根目录

接下来重启apache 即可
2产看ubuntu IP地址
打开终端输入 命令用来查看和配置网络设备: ifconfig

会看到几个不同的网络接口,

eth0 
表示第一块网卡, 其中 HWaddr 表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址)是 00:50:56:BF:26:20inet addr 用来表示网卡的IP地址,此网卡的 IP地址是 192.168.120.204,广播地址, Bcast:192.168.120.255,掩码地址Mask:255.255.255.0 
lo 
是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如 把 HTTPD服务器的指定到回坏地址,在浏览器输入 127.0.0.1 就能看到你所架WEB网站了。但只是您能看得到,局域网的其它主机或用户无从 知道。
或者更多ip  :wlp2s0 以太网访问ip 

3产看服务端口:
使用netstat命令:

查看已经连接的服务端口(ESTABLISHED)

netstat -a

查看所有的服务端口(LISTEN,ESTABLISHED)

netstat -ap

查看指定端口,可以结合grep命令:

netstat -ap | grep 8080

如果你的电脑启动了UFW防火墙,就需要打开端口80和443,其目的是为了可以通过客户端通过请求访问web服务器,

$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

重启加载防火墙

$ sudo ufw  reload

4在不同的客户端下进行访问:
在手机或别的客户端下进行访问,条件是在同局域网或者连同一个Wifi比如你的wifi地址是192.168.199.105端口是80网站主目录为sopto就在浏览器下输入
http://192.168.199.105:80/sopto/

详细通信流程如下:

  主机构建HTTP请求数据包,目标IP为74.125.204.101,目标端口是80/443,源IP为192.168.0.0,源端口随机生成,假定为5000

主机检查目标IP地址,发现不在一个网段,数据包丢给默认网关192.168.0.1

路由器LAN口收到数据包,构建NAT映射,随机生成端口,假定为5500,这样映射就是:5500->192.168.0.0:5000.WIN口收到的数据包,如果目标端口是  5500,则会转发给192.168.0.0的5000端口。

路由器修改数据包的源端口为5500,源IP地址为211.22.145.234,使用WAN口将数据包发出去

google服务器收到请求,构建响应HTTP数据包,目标IP地址为211.22.145.234,目标端口是5500

路由器WAN口收到数据包,目标端口是5500,查询NAT表,发现对应的机器是192.168.0.0:5000,所以修改目标IP为192.168.0.0,目标端口为5000,并通过LAN口口发送给主机

主机收到数据包,完成一次通信  

  从上面可以看出,内网机器能够和外网通信,全靠拥有公网 IP 的路由器做交通枢纽。

  路由器通过查询 NAT 表,来确定数据包该发送给内网哪台机器。

  所以内网多台机器都可以通过这一台路由器和外网进行通信。这极大的节省了宝贵的公网 IP 资源。

Ngrok

Ngrok是一个隧道,即建立安全通道从公共端点到本地运行的网络服务,同时捕捉检查和重播所有流量的反向代理。

简单来说,他可以代理你本地的数据,并将其转发到外网。当然原理没有大变,都是找一个公网服务器做中介。此处成为服务器 A。流程如下。

1. 本地内网主机和服务器A构建一条连接

2. 用户访问服务器A

3. 服务器A联系本地内网主机获取内容

4. 服务器A将获取到的内容发送给用户

5. 通过上面的流程,就实现了用户访问到了我们内网的内容。

那么帮助我们实现这个功能的程序就是 Ngrok 。通过在服务器上安装 Ngrok ,我们就可以和本地主机构建一条隧道。来让外网用户访问本地主机的内容。

准备工作(注意:下面做的工作是在远程主机上进行的)

安装依赖

注意 golang 需要 1.6 以上,否则不能编译客户端。我的主机是ubuntu18,所以可以使用自带的

sudo apt-get install build-essential golang mercurial git

  如果本地有git就不用配置git了,至于git是什么,我就不多说了,相信大家都懂。

获取Ngrok源码

git clone https://github.com/inconshreveable/ngrok.git ngrok

## 建议请使用下面的地址,修复了无法访问的包地址

git clone https://github.com/tutumcloud/ngrok.git ngrok

  下面用的是非官方地址,修复了一些无法访问的包地址,推荐使用这个

shell进入ngrok文件夹中:

不出意外,进入到ngrok中会看到这些

生成自签名证书

使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自建ngrokd服务,如果不想买SSL证书,我们需要生成自己的自签名证书,并编译一个携带该证书的ngrok客户端。

证书生成过程需要一个NGROK_BASE_DOMAIN。 以ngrok官方随机生成的地址693c358d.ngrok.com为例,其NGROK_BASE_DOMAIN就是“ngrok.com”,如果你要 提供服务的地址为“example.ngrok.xxx.com”,那NGROK_BASE_DOMAIN就应该 是“ngrok.xxx.com”。这里呢,我替换成自己的域名 “lishanlei.cn

这个地方大家也要提前准备好自己的域名,没有多余域名的同学呢,就可以给自己的域名添加一个二级域名来解决.

生成并替换源码里默认的证书,注意域名修改为你自己的。

NGROK_DOMAIN="[lishanlei.cn](http://lishanlei.cn)"
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
cp base.pem assets/client/tls/ngrokroot.c

 编译服务端

sudo make release-server release-client

  如果一切正常,我们将会在ngrok/bin文件夹下发现有ngrok和ngrokd两个可执行文件,其中ngrokd是服务器端运行的,ngrok是linux客户端运行的。

服务端

前面生成的 ngrokd 就是服务端程序了,指定证书、域名和端口启动它(证书就是前面生成的,注意修改域名):

sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="lishanlei.cn" -httpAddr=":8081" -httpsAddr=":8082"

  

到这一步,ngrok 服务已经跑起来了,可以通过屏幕上显示的日志查看更多信息。

httpAddr,httpsAddr分别是 ngrok 用来转发 http、https 服务的端口,可以随意指定

ngrokd 还会开一个 4443 端口用来跟客户端通讯(可通过 -tunnelAddr=":xxx" 指定),如果你配置了 iptables 规则,需要放行这三个端口上的 TCP 协议

测试连接

现在可以通过http://lishanlei.cn:8081和http://lishanlei.cn:8082就可以访问到ngrok提供的转发服务

为了使用方便,建议把域名泛解析到 VPS 上,这样能方便地使用不同子域转发不同的本地服务。

可以看到这样一行提示

Tunnel lishanlei.cn:8081 not found  

 这样子说明万事具备,只差客户端进行连接了

编译客户端

#windows

GOOS=windows GOARCH=amd64 make release-client

#mac

GOOS=darwin GOARCH=amd64 make release-client

客户端

单有服务端,你转发什么捏?肯定要在你需要发布内容(web,服务)的设备上安装匹配的客户端啊。在这里,我使用的服务器是ubuntu,而需要转发的服务器,也是ubuntu,就省去了重新编译这一环节。

如果要把 linux 上的服务映射出去,客户端就是前面生成的 ngrok 文件。(在 bin 文件夹内)

将/ngrok/bin目录下的 ngrok 通过ssh的scp指令下载到当前客户端所在的系统中。

# scp username@serverIp:/ngrok/bin/ngrok /home/ubunutu/ngrok

  其中username是远程主机的用户名,serverIp是远程主机的公网IP

  上述指令根据服务器信息和本地路径替换

  创建一个ngrok配置文件:ngrok.cfg,写入以下内容:

//注意域名替换成你自己的

server_addr: "lishanlei.cn:4443"
trust_host_root_certs: false

  注意:这里的server_addr换成前面配置的自签名证书中的域名

  另外,这个域名请提前解析到服务器IP,参考如下:

接下来只需要指定子域、要转发的协议和端口,以及配置文件,运行客户端:

#./ngrok -subdomain pub -proto=http -config=ngrok.cfg 80

ubuntu18 服务器部署[阿里云]

我的服务器是阿里的轻量级服务器,主要是个人的文档,和个人案例的展示,没有什么太多复杂的东西,最多就是用oss来存点图片,或者json数据,进行前端工作的接口模拟。我的工作是前端开发,这些东西对于专业的运维而言,都是不一杯茶的事情,所以比较适合计算机专业的学生,或者入门的小白。

 

更新什么的就不说了,自行百度。

01 SSH支持

安装openssh-server软件包

# sudo apt install openssh-server

你可以验证 SSH 是否正在运行

# sudo systemctl status ssh
-----
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-03-05 10:05:17 CST; 20min ago

记得要开启SSH的端口:

连接到 SSH 服务器

ssh  你的用户名@你的外网ip地址

我是重置系统的ubuntu20,密钥发回的指纹不对。 我的是unbound。

rm -f  /root/.ssh/known_hosts

提示输入密码:如果你是刚弄的服务器默认好像是root,你也可以在阿里云的远程链接更新密码

Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-48-generic x86_64)


 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

使用vscode 进行远程开发连接

安装VsCode官方插件

Remote - SSH

安装后,重启下vscode编辑器

 

02 MySQL安装

我个人会点基本的php就用教学,就用三剑客了,很多公司现在都不用apache了,但是我个人够用就行。

 

 $sudo apt-get install mysql-server mysql-client  libmysqlclient-dev

 

查看安装状况

mysql -V
---
mysql  Ver 14.14 Distrib 5.7.33, for Linux (x86_64) using  EditLine wrapper

 

查看启动状态

systemctl status mysql
--- 
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2021-03-05 14:27:11 CST; 1min 31s ago

设置mysql密码

查看用户的默认密码在输出文本中找到password后面的值,就是默认密码

sudo cat /etc/mysql/debian.cnf
---
user     =  你的默认用户名
password =  你的默认密码  PfQZ3VG5F4Tm9GAm


user     = debian-sys-maint
password = oZsql5M0qANgG5Wl

 

使用默认值进行修改密码

mysql -u 你的默认用户名 或者 root  -p
Enter password: 你的默认密码

 

执行sql下面的sql,我们的默认修改123456789

use mysql;
update mysql.user set authentication_string=password('971023Zxl') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password";
flush privileges;
quit;

 

MySQL版本8.0.4之后修改密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456789';
quit;

root 用户身份登录

以 root 用户身份登录 MySQL服务器,输入;

sudo mysql

 

03 apache 安装

 apt-get install apache2 

查看启动状态

service apache2 status
---
apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
    Active: active (running) since Fri 2021-03-05 11:48:30 CST; 2min 49s ago

 配置端口后就后就可以在浏览器中访问了,在浏览器地址中输入外网地址,就会看到熟悉的页面

04 php 安装

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php && sudo apt-get update
sudo apt-get -y install php7.2

安装扩展

sudo apt-get -y install php7.2-fpm php7.2-mysql php7.2-curl php7.2-json php7.2-mbstring php7.2-xml  php7.2-intl php7.2-odbc php7.2-cgi

安装情况

php -v
---
PHP 7.2.34-18+ubuntu20.04.1+deb.sury.org+1 (cli) (built: Feb 23 2021 15:08:24) ( NTS )

05 PhpMyAdmin 安装

我基本不会写很复杂的sql,数据库用的也少,有个网页版的图形工具就可以了,够用就可以。如果需要的话,可以留言给我

 

# 安装
sudo apt-get install phpmyadmin
 
# 选择 apache2
# 在phpmyadmin中配置dbconfig-common? yes 
# MySQL application password for phpmyadmin:   输入密码  确认密码

 

设置软链接

sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

 

 

06 git 安装配置

07 安装kodbox

下载KODExplorer包

git clone git@gitee.com:kalcaddle/KODExplorer.git

添加目前读写权限

chmod -R 777 /var/www/html/mydak/

开启图形缩率图验证[查看自己php的版本依赖]

apt-get install php7.2-gd

08 安装 node.js 和npm

换源【看自己电脑,没有备选才需要下载】

 

sudo apt-get update
sudo apt-get install -y python-software-properties software-properties-common
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update

 

安装

sudo apt-get install nodejs
sudo apt install libssl1.0-dev nodejs-dev node-gyp npm


---


nodejs -v v8.10.0
npm -v 3.5.2

 

 

09 安装BookStack

安装Chrome

sudo apt install chromium-browser

安装puppeteer

# 安装 node.js npm 
sudo npm install -g n
sudo n stable
sudo npm install -g cnpm
sudo cnpm install puppeteer

这个主要用于在发布文档的时候,渲染未被渲染的markdown文档、渲染自定义封面、以及强力模式下的网页采集。

安装 calibre

sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.py | sudo python -c "import sys; main=lambda:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main()"

查看安装状态

ebook-convert --version
---
ebook-convert (calibre 5.12.0)

安装 supervisor

sudo apt install supervisor
----
supervisord --version
3.3.1

安装全部