前言

此次将项目部署到linux服务器的过程花费了九牛二虎之力,踩了许多坑,总结出了一些经验。写这篇博客既是希望帮助大家少走一些弯路,同时也是给自己的踩坑记录留个档。

大致过程

本次使用xshell6/putty工具与云服务器ubuntu进行连接,使用winSCP在windows和linux传文件(也可以使用scp命令),使用docker实现快速部署,在windows和linux中均安装了Docker,同时已经注册了docker hub账号。项目需要用到mysql和redis,mysql安装在linux中,redis安装在docker中。你也可以选择将mysql安装在docker中,但为了方便部署,最好不要将redis安装在linux中,特别是在需要部署多台服务器时。此外,由于我们的项目将在docker容器中运行,因此mysql和docker都应该设置允许远程访问。任何想在本地进行连接云服务器端口的操作,都需要在云服务器所属服务商中开启防火墙端口(如3306,6379),本文不再阐述

Mysql

安装

将数据复制到云服务器中:数据库导出与恢复

查询3306端口,查看mysql服务是否已经运行

netstat -ano|grep "3306"

在这里插入图片描述

0.0.0.0:3306

我们可以在本地终端测试是否能连接上,不出意外连接失败

远程连接mysql命令(命令顺序不能乱):

mysql -h 服务器ip地址 -P 3306 -u root -p

在这里插入图片描述

远程连接

我们需要开启MySQL远程连接
在云服务器中操作

修改 Mysql 用户配置

mysql -uroot -p123456     
MySQL [(none)]>use mysql;
#查看现有用户,允许连接的主机
MySQL [mysql]> SELECT User,  Host FROM user; 

在这里插入图片描述

我们可以设置root用户有哪些主机可以访问,我这里已经设置了“%”,表示所有ip均可以访问

#设置为所有IP都可以访问。
MySQL [mysql]> UPDATE user SET Host=@'%' where user='root' AND Host='localhost' LIMIT 1;  
#刷新MySQL的系统权限相关表
MySQL [mysql]> flush privileges;

修改my.cnf/mysqld.cnf配置文件

在很多教程里都没有说需要修改该文件。在另一台机器里,我没修改配置文件也远程连接成功了。然而在这个云服务器里并没有行通,因此需要进行修改。

/etc/mysql/mysql.conf.d/mysqld.cnf

关于my.cnf文件的位置,可以自己按网上所说的地址多找几次。同时也可以使用find命令,当然相似文件过多,我并不推荐。

find . -name "my.cnf"
/etc/my.cnf/etc/mysql/my.cnf/usr/etc/my.cnf~/.my.cnf

某些linux开发版系统甚至没有my.cnf文件,此时需要去搜索引擎寻找相应方法修改了。

127.0.0.10.0.0.0

最后我们重启mysql,并在远程重新测试连接

sudo service mysql restart 
#如果没用就试试把mysql改成mysqld
mysql -h 服务器ip地址 -P 3306 -u root -p
Docker

安装Redis并以配置文件启动

1、拉取镜像

docker pull redis:latest

2、查看镜像

docker images

3、redis.conf文件

修改redis.conf文件

bind 127.0.0.1 #修改成bind 0.0.0.0或者直接注释掉

protected-mode no #默认yes,开启保护模式,限制为本地访问

daemonize no#默认no

requirepass 123 #密码

appendonly yes #redis持久化(可选)

4、启动容器

创建配置文件目录存放redis.conf和redis相关数据

/home/ubuntu/env/redis/conf/redis.conf
docker run -p 6379:6379 --name redis -v /home/ubuntu/env/redis/conf/redis.conf:/etc/redis/redis.conf -v  /home/ubuntu/env/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

参数解读:

--name: 容器的名字name
--appendonly  redis.conf配置文件中的字段属性
-p: 端口映射;宿主:docker
-v: 目录挂载;宿主目录:docker目录
-d: 后台启动docker;

redis-server /etc/redis/redis.conf  以配置文件启动redis,
加载容器内的conf文件,最终找到的是挂载的目录/home/ubuntu/env/redis/conf/redis.conf

5、查看容器是否运行成功

docker ps

在远程进行连接测试

redis-cli -h ip地址 -p 端口 -a 密码

参数

用法:redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h <主机ip>,默认是127.0.0.1
-p <端口>,默认是6379
-a <密码>,如果redis加锁,需要传递密码
--help,显示帮助信息

创建一个自定义镜像并上传到DockerHub

创建镜像

先制作一个Dockerfile
Dockerfile的制作方式,这里不再介绍

打包本地项目并做成镜像

#其中"-f"后接参数为自己编写的dockerfile文件,"-t"后接参数为生成的docker镜像名
docker build -f dockerfile_test -t dockerfile_test .

查看本地镜像

docker images

上传

在DockerHub官网注册登录自己账号

给镜像打上标签

docker tag dockerfile_test:latest 自己账户名称/dockerfile_test:latest

上传镜像到自己仓库

docker push 自己账户名称/dockerfile_test:latest

拉取镜像和运行

拉取镜像

docker pull 

运行镜像

docker run -d --name dockerfile_test -p 8880:8880 dockerfile_test

运行成功,至此,项目已经部署成功