最近要重装一下 PC 系统,考虑到重装后各个环境的配置可能变得更麻烦而不易于 Sypastebin 的上线,同时也为了学习一下传统的项目部署,故顺手先部署了。果不其然,遇到了很多问题。但问题虽多,却也都是很基础的问题,也可以感受一下。

一、部署

部署主流程及要点:

  1. 服务器启动(可考虑在服务商主页打开终端,执行安装宝塔面板命令,能省去ssh、ftp等麻烦);
  2. 服务器供应商服务器主页处开放相应的安全组端口
  3. 服务器防火墙开放相应端口(更安全);
1
2
3
4
5
6
7
8
9
10
# 查看防火墙状态,没有则根据提示安装
firewall-cmd --state
# 开启防火墙
systemctl start firewalld.service
# 开放相应端口(记得开放宝塔面板正在用的8888)
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 开放完后,重新加载防火墙
firewall-cmd --reload
# 查看开放的端口
firewall-cmd --list-ports
  1. 安装Nginx,将前端文件上传并配置页面;

  2. 安装MySQL并配置数据库和表,启动服务;

  3. 安装MongoDB并配置数据库和集合,启动服务;

  4. ……其他程序及其配置等(看需要),启动服务;

  5. 安装 Java 开发环境(宝塔安装 Tomcat 间接安装并配置好 JDK 8.0);

  6. 在 IDEA 利用 Maven 将 Springboot 打包:clean 后 package,在 target 目录下得到项目的 Jar包;

    注:打包前需更改数据源的ip地址等,可直接使用公网ip。

  7. 上传Jar包到服务器并启动:nohup java -jar 包名 &,持续运行,会输出日志到当前目录下的nohup.out文件(可自定义),用于观察服务运行状况,查看日志;

  8. 完成。

    因为服务器配置不够,MySQL 8.0 都需要 2 核。所以,直接转战Docker,索性 MySQL 和 MongoDB 都用 Docker 容器提供了。因为都是 Docker 及应用的基本操作,这里不详细介绍。(好像 Docker 容器的服务不需要开放远程连接授权)运行完之后,可以直接使用,跟服务器自身安装无差别,本地PC可直接远程连接。​

利用Docker容器(代替部分程序的安装)提供服务:

  1. 拉取MySQL镜像、运行容器并配置;
  2. 录取MongoDB镜像、运行容器并配置;

二、遇到的问题和关键操作

问题很多,但基础,随缘记!

  1. Ubuntu 安装 MySQL

    注意事项:MySQL安装完成后,若需要授权外部连接(默认只有 localhost),需要执行授权指令或更新权限表,使得某个ip的PC(或所有PC)可以连接。授权命令:

1
2
3
# 用户user使用password密码从任何主机连接MySQL服务器
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
# 若要指定主机,则将%更改为对应的ip地址。

    补充:若项目中使用角色非root,需要创建对应的角色并授权。​

Navicat连接服务器MySQL

Navicat连接服务器MySQL(老生常谈了,总有error想害朕):
Navicat
Navicat

  1. Ubuntu 安装 MongoDB

    注意事项:下载 MongoDB压缩包,解压后,需要同时在安装目录(推荐)增加 data目录log目录 及其.log文件,以及conf目录里的.conf文件,在.cong文件中编写好相应的配置(将bind_ip修改,或删除,否则无法远程连接),启动时直接利用配置文件启动。(具体操作参考)​

    补充:启动后,初始进入的是admin,没有账号和密码。需要新创建用户(包括root),用户创建规则:创建超级用户,在admin库use admincreateUser,然后再在当前库进行db.auth("账号","密码")。其他普通用户也是如此,在哪个数据库下创建就在哪个库进行授权,否则出现授权失败的错误,导致无法连接。(权限部分可参考学习

查看参考命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 使用admin库
use admin

# 创建超级用户root
db.createUser(
{
user:"root",
pwd:"123456",
roles:[{role:"root",db:"admin"}]
}
)

# 创建普通用户
db.createUser({
'user': "sustart",
'pwd': "password",
'roles': [{
role: "readWrite",
db: "sypastebin"
}]
})

# 授权认证
db.auth('user','admin123')

# 本地Mongo客户端远程连接,库admin、端口27018、用户root。(也可以使用MongoDBCompass连接)
mongo 39.108.141.102:27018/admin -u root -p
  1. 其他
  • 本地 IDEA 使用数据源时,需要添加数据源并测试是否连通,在右侧 DataSource栏。避免盲目配置,运行时连接靠运气。
  • 因为前后端分离,所以部署后,相当于有了四个服务:两个前端、两个后端,分别跑在本地和服务器上。那么可以修改ip等参数,相互测试。(有点意思!
  • 数据库权限授权部分还不得,折腾半天,不如认真回顾一下。
  • MongoDB不正常结束进程会导致应用被锁,需要删除data目录下的.lock文件和日志目录下的.log日志文件。

三、总结&收获

  1. 虽说是第一次部署服务,但其实不难,难在细节,难在各个部件的安装和配置,以及某些玄学的错误。
  2. 这次部署涉及到了很多内容,包括:
  • 服务器重装系统,从零开始部署项目;
  • 进一步熟悉Linux:基本的Linux命令、文件常规保存位置等;
  • 服务器安全组、端口和防火墙的开关和配置;
  • 宝塔面板的熟练使用;
  • Nginx部署Web页面,域名配置;
  • MySQL的安装、远程连接、数据库恢复和表创建、遭遇版本不对等;
  • MongoDB的安装、远程连接(Win终端连接、MongoDBCompass连接、IDEA连接)、数据库创建和使用、权限管理等;
  • Docker的安装、回顾了一波容器使用、常用命令;
  • 项目服务的部署需要修改的参数和配置;
  • 了解了波整个项目的部署的操作,下次遇到经历过的问题更轻车熟路。
  • 发现了新东西、也回顾和一下旧东西,有助于整个项目的改进和个人能力的提升。
  1. 这次部署花了很多时间在探索和试错上,以为时间一晚上够用,可惜,花了一天。

不足:

  1. 服务器的运维能力不得,还得多玩一下服务器;
  2. 数据库的安装和配置不熟,还得多玩几次;
  3. 数据库本身不熟,还得回顾学习,不只是理论。

四、未来

    对于下一次部署,会集成更多的服务组件,比如 redis 和 MySQL 的读写分离。因此,下次会结合 Dockerfile 一起配置,将整个服务容器化,方便一键拉取运行。

五、部署结果

SyPastebin

评论




博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Volantis 作为主题,总访问量为

桂ICP备2021001128号