mac笔记本当做服务器记录

持续更新中~

三更:放弃了mac,转战树莓派4b
二更:使用dp 创建虚拟机ubuntu,并设置网卡桥接,使用正常
已废弃:因为docker的权限问题各种坑


大致画了一下家庭布局图
在这里插入图片描述


目录

  • 持续更新中~
      • 基础环境准备1:mac设置不休眠
        • 1.设置MAC不休眠
        • 2.关闭键盘屏幕使用功能
        • 3.关闭键盘副屏使用 灯光和误触
      • 基础环境准备2:关闭sip
      • 基础环境准备2:关闭mac的自动更新
      • 第一步、todesk阶段
        • 1. 安装ToDesk及权限配置
        • 2.测试连接正常
        • 3.todesk 部分完成
      • 解决ssh的问题
        • 1.mac 配置静态IP
        • 2.mac配置固定dns 一般是网关也就是路由器的地址
        • 3.路由器配置
        • 4.MAC开放远程权限,并本地局域网测试
        • 5.局域网测试
        • 6.在光猫端,设置端口开放连接 外网访问
        • 7.外网访问测试
        • 8.ssh部分完成,已实现从外面通过ssh访问家里的电脑
      • Docker阶段
        • 安装docker基础环境及设置开机自启
          • 1.下载安装
          • 2.设置docker 开机自启
      • 安装docker nginx
      • 解决DDNS问题 动态公网IP
        • 1.要用到的:
        • 2.开始正文
        • 3.修改记录
        • 4.RecordId 获取
        • 5.获取记录信息 得到RecordId
        • 6.测试请求,部署代码
        • 7.生成密钥
        • 8.代码完善一:获取公网ip
        • 9.代码完善二,解决心跳机制
        • 10.代码打包发布启动并测试
        • 11.测试成功ddns完成![在这里插入图片描述](https://img-blog.csdnimg.cn/01a0a5dd6bea4b28a0d43bf0e5b1b689.png)
      • 持续交付阶段
        • 1.思路整理
        • 1.通过docker的方式安装jenkins
        • 2.创建并启动容器
        • 3.jenkins配置


基础环境准备1:mac设置不休眠

因为将mac当做服务器来使用需要7*24小时,要解决屏幕功耗(烧屏)及硬盘不会自动休眠,为todesk使用做准备。

1.设置MAC不休眠

解决 macbook m1 苹果笔记本电脑 关闭盖子 休眠

2.关闭键盘屏幕使用功能

平时我是合盖使用,所以需要降低损耗到最低,
合盖时屏幕设置亮度为最低,键盘屏幕设置禁用(长时间不用键盘灯自动熄灭)

3.关闭键盘副屏使用 灯光和误触

mac bookpro m1 笔记本关闭键盘屏幕 禁用键盘屏幕使用 键盘屏幕误触 Touch Bar禁用 禁用MacBook-Pro的触摸栏

基础环境准备2:关闭sip

Mac SIP系统完整性保护是OS X El Capitan及更高版本所采用的一项安全技术,这项技术能够帮助用户防止潜在的恶意软件修改Mac上受保护的文件和文件夹。SIP系统完整性保护可以限制root用户帐户,以及root用户能够在Mac系统的受保护部分完成的操作。
直接点就是说:对某些目录权限进行了限制,例如docker 的-v目录授权,例如在根目录创建文件夹

因为我的MAC是m1芯片的,传统的command+R的方式不能用,需要开机长按开机键才能进入系统
借鉴了:https://www.jianshu.com/p/6554ace478fb

基础环境准备2:关闭mac的自动更新

因为mac 准备就绪后会影响todesk 所以要关闭自动更新

在这里插入图片描述
请添加图片描述

第一步、todesk阶段

考虑了几个远程方案、例如向日葵、tv、vnc
测试了一下VNC发现速度不理想,最终使用了todesk

1. 安装ToDesk及权限配置

官网下载
在这里插入图片描述

2.测试连接正常

在这里插入图片描述

3.todesk 部分完成

有问题私信我,或者联系todesk官方客服支持群
在这里插入图片描述

解决ssh的问题

我想实现的要求:
1.在互联网上,直接ssh +ip地址+非常规端口号即可连接,或者增加生成的ssh密钥进行连接保证安全性
2.本地选择使用nginx 进行ssh代理到常规端口

1.mac 配置静态IP

因为之前是wifi dhcp连接的路由器为满足后续的端口开放、需要配置一个固定IP
在这里插入图片描述
在这里插入图片描述

2.mac配置固定dns 一般是网关也就是路由器的地址

设置DNS 不然不能上网
在这里插入图片描述

3.路由器配置

在路由器端进行固定IP的端口转发开放
在这里插入图片描述

4.MAC开放远程权限,并本地局域网测试

在这里插入图片描述

5.局域网测试

在这里插入图片描述

6.在光猫端,设置端口开放连接 外网访问

在这里插入图片描述

7.外网访问测试

在这里插入图片描述

8.ssh部分完成,已实现从外面通过ssh访问家里的电脑

Docker阶段

安装docker基础环境及设置开机自启

官网 https://www.docker.com/

1.下载安装

在这里插入图片描述

2.设置docker 开机自启

在这里插入图片描述

安装docker nginx

请看另一篇文章 http://t.csdn.cn/h1ojY

解决DDNS问题 动态公网IP

我是家庭宽带 只能申请到动态的公网ip,好处是不花钱,弊端是每次重启光猫,都会重新获取一个新的公网IP

为解决此办法,我尝试了很多个DDNS的方案。
包括但不限于。

1.云厂商DDNS(本教程使用)
2.购买一台云机nginx反代到本地,本地心跳检测域名,不通则立刻获取本地公网ip同步到云机nginx并重启。
3.路由器支持的DDNS功能
4. frp技术 花生壳、ngrok 等
5.软路由
6.ddns-go https://wp.gxnas.com/11459.html

下面我解释下为什么都排除了
2.成本高,还要保证一台转发云机。还要维持备案
3.路由器只支持部分的,例如花生壳的,看路由器兼容性
4. 研究了下花生壳,免费的只有2个,要么在花生壳买域名,要么push域名到贝锐(花生壳),要么每年40元解析费用,但都是需要实名认证的
5.软路由 ,需要设备,常开,具体功能我也没玩明白,以后研究明白了出教程
6. 是封装了各厂商的云API且是go语言编写,我未来打算自行封装,所以未采取该方案。

下面介绍一下通过腾讯云,云API调用,实现同步更新动态公网IP,解决痛点。

1.要用到的:

云API使用文档
借鉴了其他的文章

2.开始正文

首先要确定解析的域名
我的域名解析是这个
记录值是家宽公网ip
在这里插入图片描述

云api文档中

3.修改记录

这个接口是用来修改记录值的,也就是DNS解析到的IP地址,在这里进行修改DNS记录值
在这里插入图片描述

上图有4个参数需要填写,
分别是

  • Domain
    顶级域名 例如: baidu.com
  • RecordType
    记录类型

在这里插入图片描述

  • RecordLine
    记录线路,通过 API 记录线路获得,中文,比如:默认。
  • Value
    记录值,如 IP : 200.200.200.200, CNAME : cname.dnspod.com., MX : mail.dnspod.com.。
  • RecordId
    记录 ID 。注意下图如何获取

4.RecordId 获取

举例:
在这里插入图片描述

5.获取记录信息 得到RecordId

文档:https://console.cloud.tencent.com/api/explorer?Product=dnspod&Version=2021-03-23&Action=DescribeRecord&SignVersion=

这里发起一下请求,找到我解析的m的记录信息中 的RecordId
在这里插入图片描述

6.测试请求,部署代码

复制上图红框内容,回到上面请求,这里进行调试
在这里插入图片描述
在这里插入图片描述

请求成功了,下面生成代码,进行部署
在这里插入图片描述

7.生成密钥

可以看到,生成的代码中,有2个字段需要填写,

密钥
SecretId
SecretKey

链接地址:https://console.cloud.tencent.com/cam/capi
新建即可
在这里插入图片描述
填入密钥
在这里插入图片描述

8.代码完善一:获取公网ip

添加代码:
获取本地的公网ip地址的方法

   public static String getIpV4(){String ipV4 = "";try{String ipStr = HttpUtil.get("https://www.taobao.com/help/getip.php");ipV4 = ipStr.split("\"")[1];}catch(Exception e){e.printStackTrace();ipV4 = "127.0.0.1";}return ipV4;}

在这里插入图片描述

pom添加

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.1.2</version>
</dependency>

在这里插入图片描述
开始请求,启动main方法

在这里插入图片描述
在这里插入图片描述
成功啦!

9.代码完善二,解决心跳机制

下面解决心跳机制的问题。
想过几个方案

1.定时任务
2.定时ping 当ping不同的时候调用ddns方法
3.生成jar包,启动main方法,一直后台运行

我采用了方案2
操作如下
1.添加定时ping的任务
2.启动的jar包,开启后台守护程序
3.生成日志,重启记录发送邮箱
当请求超时时,说明ip不通了,需要更新一下,就调用一下方法

增加了如下代码
1.定时任务

    //动态定时任务public static void main(String[] args) {//每10秒执行一次CronUtil.schedule("*/10 * * * * *", new Task() {@Overridepublic void execute() {Console.log("这里是动态添加定时任务!.");}});// 支持秒级别定时任务CronUtil.setMatchSecond(true);CronUtil.start();}

2.ping不同的时候调用ddns方法

    public static void main(String[] args) {System.out.println( ping("m.2048.top"));}/*** 检测IP地址是否能ping通** @param ip IP地址* @return 返回是否ping通*/public static boolean ping(String ip) {return ping(ip, 200);}/*** 检测IP地址是否能ping通** @param ip      IP地址* @param timeout 检测超时(毫秒)* @return 是否ping通*/public static boolean ping(String ip, int timeout) {try {return InetAddress.getByName(ip).isReachable(timeout); // 当返回值是true时,说明host是可用的,false则不可。} catch (Exception ex) {return false;}}

最后合起来的代码

package com.tencent;import cn.hutool.core.lang.Console;
import cn.hutool.cron.CronUtil;
import cn.hutool.cron.task.Task;
import cn.hutool.http.HttpUtil;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.dnspod.v20210323.DnspodClient;
import com.tencentcloudapi.dnspod.v20210323.models.*;import java.net.InetAddress;public class ModifyRecord
{public static String ddns() {try{// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密// 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取Credential cred = new Credential("密钥id", "密钥key");// 实例化一个http选项,可选的,没有特殊需求可以跳过HttpProfile httpProfile = new HttpProfile();httpProfile.setEndpoint("dnspod.tencentcloudapi.com");// 实例化一个client选项,可选的,没有特殊需求可以跳过ClientProfile clientProfile = new ClientProfile();clientProfile.setHttpProfile(httpProfile);// 实例化要请求产品的client对象,clientProfile是可选的DnspodClient client = new DnspodClient(cred, "", clientProfile);// 实例化一个请求对象,每个接口都会对应一个request对象ModifyRecordRequest req = new ModifyRecordRequest();req.setDomain("2048.top");req.setSubDomain("m");req.setRecordType("A");req.setRecordLine("默认");//获取本机的公网ipv4地址String ip=getIpV4();req.setValue(ip);Console.log("新的ip是:"+ip);req.setRecordId(纯数字);// 返回的resp是一个ModifyRecordResponse的实例,与请求对象对应ModifyRecordResponse resp = client.ModifyRecord(req);// 输出json格式的字符串回包
//            Console.log(ModifyRecordResponse.toJsonString(resp));return ModifyRecordResponse.toJsonString(resp);} catch (TencentCloudSDKException e) {Console.log(e.toString());}return null;}public static String getIpV4(){String ipV4 = "";try{String ipStr = HttpUtil.get("https://www.taobao.com/help/getip.php");ipV4 = ipStr.split("\"")[1];}catch(Exception e){e.printStackTrace();ipV4 = "127.0.0.1";}return ipV4;}/*** 检测IP地址是否能ping通** @param ip IP地址* @return 返回是否ping通*/public static boolean ping(String ip) {return ping(ip, 200);}/*** 检测IP地址是否能ping通** @param ip      IP地址* @param timeout 检测超时(毫秒)* @return 是否ping通*/public static boolean ping(String ip, int timeout) {try {return InetAddress.getByName(ip).isReachable(timeout); // 当返回值是true时,说明host是可用的,false则不可。} catch (Exception ex) {return false;}}public static void main(String[] args) {//动态定时任务//每10秒执行一次CronUtil.schedule("*/10 * * * * *", new Task() {@Overridepublic void execute() {
//                Console.log("这里是动态添加定时任务!");//如果不通了  返回falseif (!ping("m.2048.top")){//就进行ddns方法Console.log(ddns());}}});// 支持秒级别定时任务CronUtil.setMatchSecond(true);CronUtil.start();}}

10.代码打包发布启动并测试

package打包成jar包
在这里插入图片描述
运行下面的这个jar包
启动命令 其实就是启动一个main方法

java -cp java-sdk-1.0-SNAPSHOT-jar-with-dependencies.jar com.tencent.ModifyRecord start

11.测试成功ddns完成在这里插入图片描述

运行正常
后期放到docker中使用

持续交付阶段

1.思路整理

后期部署的java、php等业务系统项目,打算每个业务应用都docker部署
目前想了2个方法,及搜索到的解决方案

1.jdea的docker集成,一键生成本地镜像,且部署线上docker 借鉴链接:https://blog.csdn.net/jackcheng1117/article/details/83080303
2.Jenkins 持续集成:https://blog.csdn.net/aiwangtingyun/article/details/123523669

考虑到一劳永逸,我选用jenkins

1.通过docker的方式安装jenkins

## 拉取 Jenkins 镜像
docker pull jenkins/jenkins
## 创建 Jenkins 挂载目录
mkdir -p /Users/work/jenkins
## 创建挂载目录的同时要给该目录配置权限 777,如果权限不足的话,到时进行目录挂载的时候会失败导致无法启动 Jenkins 容器。
chmod 777 /Users/work/jenkins

2.创建并启动容器

docker run -d \-p 9837:8080 \-p 50000:50000 \-v /Users/work/jenkins:/var/jenkins_home \-v /etc/localtime:/etc/localtime \--restart=always \--name=jenkins \jenkins/jenkins
  • -d:后台运行容器;
  • -p 8888:8080:将容器的 8080 端口映射到服务器的 8888 端口;
  • -p 50000:50000:将容器的 50000 端口映射到服务器的 50000 端口;
  • -v /Users/work/jenkins:/var/jenkins_home:将容器中 Jenkins 的工作目录挂载到服务器的 /Users/work/jenkins;
  • -v /etc/localtime:/etc/localtime:让容器使用和服务器同样的时间设置;
  • –restart=always:设置容器的重启策略为 Docker 重启时自动重启;
  • –name=jenkins:给容器起别名;

查看是否启动成功
在这里插入图片描述
上图是启动成功了,且端口映射正常

3.jenkins配置

下面在局域网访问一下,然后配置一下
在这里插入图片描述
根据创建docker时候的映射文件找到密码并填入
在这里插入图片描述
在这里插入图片描述

我的mac挂着魔法呢,所以我没换源,如果需要换源,百度搜下 jenkins换国内源。

我这里选择的新手推荐安装的插件
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/49441.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitHub 新品发布会摘要:云端编程、提问论坛、代码扫描

晓查 发自 凹非寺 转载自 | 量子位 和其他科技公司一样&#xff0c;GitHub 最近也把发布会改成了线上&#xff0c;但这并不妨碍 GitHub 发布重磅产品。 今天&#xff0c;GitHub 在巴黎举办的 Satellite 大会上一口气发布了 4 大产品。 首先是云端 IDE&#xff0c;名叫 Codespac…

mac用自带终端shell连接服务器以及部署项目

mac用自带终端shell连接服务器以及部署项目 一、登录服务器 1、链接服务器&#xff0c;打开shell&#xff0c;点击 新建远程连接 2、点击右侧 &#xff0c;会出现弹框&#xff0c;输入服务器地址&#xff0c;点击好 3、添加完后右侧的服务器列表会出现刚才添加的内容&#…

Mac操作系统下一些开发经验分享

目录 前言在本地环境中使用Nginx添加信任HTTPS证书查看本地开启的tcp端口测试远程端口是否正常提供服务利用SSH让内网机器调试公网回调查看NetBIOS注册信息加速你的代码编辑速度显示文件的详细修改时间node.js安装npm安装全局包总是失败 使用多个SSH密钥IntelliJ IDEA启动Java时…

Linux 基金会开源教育及人才培养峰会来了

开源技术正在快速发展&#xff0c;在云计算、大数据、人工智能等领域逐步形成技术主流。作为一种新的软件生产方式&#xff0c;开源已经被列入“十四五”规划纲要。纲要提出&#xff0c;支持数字技术开源社区等创新联合体发展&#xff0c;完善开源知识产权和法律体系&#xff0…

影响 5000 万开发者,GitHub 与 CSDN 掌舵人对话技术社区未来

作者 | 卢鸫翔 责编 | 屠敏 2018年6月伊始&#xff0c;微软宣布将以75亿美元的价格收购热门在线代码分享和协作平台GitHub。如今近5个月的时间过去&#xff0c;我们终于等到了官宣&#xff0c;微软已于上周五正式完成收购GitHub的交易。与此同时&#xff0c;微软企业副总裁Na…

乔纳森离开苹果;李彦宏被泼水;Windows 公开 Linux 内核源代码 | 开发者周刊

【CSDN编者按】七月的第一周&#xff0c;科技圈就像盛夏的天气一样&#xff0c;冰火两重天。乔纳森离开苹果&#xff1b;李彦宏被泼水&#xff1b;Windows 公开 Linux 内核源代码......最近一周就有哪些开发者新闻呢&#xff1f;就在本期开发者周刊&#xff01; 整理 | 红月 出…

这可能是史上最强大Mac连接服务器的软件,甚至能媲美Xshell的存在

今天介绍的这款软件叫做Royal TSX 好了&#xff0c;有些同学看到这个名字就跑了&#xff0c;并且留下了一句 别跑&#xff0c;你去下了你也不一定知道怎么用&#xff01;&#xff01;&#xff01;&#xff01; 我们先看看他的页面&#xff1a; 骚话不说了&#xff0c;直接开…

MacOS利用Github搭建个人博客过程记录

【需要科学上网】 笔者博客​​​​​​​ 一、尝试在Github建立简单页面 如果没有GitHub账户请先创建 ①在GitHub界面&#xff0c;点击New repository 创建新项目 Repository name填“用户名.github.io”,比如我的就应该填写“yang-makabaka.github.io” 下面选择Public ,然…

开发者在行动!中国防疫开源项目登上 GitHub TOP 榜

用开发者们的方式支援这场没有硝烟的战争&#xff01; 整理 | 唐小引 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 截止北京时间 1 月 28 日下午 15:47&#xff0c;全国确诊新型冠状病毒的数字已经到达了 4586 例&#xff0c;疑似高达 6973 例&#xff0c;医护…

Mac当作云服务器,你真的会搞吗

1写作目的 最近淘了个mac&#xff0c;发现mac和linux还挺像的&#xff0c;并且云服务器马上就到期了&#xff0c;可以不可以把mac当做永久的云服务器呢&#xff1f; 2FinalShell(XShell)连接MAC MAC&#xff1a;首先选择系统偏好设置&#xff0c;选择里面的共享 MAC&#x…

【历史上的今天】7 月 22 日:Linux 开发的“二把手”出生;苹果发布 OS 8;MSN 发布

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2022 年 7 月 22 日&#xff0c;在 1945 年的今天&#xff0c;美国计算机科学家阿黛尔戈德堡&#xff08;Adele Goldberg&#xff09;出生&#xff1b;1970 年代时&…

【历史上的今天】6 月 4 日:微软收购 Github;MacOS Mojave 推出;英特尔发布第四代架构 Haswell

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2022 年 6 月 4 日&#xff0c;在 1998 年的今天&#xff0c;我国互联网用户突破一百万。自从中国科学技术网在国内首次实现了与国际互联网络的直接连接&#xff0c;我…

我用ChatGPT干了这18件事!格局一下打开了

因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享 点击关注#互联网架构师公众号&#xff0c;领取架构师全套资料 都在这里 0、2T架构师学习资料干货分 上一篇&#xff1a;2T架构师学习资料干货分享 大家好&#xff0c;我是互联网架构师&…

Chrome模拟手机浏览器(iOS/Android)的三种方法,亲测无误!

各大网站都有推出自己的手机访问版本页面&#xff0c;不管是新闻类还是视频网站&#xff0c;我们在电脑是无法直接访问到手机网站的&#xff0c;比如我经常访问一个3g.qq.com这个手机站点&#xff0c;如果在电脑上直接打开它&#xff0c;则会跳转到其它页面&#xff0c;一般我会…

ChatGPT常用的提示语(prompts)系列三

系列文章目录 内容翻译自&#xff1a;https://github.com/f/awesome-chatgpt-prompts&#xff0c;并加入自己的实践内容 1、 ChatGPT常用的提示语&#xff08;prompts&#xff09;系列一 2、 ChatGPT常用的提示语&#xff08;prompts&#xff09;系列二 文章目录 系列文章目录9…

Observability:使用 OpenTelemetry 和 Elastic 监控 OpenAI API 和 GPT 模型

作者&#xff1a;David Hope ChatGPT 现在很火&#xff0c;它打破了互联网。 作为 ChatGPT 的狂热用户和 ChatGPT 应用程序的开发者&#xff0c;我对这项技术的可能性感到无比兴奋。 我看到的情况是&#xff0c;基于 ChatGPT 的解决方案将呈指数级增长&#xff0c;人们将需要监…

大模型时代的自然语言处理:挑战、机遇与发展

来源&#xff1a;专知‍‍ 近期发布的 ChatGPT 和 GPT-4 等大型语言模型, 不仅能高质量完成自然语言生成任务, 生 成流畅通顺, 贴合人类需求的语言, 而且具备以生成式框架完成各种开放域自然语言理解任务的能 力. 在少样本, 零样本场景下, 大模型可取得接近乃至达到传统监督学习…

促进社区AIGC发展!Stability AI 再开源 RLHF、DeepFloyd IF

本文来源 新智元 编辑&#xff1a;Aeneas 好困 【新智元导读】开源先锋StabilityAI一天扔了两枚重磅炸弹&#xff1a;发布史上首个开源RLHF大语言模型&#xff0c;以及像素级图像模型DeepFloyd IF。开源社区狂喜&#xff01; 最近&#xff0c;大名鼎鼎的Stable Diffusion背后…

分享200+个关于AI的网站

分享200个关于AI的网站 欢迎大家访问&#xff1a;https://tools.haiyong.site/ai 快速导航 AI 应用AI 写作AI 编程AI 设计AI 作图AI 训练模型AI 影音编辑AI 效率助手 AI 应用 文心一言: https://yiyan.baidu.com/ 百度出品的人工智能语言模型 ChatGPT: https://chat.openai.c…

论文《Can AI-Generated Text be Reliably Detected?》译文

摘要 大型语言模型&#xff08;LLM&#xff09;的快速发展使它们能够在包括文档续写和问答系统在内的各种任务中表现惊人。然而&#xff0c;不受监管地使用这些模型可能导致恶意后果&#xff0c;如抄袭、伪造新闻、垃圾邮件等。因此&#xff0c;可靠地检测人工智能生成的文本对…