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…...
1.2 struct page 与 PFN:VMA 背后的物理存储
本篇目标:理解 Linux 如何为每个物理页帧维护元数据(struct page),以及虚拟地址最终如何落实到物理内存。HMM 的关键创新之一,是让设备内存(GPU VRAM)也拥有 struct page,从而被内核…...
LangChain 是什么?从零开始学会 LangChain 的工程实践指南
LangChain 是什么?从零开始学会 LangChain 的工程实践指南 1. 文章背景:为什么这个主题重要 在大模型应用开发中,很多人第一次接触 LangChain,是因为想快速做一个“基于大模型的应用”:例如知识库问答、RAG 检索增强生…...
SVM实战调参指南:从标准化、核函数到支持向量解读
1. 这不是教科书里的SVM,而是我亲手调过37次参数后才敢写的入门实录Support Vector Machine(SVM)这个词,第一次见是在三年前的某次算法面试里。面试官问:“你说说SVM为什么叫‘支持向量’?”我张了张嘴&…...
Miro致力弥合AI潜力与组织现实之间的鸿沟
Miro在Canvas 26上将其AI平台建设成为现代AI生态系统的连接层 — 汇聚团队、智能体以及已经使用的工具,将个体AI生产率变为整个组织的转型 Miro是一个面向团队的人工智能(AI)创新工作空间。该公司宣布推出多项AI平台创新,强化了其…...
LazyScrollView复用池机制:TMLazyReusePool工作原理深度解析
LazyScrollView复用池机制:TMLazyReusePool工作原理深度解析 【免费下载链接】LazyScrollView An iOS ScrollView to resolve the problem of reusability in views. 项目地址: https://gitcode.com/gh_mirrors/la/LazyScrollView 在iOS开发中,视…...
运放电源端串联磁珠
在运放电源端串联磁珠,是一种常见的高频噪声抑制设计手段,但需结合具体应用场景谨慎使用。以下是关键要点:---作用与目的 - 抑制高频噪声:磁珠对高频信号(通常 >10 MHz)呈现高阻抗,将电源线上…...
【Prompt实战】思维链(CoT)技术应用:让AI像资深QA一样推理复杂业务逻辑
一、当大模型遇上复杂业务:一个QA的真实困境 假设你是一名资深测试工程师,收到一份需求文档,上面写着一句话:“用户申请退款时,系统应根据订单状态、支付方式、优惠券使用情况以及用户信用等级,自动判断退款金额和退款路径。” 你拿着这句话去问大模型:“帮我生成这个…...
Chrome密码恢复终极指南:如何安全找回所有浏览器保存的密码
Chrome密码恢复终极指南:如何安全找回所有浏览器保存的密码 【免费下载链接】chromepass Get all passwords stored by Chrome on WINDOWS. 项目地址: https://gitcode.com/gh_mirrors/chr/chromepass 你是否曾经因为忘记某个重要网站的密码而焦虑࿱…...
别再手动复制文件了!Mathtype 7.4 一键配置脚本,搞定Office和WPS(附常见错误修复)
数学公式编辑神器Mathtype 7.4全自动部署方案:告别手动配置的繁琐时代 在科研论文、技术文档撰写过程中,数学公式的编辑效率直接影响工作进度。Mathtype作为专业数学公式编辑工具,其强大功能常被手动配置的复杂步骤所掩盖。传统方法需要用户反…...
MySQL 9.0安装教程:免费数据库软件,科研数据管理必备
做科研的朋友,应该都有这个经历。以前用Excel打开数据文件,几秒钟就出来了。现在呢?几十万行的数据表,打开转半天圈,筛选一下直接未响应。保存一次要等好久,生怕电脑死机。不是你的电脑不行,是数…...
