快速搭建开发环境[记录]

55

安装 centos7

  • 使用VirtualBox 安装

下载centos7镜像aliyun
CentOS-7-x86_64-DVD-2009.iso

vbox1.png

  • 网络配置

vbox2.png

# /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=5428d884-141c-42b4-9c13-04e116ee567f
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.3.202
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=114.114.114.114

重启网络服务

systemctl restart network
  • 修改计算机名称
hostnamectl set-hostname newhostname
  • 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

  • 开启ssh
 systemctl start sshd
  • 修改ssh配置
vi /etc/ssh/sshd_config
Port 22
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::


PermitRootLogin yes

GSSAPIAuthentication no

UseDNS no

jdk

#查看是否安装
rpm -qa |grep java
rpm -qa |grep jdk
rpm -qa |grep gcj
#批量卸载
rpm -qa | grep java | xargs rpm -e --nodeps 
#查看版本
yum -y list java*
#安装
yum install java-1.8.0-openjdk-devel
yum install -y java-1.8.0-openjdk.x86_64
#查看默认安装目录
which java
ls -i

java -version
  • 环境变量
vim /etc/profile
#在文件尾部添加如下信息:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
#编辑完成后,保持并退出,刷新环境配置使其生效:
source /etc/profile

nginx


yum install epel-release

yum update

yum install nginx

#启动并加入开机启动
sudo systemctl start nginx
sudo systemctl enable nginx
#配置文件目录
vim /etc/nginx/nginx.conf
#验证配置
nginx -t
#重启
service nginx reload 


  • 错误处理 bind() to 0.0.0.0:XXX failed (13: Permission denied)
[root@zz-dev nginx]# systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Thu 2023-12-21 02:40:55 EST; 2s ago
  Process: 23352 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=1/FAILURE)
  Process: 23350 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)

Dec 21 02:40:55 zz-dev systemd[1]: Starting The nginx HTTP and reverse proxy server...
Dec 21 02:40:55 zz-dev nginx[23352]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Dec 21 02:40:55 zz-dev nginx[23352]: nginx: [emerg] bind() to 0.0.0.0:8081 failed (13: Permission denied)
Dec 21 02:40:55 zz-dev nginx[23352]: nginx: configuration file /etc/nginx/nginx.conf test failed
Dec 21 02:40:55 zz-dev systemd[1]: nginx.service: control process exited, code=exited status=1
Dec 21 02:40:55 zz-dev systemd[1]: Failed to start The nginx HTTP and reverse proxy server.
Dec 21 02:40:55 zz-dev systemd[1]: Unit nginx.service entered failed state.
Dec 21 02:40:55 zz-dev systemd[1]: nginx.service failed.

此错误为selinux 现在
可执行命令 
零时生效
setenforce 0

getenforce

永久生效
vim /etc/selinux/config
SELINUX=disabled

安装docker

# 1、安装docker的依赖包:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 2、使用以下命令设置稳定存储库。(yum源)
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# or  使用阿里镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3、安装docker-ce 
sudo yum install docker-ce docker-ce-cli containerd.io -y

# 4、启动并加入开机启动(或sudo chkconfig docker on) 
sudo systemctl start docker
sudo systemctl enable docker

# 6、查看版本
docker  -v

安装redis

  • 初始化目录
#设置挂载目录及配置文件
mkdir -p /data/redis/{conf,data}
touch /data/redis/conf/redis.conf
  • 放入配置文件
vi /data/redis/conf/redis.conf
  • 配置内容
#绑定IP访问
bind 0.0.0.0
#保护模式(no支持外网)
protected-mode no

#redis服务端口
port 6379
#密码
requirepass 123456

#设置redis的运行方式,使用yes启用守护进程
daemonize no
#数据数量
databases 16
#当客户端闲置多长时间时关闭连接,0表示关闭该功能,单位s
timeout 300
#tcp keepalive参数。如果设置不为0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有两个好处:检测挂掉的对端。降低中间设备出问题而导致网络看似连接却已经与对端端口的问题。在Linux内核中,设置了keepalive,redis会定时给对端发送ack。
#检测到对端关闭需要两倍的设置值
tcp-keepalive 300

#指定了服务端日志的级别。级别包括:debug(很多信息,方便开发、测试),verbose(许多有用的信息,但是没有debug级别信息多),notice(适当的日志级别,适合生产环境),warn(只有非常重要的信息)
loglevel notice

#指定了记录日志的文件。空字符串的话,日志会打印到标准输出设备。后台运行的redis标准输出是/dev/null
logfile  /data/redis.log

#持久化出错 是否继续工作
stop-writes-on-bgsave-error yes

#是否开启aof持久化模式,默认值:no,不开启。redis的默认持久化策略是edb模式
appendonly yes

#配置内存达到上线清理策略
#noeviction:当内存使用超过配置的时候会返回错误,不会驱逐任何键
#allkeys-lru:加入键的时候,如果过限,首先通过LRU算法驱逐最久没有使用的键
#volatile-lru:加入键的时候如果过限,首先从设置了过期时间的键集合中驱逐最久没有使用的键
#allkeys-random:加入键的时候如果过限,从所有key随机删除
#volatile-random:加入键的时候如果过限,从过期键的集合中随机驱逐
#volatile-ttl:从配置了过期时间的键中驱逐马上就要过期的键
#volatile-lfu:从所有配置了过期时间的键中驱逐使用频率最少的键
#allkeys-lfu:从所有键中驱逐使用频率最少的键 
maxmemory-policy volatile-lfu
  • 启动
docker run --restart=always --name redis \
  -p 6379:6379 \
 -v /data/redis/data:/data \
 -v /data/redis/conf/redis.conf:/etc/redis/redis.conf \
 -d redis:latest redis-server /etc/redis/redis.conf --appendonly yes 

安装mysql

  • 初始化目录
mkdir -p /data/mysql/{datadir,conf.d}
touch /data/mysql/conf.d/my.cnf

  • 修改配置
vi /data/mysql/conf.d/my.cnf
 
[mysqld]
bind-address = 0.0.0.0
lower_case_table_names=1
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
 
  • 启动
docker run --name mysql -p 3306:3306 \
-v /data/mysql/datadir:/var/lib/mysql  \
-v /data/mysql/conf.d:/etc/mysql/conf.d  \
-e MYSQL_ROOT_PASSWORD=123456 \
-d --restart=always \
mysql:8.0.34

docker-minio

  • 初始化目录
mkdir -p /data/minio/{config,data}
  • 启动
docker run --name minio \
-p 9000:9000 \
-p 9090:9090 \
-d --restart=always \
-e "MINIO_ROOT_USER=minio" \
-e "MINIO_ROOT_PASSWORD=minio#123456" \
-v /data/minio/data:/data \
-v /data/minio/config:/root/.minio \
minio/minio server /data \
--console-address '0.0.0.0:9090'

nacos mysql

  • 1、新建nacos_config数据库
  • 2、导入表结构

表结构脚本 github

表结构脚本 gitee

docker run --name nacos \
-p 8848:8848 \
-e PREFER_HOST_MODE=hostname \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.3.202 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-d --restart=always \
nacos/nacos-server

CI/CD jenkins

# 下载 java 8版本
wget https://get.jenkins.io/war-stable/2.346.1/jenkins.war

# 运行
nohup java -jar jenkins.war --httpPort=18080 >>log.log 2>&1 &

# 最新版本需下载jdk 17
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.461/jenkins.war
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
# 解压 
tar -xzvf jdk-17_linux-x64_bin.tar.gz
# 运行 
nohup /soft/jdk-17.0.11/bin/java -jar jenkins.war --httpPort=18080 >>log.log 2>&1 &
  • 配置示例

jenkins-config4.png
jenkins-config3.png
jenkins-config2.png
jenkins-config1.png

node npm 切换镜像

# 安装nrm源管理器
npm install -g nrm

# 看看有哪些源可以供我们使用
nrm ls

# 测试各个源的速度
# nrm test 源的名字,如:
nrm test taobao
# 使用
nrm use taobao

错误

  • npm run build Reached heap limit Allocation failed - JavaScript heap out of memory
<--- JS stacktrace --->

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
 1: 0xb090e0 node::Abort() [node]
 2: 0xa1b70e  [node]
 3: 0xce1a20 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
 4: 0xce1dc7 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node]
 5: 0xe99435  [node]
 6: 0xea90fd v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [node]
 7: 0xeabdfe v8::internal::Heap::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [node]
 8: 0xe6d072 v8::internal::Factory::AllocateRaw(int, v8::internal::AllocationType, v8::internal::AllocationAlignment) [node]
 9: 0xe65684 v8::internal::FactoryBase<v8::internal::Factory>::AllocateRawWithImmortalMap(int, v8::internal::AllocationType, v8::internal::Map, v8::internal::AllocationAlignment) [node]
10: 0xe667f1 v8::internal::FactoryBase<v8::internal::Factory>::NewByteArray(int, v8::internal::AllocationType) [node]
11: 0xde4c43 v8::internal::TranslationArrayBuilder::ToTranslationArray(v8::internal::Factory*) [node]
12: 0x1c19e66 v8::internal::compiler::CodeGenerator::GenerateDeoptimizationData() [node]
13: 0x1c1a575 v8::internal::compiler::CodeGenerator::FinalizeCode() [node]
14: 0x1ca2a31 v8::internal::compiler::PipelineImpl::FinalizeCode(bool) [node]
15: 0x1ca3a33 v8::internal::compiler::PipelineCompilationJob::FinalizeJobImpl(v8::internal::Isolate*) [node]
16: 0xd79390 v8::internal::OptimizedCompilationJob::FinalizeJob(v8::internal::Isolate*) [node]
17: 0xd7df4b v8::internal::Compiler::FinalizeOptimizedCompilationJob(v8::internal::OptimizedCompilationJob*, v8::internal::Isolate*) [node]
18: 0xda0253 v8::internal::OptimizingCompileDispatcher::InstallOptimizedFunctions() [node]
19: 0xe39287 v8::internal::StackGuard::HandleInterrupts() [node]
20: 0x11e5ab4 v8::internal::Runtime_StackGuardWithGap(int, unsigned long*, v8::internal::Isolate*) [node]
21: 0x15d9e59  [node]

设置node 内存

// 查看当前node内存
node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))'
// 扩大node内存 ,可在npm run build 之前执行 也可放在系统参数里面
export NODE_OPTIONS="--max-old-space-size=8192"


安装node

  • 使用nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source /root/.bashrc 
nvm ls
# 安装16版本
nvm install 16

# 安装18版本
nvm install 18

#使用16版本
nvm use 16


#使用18版本 (可能会有依赖问题)
nvm use 18