项目上线基本流程
1. 租ECS云服务器
服务器推荐顺序:
- 阿里云
- 腾讯云
- 华为云
一般选择1核2G
即可,选择按使用量计费。
通过命令ssh root@xx.xxx.xxx.xxx #(公网ip)
,然后输入购买服务器时设置的密码即可连接到服务器。之前如果没生成过公钥的,需要先在本地使用命令ssh-keygen
一路回车生成公钥再登录。
如果是重置过服务器,那么之前就会有记录,重新登录时会报错,此时需要在文件中将该服务器的配置删掉再登录。
1 | vim .ssh/known_hosts # 进入后删除该服务器的配置 |
2. 配置服务器
CentOs
创建用户(默认的root
权限过高,需要使用拥有sudo
权限的用户进行操作)
1 | useradd acs # acs 为自己想取的用户名 |
然后exit
退出,在本地配置免密登录:
1 | vim .ssh/config # 没有该文件会自动创建 |
在文件中添加如下语句
1 | Host springboot_server # 后面这个是给服务器取的名字 |
保存并退出
在终端中输入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 | sudo yum update # 先更新数据源,网络不好可能会报错,尽量在网络环境良好时操作 |
3. 安装docker
然后在tmux
中安装docker
(docker安装步骤(官网))
安装完成后输入docker
会有一些提示,说明安装成功!
然后启动docker
:sudo systemctl start docker
安装成功之后,将用户在docker
中赋予sudo
权限:sudo usermod -aG docker $USER
,以便该用户可以使用 docker
而无需使用 sudo
。之后需要退出重新登录才会生效,否则执行docker
相关命令会提示没有权限。
之后就可以使用scp
命令把自己的镜像传到服务器了
然后使用命令docker load -i django_lesson_1_0.tar
将镜像文件解压到docker
中。
运行镜像:
1 | 中间是需要使用的端口号映射配置,例如 -p 20000:22 会将在外界访问服务器20000端口时自动映射到容器的22端口 |
然后就可以进到docker
中了:docker attach kob_server
(镜像是ubuntu
)
之后给创建用户并赋予sudo
权限,再按ctrl + p, strl + q
挂载容器(退出但不销毁)。
4. 容器中安装各种服务
然后在容器中安装mysql
1 | 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 | create database kob; |
安装java
1 | sudo apt-get install openjdk-8-jdk |
5. 打包项目到容器中
然后就是将项目打包传到容器中运行了
后端项目先clean
再package
即可。
前端项目修改请求地址运行npm run build
将后端项目的jar包分别发送到容器中运行
1 | java -jar xxx.jar # 运行 |
需要停止的话
1 | ps -ef | grep xxx.jar # 查询程序的进程号 |
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