服务器环境搭建


这篇文章是基于 狂神说Eric和张卡卡mg的服务器安装 MySQL 8.0的总结,仅供个人学习和复习用。

防火墙设置

确保Linux的防火墙端口是开启的,如果是阿里云,需要保证阿里云的安全组策略是开放的!

# 查看firewall服务状态
systemctl status firewalld

# 开启、重启、关闭、firewalld.service服务
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop

# 查看防火墙规则
firewall-cmd --list-all    # 查看全部信息
firewall-cmd --list-ports  # 只看端口信息

# 开启端口
开端口命令:firewall-cmd --zone=public --add-port=80/tcp --permanent
重启防火墙:systemctl restart firewalld.service

关闭端口: firewall-cmd --zone=public --remove-port=80/tcp --permanent

添加指定ip端口 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="******" port protocol="tcp" port="6379" accept"

删除指定ip端口 firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.142.166" port protocol="tcp" port="11300" accept" 

命令含义:
--zone #作用域
--add-port=80/tcp  #添加端口,格式为:端口/通讯协议
--permanent   #永久生效,没有此参数重启后失效

jdk

事先确保服务器开启了以下端口

  • nginx:80,443
  • jenkins:8080
  • mysql:3306

1.下载jdk

  • 首先进入官网下载jdk8 选择linux64,因为现在官网下载jdk需要oracle账号,所以这里提供一个帐号:2337594954@qq.com 密码:Woaifengbeibei12

  • 下载好安装包后运用xftp将文件传输入服务器。

# 在服务器中事先创建一个个人目录,用于暂时存放下载的安装包。
[root@zsky233333 /]# cd home
[root@zsky233333 home]# mkdir zsky233333

2.安装java环境

# 检查当前是否存在java环境! java -version
# 如果有的话需要卸载
# rpm -qa|grep jdk #检测JDK版本信息
# rpm -e --nodeps jdk #卸载命令

# 安装
# rpm -ivh 包

安装完毕执行 java -version 命令查看jdk。

注意 通过rpm安装的rpm包是不需要配置环境变量的,若通过其他命令安装需要自己手动配置环境变量。如下

vi /etc/profile
   
# 在最后位置进入编辑模式,加入如下几行:
   
JAVA_HOME=/usr/java/jdk1.8.0_144
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
   
# 保存退出:wq

# 执行以下文件:
source /etc/profile
   
# 不报错就行,这个会让你所选的文件立即生效;
# java -version可以查看到JAVA的安装及环境配置;

Tomcat

下载Tomcat

Tomcat下载地址 http://tomcat.apache.org/download-80.cgi

安装Tomcat

将Tomcat移到 /usr/local/ 目录下

mv apache-tomcat-9.0.43.tar.gz /usr/local/

解压

# tar -zxvf apache-tomcat-9.0.43.tar.gz

启动Tomcat

# cd /usr/local/apache-tomcat-9.0.43/bin
# ./startup.sh   开启Tomcat
# ./shutdown.sh  关闭Tomcat 

# ps -ef|grep java 查看Tomcat是否开启

注意这里遇到一个坑Tomcat执行shutdown时报错:java.net.ConnectException: Connection refused (Connection refused)

可参考这篇文章 https://blog.csdn.net/ccy212220734/article/details/104468522

docker

1.官网安装参考手册:https://docs.docker.com/install/linux/docker-ce/centos/

2.确定你是CentOS7版本(因为8以上版本很多命令都改了)

[root@***** /]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)

3.yum安装gcc相关(需要确保服务器可以联网)

yum在线安装 -y 表示所有提示都为yes

# yum -y install gcc
# yum -y install gcc-c++

4.卸载旧版本

yum -y remove docker docker-common docker-selinux docker-engine
# 官网版本 (上下两条命令任选一条)
yum remove docker \
          docker-client \
          docker-client-latest \
          docker-common \
          docker-latest \
          docker-latest-logrotate \
          docker-logrotate \
          docker-engine

5.安装需要的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

6.设置stable镜像仓库

# =推荐使用国内的
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

7.更新yum软件包索引

yum makecache fast

8.安装Docker CE

yum -y install docker-ce docker-ce-cli containerd.io

9.启动docker

systemctl start docker #没有报错代表启动成功 这条金句大部分情况下在linux中通用

10.测试

docker version

docker run hello-world

docker images

mysql

删除服务器自带数据库

# 查看一下
rpm -qa | grep mariadb
# 删掉
yum -y remove mari*	
rm -rf /var/lib/mysql/*		
# 查看残留mysql文件
find / -name mysql
# 删掉!
find / -name mysql|xargs rm -rf

安装mysql(8版本)

1.在根目录下执行下载Mysql源安装包

wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

2.执行安装源命令

yum localinstall mysql80-community-release-el7-1.noarch.rpm

3.安装Mysql,安装之前可以先检查一下源是否安装成功

yum repolist enabled | grep "mysql.*-community.*"

4.安装MySQL

yum install mysql-community-server

启动MySql

1.启动

service mysqld start

2.查看MySQL的运行状态

service mysqld status

3.设置开机自启动

systemctl enable mysqld
systemctl daemon-reload

修改登录密码

1.找到root默认密码

grep 'temporary password' /var/log/mysqld.log

2.登录本地MySQL (密码为刚刚找到的默认密码)

mysql -uroot -p

3.修改密码,密码命名要大写字母,小写字母,特殊字符,数字

ALTER USER 'root'@'localhost' IDENTIFIED BY '新的密码';

添加远程登录用户

1.输入use mysql,连接数据库

use mysql

2.查看数据库当前 root 用户的相关信息

select host, user from user;

3.设置远程访问

update user set host='%' where user ='root';

重新查询root相关信息发现多一条数据

4.刷新

flush privileges;

Redis 安装

下载

下载地址:https://redis.io/

将安装包拖拽进服务器个人目录

解压

首先将程序移动到 /usr/local/目录然后解压安装

cd home/zsky233333/
ls
mv redis-6.0.6.tar.gz  /usr/local/
cd /usr/local/
ls
tar -zxvf redis-6.0.6.tar.gz 

基本环境安装

1.安装gcc环境 redis6.0版本以上有点小问题可参考文章: https://blog.csdn.net/weixin_44519874/article/details/112285537

[root@zsky233333 redis-6.0.6]# gcc -v   # 查看gcc版本
[root@zsky233333 redis-6.0.6]# yum -y install centos-release-scl  # 升级到9.1版本
[root@zsky233333 redis-6.0.6]# yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
[root@zsky233333 redis-6.0.6]# scl enable devtoolset-9 bash

2.执行make命令配置文件

[root@zsky233333 redis-6.0.6]# make install 

成功如下

可以进入/usr/local/bin目录查看

3.将redis.cofig文件复制到bin目录下

[root@zsky233333 local]# cd bin
[root@zsky233333 bin]# mkdir redisconfig
[root@zsky233333 bin]# cp /usr/local/redis-6.0.6/redis.conf  redisconfig

修改配置文件

redis默认不是后台启动的,需要修改配置文件!

[root@zsky233333 redisconfig]# vim redis.conf 

启动Redis服务

切换到 /usr/local/bin目录下

[root@zsky233333 bin]# redis-server redisconfig/redis.conf 
[root@zsky233333 bin]# redis-cli -p 6379

查看redis的进程

[root@zsky233333 bin]# ps -ef|grep redis

关闭Redis服务

shutdown
exit

Fedora系统环境下配置部署

本篇文章由Eric提供的技术支持并完成的文章。感谢大佬!此篇笔记仅供自己学习和记录所用。

jdk安装

# 安装 JDK 1.8.0、MySQL 社区版、nodejs16
sudo dnf -y install java-1.8.0-openjdk community-mysql-server nodejs16

redis安装

参考链接https://developer.fedoraproject.org/tech/database/redis/about.html

sudo dnf install redis     # Install redis cli and server
sudo systemctl start redis # Initialize redis server

# redis启动执行
sudo systemctl enable redis

# 测试redis服务
redis-cli ping  # pong 代表成功
redis-cli -p 6379

# 修改redis配置
sudo nano /etc/redis/redis.conf

# 重启redis
sudo systemctl restart redis

#卸载命令
sudo dnf remove redis

daemonize yes 修改为yes

绑定 Redis 监听的网络接口,如果服务器有多个 IP,可限定 Redis server 监听的 IP;通过 Redis 配置项 bind,可同时绑定多个 IP。

bind 127.0.0.1 192.168.13.12

程序运行尽量避免使用熟知端口,降低被初级扫描的风险。

port 6666

开启 Redis 密码认证,并设置高复杂度密码,找到注释#requirepass 换行输入:

requirepass 你的密码

MySQL 配置

# 更换 MySQL 端口
## 首先查看 MySQL 配置文件路径
rpm -ql community-mysql-server | grep .cnf
## 查到路径为: /etc/my.cnf.d/community-mysql-server.cnf 
# 我们新增一行端口设置为 3307
echo 'port=3307' | sudo tee -a /etc/my.cnf.d/community-mysql-server.cnf

# 将 mysqld 服务开机自启,并即刻启动服务
sudo systemctl enable --now mysqld

# MySQL 初始密码为空,为了安全考虑我们需要设置个密码
# 如: uoJ#%4cUQQvwEv
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'uoJ#%4cUQQvwEv';

# 允许远程登录
use mysql
update user set host='%' where user ='root';
flush privileges;
select host, user from user;
exit

# 首次使用前配置 MySQL,按照你的喜好回答安全问题(如果只是测试用,可以跳过)
sudo mysql_secure_installation
exit

# 卸载 MySQL
# sudo rpm -e --nodeps mysql-community-libs mysql-community-common mysql-community-server

# 启动 firewalld 服务
sudo systemctl enable --now firewalld

# 开放 mysql 端口
sudo firewall-cmd --permanent --add-port=3307/tcp
sudo firewall-cmd --reload

前后端打包

  • springboot 打包
  1. Maven -> Lifecycle -> package -> Run Maven Build

  2. target 目录找到 *.jar 文件

  • vue 打包
  1. vue 目录执行 npm run build

  2. dist 目录即为打包好的目录

参考链接


Nginx 配置

Nginx 相关回退操作

# ⚠️ 仅供撤回 Nginx 的相关操作

# 查看java进程
ps -ef | grep java

# 停止 java 进程
kill -9 $(ps -ef | grep java | grep -v grep | awk '{ printf $2 }')

# 禁用 nginx 服务自启,并停止运行
sudo systemctl disable --now nginx

# 删除证书和密钥
sudo rm /etc/pki/tls/certs/zsky233.xyz.crt /etc/pki/tls/private/zsky233.xyz.key /etc/pki/tls/certs/authenticated_origin_pull_ca.pem

# 删除 Nginx 的 web root
sudo rm -rf /var/www

# 移除 selinux 上下文 记录
sudo semanage fcontext -d "/var/www/zsky233.xyz(/.*)?"
sudo setsebool -P httpd_can_network_connect 0

# 删除 Nginx 的配置文件
sudo rm -rf /etc/nginx
# 卸载 nginx
sudo dnf -y remove nginx

逐步尝试: Nginx 默认配置启动

# 重装 Nginx
sudo dnf -y install nginx

# 测试 nginx 默认配置是否可用
sudo nginx -t

# 如 successful,则 自启 并 启动 nginx 服务
sudo systemctl enable --now nginx

# 查看 Nginx 默认域名
## 结果为: 'server_name  _;'
grep server_name /etc/nginx/nginx.conf

# A Default “Catch All” Server Block
# This is just an invalid value which will never trigger on a real host
# source: https://www.nginx.com/resources/wiki/start/topics/examples/server_blocks/#a-default-catch-all-server-block
# ---
# 意思是 定义了一个无效的服务器名称
# 在没有匹配的情况下,nginx 将选择第一个server{}块并使用它
# soure: https://serverfault.com/a/946623

# 查看 Nginx 默认的 web root
## 结果为: /usr/share/nginx/html
grep root /etc/nginx/nginx.conf

# selinux 安全上下文相关配置
sudo dnf -y install policycoreutils-python-utils
# 如果提示已定义 already defined,并无大碍
sudo semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html(/.*)?"
sudo restorecon -Rv /usr/share/nginx/html/
sudo setsebool -P httpd_can_network_connect 1

# 本地 curl 测试默认页面 或 域名,可行,但外部浏览器无法访问(因为防火墙未放行端口)
curl 101.123.42.163
# curl zsky233.xyz

#查看 Nginx 当前监听端口
# 查看结果为仅监听 80 端口,输出为:
#        listen       80;
#        listen       [::]:80;
grep listen /etc/nginx/nginx.conf

# 放行 80 端口,检查外部浏览器应该可以访问了
# ip:    101.123.42.163
# 域名:   http://zsky233.xyz
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload

逐步尝试: Nginx 自定义页面启动

# 创建个域名对应的 web root(路径非强制和域名对应)
sudo mkdir -p /var/www/zsky233.xyz/
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/zsky233.xyz(/.*)?"
sudo restorecon -Rv /var/www/zsky233.xyz/

# 随便一个静态页面
cd /var/www/zsky233.xyz/
sudo git clone https://github.com/zskyz233333/zskyz233333.github.io.git
sudo mv zskyz233333.github.io/* .
sudo rm -rf zskyz233333.github.io
sudo chmod -R 755 /var/www

# 修改 Nginx 配置的 默认 server{} 块
#        server_name  zsky233.xyz www.zsky233.xyz;
#        root         /var/www/zsky233.xyz;
sudo vim /etc/nginx/nginx.conf

# 重启 Nginx,测试下
# ip:    101.123.42.163
# 域名:   http://zsky233.xyz
sudo systemctl restart nginx

逐步尝试: 申请证书、使用 https 和 443 端口

# An ACME Shell script: acme.sh
# 免费获取证书的工具
# project: https://github.com/acmeshofficial/acme.sh

# 安装依赖 socat
sudo dnf -y install socat

# 切换 root 用户
sudo su

# 安装 acme.sh,邮箱会用于申请证书
curl https://get.acme.sh | sh -s email=zskyz233@outlook.com
# 创建符号链接,方便执行命令
ln -s ~/.acme.sh/acme.sh /usr/bin/acme.sh
# 暂时停止 nginx 服务,因为 acme.sh 会临时占用 80 端口,用于验证身份
systemctl stop nginx
# 做好域名解析后,就可以给域名颁发证书
acme.sh --issue -d zsky233.xyz -d www.zsky233.xyz --standalone --keylength ec-256 --force
# 安装证书到指定位置
acme.sh --install-cert -d zsky233.xyz -d www.zsky233.xyz --ecc \
        --key-file       /etc/pki/tls/private/zsky233.xyz.key \
        --fullchain-file /etc/pki/tls/certs/zsky233.xyz.crt \
        --reloadcmd     "systemctl reload-or-restart nginx"
# 退出 root 用户
exit

# 新增 Nginx 的 server{} 块
# Nginx 配置文件有 https 443 端口 的模板,取消注释即可使用
# 需要修改以下字段
#        server_name  zsky233.xyz www.zsky233.xyz;
#        root         /var/www/zsky233.xyz;
#
#        ssl_certificate "/etc/pki/tls/certs/zsky233.xyz.crt";
#        ssl_certificate_key "/etc/pki/tls/private/zsky233.xyz.key";
sudo vim /etc/nginx/nginx.conf

# 重启 Nginx
sudo systemctl restart nginx

# 放行 443 端口,检查外部浏览器应该可以访问了
# ip:    101.123.42.163
# 域名:   https://zsky233.xyz
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

前后端分离项目部署

路由问题

注意 vue项目的路由如果history模式的话,nginx需要如下配置:

location / {
            try_files $uri $uri/ /index.html =404 ;
        }

静态资源打不开或页面空白

放到服务器中启动的vue项目可能会出现一些静态资源找不到或者打开一片空白的情况,需要如下调整:

utils.js –>在build目录下的utils.js

config/index.js —>在config目录下的index.js

vue.config.js —>与src为同级目录

//打包配置文件
module.exports = {
  assetsDir: 'static',
  parallel: false,
  /*
      下方配置需要注意!
      如果你的项目中引用了静态文件比如图片路径是   ./ 或者../
      打包时候需要求改为 ./ 如果没有人用任何非网络路径的就默认 / 就ok了
  */
  publicPath: './',

}

反向代理

可能由于https问题会导致无法请求到后端请求,所以采用一个反向代理的方式:

axios.js

axios.defaults.baseURL="/api" //设置前后端传输时的默认前缀

nginx.conf 需要在nginx的配置文件中配置,/api为自定义须与前端接口对应起来

location /api {
           proxy_pass http://127.0.0.1:8889;

           # 去除本地接口 /api 前缀, 否则会出现 404
           rewrite ^.+api/?(.*)$ /$1 break;
           
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }

完整nginx配置

naginx.conf

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;

        server_name  zsky233.xyz www.zsky233.xyz;
        root         /var/www/zsky233.xyz;

        location / {
            return 301 https://$host$request_uri;
        }
    }

# Settings for a TLS enabled server.

   server {
       listen       443 ssl http2;
       listen       [::]:443 ssl http2;

       server_name  zsky233.xyz www.zsky233.xyz;
       root         /var/www/zsky233.xyz;

       ssl_certificate "/etc/pki/tls/certs/zsky233.xyz.crt";
       ssl_certificate_key "/etc/pki/tls/private/zsky233.xyz.key";
       ssl_session_timeout 1d;
       ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
       ssl_ciphers PROFILE=SYSTEM;
       ssl_prefer_server_ciphers on;

       # HSTS (ngx_http_headers_module is required) (63072000 seconds)
       add_header Strict-Transport-Security "max-age=63072000" always;

       # Load configuration files for the default server block.
       include /etc/nginx/default.d/*.conf;

        location / {
            try_files $uri $uri/ /index.html =404 ;
        }
       location /api {
           proxy_pass http://127.0.0.1:8889;

           # 去除本地接口 /api 前缀, 否则会出现 404
           rewrite ^.+api/?(.*)$ /$1 break;
           
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }

       error_page 404 /404.html;
       location = /404.html {
       }

       error_page 500 502 503 504 /50x.html;
       location = /50x.html {
       }
   }

}

将 vue 打包好的文件复制到 Nginx 配置文件里的 Web root: /var/www/zsky233.xyz

sudo cp -r ~/vue-dist/* /var/www/zsky233.xyz/

# 测试下 Nginx 的配置文件语法
sudo nginx -t
# 重启 nginx 服务
sudo systemctl restart nginx

将jar包移动到/home/zsky2333/bin目录下

java -jar ~/bin/demo-0.0.1-SNAPSHOT.jar > ~/bin/temp.txt 

浏览器访问https://zsky233.xyz


文章作者: Sky
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Sky !
评论
  目录