常用环境搭建

决定记录一下搭建和配置各种常用编程环境,包括 maven,jdk,node 等,和软件环境,包括 mysql,redis,kafka 等的过程以方便在将来进行参考和查阅,能使用 docker 则使用 docker。该文档将持续维护。

需注意:该文档目的是为了之后搭建本地开发环境时能更加方便,不需要反复去查阅文档和博客,并非为了生产目的,因此(对一些中间件)不考虑安全性等问题。

tips

关于解压

*nix 系统使用命令行进行解压,因此有一些必要去介绍一下使用。

对于 tar.xz 和 tar.gz,使用 tar 命令,模版如下:

1
tar xvf [要解压的文件名] --directory=[要解压到的文件夹]

比如,解压当前目录的一个压缩文件到当前目录的 test 文件夹(该文件夹需提前创建):

1
tar xvf node-v14.19.2-linux-arm64.tar.gz --directory=./test

tar.gz其实上是2个工具。tar是打包工具,把很多文件打包成一个文件,gz是压缩格式。

对于 zip,使用 unzip 命令,模板如下:

1
unzip [要解压的文件] -d [要解压到的文件夹]

示例如下,要解压的文件夹不需要提前创建:

1
unzip ttf-iosevka-curly-slab-15.3.0.zip -d some_dir 

docker run 的使用示例

拷贝自tldr docker-run命令。

docker run

Run a command in a new Docker container.
More information: https://docs.docker.com/engine/reference/commandline/run/.

  • Run command in a new container from a tagged image:
    docker run image:tag command

  • Run command in a new container in background and display its ID:
    docker run -d image command

  • Run command in a one-off container in interactive mode and pseudo-TTY:
    docker run --rm -it image command

  • Run command in a new container with passed environment variables:
    docker run -e 'variable=value' -e variable image command

  • Run command in a new container with bind mounted volumes:
    docker run -v /path/to/host_path:/path/to/container_path image command

  • Run command in a new container with published ports:
    docker run -p host_port:container_port image command

  • Run command in a new container overwriting the entrypoint of the image:
    docker run --entrypoint command image

  • Run command in a new container connecting it to a network:
    docker run --network network image

TODO docker compose,以及如何从镜像中拷出来配置文件

编程环境

对于编程环境,尽量从国内镜像站去下载以保证速度。

小 tip: Windows 系统可以按 win 键,输入“env”或“path”并回车,能直接打开“编辑系统环境变量”窗口

JDK 8

在这里 下载对应架构和系统的 JDK 的压缩包并解压到特定位置,将其 binjre\bin 目录加入 PATH,并添加变量 JAVA_HOME,以其目录作为值即可。

比如,将该压缩包解压至E:\env,此时目录结构为:

1
2
3
4
5
6
E:\env\jdk8u332-b09
├─bin
├─include
├─jre
├─lib
└─sample

此时,在 PATH 中添加:

1
2
E:\env\jdk8u332-b09\bin
E:\env\jdk8u332-b09\jre\bin

添加 JAVA_HOME 变量,值为:E:\env\jdk8u332-b09

虽然很多资料说 JAVA_HOME 已经不需要设置了,但事实证明很多环境,如 maven 的一些插件,hadoop 等都是依赖这个变量的,仍旧有必要进行配置。

Maven

TODO

修改镜像源

TODO

Sbt

TODO

修改镜像源

TODO

软件环境

mysql,redis 等环境虽然也能够直接安装环境,但其总是比较麻烦的,且 win 下可能会出现更多问题,为此使用 docker 减轻负担是非常合适的。

MySQL

  • 创建 MySQL 8 容器,其 hostname 为 some-mysql,使用 root 账户作为用户,密码为 root,启动时创建 database db:
    docker run --name some-mysql --hostname some-mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=db -d mysql:8

  • 在命令行下连接到 mysql 8 服务器,其 host 为 some-mysql,使用 root 用户(好像需要在同一个 network 下,且 bridge 不行):
    docker run --rm -it mysql:8 mysql -hsome-mysql -uroot -proot

  • 使用自定义的 mysql 配置文件:
    docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8

  • 使用命令行的方式进行配置:
    docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

  • 启动时执行特定 sql 文件:
    docker run --name some-mysql -v /my/custom/sql/dir:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8

需注意:MySQL 服务器在容器启动后才会开始启动,这在使用 docker-compose 等工具时可能会出现问题,这时应当用轮询等手段待服务器启动后再进行其他操作。

JDBC 配置

1
2
3
4
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/prod?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai
spring.datasource.username = root
spring.datasource.password = root

Oracle

TODO

JDBC 配置

TODO

Redis

  • 跑个 Redis 实例:
    docker run --name some-redis -d redis

  • 使用 redis-cli 连接 hostname 为some-redis的实例:
    docker run -it --rm redis redis-cli -h some-redis

  • 把默认配置文件拷出来:

    1
    2
    3
    docker run --rm -it -v $(pwd):/shareFiles redis bash
    cp /usr/local/etc/redis/ /shareFiles/redis
    exit
  • 自定义配置:
    可以使用 Dockerfile 直接替换:

    
    FROM redis
    COPY redis.conf /usr/local/etc/redis/redis.conf
    CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
    

    或者使用-v
    docker run -v /myredis/conf:/usr/local/etc/redis --name myredis redis redis-server /usr/local/etc/redis/redis.conf

TODO 还有哨兵,集群模式