项目上线基本流程

1. 租ECS云服务器

服务器推荐顺序:

  • 阿里云
  • 腾讯云
  • 华为云

一般选择1核2G即可,选择按使用量计费。
通过命令ssh root@xx.xxx.xxx.xxx #(公网ip),然后输入购买服务器时设置的密码即可连接到服务器。之前如果没生成过公钥的,需要先在本地使用命令ssh-keygen一路回车生成公钥再登录。
如果是重置过服务器,那么之前就会有记录,重新登录时会报错,此时需要在文件中将该服务器的配置删掉再登录。

1
vim .ssh/known_hosts # 进入后删除该服务器的配置

2. 配置服务器

CentOs创建用户(默认的root权限过高,需要使用拥有sudo权限的用户进行操作)

1
2
3
4
5
6
7
8
9
10
useradd acs # acs 为自己想取的用户名
passwd acs
# 设置密码
chmod -v u+w /etc/sudoers # 给 sudoers 文件可写权限
vim /etc/sudoers # 修改该文件,给用户 acs 添加权限
# 进入后先输入 /Allow root 找到 root ALL=(ALL) ALL 所在位置
# i 进入编辑模式,在 root ALL=(ALL) ALL 下一行写入 acs ALL=(ALL) ALL
# 按ESC 然后输入 :wq 保存并退出
chmod -v u-w /etc/sudoers # 收回 sudoers 文件可写权限
su acs # 使用新账户登录系统

image.png
然后exit退出,在本地配置免密登录:

1
vim .ssh/config # 没有该文件会自动创建

在文件中添加如下语句

1
2
3
Host springboot_server # 后面这个是给服务器取的名字
HostName xx.xxx.xxx.xxx # 后面这个是公网ip
User acs # 后面这个是刚刚添加的用户名

保存并退出
在终端中输入ssh-copy-id springboot_server然后输入密码完成免密登录配置,之后就可以使用使用ssh springboot_server直接登录,而不需要输入密码。
然后我们先不登录,先将一些祖传配置文件传过去。
使用scp xxx springboot_server:将需要的文件传到服务器(没有就不传),注意一定要有冒号:

1
scp .bashrc .vimrc .tmux.conf server_name:  # server_name需要换成自己配置的别名

然后登录服务器
先装一个tmux(所有工作尽量在tmux中完成,避免发生意外丢失工作进度)

1
2
sudo yum update # 先更新数据源,网络不好可能会报错,尽量在网络环境良好时操作
sudo yum install tmux

3. 安装docker

然后在tmux中安装dockerdocker安装步骤(官网)
安装完成后输入docker会有一些提示,说明安装成功!
然后启动dockersudo systemctl start docker
安装成功之后,将用户在docker中赋予sudo权限:sudo usermod -aG docker $USER,以便该用户可以使用 docker 而无需使用 sudo。之后需要退出重新登录才会生效,否则执行docker相关命令会提示没有权限。

之后就可以使用scp命令把自己的镜像传到服务器了

然后使用命令docker load -i django_lesson_1_0.tar将镜像文件解压到docker中。
运行镜像:

1
2
# 中间是需要使用的端口号映射配置,例如 -p 20000:22 会将在外界访问服务器20000端口时自动映射到容器的22端口
docker run -p 20000:22 -p 443:443 -p 80:80 -p 3000:3000 -p 3001:3001 -p 3002:3002 -itd --name kob_server django_lesson:1.0

然后就可以进到docker中了:docker attach kob_server(镜像是ubuntu

之后给创建用户并赋予sudo权限,再按ctrl + p, strl + q挂载容器(退出但不销毁)。

之后同样的操作将祖传的配置文件传到容器中

4. 容器中安装各种服务

然后在容器中安装mysql

1
2
3
sudo apt-get install mysql-server
sudo apt-get update
sudo apt-get install mysql-server

然后启动mysql:sudo service mysql start
然后进入mysql mysql -uroot -pxxxxx

mysql中执行sql语句:ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';以修改密码。

创建数据库并创建表:

1
2
3
4
create database kob;
use kob;
source /home/acs/create_table.sql; # 提前准备好的创建数据库表的sql文件
exit;

安装java

1
sudo apt-get install openjdk-8-jdk

5. 打包项目到容器中

然后就是将项目打包传到容器中运行了

后端项目先cleanpackage即可。
前端项目修改请求地址运行npm run build

将后端项目的jar包分别发送到容器中运行

1
java -jar xxx.jar # 运行

需要停止的话

1
2
ps -ef | grep xxx.jar # 查询程序的进程号
kill -s 9 xxxx # 后面是查询到的进程号

6. 配置许可证以及nginx等

配置key, pem, nginx.conf
在这之前先将配置文件复制到root目录下(为了使配置nginx.conf时文件格式好看点)
sudo cp .bashrc .vimrc .tmux.conf /root
具体的域名、许可证、证书申请及nginx配置可参考其他文章。
最后启动nginx

1
sudo /etc/init.d/nginx start # 如果运行结果是fail的话需要查看错误日志对应修改

结束。
题外话: 需要在本地连接容器中的数据库,可以参考Navicat 连接远程服务器里 docker 中的 mysql