Linux 服务器搭建配置,开发效率一飞冲天 - Centos 篇
大家好,我是比特桃。最近白嫖了一台 Centos 云服务器,用来做日常开发,特此记录一下搭建配置的过程。
我之前有篇文章是基于 Ubuntu 的:Linux 服务器搭建配置,开发效率一飞冲天 - Ubuntu 篇
如同个人电脑一样,每个人都有各自的喜好及需求。我个人用的所有终端,都遵循大道至简的基本思想。其含义就是:软件能不多装就不多装,能简化就尽量简化。一切原生化,只在乎让它干活的专注性,不希望有太多花里胡哨的东西。
一、安全加固
行走江湖之前,必须把防护工作做好。要不然很容易被人攻击,到时候备份迁移得不偿失。我们先更新一下系统:
sudo yum clean all
sudo yum update -y
sudo reboot
所有人都知道 Linux 服务器的 ssh 默认端口是 22,超级管理员账号是 root。所以我们先把这些默认值的给改了,并且不允许密码登录,只通过秘钥认证:
yum list installed | grep openssh-server
// 如果没有安装
yum install openssh-server
vim /etc/ssh/sshd_config
将相关配置改成如下所示:
Port 666
PasswordAuthentication no
UseDNS no
PubkeyAuthentication yes
在让配置生效之前,我们现将手头的这台电脑的公钥给传上去。(不然待会自己都没法访问了,别问我怎么知道的。)
vim ~/.ssh/authorized_keys
创建开机自启,并重启将配置生效。
systemctl enable sshd.service
systemctl restart sshd
除此之外,云服务器还需要在云厂商防火墙的基础上,再使用系统自带的防火墙做二道防护。Centos 自带的是 Firewall,Ubuntu自带的是 ufw。
firewall-cmd --state
systemctl start firewalld.service
// 开机自启
systemctl enable firewalld.service
// 开放/取消 防火墙端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --remove-port=80/tcp --permanent
// 查看目前防火墙规则
firewall-cmd --list-ports
// 载入防火墙配置
firewall-cmd --reload
systemctl restart firewalld.service
二、原生软件
我们将常用且不会随意切换变动的软件,通过原生安装。
// Java
yum -y install java-11-openjdk// Maven
yum -y install maven// 切换默认 Java 版本
update-alternatives --config java// Node
curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
yum -y install nodejs// Nginx
sudo yum -y install nginx
sudo systemctl enable nginx
sudo service nginx start # 启动 nginx 服务
sudo service nginx stop # 停止 nginx 服务
sudo service nginx restart # 重启 nginx 服务
sudo service nginx reload # 重新加载配置
其实这些软件也完全可以通过容器安装,但我个人需求是通过这台服务器的 Gitlab Runner 实现最基本的自动化部署,所以需要这些软件原生化。
sudo yum install gitlab-runner
Gitlab Runner 可以实现注册到 Gitlab 上,通过脚本实现自动部署应用到服务器上。比如我可以将这台服务器上的 Runner,监听我 Gitlab 中某一个分支,一旦更新代码即可自动在这台服务器上实现更新部署。关于如何实现服务器自动化部署,可以参考我这篇文章:基于Gitlab Runner 快速实现 Gitlab 自动部署
三、容器软件
下面我们安装容器的基石 Docker,可直接参考官网:
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
由于我这台机器是 VSP,大容量的磁盘我挂载到了 /data
目录下。其 Centos 系统自带的目录容量很小,Docker 默认将容器存储路径放到了/var/lib/docker
。我们后面会有大量的容器使用,这会存在系统盘爆满的隐患。所以需要修改 Docker 默认的存储路径:
// 将原目录复制到想要切换的位置
cp -a /var/lib/docker /data/docker/
// 备份
mv -u /var/lib/docker /var/lib/docker.bak
// 关闭 Docker
sudo systemctl stop docker
// 创建软连接
sudo ln -fs /store/software/docker /var/lib/docker
// 重启生效
sudo systemctl start docker
# or
sudo service docker start
然后就可以开心的部署容器了,这块其实大家根据自身需求来就行,常见的 Docker 命令可以参考我这篇文章:Docker实用命令手册。
下面是我这次 Centos 需要用到的容器:
Gitlab,可参考官网:
// 设置 Gitlab 容器映射本机路径
export GITLAB_HOME=/data/software/gitlab
sudo docker run --detach \--hostname baidu.com \--publish 8001:8001 --publish 8003:80 --publish 8002:8002 \--name gitlab \--restart always \--volume $GITLAB_HOME/config:/etc/gitlab \--volume $GITLAB_HOME/logs:/var/log/gitlab \--volume $GITLAB_HOME/data:/var/opt/gitlab \--shm-size 256m \gitlab/gitlab-ce:latest
这里说明一下这三个端口,8001是https,8003是80端口,8002是ssh端口。8003是我们刚启动容器后,进入调试用的,默认账号root
密码执行下面命令查看。
docker exec -it 容器名字或容器ID grep 'Password:' /etc/gitlab/initial_root_password
然后进入容器,配置 https 证书、邮件服务、功能配置等。
docker exec -it gitlab /bin/bash
编辑/etc/gitlab/gitlab.rb
文件,还记得我们映射的 https 和 ssh 端口嘛,就是在这里修改成我们需要的 8001、8002,这样用户在网页上直接复制的时候也是这俩地址。Gitlab 的所有配置都通过这个文件,其它文件不用动。
// 将gitlab.rb配置文件生效,如果有错误可看到非常明确的日志进行修改
gitlab gitlab-ctl reconfigure
// 重启 gitlab
gitlab gitlab-ctl restart
// 进入控制台,测试邮件服务是否可用
gitlab-rails console
Notify.test_email('收件人邮箱', 'title', 'body').deliver_now
MongoDB:
docker run -d --name mongo --restart=always -p 8016:27017\-e MONGO_INITDB_ROOT_USERNAME=admin \-e MONGO_INITDB_ROOT_PASSWORD=123456 \mongo --auth
禅道:
docker run -it \-v /data/software/zentao:/data \-p 8018:80 \-e MYSQL_INTERNAL=false \-e ZT_MYSQL_HOST=172.18.56.66 \-e ZT_MYSQL_PORT=8004 \-e ZT_MYSQL_USER=root \-e ZT_MYSQL_PASSWORD=123456! \-e ZT_MYSQL_DB=zentao \-e PHP_MAX_EXECUTION_TIME=300 \-e PHP_POST_MAX_SIZE=512M \-e PHP_UPLOAD_MAX_FILESIZE=512M \-d hub.zentao.net/app/zentao:18.5
四、总结
这是我周末刚装的一台云服务器的记录文章,如果对你有帮助的话,希望给我点个赞。有问题可以留言交流~
相关文章:
Linux 服务器搭建配置,开发效率一飞冲天 - Centos 篇
大家好,我是比特桃。最近白嫖了一台 Centos 云服务器,用来做日常开发,特此记录一下搭建配置的过程。 我之前有篇文章是基于 Ubuntu 的:Linux 服务器搭建配置,开发效率一飞冲天 - Ubuntu 篇 如同个人电脑一样࿰…...

Day46|leetcode 139.单词拆分
leetcode 139.单词拆分 题目链接:139. 单词拆分 - 力扣(LeetCode) 视频链接:动态规划之完全背包,你的背包如何装满?| LeetCode:139.单词拆分_哔哩哔哩_bilibili 题目概述 给你一个字符串 s 和一…...
深入理解高并发编程 - Thread 类的 stop () 和 interrupt ()
stop() stop() 方法被用于停止线程。然而,需要注意的是,stop() 方法已经被标记为已废弃(deprecated),并且不推荐使用。这是因为使用该方法可能导致不可预料的问题和数据不一致性,因此它被认为是不安全的。…...

C语言之三子棋游戏实现篇
目录 主函数test.c 菜单函数 选择实现 游戏函数 (函数调用) 打印棋盘数据 打印展示棋盘 玩家下棋 电脑下棋 判断输赢 循环 test.c总代码 头文件&函数声明game.h 头文件的包含 游戏符号声明 游戏函数声明 game.h总代码 游戏函数ga…...

jupyter notebook 插件nbextensions的安装
安装步骤: 1、打开 jupyter notebook,新建一个 python 文件; 2、 分别输入以下代码,然后运行,出现 warning 不影响使用,如果出现 errors,则说明下载有问题: !python -m pip install…...

Spring boot 集成单元测试
1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency> 2. 3.编写测试类 package com.enterprise;import com.enterpr…...

基于C++的QT实现贪吃蛇小游戏
文章目录: 一:效果演示 二:实现思路 三:代码实现 widget.h widget.cpp main.cpp 一:效果演示 效果图◕‿◕✌✌✌ 代码下载 二:实现思路 通过按键控制蛇的移动,每吃一个商品蛇身就会加长…...

Spring Boot整合RabbitMQ之路由模式(Direct)
RabbitMQ中的路由模式(Direct模式)应该是在实际工作中运用的比较多的一种模式了,这个模式和发布与订阅模式的区别在于路由模式需要有一个routingKey,在配置上,交换机类型需要注入DirectExchange类型的交换机bean对象。…...

行式存储与列式存储
1.概述 数据处理大致可分为两大类,联机事务处理OLTP(on-line transaction processing) 和联机分析处理OLAP(on-line analytical processing)。 OLTP是传统关系型数据库的主要应用,用来执行一些基本的、日常的事务处理,比如数据库记录的增、删…...

windows上sqlserver的ldf日志文件和数据mdf文件分别放到不同的磁盘
之前我的windows上已安装好了sqlserver2017,有一个名为TestDb的数据库。ldf文件和mdf文件都一起放在D:\Database目录下。现在需要把ldf日志文件到E盘的database目录下。 重要的事情先说三遍 先停止网关(例如nginx)并备份数据库 先停止网关&am…...

vue3+uni——watch监听props中的数据(组件参数接收与传递defineProps、defineEmits)
案例说明 A页面引用的子组件B A页面 <template><view>//引用组件<serviceOrder change"change" :list"list" :current"type"></serviceOrder></view> </template><script setup>import serviceOrd…...

mybatis与spring集成与spring aop集成pagehelper插件
Mybatis与Spring的集成 Mybatis是一款轻量级的ORM框架,而Spring是一个全栈式的框架,二者的结合可以让我们更加高效地进行数据持久化操作。 Mybatis与Spring的集成主要有两种方式:使用Spring的Mybatis支持和使用Mybatis的Spring支持。 使用…...

Mybatis基础
...

TypeScript-- 配置Typescript环境(1)ts 转js,tsc --watch 实时编译
文章目录 安装Typescript判断是否有运行权限编写第一Typescript文件手动编译Ts文件转Js文件实时编译 安装Typescript npm install -g typescript 判断是否有运行权限 命令行运行 tsc -v 遇到了权限问题 用管理员打开window自带的powershell 运行如下指令即可: Set-…...

Dockerfile快速搭建自己专属的LAMP环境,生成镜像lamp:v1.1,并推送到私有仓库
环境: CentOS 7 Linux 3.10.0-1160.el7.x86_64 具体要求如下: (1)基于centos:6基础镜像; (2)指定作者信息; (3)安装httpd、mysql、mysql-server、php、ph…...

Lottery抽奖项目学习第二章第一节:环境、配置、规范
Lottery抽奖项目学习第二章第一节:环境、配置、规范 环境、配置、规范 下面以DDD架构和设计模式落地实战的方式,进行讲解和实现分布式抽奖系统的代码开发,那么这里会涉及到很多DDD的设计思路和设计模式应用,以及互联网大厂开发中…...
OpenCV之reshape函数
函数原型: /** brief Changes the shape and/or the number of channels of a 2D matrix without copying the data.The method makes a new matrix header for \*this elements. The new matrix may have a different sizeand/or different number of channels. A…...

【JavaEE】Spring事务-@Transactional参数介绍-事务的隔离级别以及传播机制
【JavaEE】Spring事务(2) 文章目录 【JavaEE】Spring事务(2)1. Transactional 参数介绍1.1 value 和 transactionManager1.2 timeout1.3 readOnly1.4 后面四个1.5 isolation 与 propagation 2. Spring 事务隔离级别 - isolation2.…...

微信小程序canvas type=2d生成海报保存到相册、文字换行溢出显示...、文字删除线、分享面板
一、简介 做个简单的生成二维码海报分享,我做的时候也找简单的方法看能不能实现页面直接截图那种生成图片,原生小程序不支持,不多介绍下面有全部代码有注释、参数自行替换运行看看,还有需要优化的地方,有问题可以咨询…...
C++卷积神经网络
C卷积神经网络 #include"TP_NNW.h" #include<iostream> #pragma warning(disable:4996) using namespace std; using namespace mnist;float* SGD(Weight* W1, Weight& W5, Weight& Wo, float** X) {Vector2 ve(28, 28);float* temp new float[10];V…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
算法刷题-回溯
今天给大家分享的还是一道关于dfs回溯的问题,对于这类问题大家还是要多刷和总结,总体难度还是偏大。 对于回溯问题有几个关键点: 1.首先对于这类回溯可以节点可以随机选择的问题,要做mian函数中循环调用dfs(i&#x…...