保姆级教学:Java项目从0到1部署到云服务器

目录

1、明确内容

2、apt

2.1、apt 语法

2.2、常用命令

2.3、更新apt

3、安装JDK17

4、安装MySQL

4.1、安装

4.2、检查版本及安装位置

4.3、初始化MySQL配置⭐

4.4、检查状态

4.5、配置远程访问⭐

4.6、登录MySQL

4.7、测试数据库

4.8、设置权限与密码⭐

5、安装redis

6、安装Nginx

6.1、相关存储位置

6.2、配置文件

第一部分:全局块

第二部分:events块

第三部分:http块

完整配置文件

80端口占用

6.3、部署前端项目

6.4、测试效果

7、安装tomcat

7.1、报错

7.2、排错⭐

8、防火墙和安全组🔺

8.1、防火墙放行

8.2、阿里云安全组🔺

9、上传工程jar包

9.1、打包

9.2、上云

10、测试项目

10.1、运行

10.2、持续运行🔺


🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发和前端开发。
🦅主页:@逐梦苍穹

📕所属专栏:项目
🍔您的一键三连,是我创作的最大动力🌹

Java项目开发完成之后,想要给第三方访问,则需要部署到公网上去,阿里云/腾讯云是不错的选择,这里以阿里云为例进行详细说明

1、明确内容

第一步需要明确好自己部署一个项目到云服务器的同时,需要运行什么其他服务(这里以Java项目为例说明)。

①Java项目首先要部署JDK,这里部署的是JDK17;

②现在主流的Java项目都是以SpringBoot为主流,SpringBoot内嵌了tomcat容器,所以可以不额外部署tomcat服务;

③项目当中涉及到数据存储,需要部署数据库服务,这里使用的是MySQL;

④项目涉及到缓存操作,需要部署redis;

⑤如果项目是前后端分离项目,还需要部署前端nginx服务器,可以配置tomcat集群;

2、apt

apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。

apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

apt 命令执行需要超级管理员权限(root)。

安装:apt-get install name
更新:apt-get update name
卸载:apt-get remove name
查找:apt-cache search name

2.1、apt 语法

apt [options] [command] [package ...]

options可选,选项包括 -h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。

command要进行的操作。

package:安装的包名。

2.2、常用命令

操作

命令

列出所有可更新的软件清单

sudo apt update

升级软件包

sudo apt upgrade

列出可更新的软件包及版本信息

apt list --upgradeable

升级软件包,升级前先删除需要更新的软件包

sudo apt full-upgrade

安装指定的软件包

sudo apt install <package_name>

安装多个软件包

sudo apt install <package_1> <package_2> <package_3>

更新指定的软件包

sudo apt update <package_name>

显示软件包具体信息(例如:版本号,安装大小,依赖关系等)

sudo apt show <package_name>

删除软件包

sudo apt remove <package_name>

清理不再使用的依赖和库文件

sudo apt autoremove

移除软件包及配置文件

sudo apt purge <package_name>

查找软件包

sudo apt search

列出所有已安装的包

apt list --installed

列出所有已安装的包的版本信息

apt list --all-versions

2.3、更新apt

3、安装JDK17

sudo apt install openjdk-17-jdk

当系统要求输入密码时,请输入密码。然后键入 'Y' 并按 'Enter' 继续安装。

检查是否安装成功:

运行个jar包试试看:

正常运行,环境配置无误!

4、安装MySQL

4.1、安装

sudo apt-get install mysql-server

4.2、检查版本及安装位置

4.3初始化MySQL配置⭐

输入命令:sudo mysql_secure_installation

需要的配置项会比较多,详细如下:

1)这里输入N,选择不进行密码的强校验:

2)这里输入Y,选择确认删除匿名用户:

3)这里输入N,选择允许root远程登陆:

4)这里输入N,选择不删除test数据库:

5)这里输入Y,选择修改的权限立即生效:

6)至此,初始化完成:

4.4、检查状态

检查MySQL服务的运行状态:systemctl status mysql.service

可以看到正常运行!

4.5、配置远程访问

在Ubuntu下MySQL缺省是只允许本地访问的,使用远程连接工具是连不上的;

如果要其他机器也能够访问的话,需要进行配置;

找到 bind-address 修改值为 0.0.0.0(如果需要远程访问)。

命令:sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

此处修改为0.0.0.0

修改完成,记得重启服务:sudo /etc/init.d/mysql restart

如果遇到vi编辑器不能正常的插入和保存的情况,可以选择重新安装vim。

由于Ubuntu预装的是vim-tiny,而我们需要使用vim-full,步骤如下:

①卸载vim-tiny:apt-get remove vim-common

②安装vim-full:apt-get install vim

4.6、登录MySQL

命令:sudo mysql -uroot -p
输入用户和密码(按照上面的步骤,此时的root用户是没有密码的,直接回车即可):

4.7、测试数据库

show databases:

use mysql:

select User,authentication_string,Host from user:

select host,user,plugin from user:

4.8、设置权限与密码

命令:

使用mysql_native_password修改加密规则:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';

更新用户的密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '密码' PASSWORD EXPIRE NEVER;

允许远程访问:

UPDATE user SET host = '%' WHERE user = 'root';

刷新cache中配置,刷新权限:

flush privileges;

如图:

到这里,MySQL在Ubuntu上的配置和安装就完成了!

5、安装redis

安装Redis:sudo apt install redis-server

安装完成后,Redis将自动启动。

检查Redis服务状态:sudo systemctl status redis-server

如果Redis未自动启动,则手动启动Redis:sudo systemctl start redis-server

接下来,为Redis设置密码:

首先,停止Redis服务:sudo systemctl stop redis-server

然后,编辑Redis配置文件:vim /etc/redis/redis.conf

在配置文件中找到以下行:# requirepass foobared

注释掉这行,添加密码,将 # requirepass foobared 修改为requirepass yourpassword,其中 yourpassword 是需要设置的密码。保存并关闭文件。

最后,重新启动Redis服务:sudo systemctl restart redis-server

现在,Redis已经安装并设置了密码。

使用以下命令测试连接Redis:redis-cli -h localhost -p 6379 -a yourpassword ping

如果一切正常,将看到回复 "PONG"。现在,已经成功在Ubuntu上安装了Redis并设置了密码。

redis监听的是127.0.0.1:6379,并不监听外网的请求,因此想要远程连接,还需要对redis.conf配置文件中的相关内容进行修改:

①将 bind 127.0.0.1 ::1 注释掉

②将 protected-mode 改成 no:

6、安装Nginx

安装命令:sudo apt-get install nginx

验证是否安装成功:nginx -v

6.1、相关存储位置

默认安装位置:

/usr/sbin/nginx:主程序

/etc/nginx:存放配置文件

/usr/share/nginx:存放静态文件

/var/log/nginx:存放日志

测试配置文件/etc/nginx/conf.d是否正确:

6.2、配置文件

nginx最重要的莫过于配置文件,其中:

主配置文件:/etc/nginx/nginx.conf

其他配置文件:/etc/nginx/conf.d/xxxx.conf

建议是一个主配置文件+多个其他配置文件协同工作,这样能更好的规范配置项,显得更有条理性

进入/etc/nginx目录:

主配置文件为:nginx.conf。

可以将 nginx.conf 配置文件分为三部分:

第一部分:全局块

worker_processes  auto;

从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令,主要包括:配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。

上面这行 worker_processes 配置,这是 Nginx 服务器并发处理服务的关键配置,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。

第二部分:events块

events {worker_connections  768;}

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括:是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 wordprocess 可以同时支持的最大连接数等。

上述例子就表示每个 work process 支持的最大连接数为 1024。这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

第三部分:http块

http {sendfile on;tcp_nopush on;types_hash_max_size 2048;# server_tokens off;# server_names_hash_bucket_size 64;# server_name_in_redirect off;include /etc/nginx/mime.types;default_type application/octet-stream;ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLEssl_prefer_server_ciphers on;access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;gzip on;# gzip_vary on;# gzip_proxied any;# gzip_comp_level 6;# gzip_buffers 16 8k;# gzip_http_version 1.1;# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;### Virtual Host Configs##server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html/sky;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# 反向代理,处理管理端发送的请求location /api/ {proxy_pass   http://localhost:8080/admin/;#proxy_pass   http://webservers/admin/;}# 反向代理,处理用户端发送的请求location /user/ {proxy_pass   http://localhost:8080/user/;}# WebSocketlocation /ws/ {proxy_pass   http://localhost:8080/ws/;}}include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;
}

这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

需要注意的是:http 块也可以包括 http 全局块、server 块。

下面的反向代理、动静分离、负载均衡都是在这部分中配置。

、http 全局块

http 全局块配置的指令包括:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

、server 块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。

而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块:

全局 server 块:最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。

location 块:一个 server 块可以配置多个 location 块。这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

反向代理:

在server中配置:

完整配置文件

主配置文件内容如下:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;events {worker_connections 768;# multi_accept on;
}http {sendfile on;tcp_nopush on;types_hash_max_size 2048;# server_tokens off;# server_names_hash_bucket_size 64;# server_name_in_redirect off;include /etc/nginx/mime.types;default_type application/octet-stream;ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLEssl_prefer_server_ciphers on;access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;gzip on;# gzip_vary on;# gzip_proxied any;# gzip_comp_level 6;# gzip_buffers 16 8k;# gzip_http_version 1.1;# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;### Virtual Host Configs##server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html/sky;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# 反向代理,处理管理端发送的请求location /api/ {proxy_pass   http://localhost:8080/admin/;#proxy_pass   http://webservers/admin/;}# 反向代理,处理用户端发送的请求location /user/ {proxy_pass   http://localhost:8080/user/;}# WebSocketlocation /ws/ {proxy_pass   http://localhost:8080/ws/;}}include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;
}

80端口占用

在部署的过程中可以发现,当nginx.conf配置监听端口为非80端口时,访问nginx服务器的80端口依旧生效,会自动跳转到欢迎页面(welcome to nginx!) ,这是因为:

在/etc/nginx/sites-enabled这个目录下面有一个default文件,这个文件是默认加载的而配置文件:

编辑这个default文件,打开以后是这样的:

listen端口默认就是80,把它改为非80端口,就不会出现80端口被欢迎页面占用的情况。

6.3、部署前端项目

打包好的前端项目可以放在自定义的文件夹下面:

记得配置好相关路径:

监听端口默认80端口。

6.4、测试效果

部署完成可以开始测试:

在本地访问localhost,在阿里云则访问对应的ip地址:

可以看到,测试没有问题!

7、安装tomcat

这个步骤可以不需要,只是为了完善整套环境。

因为在第一部分"明确内容"的时候提到过,现在主流的都是SpringBoot项目,而SpringBoot是内嵌了tomcat容器的,如图:

项目使用的是SpringBoot2.X版本,所以内嵌的是tomcat9.0.65版本。

这里就安装对应的版本来测试一下即可。

安装:sudo apt install tomcat9

7.1、报错

这个环境下同时装了JDK17和tomcat9,不出意外的话,启动服务的时候是要报错的:

报错信息显示找不到JDK,但是实际上有JDK:

7.2、排错⭐

不出意外的话,这应该是一个老生常谈的"错误"了,就是tomcat9的某些配置文件不识别JDK17。

先查看tomcat9的安装路径(whereis tomcat9):

根据上面的报错信息,可以看到加载/lib/systemd/system/tomcat9.service失败。

下面进入/lib/systemd/system/,查看tomcat9.service文件:

可以看到Tomcat9的启动脚本是/usr/libexec/tomcat9/tomcat-start.sh,下面查看该脚本的内容:

可以发现,这里有一个脚本/usr/libexec/tomcat9/tomcat-locate-java.sh是用来寻找Java环境的,下面查看该脚本:

成功发现问题:这个脚本的内容不包括Java17

解决方案:加上Java17,如下:

像这样加入17,然后重启服务就可以了。

7.3、测试

systemctl restart tomcat9

systemctl status tomcat9

成功运行:

地址栏测试(访问8080端口)出现如下页面表示成功:

如果你在浏览器看到此页面,则表示tomcat成功运行

8、防火墙和安全组🔺

根据上面的七个步骤,整个项目的环境部署已经完成了,但是外部依旧无法访问。

此处有两个关键要点:①操作系统防火墙开放对应端口;②阿里云外部设置安全组策略

8.1、防火墙放行

放行命令:ufw allow [端口号]

查看防火墙:ufw status

8.2、阿里云安全组🔺

进入云服务器ECS控制台,找到"安全组":

点击管理规则:

点击手动添加入站规则:

至此,项目环境部署完成!

9、上传工程jar包

9.1、打包

打开开发工具IntelliJ IDEA,

第一步:跳过测试

第二步:在父模块下执行"clean":

第三步:在父模块执行"compile"编译

第四步:根据依赖关系依次执行"install"(依赖的内容越多,越慢执行"install")

这里的顺序就应该是:先"install"模块sky-pojo,再模块sky-common,最后"install"最核心的服务模块sky-server。最后打开"install"模块sky-server的jar包路径:

找到路径的target目录:

把这个jar包上传到阿里云服务器即可。

9.2、上云

利用远程连接工具连接阿里云服务器(如finalshell或Xshell):

10、测试项目

10.1、运行

连上阿里云操作系统:

在阿里云的Ubuntu系统上运行jar包即可,效果如图:

10.2、持续运行🔺

由于springboot内置了tomcat容器,我们通常会把项目打成jar或者war后直接使用java -jar xxx.jar命令去运行程序,但是当前ssh窗口被锁定或者按下ctrl+c又或者关闭了ssh窗口,那么程序就会被终止。

一旦退出操作系统,即使操作系统依旧在运行中,但是项目却无法访问了。

这是因为java -jar的命令只能在当前进程运行,我们需要的是在后台单独开一个进程,让它持续运行。

解决方案一:

java -jar xxx.jar &
&代表在后台运行。
特点:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。

解决方案二:

nohup java -jar SpringBootDemo.jar &

nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行

当用 nohup 命令执行时,缺省情况下该进程的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件。

解决方案三:

nohup java -jar SpringBootDemo.jar >out.txt &

">out.txt"是将command的输出重定向到out.txt文件,即输出内容不打印到屏幕上,而是输出到out.txt文件中

推荐使用方案二或方案三!

这里只是做一个简单的样例展示,具体可以根据springBoot的日志技术,分层级分大小的去记录日志到本地文件

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

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

相关文章

C动态内存那些事

为什么存在动态内存分配&#xff1f; 首先&#xff0c;动态内存分配是计算机中一种重要的内存管理方法&#xff0c;它主要解决了静态内存分配无法灵活应对变化需求的问题。以下是几个存在动态内存分配的原因&#xff1a; 灵活性&#xff1a;动态内存分配允许程序在运行时根据需…

算法学习之位运算

一、作用 在复杂问题中经常可以作为工具让代码更加优雅。 二、知识储备基础 “~”&#xff1a;取反符 0->1, 1->0 三、常见的两种操作 1.n的二进制表示中第k位数字是几&#xff1f; (1)原理 先右移操作&#xff0c;再与操作。 &#xff08;2&#xff09;代码实现…

HarmonyOS 沉浸式状态栏实现

比如说 我们代码是这样的 Entry Component struct Index {build() {Column() {Column() {Column() {Text(定标标题).fontSize(20).fontColor(Color.White)}.height(50).justifyContent(FlexAlign.Center)}.width(100%).backgroundColor(#FF0000)}.height(100%)} }你预览器上看…

漏洞原理SQL注入 手工注入漏洞

漏洞原理SQL注入 手工注入漏洞 SQL 注入的前置知识 information_schema库information_schema 是mysql5.0以上版本中自带的一个数据库。tables表information_schema库中的tables表中table_schema列&#xff08;存储数据库名&#xff09;和table_name列&#xff08;存储表名&…

MongoDB实战

1.MongoDB介绍 1.1 什么是MongoDB MongoDB是一个文档数据库&#xff08;以JSON 为数据模型&#xff09;&#xff0c;由C语言编写&#xff0c;旨在为WEB应用提供可扩展的高性能数据存储解决方案。 文档来自于"JSON Document"&#xff0c;并非我们一般理解的 PDF&…

【MIdjourney】五个特殊物体关键词

1.碳酸(Carbonate) 这一词语的本意是指包含碳&#xff08;C&#xff09;、氧&#xff08;O&#xff09;和氢&#xff08;H&#xff09;元素的化合物。而在MIdjourney中添加该词汇会使得生成的图片具有水滴效果且富有动态感。 2.灯丝(Filament) Filament效果可能包括更逼真的…

java 基础学习1

目录 一.注释 二.关键字 三.字面量 四.变量和标识符 五.键盘录入 六.运算符 一.注释 1.单行注释&#xff1a;//注释信息 2.多行注释&#xff1a;/* 注释信息*/ 3.文档注释&#xff1a;/** 注释信息*/ 注:文档注释暂时用不上 二.关键字 关键字: 被Java赋予了特定…

Django介绍

一、介绍 Django是Python语言中的一个Web框架&#xff0c;Python语言中主流的web框架有Django、Tornado、Flask 等多种 优势&#xff1a;大而全&#xff0c;框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等功能&#xff0c;是一个全能型框架&#xff0c;拥有自己的A…

有趣的css - 好看的呼吸灯效果

整体效果 这个效果主要用 css3 的 animation 属性来实现的。 这个效果可以用作在网站的整体 Loading&#xff0c;也可以放在网站首屏当一个 banner 的背景也是非常棒的&#xff01; 代码部分 html 部分代码&#xff1a; <div class"app"><span class&quo…

【问题解决】java-word转pdf踩坑

问题情境&#xff1a; 项目中采用word转pdf&#xff0c;最开始使用的pdf相关的apache的pdfbox和itextpdf&#xff0c;后面发现对于有图片背景的word转pdf的情景&#xff0c;word中的背景图会直接占用位置&#xff0c;导致正文不会正确落在背景图上。 解决方案&#xff1a; 采…

研发日记,Matlab/Simulink避坑指南(八)——else if分支结构Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结归纳 前言 见《研发日记&#xff0c;Matlab/Simulink避坑指南(三)——向上取整Bug》 见《研发日记&#xff0c;Matlab/Simulink避坑指南(四)——transpose()转置函数Bug》 见《研发日记&#xff0c;Matlab/Simuli…

web前端---------盒子模型2

一------内边距 padding 属性用来设置元素的内边距长度&#xff0c;元素在默认情况下没有内边距&#xff0c;其值为none。 &#xff08;1&#xff09;当 padding 属性中仅含一个值时&#xff0c;该长度应用在上、下、左、右四个区域。 &#xff08;2&#xff09;当 padding …

vue3使用最新的属性defineModel实现父子组件数据响应式绑定

子父之间使用v-model双向绑定数据&#xff0c;子组件每次都要写emit和props觉得麻烦&#xff1f;以前&#xff0c;为了使组件支持与v-model双向绑定&#xff0c;它需要&#xff08;1&#xff09;声明prop&#xff0c;&#xff08;2&#xff09;在打算更新prop时发出相应的updat…

架构篇21:高性能负载均衡-算法

文章目录 轮询加权轮询负载最低优先性能最优类Hash 类源地址 HashID Hash小结负载均衡算法数量较多,而且可以根据一些业务特性进行定制开发,抛开细节上的差异,根据算法期望达到的目的,大体上可以分为下面几类。 任务平分类:负载均衡系统将收到的任务平均分配给服务器进行处…

【Vue】1-2、Webpack 中的插件

一、Webpack 插件的作用 通过安装和配置第三方的插件&#xff0c;可以拓展 webpack 的能力&#xff0c;从而让 webpack 用起来更方便。 二、两个常用插件 1&#xff09;webpack-dev-server 类似于 node.js 使用的 nodemon 工具 每当修改了源代码&#xff0c;webpack 会自动…

C++ 类的初始化列表

C 中的类必须使用初始化列表的 4 种情况&#xff1a; 一&#xff0c;继承于一个基类&#xff0c;这个基类的构造函数有参数时。 #include <stdio.h> #include <stdlib.h>#pragma pack(4) class CBase { public:CBase(int value): bBaseValue(value){}~CBase(){}p…

处理 Maven jar 包下载失败问题

目录 1、配置国内 Maven 源 配置和检测 settings.xml 配置国内源 2、删除本地 maven 创库的 jar 重新下载 3、其他问题 一般情况下 maven jar 包下载不成功可能有两种情况&#xff1a; 1&#xff09;没有配置国内源 2&#xff09;jar 包需要重新下载 下面详细讲解如何解决这两…

【jetson笔记】解决vscode远程调试qt.qpa.xcb: could not connect to display报错

配置x11转发 jetson远程安装x11转发 安装Xming Xming下载 安装完成后打开安装目录C:\Program Files (x86)\Xming 用记事本打开X0.hosts文件&#xff0c;添加jetson IP地址 后续IP改变需要重新修改配置文件 localhost 192.168.107.57打开Xlaunch Win菜单搜索Xlaundch打开 一…

x-cmd pkg | go - Google 开发的开源编程语言

目录 简介首次用户技术特点竞品分析编译型语言解释型语言JavaWebAssebmly 进一步阅读 简介 Go 语言&#xff08;或 Golang&#xff09;是 Google 开发的开源编程语言&#xff0c;诞生于 2006 年。其设计目标是“兼具 Python 等动态语言的开发速度和 C/C 等编译型语言的性能与安…