前言: 本文基于树莓派4B平台,搭载Ubuntu Server 20.04 LTS版本服务器系统,通过将树莓派服务器连接Ipv6公网网络,利用Docker工具,部署Nginx反向代理与Wordpress网站管理系统,实现网站搭建与异地访问。同时用到了域名管理、DDNS、MySQl等工具。本文将从服务器镜像烧录开始,将网站搭建过程进行完整的说明记录。
(经验来自互联网,多次试错学习后总结如下,以供参考。)
关键词: 树莓派; Ubuntu ; Ipv6 ;Docker
基于树莓派的Ubuntu Server 20.04 LTS镜像下载网页:获取Ubuntu服务器版(https://cn.ubuntu.com/download/raspberry-pi)
选择下载64位服务器版本

使用树莓派官方镜像烧录工具Raspberry Pi Imager进行烧录
下载地址:Raspberry Pi Imager

安装,启动Raspberry Pi Imager,选择上一步中下载的Ubuntu镜像,插入SD卡,选择SD卡
右下角齿轮高级设置中:随意设置主机名、开启SSH服务、设置用户名密码、关闭WIFI、语言设置Shanghai


配置结束,保存开始烧录,选择是,等待烧录完成
烧录完成后将SD卡插入树莓派中,插上网线上电启动。
因为没有配置Wifi,因此需要检查树莓派ip地址,通过打开家里路由器管理页面进行查询。
(若未找到树莓派设备,请重新烧录系统。)

可以看到树莓派地址为192.168.31.100,使用SSH工具连接树莓派,登录进入系统

使用清华apt源镜像:清华源镜像配置
在命令行中输入如下命令备份源文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vi /etc/apt/sources.list
复制清华源替换sources.list中原本内容
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse
vi操作命令
gg //光标返回到文件内容起始位置
dG //删除全文
i //插入(编辑)内容
:wq 保存并退出
更新源
sudo apt-get update
安装net-tools,使用ifconfig命令查看
sudo apt install net-tools -y
调用ifconfig命令查看ipv6地址

若家里没有ipv6,请自行查阅相关教程,我家移动宽带,运营商提供ipv6,只是默认未开放,需要通过超级用户登录光猫后台启动。
最简单的方法,在某宝上搜索光猫改桥接,跟客服说明想要光猫改桥接,通过路由器拨号上网,路由器开启ipv6(前提路由器支持),远程很快就能搞定,不需要亲自动手。喜欢折腾的话也可以自行查阅相关资料。
教程内容参考如下文章:Docker 安装
首先安装依赖文件
sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y
信任Docker 的 GPG 公钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
添加软件仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.zju.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装(一定要先update)
sudo apt-get update
sudo apt-get install docker-ce -y
验证Docker是否安装成功
sudo docker run hello-world
若返回 Hello from Docker! 则说明Docker安装成功

docker换源
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://sx1pmhon.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。
Github 项目地址:https://github.com/portainer/portainer
下载与安装
sudo docker pull portainer/portainer:latest
启动运行,分配9000端口
sudo docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name portainer portainer/portainer
打开 Portainer
在浏览器中输入 树莓派IP:9000 进入Portainer控制页面,本项目中树莓派ip地址为192.168.31.100

首次进入 Portainer 需要设置用户名和密码,点击 Create user 后刷新页面进入 Portainer 管理页面
Home 页面
查看Docker运行状态和主要配置区域

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx官网:https://nginx.org/en/
下载与安装
sudo docker pull nginx
启动运行,映射到80端口
sudo docker run -d -p 80:80 --name nginx nginx:latest
此时访问 树莓派ip:80 可以访问到Nginx默认页面,说明运行成功

将Nginx容器中的配置文件拷贝复制到宿主机(树莓派)本地中
sudo docker cp nginx:/etc/nginx /home/docker
命令含义为将Nginx容器中/etc/nginx文件夹中的文件复制到树莓派的/home/docker文件夹中,可根据需要自行修改后面的目标路径(需要提前创建文件夹)
重启nginx,并配置映射路径
sudo docker kill nginx
sudo docker rm nginx
sudo docker run -d -p 80:80 --name nginx -v /home/docker/nginx:/etc/nginx nginx:latest
此番操作是为了能够直接在宿主机中修改nginx配置文件nginx.conf
MySQL是一个关系型数据库管理系统,是最流行的关系型数据库管理系统之一。后文中所用到的WordPress工具需要利用MySQL数据库。
MySQL官网:https://www.mysql.com/
下载与安装
sudo docker pull mysql
启动运行,映射到3306端口,配置root密码为123456
sudo docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
进入MySQL容器bash
sudo docker exec -i -t mysql bash
登录root用户,输入密码123456
mysql -u root -p
新建数据库,名称为wordpress,保存并退出
CREATE DATABASE wordpress;
quit; // 退出mysql
exit // 退出bash
WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。全球有大约40%的网站都是使用WordPress架设网站的。
WordPress官网:https://cn.wordpress.org/
下载与安装
sudo docker pull wordpress
启动运行,映射到8080端口
sudo docker run -d --name wordpress -p 8080:80 wordpress
访问 树莓派ip:8080 进入WordPress配置页面
配置语言,输入上文中新建的数据库名称wordpress,用户名root,密码123456,数据库主机172.17.0.1:3306,表前缀默认wp_


运行安装程序,填写表格信息,安装登录wordpress


访问 192.168.31.100:8080 进入博客主页
访问 192.168.31.100:8080/wp-admin 进入博客后台管理页面
在上文的操作中,我们将所用到的工具都已经配置完成,目前各个环节都能够独立运行,例如:
:9000端口:Portainer管理页面
:80端口:Nginx页面
:8080端口:Wordpress页面
当我们输入树莓派服务器地址192.168.31.100时,默认访问80端口,即进入nginx页面,我们在2.3节截图中可以看到:80是被隐藏掉的。
简单来说:访问192.168.31.100 与 访问192.168.31.100:80 功能相同
此时Wordpress被部署在8080端口,我们需要将Nginx与Wordpress连接起来,通过Nginx来帮助我们访问博客网站。
修改Nginx配置文件:/home/docker/nginx/nginx.conf(2.3节中拷贝的路径)
sudo vim /home/docker/nginx/nginx.conf
在 include /etc/nginx/conf.d/*.conf; 下添加以下内容
include /etc/nginx/conf.d/*.conf;
# 加入以下内容
server{
listen 80;
server_name [2409:8a04:xxxx:xxxx:xxxx:xxx:xxxx:xxxx](此处修改自己的ipv6地址,别少了中括号)
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://172.17.0.1:8080;
}
}
# 注意括号
最终效果如图所示

访问Portainer控制页面,选中nginx容器,点击restart重启

此时我们将Wordpress的8080端口与Nginx的80端口建立了联系。
浏览器访问 http://[ipv6地址] 即可访问Wordpress页面。
不在同一局域网中的ipv6网络也可以访问该网站,使用手机流量测试网站同样可以登录

此时网站基本上已经部署完成了,通过ipv6地址即可访问。但ipv6地址会不断变化,且通过输入ipv6地址的方式访问网站没有那么的优雅
因此将ip地址与域名进行绑定,并通过DDNS实时检测ip地址的变化,即可优雅地访问网站
从阿里云购买域名(腾讯等网站同理)
域名购买网站:万网域名
搜索域名,选择心仪的域名,.top域名较为便宜,第一年一般为9元,续费较贵

注册阿里云账号,按照步骤申请购买就可以,最终在域名控制台可以看到购买的域名

阿里云官网,右上角主账号处选择AccessKey管理

选择使用子账户AccessKey,也可以使用主账户(不建议)
创建子账户

点击进入小账户,创建AccessKey,保存ID与Secret

点击权限管理-新增授权

添加管理云解析(DNS)的权限

DDNS(Dynamic Domain Name Server,动态域名服务)是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析。
本文使用的DDNS解决方案:NewFuture/DDNS项目Github仓库
安装pip3
sudo apt install python3-pip
pip 安装ddns
sudo pip install ddns
在任意目录新建并编辑配置文件config.json
sudo vim config.json
编辑如下内容并保存
{
"$schema": "https://ddns.newfuture.cc/schema/v2.8.json",
"id": "AccessKey ID",
"token": "AccessKey Secret",
"dns": "alidns",
"ipv4": ["xxxxxx.top", "www.xxxxxx.top"],
"ipv6": ["xxxxxx.top", "www.xxxxxx.top"],
"index4": "default",
"index6": "public",
"ttl": 600,
"proxy": "null",
"debug": false
}
其中:
··id 和 token 分别为4.2节中申请的 AccessKey ID 与 AccessKey Secret
·· dns 为用到的DNS解析平台,本文使用的是阿里云,即alidns。
(支持dnspod、dnspod_com、dnscom、cloudflare、he、huaweidns、callback)
·· ipv4与ipv6 为域名,因为没有ipv4公网地址,ipv4可空,ipv6不可空其余配置可根据项目说明进行修改
运行ddns,使用 -c使用指定的配置文件
ddns -c /路径/config.json
输出如下信息说明配置正确

可以编辑脚本每隔一段时间更新一次
修改Nginx配置文件nginx.conf
将 server_name 后面的ipv6地址修改为自己的域名,效果如下:

保存文件,重启nginx
测试 xxxxx.top 和 www.xxxxx.top能否访问,推荐使用手机流量(ipv6)网络进行访问
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear