欢迎拜访我的GitHub

这儿分类和汇总了欣宸的悉数原创(含配套源码):github.com/zq2599/blog…

本篇概览

  • 在前文《阅读器上写代码,4核8G微软服务器免费用,Codespaces真香》中,咱们以一个Java程序员视角体会了GitHub的Codespaces产品的beta版,简略来说有以下两大收获:
  1. 网页版vscode,其作用体会现已挨近桌面版,实测电脑、iPad Pro、华为MatePad Pro的阅读器上都能运用
  2. 长途开发,编译和运转GitHub库房的代码,实践操作是在4核8G的微软服务器上进行的,而这服务器资源对个人GitHub用户是免费的
  • 但是,对一些专注的程序员而言,网页版vscode做得再好也没有爱好,毕竟桌面版vscode现已很优异,习惯后真实没必要换成网页版
  • 但4核8G免费服务器的引诱摆在眼前,岂能轻言抛弃,所以就有了这篇文章:桌面版vscode长途开发,长途服务器是Codespaces的免费服务器
  • 另外还有一个衍生需求:这个免费的4核8G服务器,除了运转使用,还能做其他的工作吗?例如运转一些后台服务,为咱们的开发自测带来便利
  • 其实Codespaces官方是支撑这些特性的,如下图所示,红框中便是桌面版vscode,本文要做的便是实战体会这个功用,再在Container中加入docker,让更多服务运转在这个docker上
    桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

实战方针

  • 为了杰出实用性,本文不会照抄官方文档,而是模拟一次惯例的开发进程,作为一个Java程序员,开发SpringBoot使用并操作数据库是个很有代表性的场景,因而,本篇会实现下图的作用:在VSCODE桌面版编码,而使用和MySQL(docker版)都运转在CodeSpace服务器上

    桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • 将上述使命拆分成以下步骤去完成

  1. 在vscode桌面版进行悉数操作
  2. 在vscode上做设置,使其支撑Codespaces
  3. 基于GitHub库房创立codespace
  4. 个性化设置,如设定jdk,添加docker服务
  5. 在服务器上布置MySQL
  6. GitHub库房拉新分支
  7. 在新分支开发一个SpringBoot使用,能够操作方才布置好的MySQL
  8. 用单元测试验证使用的基本功用
  9. 启动使用,用web页面验证基本功用
  • 经历了上述实战,关于codespace是否具有实用型这个问题,相信您应该会有自己的判断了

重要条件

  • 以下是能愉快进行本篇操作的重要条件
  1. 您的网络能够拜访GitHub
  2. 您有自己的GitHub账号
  3. 您有自己的代码库房
  4. 欣宸是个一般的Java程序员,所以在开发体会顶用的是Java相关技术栈,例如代码工程是SpringBoot的,假如您拿手的是其他言语,请自行调整

环境信息

  • 以下是本次实战的环境信息,能够作为参阅
  1. 操作系统:macOS Monterey(M1 Pro芯片的MacBook Pro,16G内存)
  2. vscode: 1.67.2 (Universal)
  3. JDK:8
  4. MySQL:8.0.29
  5. SpringBoot:2.7.0
  • 完毕闲聊,接下来开端实战

在vscode上做设置,使其支撑Codespaces

  • 翻开vscode,装置codespaces插件,操作如下图

    桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • 登录GitHub

桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • 点击同意后,会翻开阅读器验证身份,再并弹出如下菜单

桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • vscode弹出确认

    桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • 现在进入了Codespaces办理页面,现在创立一个新的codespace,如下图,挑选对应的代码库房

桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • 然后挑选分支

    桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • 现在静候后台服务器初始化,大约几分钟后,页面如下,codespace创立成功,4核8G微软服务器到手,该琢磨怎么用了

桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

新建分支

  • 为了不影响当时库房的代码,这儿新建一个分支,操作如下图

桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • 我这儿新建了名为vscode-desktop-tutorial的分支,里边没有任何内容

个性化设置

  • 开端后台环境的个性化设置,这儿简略起见仅设置两个特性:
  1. JDK设置成8
  2. 添加docker服务
  • 翻开指令面板,输入Add Development Container Configuration Files…然后回车

    桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • 系统会列出许多预设环境供咱们挑选,Java8是现成的,果断挑选

    桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • 挑选debian操作系统的版别

    桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • Node.js?谢谢,不用了

    桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • 构建工具挑选maven

桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 其他特性列表中,挑选下图红框中的Docker (Moby) supoort,这样咱们的服务器就有了docker服务
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 做完这一切后屏幕右下角会弹出提示,如下图,注意:不要点击下图红框的按钮!不要点击
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 之所以不立即构建,因为还要给当时codespace添加两个vscode插件:SpringBoot和Lombok,下图是方才的设置完毕后主动新增的devcontainer.json文件,添加黄框中的内容
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 假如您猎奇我是怎么知道SpringBoot插件对应的名字是Pivotal.vscode-boot-dev-pack,能够阅读插件商场官方网站:marketplace.visualstudio.com/items ,这儿面的每个插件都有自己的Unique Identifier,如下图红框所示

桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • 现在能够构建镜像并重建容器了,按照下图操作即可
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 点击下图红框中的按钮就能看到构建镜像的进程,假如出错了也能在这儿找到问题原因
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 主张将方才新增的devcontainer.json和Dockerfile文件提交到GitHub保存,这样下次新建codespace时,因为它们的存在,codespace会根据它们去构建镜像,所以每个新的codespace都会带上之前添加的个性化设置

  • 容器重建完成后,在TERMINAL用maven和docker指令验证,悉数符合预期

桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • 服务器算是设置得差不多了,接下来凭借Docker布置MySQL

布置MySQL

  • 接下来在vscode的TERMINAL上操作,也便是在后台服务器的控制台操作,如下图
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 新建一个文件夹,用来存储MySQL的数据库文件,这样即便容器被删除数据库文件也在,我这儿是/workspaces/java-demo/mysql-data
  • 凭借docker创立数据库也便是一行指令的事儿,完整指令如下,版别是8.0.29,root账号密码是123456
docker run \
--name mysql \
-p 3306:3306 \
-v /workspaces/java-demo/mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-idt \
mysql:8.0.29 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
  • 因为本地没有MySQL镜像,所以微软服务器去docker镜像库房拉取镜像,那网速看着真是赏心悦目
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • MySQL容器很快就启动了,履行以下指令进入容器内部
docker exec -it mysql /bin/bash
  • 在容器内部就能够用mysql指令来操作数据库了
@zq2599 ➜ ~ $ docker exec -it mysql /bin/bash
root@f6a9dcc7fdcd:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.29 MySQL Community Server - GPL
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
  • 接下来用指令建库、建表、新增记载,参阅指令如下(这儿建了个卖家表,里边有主键、卖家称号、产品数量三个字段)
# 建数据库
CREATE DATABASE first_db;

# 选中数据库
use first_db;

# 建表
CREATE TABLE IF NOT EXISTS `seller`(
    `id` INT UNSIGNED AUTO_INCREMENT,
    `name` VARCHAR(100) NOT NULL,
    `product_num` INT NULL,
    PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 新增三条记载
insert into seller (name, product_num) values ('seller1', 1111);
insert into seller (name, product_num) values ('seller2', 2222);
insert into seller (name, product_num) values ('seller3', 3333);
  • 完成了,接下来写个SpringBoot使用,然后运转起来操作数据库

开发SpringBoot使用

  • 指令行面板,输入下图红框中的内容,挑选Spring Initializr
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 挑选SpringBoot版别
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 挑选言语
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 然后是GAV坐标,java版别等,最终是依赖模块,我这儿挑选了web和lombok
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 项目称号我这儿是demo
  • 最终是源码目录,我这儿是/workspaces/java-demo/,所有操作完成后,右下角提示新增workspace,点击Open,会翻开新的workspace窗口,里边是java工程的视图,如下图所示,一定要用这个新的workspace,因为它是以demo目录为根目录层级,能够让java和maven插件辨认成功,而原有的workspace以java-demo为根目录层级,导致新增的java项目无法被java和maven插件辨认

桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

  • 接下来要修正代码,添加数据库操作的功用,关于java拜访MySQL的代码,就不在本篇多说了,您能够在我的GitHub库房检查具体源码,地址是:github.com/zq2599/java… ,代码在下图红框内,一定要选vscode-desktop-tutorial分支
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 这个SpringBoot使用是通过MyBatis库来拜访MySQL的,其装备文件如下,可见衔接数据库用的是127.0.0.1,因为MySQL的3306端口现已映射到使用地点服务器的3306端口
server:
  port: 8080
spring:
  # 数据源
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://127.0.0.1:3306/first_db?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
# mybatis装备
mybatis:
  # 装备文件地点方位
  config-location: classpath:mybatis-config.xml
  # 映射文件地点方位
  mapper-locations: classpath:mappers/*Mapper.xml
# 日志装备
logging:
  level:
    root: INFO
    com:
      bolingcavalry:
        demo:
          mapper: debug

验证-单元测试

  • 来看看这个SpringBoot使用的单元测试类,是查询id等于1的记载,并验证查询成果的合法性
package com.bolingcavalry.demo;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import com.bolingcavalry.demo.entity.Seller;
import com.bolingcavalry.demo.service.SellerService;
@SpringBootTest
class DemoApplicationTests {
	@Autowired
	SellerService sellerService;
	@Test
	void testGetById() {
		int id = 1;
		Seller seller = sellerService.get(id);
		// 判定非空
        Assertions.assertNotNull(seller);
		// id相等
		Assertions.assertEquals(id, seller.getId());
	}
}
  • 点击下图红框中的按钮,履行单元测试通过,证明读数据库一切正常
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)

验证:web

  • 这个SpringBoot使用有一个web接口,源码如下
@RestController
@Slf4j
public class SellerController {
    @Autowired
    private SellerService sellerService;
    @RequestMapping(value = "/seller/{id}", method = RequestMethod.GET)
    public Seller get(@PathVariable("id") Integer id) {
        log.info("get entity, id=[{}]", id);
        return sellerService.get(id);
    }
}
  • 点击下图红框中的按钮启动使用
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 阅读器拜访 http://localhost:8080/seller/1 ,如下图,能够正常呼应
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 验证完成

提交到GitHub

  • 最终记住将代码和codespace装备提交到GitHub库房
  • 因为新建的/workspaces/java-demo/mysql-data目录里保存的是MySQL数据库文件,没必要提交到GitHub,主张在.gitignore中添加此目录,方位和内容如下
桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  • 至此,一次典型的SpringBoot使用开发和调试进程就完成了,整个进程中vscode作为文本编辑和指令输入的工具,编译、单元测试、运转、docker服务这些都在长途codespace后台运转,下载镜像和jar包也是服务器去做的,实践网速非常理想,本地电脑一直保持低资源耗费,流畅的体会贯穿一直(网络要保持稳定)

  • 希望本篇能给您一些参阅,白piao微软,咱们一直在尽力…

欢迎关注:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴…