VPS环境搭建及配置

news2024/6/29 13:20:02

VPS简介

VPS(Virtual Private Server)是一种虚拟化技术,可以将一台物理服务器分成多个虚拟服务器,每个虚拟服务器都有独立的操作系统和资源,相互之间互不影响。VPS可以提供类似于独立服务器的功能,但价格更便宜,适合中小企业和个人用户使用。VPS可以用于网站托管、应用程序部署、游戏服务器、数据备份等各种场景。

# VPS购买

国内常见的VPS服务提供商

阿里云-计算,为了无法计算的价值 (aliyun.com)

腾讯云-产业智变·云启未来 - 腾讯 (tencent.com)

华为云-共建智能世界云底座- (huaweicloud.com)

# VPS镜像选择

总的来说,根据自己的需求进行选择

PS:图为阿里云实例创建界面截图

我个人习惯使用 Ubuntu,版本选择最新版即可

有些会提供自动安装指定应用的服务器,如果单纯只是运行指定应用服务,那么可以选择,个人觉得没有必要

一般选择基础操作系统,然后所有的应用都是可以自己手动安装的

# VPS配置

# SSH登录

1.SSH服务允许root登录

# 编辑SSH服务配置文件
vim /etc/ssh/sshd_config

# 添加以下内容,允许root登录
PermitRootLogin yes

# 重启SSH服务
systemctl restart ssh

2.SSH登录工具

WindTerm、MobaXterm

使用SSH连接工具,连接VPS,一般SSH连接工具需要我们输入以下三个部分的内容:

  • IP:VPS公网IP
  • 用户名:root
  • 密码:root用户的密码

# APT源配置

cat /etc/apt/sources.list

一般国内VPS,都默认配置了国内镜像源,因此无需进行配置

# 更新源
apt update

如果默认不是国内镜像源,可以采用以下国内APT软件源:

Ubuntu 软件仓库(tsinghua.edu.cn)

Ubuntu镜像(aliyun.com)

Ubuntu 源使用帮助(ustc.edu.cn)

注意:修改完软件源后需要执行apt update更新软件源

# 安全组

安全组是一种虚拟防火墙,具备有状态的数据包过滤功能,用于设置云服务器、负载均衡、云数据库等实例的网络访问控制,控制实例级别的出入流量,是重要的网络安全隔离手段。

可以通过配置安全组规则,允许或禁止安全组内的实例的出流量和入流量。

阿里云添加安全组规则

腾讯云添加安全组规则

华为云添加安全组规则

建议:学习阶段,可以把安全组规则限制放开,允许所有主机对VPS所有端口的访问,避免操作过程中出现因为安全组规则问题导致操作无法实现

注意:当你碰到VPS服务端口无法访问时,记得检查以下安全组规则是否允许访问对应端口

# VPS环境安装

# Docker安装

在Ubuntu上安装Docker引擎

1.运行以下命令卸载所有冲突的包

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

2.添加Docker的官方GPG密钥

sudo apt-get update

sudo apt-get install ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

3.将存储库添加到APT源

  • 官方存储库(国内安装可能会很慢)
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
  • 国内镜像源-清华源(推荐)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

4.安装 Docker 软件包

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

5.验证 Docker 是否成功安装

docker --version

# MSF安装

Metasploit 安装

# Linux官方安装(不推荐)
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall

官方提供的安装方式十分缓慢

推荐采用如下方式

# APT安装(推荐)

1.添加Kali软件源

cat >> /etc/apt/sources.list << EOF
deb https://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src https://mirrors.aliyun.com/kali kali-rolling main non-free contrib
EOF

2.更新软件源

apt update

出现如下错误:

解决方法:

wget -q -O - https://archive.kali.org/archive-key.asc | apt-key add

3.安装

apt install metasploit-framework

安装过程中如果出现如下问题:

执行如下命令:

apt --fix-broken install

apt install metasploit-framework

# Python环境安装

系统自带python3

python3 -V

1.安装miniconda3

通过安装 Miniconda3,用户可以方便地创建自己的 Python 开发环境,而无需一次性安装大量不必要的软件包。同时,通过 Conda 包管理器,用户可以轻松地安装、更新和管理 Python 包及其依赖项。

https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /miniconda.sh

bash /miniconda.sh -b -p /miniconda3

rm -rf /miniconda.sh

miniconda3添加到环境变量:

-bash

cat >> ~/.bashrc << EOF
export PATH=/miniconda3/bin:\$PATH
EOF

-zsh

cat >> ~/.zshrc << EOF
export PATH=/miniconda3/bin:\$PATH
EOF

2.启动conda虚拟环境

conda activate

问题:执行后报错

解决方法:

获得环境路径

conda info | grep -i 'base'
		base environment : /miniconda3  (writable)

加载conda.sh脚本

source /miniconda3/etc/profile.d/conda.sh

-bash

cat >> ~/.bashrc << EOF
source /miniconda3/etc/profile.d/conda.sh
EOF

-zsh

cat >> ~/.zshrc << EOF
source /miniconda3/etc/profile.d/conda.sh
EOF
  1. conda换源
vim ~/.condarc
channels:
  - defaults
show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
# 清除索引缓存
conda clean -i

# 查看配置
conda config --show

4.conda使用

# 列出所有Conda环境
conda env list

# 列出当前环境中安装的所有包
conda list

# 创建一个名为 "py39" 的虚拟环境,并指定使用 Python 3.9 版本
conda create -n py39 python=3.9

# 激活名为 "py39" 的虚拟环境
conda activate py39

# 退出当前的虚拟环境
conda deactivate

# 在当前 Conda 环境中安装 requests 包
conda install requests

# 删除名为"py39"的虚拟环境以及其所有安装的包
conda remove -n py39 --all

# 删除指定虚拟环境中安装的特定包
conda remove -n <env name> <package name>

# Java环境安装

OpenJDK 是一个开源的、免费的 Java 开发工具包,适合于大多数的开发需求。

OracleJDK 包含了一些额外的商业功能和工具,同时在商业环境下需要考虑相关的许可证费用。

OpenJDK 和 Oracle JDK 在基本的 Java 核心功能上是一样的,但是在一些高级功能和工具上可能存在一些差异,例如一些特定于 Oracle 的工具和功能可能只包含在 Oracle JDK 中。

# OracleJDK安装

1.下载JDK安装包

这里以JDK8u333为例:

下载JDK: https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

需要登录Oracle账号,Oracle账号共享: http://bugmenot.com/view/oracle.com

下载后压缩包名字为:jdk-8u333-linux-x64.tar.gz,上传压缩包到VPS

2.创建目录解压文件

sudo mkdir -p /usr/local/java

sudo cp jdk-8u333-linux-x64.tar.gz /usr/local/java

cd /usr/local/java

sudo tar -zxf jdk-8u333-linux-x64.tar.gz

3.通知系统Java的位置

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_333/bin/java" 1112

sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_333/bin/javac" 1112

# OpenJDK安装

1.搜索软件包列表中的OpenJDK

# 通过 apt-cache search 命令搜索包含 "java" 的软件包列表
apt-cache search java | grep jdk

2.apt安装openjdk-11

apt install openjdk-11-jdk

安装后的路径:/usr/lib/jvm/java-11-openjdk-amd64/bin/java

3.通知系统Java的位置

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/java-11-openjdk-amd64/bin/java" 1113

sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/java-11-openjdk-amd64/bin/javac" 1113

# apt安装openjdk-17
apt install openjdk-8-jre-headless
apt install openjdk-8-jdk-headless
# Java版本切换

update-alternatives:是一个在Debian和Ubuntu系统中用于管理系统中软件的符号链接的命令。它允许系统管理员将系统中的软件链接到不同的位置,从而允许在不同的软件之间进行切换或选择默认的软件。

# 列出系统中所有可用的Java运行时环境的符号链接
update-alternatives --list java

# 选择默认的Java运行时环境
update-alternatives --config java

# Go环境安装

# 下载安装

https://go.dev/dl/

这里以版本go1.20.11、go1.21.4为例

  • go1.20.11
wget https://go.dev/dl/go1.20.11.linux-amd64.tar.gz
mkdir -p /usr/local/go1.20
tar -C /usr/local/go1.20 -xzf go1.20.11.linux-amd64.tar.gz
  • go1.21.4
wget https://go.dev/dl/go1.21.4.linux-amd64.tar.gz
mkdir -p /usr/local/go1.21
tar -C /usr/local/go1.21 -xzf go1.21.4.linux-amd64.tar.gz
# 管理Go版本
sudo update-alternatives --install "/usr/bin/go" "go" "/usr/local/go1.21/go/bin/go" 1114

sudo update-alternatives --install "/usr/bin/go" "go" "/usr/local/go1.20/go/bin/go" 1115
  • 切换go版本
update-alternatives --list go
update-alternatives --config go
# GOPATH

GOPATH 是 Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录。

从 github 下载别人的包:

go get github.com/jmoiron/sqlx

这个包会下载到我们本地 GOPATH 目录下的 src/github.com/jmoiron/sqlx

GOPATH 可以设置多个,其中,第一个将会是默认的包目录,使用 go get 下载的包都会在第一个path中的src目录下,使用 go install 时,在哪个GOPATH中找到了这个包,就会在哪个GOPATH下的bin目录生成可执行文件

# GOENV
# 查看 Go 环境变量
go env
# GO111MODULE
go env -w GO111MODULE=on

GO111MODULE 有三个值:off、on、auto(默认值)

  • GO111MODULE=off

go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。

  • GO111MODULE=on

go命令行会使用modules,而一点也不会去GOPATH目录下查找。

执行如下命令生成 go.mod 文件

go mod init
go mod tidy
  • GO111MODULE=auto

默认值,go 命令行将会根据当前目录来决定是否启用 module 功能。这种情况下可以分为两种情形:

  • 当前目录在 GOPATH/src 之外且该目录包含 go.mod 文件
  • 当前文件在包含 go.mod 文件的目录下面。

当 modules 功能启用时,依赖包的存放位置变更为 $GOPATH/pkg ,允许同一个 package 多个版本并存,且多个项目可以共享缓存的 module

1.使用了相对路径:

import "./models" 

报错:build command-line-arguments: cannot find module for path /D/dev这里后面一堆本地路径

这是因为在 go module 下 你源码中 impot …/ 这样的引入形式不支持了, 应该改成 impot 模块名/ 。 这样就ok了

2.使用结合了GOPATH的形式:

import "Go-Player/src/ademo/models" 

于是我们把上面的import改成了结合GOPATH的如上形式

报错:package Go-Player/src/ademo/models is not in GOROOT D:/development/go/src/GPlayer/src/ademo/models

3.彻底解决方法

用 go env -u 恢复初始设置,不再使用 go mod

# 设置env
go env -w GO111MODULE=off
go env -w GO111MODULE=auto

# 取消设置env
go env -u GO111MODULE

区别在于,如果 GO111MODULE=on 或者auto,在go get下载包时候,会下载到GOPATH/pkg/mod,引入时也是同样的从这个目录开始。如果运行了上述命令,那么在go get下载包时候,会下载到 GOPATH/src 目录下

# GOPROXY
go env -w GOPROXY=https://goproxy.cn,direct

go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct

go env -w GOPROXY=https://goproxy.io/,direct
# Go命令
bug: 启动一个Bug报告
build: 编译包和依赖,编译指定源码文件、代码包以及它们的依赖包
clean: 移除对象文件和缓存文件,删除执行其他命令时产生的一些文件和目录
doc: 显示包或符号的文档,打印go语言程序实体的文档
env: 打印Go环境变量信息
fix: 更新包以使用新的API,把指定代码包的所有go语言源码文件中的旧版本代码修正为新版本代码
fmt: 重新格式化包源代码
generate: 通过处理源代码生成Go文件
get: 将依赖项添加到当前模块并安装它们,从互联网下载或更新代码包及其依赖,并对它们进行编译和安装
install: 编译并安装包和依赖项,用于编译并安装指定的代码包及它们的依赖包
list: 列出包或模块
mod: 模块维护
work: 工作区维护
run: 编译并运行Go程序
test: 测试包,对go语言编写的程序进行测试
tool: 运行指定的go工具
version: 打印Go版本
vet: 报告包中可能的错误,用于检查go语言源码中静态错误的简单工具

使用例子

git clone https://github.com/tangxiaofeng7/CVE-2023-32315-Openfire-Bypass.git
cd CVE-2023-32315-Openfire-Bypass/scan_all
go mod tidy

# 运行
go run main.go -h

# 编译
go build -o CVE-2023-32315

# 执行
./CVE-2023-32315 -h

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

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

相关文章

Nuxt3 的生命周期和钩子函数(二)

title: Nuxt3 的生命周期和钩子函数&#xff08;二&#xff09; date: 2024/6/26 updated: 2024/6/26 author: cmdragon excerpt: 摘要&#xff1a;本文深入介绍了Nuxt.js框架中几个关键的生命周期钩子函数&#xff0c;包括app:redirected&#xff08;SSR环境下重定向前触发…

关于Vite+Vue+Ts WebStorm路径别名的问题

一、准备一个项目 二、在 vite.config.js 中添加 resolve: {alias: {: /src}} 三、tsconfig.app.json中添加代码 //添加代码"baseUrl": ".","paths": {"/*": ["src/*"]}把src的一个文件修改路径为开头 四、安装插件 npm i …

从音频中提取MFCC特征的过程

在语音信号处理和语音识别领域&#xff0c;梅尔频率倒谱系数&#xff08;MFCC&#xff09;是最常用的特征之一。本文将逐步介绍如何从音频中提取MFCC特征&#xff0c;并在每个步骤中进行可视化展示。 步骤 1&#xff1a;加载音频文件并查看波形 首先&#xff0c;我们需要加载…

安装与配置:MySQL的环境搭建之旅(二)

目录 引言&#xff1a;从理论到实践的跨越 一、安装MySQL&#xff1a;跨平台的便捷指南 Windows环境 Linux环境 macOS环境 二、基本配置&#xff1a;端口设置与字符集选择 三、从零到一的蜕变 引言&#xff1a;从理论到实践的跨越 在前一章节《MySQL简介》中&#xff0c…

力扣随机一题 6/26 哈希表 数组 思维

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 题目一&#xff1a; 2869.收集元素的最少操作次数【简单】 题目&#xff…

Flutter实现页面间传参

带参跳转 步骤 在router中配置这个路由需要携带的参数,这里的参数是 arguments,注意要用花括号包裹参数名称 在相应组件中实现带参构造函数 在state类中可以直接使用${widget.arguments}来访问到传递的参数 在其他页面中使用Navigator.pushNamed()带参跳转

【课程总结】Day11(中):手势图像识别实战(Vgg16和ResNet)

前言 在上一章《【课程总结】Day11&#xff08;上&#xff09;&#xff1a;手势图像识别实战(LeNet模型)》课程中&#xff0c;我们通过使用LeNet模型实现了手势识别。在本章内容中&#xff0c;我们将搭建Vgg模型和ResNet模型&#xff0c;并应用到手势识别中。 Vgg模型 Vgg简…

黑马点评06短信登录-用户请求和会话管理过程

用户请求发送&#xff1a; 用户的浏览器向服务器发送请求&#xff08;例如&#xff0c;访问网页或提交表单&#xff09;。请求头包含之前存储在浏览器中的Cookie&#xff0c;其中包括会话ID&#xff08;Session ID&#xff09;。 服务器接收请求&#xff1a; 服务器接收到用户的…

智慧城市:数据可视化如何提升城市管理

数据可视化在智慧城市中有何应用&#xff1f;随着城市化进程的加快和信息技术的飞速发展&#xff0c;智慧城市的建设成为全球各大城市追求的目标。而数据可视化技术作为智慧城市的重要组成部分&#xff0c;通过将复杂的数据转化为直观、易理解的图表和图形&#xff0c;极大地提…

c#关键字 ArgumentOutOfRangeException .? IEnumerable string.Join

c# ArgumentOutOfRangeException ArgumentOutOfRangeException 是 C# 中表示某个参数值超出了方法或属性定义的有效范围时引发的一个异常。这个异常通常在尝试访问数组、集合、字符串等的无效索引&#xff0c;或者当传递给方法或属性的参数不在其有效范围内时发生。 例如&…

Rill Data:实时数据分析的未来

欢迎来到 Rill Rill是从数据湖到仪表板的最快路径。 rilldata 与大多数 BI 工具不同&#xff0c;Rill 带有自己的嵌入式内存数据库。数据和计算位于同一位置&#xff0c;查询以毫秒为单位返回。 因此&#xff0c;您可以即时透视、切片和深入研究数据。 下载 Rill 开始建模数…

写程序100道41-50

41.定义一个Father和Child类&#xff0c;并进行测试。 要求如下&#xff1a; (1)Father类为外部类&#xff0c;类中定义一个私有的String类型的属性name&#xff0c;name的值为“Join”。 (2)Child类为Father类的内部类&#xff0c;其中定义一个readName()方法&#xff0c;方…

【数据结构初阶】--- 归并排序

归并排序 递归递归的思路归并的步骤&#xff1a;代码示例 非递归快排为什么可以用栈模拟&#xff1a;归并可以用栈模拟吗&#xff1f;非递归的思路初版代码示例问题&#xff1a;越界 时间复杂度针对递归的优化小区间优化 递归 递归的思路 归并的前提是需要两个有序的区间&…

LLM大模型算法学习资源持续整理

文章目录 waytoagiLLM101llm-coursellm-cookbook waytoagi 飞书文档写的AGI知识库。 https://www.waytoagi.com/ LLM101 karpathy更新中的大模型教程&#xff1a; https://github.com/karpathy/LLM101n llm-course Course to get into Large Language Models (LLMs) wi…

【前端】实现时钟网页

【前端】实现时钟网页 文章目录 【前端】实现时钟网页项目介绍代码效果图 项目介绍 时钟显示在网页中央&#xff0c;并且使网页能够切换白天和夜晚两种模式。搭建基本的html结构&#xff0c;动态得到实时的时&#xff0c;分&#xff0c;秒 通过Date()函数获得。将得到的数字根…

单片机学习记录

一&#xff0c;单片机及开发板介绍 1&#xff0c;基本介绍 单片机&#xff0c;英文Micro Controller Unit&#xff0c;简称MCU内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能单片机的任务是信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(…

SpringBoot整合拦截器和日期转换器

一、SpringBoot整合拦截器 1.添加拦截器 package com.by.interceptor;import com.by.pojo.User; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import java…

程序员如何用ChatGPT解决常见编程问题:实例解析

引言 在现代编程的世界中&#xff0c;技术进步日新月异&#xff0c;程序员们面临着各种各样的挑战和问题。解决这些问题的过程中&#xff0c;找到合适的工具至关重要。ChatGPT作为一种先进的人工智能语言模型&#xff0c;能够帮助程序员迅速、高效地解决常见的编程问题。本文将…

【Liunx-后端开发软件安装】Liunx安装FDFS并整合nginx

【Liunx-后端开发软件安装】Liunx安装nacos 文章中涉及的相关fdfs相关软件安装包请点击下载&#xff1a; https://download.csdn.net/download/weixin_49051190/89471122 一、简介 FastDFS是一个开源的轻量级分布式文件系统&#xff0c;它对文件进行管理&#xff0c;功能包括…

揭秘循环购模式:消费即投资,边消费边赚钱!

大家好&#xff0c;我是你们的电商顾问吴军。今天&#xff0c;我将带大家走进一个引人瞩目的商业模式——循环购模式。你可能会好奇&#xff0c;为何有商家能如此慷慨&#xff0c;消费1000元就送2000元&#xff1f;每天还有额外的现金收入&#xff1f;这背后究竟隐藏着怎样的秘…