从0搭建自学用服务器

125 阅读5分钟

购买服务器

  1. 阿里云2核2G 99元/年 2026年3月1日截止
  2. 内核版本 Alibaba Cloud Linux 3.2104 LTS 64位

服务器配置

  1. 禁用密码登陆,并设置SSH密钥登陆
  2. Docker容器数据卷的挂载根目录:/data/

docker

安装

参考阿里云文档

配置镜像加速器

参考阿里云文档

docker-compose

安装

参考阿里云文档

权限设置

  1. cd /usr/local/bin/
  2. ll -> 检查docker-compose的权限是否为-rwxr-xr-x
  3. 将可执行权限应用于二进制文件sudo chmod +x /usr/local/bin/docker-compose

mysql(docker容器)

创建挂载目录

  1. sudo mkdir -p /data/mysql/data
  2. sudo mkdir -p /data/mysql/conf

创建配置文件

sudo vim /data/mysql/conf/my.cnf

[mysqld]
default-storage-engine=INNODB  # 创建新表时将使用的默认存储引擎
character-set-server=utf8mb4      # 设置mysql服务端默认字符集
pid-file        = /var/run/mysqld/mysqld.pid  # pid文件所在目录
socket          = /var/run/mysqld/mysqld.sock # 用于本地连接的socket套接字
datadir         = /var/lib/mysql              # 数据文件存放的目录
symbolic-links=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定义mysql应该支持的sql语法,数据校验等!

# 允许最大连接数
max_connections=200


# 同一局域网内注意要唯一
server-id=3306
# 开启二进制日志功能 & 日志位置存放位置`/var/lib/mysql`
#log-bin=mysql-bin
log-bin=/var/lib/mysql/mysql-bin
# binlog格式
# 1. STATEMENT:基于SQL语句的模式,binlog 数据量小,但是某些语句和函数在复制过程可能导致数据不一致甚至出错;
# 2. MIXED:混合模式,根据语句来选用是 STATEMENT 还是 ROW 模式;
# 3. ROW:基于行的模式,记录的是行的完整变化。安全,但 binlog 会比其他两种模式大很多;
binlog_format=ROW
# FULL:binlog记录每一行的完整变更 MINIMAL:只记录影响后的行
binlog_row_image=FULL
# 日志文件大小
max_binlog_size=100M
# 定义清除过期日志的时间(这里设置为7天)
expire_logs_days=7

# ================= ↑↑↑ mysql主从同步配置end ↑↑↑ =================

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4  # 设置mysql客户端默认字符集

创建docker-compose.yml

sudo vim /data/mysql/docker-compose.yml

version: '3'
services:
  mysql:
    image: mysql:5.7 #mysql版本
    container_name: mysql
    volumes:
      - /data/mysql/data:/var/lib/mysql
      - /data/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
    restart: always
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: 123456 #root用户密码
      TZ: UTC
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

执行docker-compose.yml

  1. cd /data/mysql
  2. docker-compose up -d

设置阿里云的安全组

  1. 打开3306端口

从docker进入mysql容器连接mysql

docker exec -it mysql mysql -uroot -p

测试连接

  1. mysql -h -u -p
  2. create database test default character set utf8mb4 collate utf8mb4_general_ci;
  3. use test;
  4. show variables like 'character_set_database'; -> utf8mb4
  5. show variables like 'collation_database'; -> utf8mb4_general_ci

redis(docker容器)

创建挂载目录

  1. sudo mkdir -p /data/redis

创建配置文件

sudo vim /data/redis/redis.conf

#不加无法连上服务器
protected-mode no
port 6379
timeout 0
#rdb配置
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /data
appendonly yes
appendfsync everysec
#设置你的redis密码
requirepass 123456

创建docker-compose.yml

sudo vim /data/redis/docker-compose.yml

version: '3'
services:
  redis:
    image: redis:6.2.6
    container_name: redis
    restart: always
    ports:
      - 6379:6379
    volumes:
      - /data/redis/redis.conf:/etc/redis/redis.conf
      - /data/redis/data:/data
      - /data/redis/logs:/logs
    command: ["redis-server","/etc/redis/redis.conf"]

执行docker-compose.yml

  1. cd /data/redis
  2. docker-compose up -d

设置阿里云的安全组

  1. 打开6379端口

测试连接

  1. redis-cli -h xxx.xxx.xxx.xxx -p 6379
  2. auth ${password}
  3. select 0
  4. set s 1
  5. get s

minio (docker容器)

创建挂载目录

  1. sudo mkdir -p /data/minio

创建docker-compose.yml

version: '3'
services:
  minio:
    image: "quay.io/minio/minio:RELEASE.2022-08-02T23-59-16Z"
    container_name: minio
    restart: always
    ports:
      - "9000:9000" # api 端口
      - "9001:9001" # 控制台端口
    environment:
      TZ: Asia/Shanghai # 时区上海
      MINIO_ROOT_USER: admin # 管理后台用户名
      MINIO_ROOT_PASSWORD: 12345678 # 管理后台密码,最小8个字符
      # MINIO_SERVER_URL: "" # 指定分享的域名,如果连不上就去掉这行重新执行
      MINIO_COMPRESS: "off" # 开启压缩 on 开启 off 关闭
      MINIO_COMPRESS_EXTENSIONS: "" # 扩展名 .pdf,.doc 为空 所有类型均压缩
      MINIO_COMPRESS_MIME_TYPES: "" # mime 类型 application/pdf 为空 所有类型均压缩
    volumes:
      - /data/minio/data:/data/ # 映射当前目录下的data目录至容器内/data目录      
      - /data/minio/config:/root/.minio/ # 映射配置目录
    command: server --address ':9000' --console-address ':9001' /data  # 指定容器中的目录 /data
    privileged: true

执行docker-compose.yml

  1. cd /data/minio
  2. docker-compose up -d

设置阿里云的安全组

  1. 打开9000、9001端口

测试连接

  1. xxx.xxx.xxx.xxxx:9001
  2. create bucket
  3. upload file
  4. setting -> bucket访问权限改为public
  5. share -> 改为自己的IP,去掉问号及其之后的内容

插件 & 命令

  1. lsof & dnf -y install lsof

笔记

  1. DNF包管理器、YUM包管理器
  2. PNPM、NPM
  3. Docker挂载目录的作用
  4. Docker-compose.yml的语法
  5. IPV4 IPV6 简单说明

jasypt

配置文件中给明文密码加密用

springboot+maven整合

  1. 启动类上加 @EnableEncryptableProperties
  2. maven仓库中加
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.4</version>
</dependency>
  1. application.yml中加
jasypt:
  encryptor:
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
    # 加密密钥最好是放到服务器的启动文件中
#    password: JASYPT_ENCRYPT_PASSWORD
    password: 96e060fa-d3a0-b694-e0de-d44dbbc689fd

4.创建test类,使用生成的encrypt值

import org.jasypt.util.text.BasicTextEncryptor;
import org.junit.Test;

public class Jasypt {

    @Test
    public void generate() {
        BasicTextEncryptor encryptor = new BasicTextEncryptor();
        encryptor.setPassword("96e060fa-d3a0-b694-e0de-d44dbbc689fd");
        String encrypt = encryptor.encrypt("需要加密的密码");
        System.err.println(encrypt);
        String decrypt = encryptor.decrypt(encrypt);
        System.err.println(decrypt);
    }
}
  1. 在对应的环境配置文件中,比如给mysql加密,mysql.password=ENC(第四步获取的encrypt值)