CentOS 8.x下安装Go语言前后端开发编译、部署环境–全程操作

CentOS 8.x 基本操作

申请购买云服务器

CentOS 8.x
root

下载安装XShell等终端

XShellrootLinux

CentOS 8.x 常用操作

升级、更新系统可选步骤

yum update
# 或
yum update -y

【Q&A】Error: Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist

问题描述:
CentOS 8.xyum update
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
解决办法:

进入配置路径:

cd /etc/yum.repos.d/

更新配置,执行命令:

sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

刷新缓存

yum makecache

验证

yum update -y
yum -y install vim
结论:

问题解决!

安装解压缩命令

yum install -y zip gzip bzip2

安装rz、sz上传下载命令

yum install -y lrzsz
xshellrzsz filename
vim
vim /etc/vimrc
vim
InsertvimInsert
set ts=4
set expandtab
set nu
set paste
Esc:wq

常用压缩命令(参考)

# zip与unzip操作
zip hellogo.zip hello.go # 把hello.go文件打包成hellogo.zip
zip hello.zip hello.go hello # 把hello.go和hello两个文件打包成hello.zip

# -r表示递归查找文件,下面命令把当前目录所有文件打包压缩成myfile.zip
zip -r myfile.zip ./*
zip -r test2.zip test2/*

zip -m myfile.zip ./rpm_info.txt
# 向压缩文件中myfile.zip中添加rpm_info.txt文件
zip -d myfile.zip smart.txt
# 删除压缩文件中smart.txt文件

unzip myfile.zip # 解压缩到当前目录
# 解压缩到指定目录
unzip -o -d /home/sunny myfile.zip
# 把myfile.zip文件解压到 /home/sunny/,如果目录不存在则自动创建
# -o:不提示的情况下覆盖文件;
# -d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下。

# 把当前目录下所有文件打包
tar -cvzf code.tar.gz ./*
tar -cvzf jpg.tar.gz *.jpg
# 将目录里所有jpg文件打包成jpg.tar后,将其用gzip压缩,生成一个gzip压缩包,命名为jpg.tar.gz
tar -xzvf file.tar.gz # 解压tar.gz

# 常用tar解压命令
# tar –xvf file.tar
# tar -xzvf file.tar.gz
# tar -xjvf file.tar.bz2
# tar –xZvf file.tar.Z

查看端口占用(参考)

yum install -y nmap-ncat

# 如查看80端口占用情况使用如下命令:
lsof -i tcp:80

# 检查端口被哪个进程占用
netstat -lnp|grep 3308

# 列出所有端口
netstat -ntlp

进程管理(参考)

ps aux # 查看系统有哪些进程正在运行
kill -9 PID # 根据进程号PID暴力杀死进程
kill -9 2899 # 暴力杀死2899号进程
kill -15 2899 # 优雅结束这个进程
pkill -9 pts/0 # 踢出某个终端
pkill -9 pd-server # 杀死进程
# 根据名称查找进程及相关进程,如:tidb
ps -ef|grep tidb|grep -v grep
# tidb及相关的tikv、pd进程均被列出,前提是tikv、pd、tidb均被安装在同一目录tidb下

卸载软件的一般操作(参考)

# 查找相关安装包
rpm -qa | grep softname
softname-version-...
softname-version-...

# 逐个卸载
rpm -e --nodeps softname-version-...
rpm -e --nodeps softname-version-...

# 删除软链接
rm -f /soft_bin/softname

# 删除相关目录
rm -rf /soft_bin/soft-dir
rm -rf /data/soft-data

# 删除相关环境变量设置
vim /etc/profile

# 刷新环境变量
source /etc/profile

# 确认卸载
softname --version

修改主机名(可选、参考)

# 修改主机名
hostnamectl set-hostname newhostname
# 重启生效
reboot
# 立刻关机
shutdown now

配置python2/3环境(可选、参考)

# 安装依赖项
yum install -y openssl-devel curl nss libcurl
# 安装pip需要先安装epel-release包
yum install -y epel-release
yum install -y python # 一般系统默认已经集成
# 安装python3
yum install -y python3
# 安装openssl-devel
yum install -y libffi-devel python-devel openssl-devel

# 安装pip
yum install -y python-pip
yum install -y python3-pip
# 升级pip
pip install --upgrade pip
pip3 install --upgrade pip

CentOS 8.x下安装并设置Go语言环境

下载、安装与设置

以go 1.19.2为例,先下载并安装:

# 下载,下载地址可以在go语言中文网复制
wget https://studygolang.com/dl/golang/go1.19.2.linux-amd64.tar.gz
# 解压缩到/usr/local/go
sudo tar -C /usr/local -xzvf go1.19.2.linux-amd64.tar.gz

也可以分步骤操作,先解压缩,再移动到目标位置

# 先解压缩
tar -xzvf go1.19.2.linux-amd64.tar.gz
# 然后移动到/usr/local下
mv go /usr/local/

然后设置环境变量:

sudo vim /etc/profile
Go
InsertvimInsert
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Esc:wq

执行命令刷新环境变量:

source /etc/profile

验证安装:

go version
echo $GOROOT
echo $GOPATH

设置模块代理

https://goproxy.cn
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
Go

CentOS 8.x下安装node.js

下载node.js安装包

# 下载node.js安装包,官方下载
wget https://nodejs.org/dist/v16.18.0/node-v16.18.0-linux-x64.tar.xz

解压缩并安装

# 准备安装目标路径
mkdir /opt/node
# 解压缩
tar -xvf node-v16.18.0-linux-x64.tar.xz
# 移动node文件到目标位置
mv ./node-v16.18.0-linux-x64/* /opt/node
# 删除当前路径下的空文件夹
rm -rf ./node-v16.18.0-linux-x64

配置node 环境变量

vim /etc/profile

追加环境变量

InsertvimInsert
export NODE_HOME=/opt/node
export PATH=$PATH:$NODE_HOME/bin
export NODE_PATH=$PATH:$NODE_HOME/lib/node_modules
Esc:wq

刷新环境变量,使配置生效

source /etc/profile

验证node安装

node -v
npm -v

npm镜像配置

提示: 如果是香港区服务器,不要设置内地镜像站,否则会很慢

npm config set registry https://registry.npm.taobao.org

安装yarn等组件

cd /opt/node
# 该命令实测需要root操作
npm install -g yarn
yarn --version
# 安装vue-cli
npm install -g @vue/cli

安装淘宝node镜像及cnpm

提示: 如果是香港区服务器,不要设置内地镜像站,否则会很慢

npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install
node.js

CentOS 8.x下安装docker

安装依赖项

yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker依赖项containerd.io
yum install -y containerd.io

安装docker-ce

yum install -y docker-ce docker-ce-cli

配置docker镜像站

docker
mkdir /etc/docker
vim /etc/docker/daemon.json

输入以下内容:

InsertvimInsert
{"registry-mirrors":["https://3wzyb32e.mirror.aliyuncs.com"]}
Esc:wq
docker

设置开机自启动

systemctl enable docker
# 启动docker
systemctl start docker

验证安装

docker version
# 查看配置
docker info
docker ps

修改docker存储路径(可选)

docker
docker/data/docker
Docker/var/lib/docker
# 准备数据目录
mkdir -p /data/docker

# 修改docker.service文件 
vim /lib/systemd/system/docker.service
ExecStart ExecStart 
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
--graph=/data/docker --storage-driver=overlay2--graphdocker

把上面的默认配置改成以下内容:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --graph=/data/docker --storage-driver=overlay2
--graph=/data/dockerdocker

刷新配置,重启docker

systemctl daemon-reload
systemctl restart docker

查看docker信息

docker info

看到如下信息即为生效:

Docker Root Dir: /data/docker
docker

CentOS 8.x下安装docker-compose

正常安装

yum install -y docker-compose
# 验证安装
docker-compose version

curl安装

curl
# 自适应平台参数下载
curl -L https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 赋予docker-compose可执行权限
chmod +x /usr/local/bin/docker-compose

提示:需要服务器能够访问github,推荐的安装方式

也可直接指定平台参数下载:

# linux-x86_64
sudo curl -L https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-linux-x86_64 > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# linux-armv7
sudo curl -L https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-linux-armv7 > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

pip安装

pythonpythonpip

提示:实测该方式容易出错,不推荐

# 安装pip
yum -y install epel-release
yum -y install python3-pip
pip3 install --upgrade pip3
# 安装docker-compose
pip3 install docker-compose

验证安装

docker-compose version
docker-compose

docker部署redis

dockerredis
docker run --name redis --publish 6379:6379 --restart always -d redis:latest

docker部署mysql

警告:在生产环境的服务器上暴露数据库端口是危险操作,应在服务器端完成数据库创建和维护,并严格把数据库的访问权限限制在服务器集群内网。

mysql 5.7
docker run --name mysql -p 3306:3306 --privileged=true --restart=always -e MYSQL_ROOT_PASSWORD=restar@503 -d mysql:5.7
8.0.30
docker run --name mysql -p 3306:3306 --privileged=true --restart=always -e MYSQL_ROOT_PASSWORD=restar@503 -d mysql:8.0.30
MYSQL_ROOT_PASSWORDmysqlroot

docker-compose编排(参考)

vim docker-compose.yml
InsertvimInsert
version: '2'
services:
  mysql:
    container_name: mysql
    image: mysql:latest
    privileged: true
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: restar@503
    ports:
      - 3306:3306
#    network_mode: "host"
#    hostname: mysql

  redis:
    container_name: redis
    image: redis:latest
    restart: always
    ports:
      - 6379:6379
    command: redis-server --port 6379 --requirepass "restar@501"
#    network_mode: "host"
#    hostname: redis
Esc:wq
--requirepassredis

docker-compose容器控制

docker-compose.yml
# 构建所有镜像
docker-compose build
# 启动所有容器
docker-compose up -d
# 停止所有容器
docker-compose stop
# 停止并删除所有容器
docker-compose down
docker-compose
CentOS 8.xGo

dockerfile编制(参考)

该操作可用于生产部署,为补充内容

gogolangqrdemovim Dockerfile
InsertvimInsert
FROM alpine:latest

MAINTAINER from HIST by restar

# 设置alpine镜像源,设置时区等
RUN echo -e "https://mirror.tuna.tsinghua.edu.cn/alpine/latest-stable/main\nhttps://mirror.tuna.tsinghua.edu.cn/alpine/latest-stable/community" > /etc/apk/repositories && \
    #apk update && apk upgrade && \
    apk add --no-cache tzdata && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" >> /etc/timezone && \
    # Alpine Linux doesn't use pam, which means that there is no /etc/nsswitch.conf,
    # but Golang relies on /etc/nsswitch.conf to check the order of DNS resolving
    # (see https://github.com/golang/go/commit/9dee7771f561cf6aee081c0af6658cc81fac3918)
    # To fix this we just create /etc/nsswitch.conf and add the following line:
    echo "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4" >> /etc/nsswitch.conf && \
    mkdir -p /restar/config && mkdir -p /restar/logs

# 复制配置文件
COPY ./config /restar/config/

# 复制主程序
COPY ./qrdemo /restar/

# 设置工作路径
WORKDIR /restar

# 发布宿主机映射路径
VOLUME /restar/logs

# 开放端口8080
EXPOSE 8080

# 延迟启动,等待mysql就绪
CMD sleep 60;/restar/qrdemo --release=true --port=8080 --logdir="/restar/logs"
Esc:wq

docker-compose集成编排(参考)

docker-compose.yml
version: '2'
services:
  mysql:
    container_name: mysql
    image: mysql:latest
    privileged: true
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: restar@503
    ports:
      - 3306:3306
#    network_mode: "host"
#    hostname: mysql

  redis:
    container_name: redis
    image: redis:latest
    restart: always
    ports:
      - 6379:6379
    command: redis-server --port 6379 --requirepass "restar@501"
#    network_mode: "host"
#    hostname: redis

  qrdemo:
    build:
      context: ./
    container_name: qrdemo
    image: qrdemo:latest
    privileged: true
    restart: always
    depends_on:
      - mysql
    ports:
      - 8080:8080
    volumes:
      - /data/restar/logs:/restar/logs
#    network_mode: "host"
#    hostname: qrdemo
dockerhost
# 配置host发现
echo -e "127.0.0.1   mysql\n127.0.0.1   redis\n127.0.0.1   qrdemo" >> /etc/hosts

前端构建、部署与编排相关内容暂时搁置。

更进一步的内容,及若干细节,请具体问题具体分析。