服务器准备
检查必要的应用是否有安装,如果没有,则进行安装
sudo yum install vim zip unzip
部署中间件和数据库
本次部署提供两种方案:docker部署 和 普通部署,本次部署所有服务均为单实例模式。
非容器化部署
建议找个文件夹用来统一管理接下来要用到的内容,比如我是在opt目录下创建了一个名为mrs_service
的文件夹来集中管理要用到的中间件,以下内容都根据这个目录结构来。
sudo mkdir -p /opt/mrs_service
cd /opt/mrs_server
mkdir mysql
mkdir redis
这里展示下相应的目录结构,这并不是强制的,只是这样更符合我个人的习惯,如果你喜欢安装在别的路径或者默认路径下,那大可不必按照我这个步骤来,找关键点看即可。贴一张整体目录结构
MySQL
你可以前往MySQL官网根据自己的服务器操作系统系统寻找合适的MySQL安装包,比如我准备使用MySQL8.0.27
的版本,操作系统是CentOS7.9,如果你的操作系统不同,请自行选择合适的MySQL版本,不必非要和我的一样。这里我采用了RPM安装的方式,这种方式最简单,只需要几行命令就能完成,如果你更习惯使用压缩存tar
的方式,那请自行寻找其它教程安装MySQL。
PS:这里建议是直接右键下载按钮选复制链接,然后去你的服务器上下载,这样可以避免双倍的流量支出,如果云服务器下载较慢,那还是先下载到本地再上传到服务器可能会快一点。
cd /opt/mrs_service/mysql/installer
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.27-1.el7.x86_64.rpm-bundle.tar
# 等它下载完成,然后
tar -xvf mysql-8.0.27-1.el7.x86_64.rpm-bundle.tar
下载并解压缩后你就得到了这样一大堆东西:
接着进行安装操作,按顺序执行以下的代码安装即可:
# 进入解压后的目录
cd /opt/mrs_service/mysql/installer
# 安装顺序:common → libs → client → server → 其他
sudo rpm -ivh mysql-community-common-8.0.27-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-8.0.27-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-8.0.27-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-8.0.27-1.el7.x86_64.rpm
如果你在安装的时候mysql-community-libs
的时候遇到了这样的问题:
就需要先安装client-plugin
:
sudo rpm -ivh mysql-community-client-plugins-8.0.27-1.el7.x86_64.rpm
然后接着往下安装就行了,等rpm包安装完成后,创建用户(组)并赋予权限:
# 创建名为mysql的用户组
sudo groupadd mysql
# 创建名为mysql的用户关联到mysql用户组(-r:创建系统用户,-g:指定用户组)
sudo useradd -r -g mysql mysql
# 更改属于的用户组
sudo chown -R mysql:mysql /opt/mrs_service/mysql/mysql
# 更新文件夹权限
sudo chmod -R 750 /opt/mrs_service/mysql/mysql
接着创建文件夹用于管理相关文件:
# 创建MySQL主目录和数据、日志子目录
sudo mkdir -p /opt/mrs_service/mysql/mysql/data
sudo mkdir -p /opt/mrs_service/mysql/mysql/logs
sudo mkdir -p /opt/mrs_service/mysql/mysql/run
# 确保目录权限正确
sudo chown -R mysql:mysql /opt/mrs_service/mysql/mysql
sudo chmod -R 750 /opt/mrs_service/mysql/mysql
接着编辑 /etc/my.cnf
,替换为以下内容:
[mysqld]
datadir=/opt/mrs_service/mysql/mysql/data
socket=/opt/mrs_service/mysql/mysql/mysql.sock
log-error=/opt/mrs_service/mysql/mysql/logs/mysqld.log
pid-file=/opt/mrs_service/mysql/mysql/run/mysqld.pid
# 可选:通用日志和慢查询日志
general_log=1
general_log_file=/opt/mrs_service/mysql/mysql/logs/general.log
slow_query_log=1
slow_query_log_file=/opt/mrs_service/mysql/mysql/logs/slow.log
[client]
socket=/opt/mrs_service/mysql/mysql/mysql.sock
初始化数据库
# 使用mysqld初始化数据目录
sudo mysqld --initialize --user=mysql --datadir=/opt/mrs_service/mysql/mysql/data --basedir=/opt/mrs_service/mysql/mysql
# 记录输出的临时root密码(在日志文件中)
sudo grep 'temporary password' /opt/mrs_service/mysql/mysql/logs/mysqld.log
最后设置开机自启动,由于我们使用的是rpm安装的方式,这种方式已经为我们配置好了开机自启相关的内容,因此不用我们自己编写mysql.service
这个文件,直接尝试启动就好了:
# 使用systemctl管理服务
sudo systemctl start mysqld
# 设置开机自启
sudo systemctl enable mysqld
# 检查服务状态
sudo systemctl status mysqld
软件安装完成,接下来做些可选项,比如修改密码,创建用户啥的:
-- 修改密码,本地root密码因为不暴露给外界,可以稍微简单些
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mrsMysql@1145';
-- 我习惯再准备一个远程root账户,觉得不安全也可以不建
CREATE USER 'marisa'@'%' IDENTIFIED BY 'mrsMysqlByRemote@456&48)<90_';
-- 赋予用户权限
GRANT ALL PRIVILEGES ON *.* TO 'marisa'@'%';
-- 创建云图床相关用户,由于我的程序和数据库都在一台机器上,就不开放远程登录了
CREATE USER 'picture_backend'@'localhost' IDENTIFIED BY 'picture_backend@123';
GRANT ALL PRIVILEGES ON picture_backend.* TO 'picture_backend'@'localhost';
Redis
Redis的安装有很多种方法,较简单的就是通过yum一键安装启动,但那个不是很自由,这里采用下载文件的方式进行安装。
可以去redis官网挑一个你喜欢的版本,如果要使用较旧的版本他们也有提供,这里以5.0.14为例。
下载好文件后将它上传到你的服务器上相应的文件夹,或者在服务器上使wget
等方式下载,得到文件后移动到合适的位置,我这里/opt/mrs_service/redis
为例。
由于Redis是C语言开发的,因此我们需要先安装对应的运行环境:
sudo yum install gcc-c++
sudo yum install centos-release-scl
接着解压文件并进行安装,可以通PREFIX=
命令指定要安装到的位置,比如我希望安装/opt/mrs_service/redis/redis
目录下:
sudo tar -xvf redis-5.0.14.tar.gz
cd redis-6.2.14
make && make install PREFIX=/opt/mrs_service/redis/redis
此时就算是装好了,然后还需要配置下相应的日志、配置文件、存储目录等路径,方便数据的集中管理
# 创建日志目录
mkdir -p /opt/mrs_service/redis/redis/logs
# 创建持久化数据目录(已存在可跳过)
mkdir -p /opt/mrs_service/redis/redis/data
# 创建配置文件目录
mkdir -p /opt/mrs_service/redis/redis/conf
将源码中的默认配置文件复制到新的 conf
目录,并修改关键参数:
# 复制配置文件到自定义目录
cp /opt/mrs_service/redis/installer/redis-5.0.14/redis.conf /opt/mrs_service/redis/redis/conf/
# 编辑配置文件
vim /opt/mrs_service/redis/redis/conf/redis.conf
编辑配置文件,找个地方直接粘贴就行了,推荐是搜bind 127.0.0.1
这一行的位置,只有这句和我们的配置文件有冲突,其它内容都是我们后面新增的,默认不存在这些内容:
bind 0.0.0.0 # 允许所有IP连接
daemonize yes # 以守护进程运行
protected-mode no # 关闭保护模式(如需外网访问)
requirepass your_strong_password # 设置访问密码
# 持久化数据的保存位置
dir /opt/mrs_service/redis/redis/data
# 日志文件的保存位置
logfile "/opt/mrs_service/redis/redis/logs/redis.log"
我这里为了方便后续调试,所以开放了远程连接,后续可以通过在防火墙封堵相应的端口来保护安全性,如果你不打算使用第三方的工具查看redis中的内容,也可以不改bind
那一行。
配置好后创建用户并设置下相应权限就搞定了:
# 创建用户组并关联用户
sudo groupadd redis
sudo useradd -r -g redis redis
# 设置所属域
sudo chown -R redis:redis /opt/mrs_service/redis/redis
# 设置目录权限
sudo chmod -R 750 /opt/mrs_service/redis/redis
启动命令,先试一下能不能启动:
/opt/mrs_service/redis/redis/bin/redis-server /opt/mrs_service/redis/redis/conf/redis.conf
最后看下整体的目录结构:
当然,仅仅现在这样是不行的,服务器重启以后又得重新来启动,因此下面来配置开机自启,这里我使用的是传统的基于systemd服务的开机自启方案。
首先创建服务文件 /etc/systemd/system/redis.service
,内容如下:
[Unit]
Description=Redis Server
After=network.target
[Service]
Type=forking
ExecStart=/opt/mrs_service/redis/redis/bin/redis-server /opt/mrs_service/redis/redis/conf/redis.conf
ExecStop=/opt/mrs_service/redis/redis/bin/redis-cli shutdown
User=redis
Group=redis
Restart=always
[Install]
WantedBy=multi-user.target
然后启动服务:
systemctl daemon-reload
systemctl start redis
systemctl enable redis
如果你的redis服务并不需要对外公开,那以下内容可以忽略,你已完成了Redis的全部配置。
接着,如果你的服务器是阿里云、腾讯云这类大厂,他们往往会提供成熟的网络安全组(VPC)方案,因此你的服务器自带的防火墙大概率是关闭的,这种你直接去安全组控制台放行redis的相应端口即可。如果你使用的是小厂的服务器,比如我用的就是雨云的主机,他们在低价位并不提供相应的安全防护服务,安防全靠自己,此时就得开启防火墙并打开相关端口了:
# 开放Redis端口(默认6379)
firewall-cmd --permanent --add-port=6379/tcp
firewall-cmd --reload
# 如果SELinux启用,需调整策略
semanage port -a -t redis_port_t -p tcp 6379
至此Redis服务便配置完成。
Nginx
从Nginx官网获取Nginx压缩存档,我这里以nginx1.26.2为例。
1.安装一些后面可能会用到的依赖环境
sudo yum install -y gcc pcre-devel zlib-devel openssl-devel make
2.使用wget或者直接上传的方式,将文件上传到/opt/mrs_service/nginx/installer目录下并进行解压缩操作:
sudo tar -zxvf nginx-1.26.2.tar.gz
解压好后的结果:
3.编译安装
cd nginx-1.26.2
./configure \
--prefix=/opt/mrs_service/nginx/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-threads \
--with-file-aio
make
sudo make install
4.创建自定义目录结构
sudo mkdir -p /opt/mrs_service/nginx/nginx/websites
sudo mkdir -p /opt/mrs_service/nginx/nginx/temp
5.配置文件调整(编辑/opt/mrs_service/nginx/nginx/conf/nginx.conf
):
# 可以直接全选替换
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
client_body_temp_path /opt/mrs_service/nginx/nginx/temp/client_body;
proxy_temp_path /opt/mrs_service/nginx/nginx/temp/proxy;
fastcgi_temp_path /opt/mrs_service/nginx/nginx/temp/fastcgi;
uwsgi_temp_path /opt/mrs_service/nginx/nginx/temp/uwsgi;
scgi_temp_path /opt/mrs_service/nginx/nginx/temp/scgi;
sendfile on;
keepalive_timeout 65;
# 修改server配置
server {
listen 80;
server_name localhost;
# 修改网站根目录
location / {
# 我个人习惯是以域名为文件夹进行区分文件,不习惯可以用别的名字
root /opt/mrs_service/nginx/nginx/websites/www.example.com;
index index.html index.htm;
}
# 修改错误日志路径
error_log /opt/mrs_service/nginx/nginx/logs/www.example.com/error.log;
access_log /opt/mrs_service/nginx/nginx/logs/www.example.com/access.log;
}
}
如果暂时还没有网站文件,但又想要看效果,可以去websites
目录下新建文件夹www.example.com
,然后把html
目录下的文件复制过去。
6.设置权限
sudo chown -R nobody:nobody /opt/mrs_service/nginx/nginx/websites
sudo chmod -R 750 /opt/mrs_service/nginx/nginx
7.创建systemd服务(新建 /etc/systemd/system/nginx.service
):
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/opt/mrs_service/nginx/nginx/logs/nginx.pid
ExecStartPre=/opt/mrs_service/nginx/nginx/sbin/nginx -t
ExecStart=/opt/mrs_service/nginx/nginx/sbin/nginx
ExecReload=/opt/mrs_service/nginx/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
8.启动服务
sudo systemctl daemon-reload
sudo systemctl start nginx
sudo systemctl enable nginx
此时,你的网站应该就能正常访问了,如果不行,请检查防火墙、VPC之类的配置,或者可能你的某一步配置出错了,请自行百度解决。(也有可能像作者一样,单纯只是被拦了),此时要么正规去备案域名(我才不要)要么就只能换服务商或者换非大陆节点了,这没办法。
Java
1.下载安装包,前往Java官网进行下载(这个需要你登录你的Oracle账号,没有可以注册一个),注意:云图床项目的JDK版本需≥11。
下载好后,上传到服务器相应的文件夹,比如作者是放在/opt/environment/jdks/jdk11
目录下,接着解压缩
cd /opt/environment/jdks/jdk11
tar -zxvf jdk-11.0.27_linux-x64_bin.tar.gz
2.配置环境变量,编辑profile
文件,找个地方把这段东西加进去就行了,作者一般是在末尾追加
# 个人感觉这样好切换版本一点,作者的Windows主机上也是这样管理的Java版本
# 分了很多个,比如JDK1.8、JDK11、JDK17、JDK21等
JDK11=/opt/environment/jdks/jdk11/jdk-11.0.27
export JAVA_HOME=$JDK11
export PATH=$PATH:$JAVA_HOME/bin
3.重新加载配置文件,并验证结果
sudo source /etc/profile
java -version