本文介绍: 新手小白使用docker部署上线前后端分离项目

目录

1、买个云服务器

2、下载Xshell和Xftp软件

​3、Docker的使用

安装docker

docker中安装mysql

docker中安装redis,我的nodejs项目中用到了redis,所以要配置,如果没有用到的话,可以直接跳过这一步骤,到下一步。

 docker安装node

docker中配置nginx

1、买个云服务器

我用的是阿里,其他选择还有腾讯云、百度云,根据自己需求选择

打开阿里https://www.aliyun.com/

注册的先注册注册了的直接登录进去。找到免费试用中的服务器ECS,按需选择服务器使用规格,然后单击立即使用

 购买成功后,回到阿里首页找到ECS控制台,点进去之后就可以看到购买了的云服务器,以及它的详细信息

重置密码

实例–>更多–>密码/密钥–>重置实例密码

2、下载Xshell和Xftp软件

Xshell:是终端模拟器软件支持SSH、Telnet、Serial等协议可以远程访问服务器、路由器交换机网络设备并对它们进行管理操作

Xftp:它支持SFTP和FTP协议文件传输可以通过图形化界面进行文件管理传输,即将本地文件上传服务器或者服务器文件下载本地等等。

下载地址Xshell 下载 – NetSarang Website

下载成功之后,打开xshell(我一般喜欢用管理员身份运行)

点击新建

弹出窗口输入root

填写之前重置的密码

 连接成功!

如果连接断开可以双击一下左侧的会话名称

 打开xftp

点击新建

然后弹出窗口输入用户名root密码

连接成功!如果断开了连接,双击一下test就行,绿色小圆圈表示连接成功。

​ 3、Docker使用

什么docker?

        Docker一个开源应用容器引擎基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以开发者打包他们的应用以及依赖包到一个轻量级可移植的容器中然后发布到任何流行的 Linux 机器上,也可以实现虚拟化容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhoneapp),更重要的是容器性能开销极低。

docker官方中文文档https://www.coonote.com/docker/docker-tutorial.html

如果要详细了解容器技术docker,可以参考一下这两篇文章

https://baijiahao.baidu.com/s?id=1675253978950340809&wfr=spider&for=pc

 https://zhuanlan.zhihu.com/p/440672717

在连接上了云服务器的xshell使用docker

安装docker

可以通过命令 docker –v查看是否安装成功

设置开机启动docker

docker中安装mysql

查看mysql镜像

拉取mysql镜像默认最新的)

使用命令docker images查看从 Docker Hub提取mysql镜像


 启动mysql容器

第一种:
docker run --name mysql-test -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
命令详解:
# --name 自定义容器名称
# -d 后台运行
# -p 指定映射端口号
# -e MYSQL_ROOT_PASSWORD=123456 数据库密钥
 
第二种(推荐):
docker run --restart=always --privileged=true -d -v /home/mysql/data:/var/lib/mysql -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 3306:3306 --name  mysql-test -e MYSQL_ROOT_PASSWORD=123456 mysql
 
--restart=always 代表开启启动
 
--privileged=true 代表进入容器内部管理员身份
 
-d 表示后台运行容器 并返回容器Id
 
-v 把mysql产生的数据同步本地 防止数据丢失
 
-e 容器传参  设置mysql的初始密码

 使用docker psa查看所有正在运行的容器

 如果我们要把本地数据库数据同步到mysql容器上,可以使用navicat没有的话,先去找一个破解版的)上传,顺便测试mysql能否连接。

点击连接,选择MySQL

连接成功后,选择本地需要同步数据库右键–>转储SQL文件–>数据结构,选择存放路径

然后右键我们刚连接好的mysql,新建数据库,在新建好的数据库右键运行存放好的sql文件,就

实现了本地数据和云数据库数据同步。当然还有其他方法实现数据同步,有需要的话可以去找一下。

docker中安装redis,我的nodejs项目用到redis,所以要配置,如果没有用到的话,可以直接跳过这一步骤,到下一步

查看redis版本

docker search redis

拉取redis镜像默认最新

docker pull redis

查看是否拉取成功

docker images

挂载配置文件

# 创建文件夹redis

 mkdirp /home/docker/redis

# 创建文件

touch /home/docker/redis/redis.conf

xftp中可以看到 

右键redis.conf进行编辑复制下面内容,并且保存。如果想看比较全的redis.conf可以去redis官网下载

# Redis默认不是以守护进程方式运行,可以通过配置修改,使用yes启用守护进程
daemonize no

# 指定Redis监听端口,默认端口为6379
port 6379

# 绑定主机地址,不要绑定容器的本地127.0.0.1地址,因为这样就无法在容器外部访问
bind 0.0.0.0

#最好设置密码,比较安全,否则有风险
requirepass 123456

# 持久
appendonly yes

启动运行redis容器

docker run -d —name redis —restart=always –p 6379:6379 –v /home/docker/redis/redis.conf:/etc/redis/redis.conf –v /home/docker/redis/data:/data  redis redis-server /etc/redis/redis.conf —appendonly yes  —requirepass 123456

# 参数解析

name: 给容器命名

–restart=always :开机启动失败也会一直重启
p 6379:6379: 将宿主机6379端口与容器内6379端口进行映射
v:将宿主机目录或文件与容器内目录或文件进行挂载映射;
-d:redis 表示后台启动redis
appendonly yes开启redis 持久化;

requirepass 123456 设置密码为123456

redis-server: 以配置文件启动redis,加载容器内的conf文件;

查看启动状态

docker ps -a | grep redis

 docker安装node

拉取node镜像,默认最新

docker pull node

# docker pull node:版本(指定版本

查看是否拉取成功

docker images

创建存放node项目文件夹 

 mkdir -p /app_node

# 切换到该目录

cd /app_node

打开本地的node项目,创建Dockerfile和.dockerignore文件

Dockerfile文件写入然后保存

FROM docker.io/node  

#在镜像器中创建目录  

RUN mkdir -p /home/app_node 

#将此目录设为工作目录    
WORKDIR /home/app_node 

#将该目录下的所有文件拷贝到镜像容器中
COPY . /home/app_node

#重新安装依赖            
RUN npm install    

#保持和启动node服务的端口号一致                       

EXPOSE 3000

CMD [ “node”, “./app.js” ]
 

.dockerignore文件写入然后保存

Dockerfile
.git
.gitignore
.config
.npm
.vscode
node_modules
packagelock.json
README.md

注意node项目数据库

注意如果使用了redis,redis的连接要改成这样,如果没有,跳过。

const client = redis.createClient({

    host: ‘服务器的ip‘,

     port: 6379, 

    requirepassword: ‘123456’ #配置redis的时候配置的密码

 });

打开xftp进行文件传输

xshell我们可以通过 ls -a  看到所有的文件,前提是我们已经用cd /app_node命令切到该目录

 在该项目根目录构建镜像容器

docker build -t appservice

查看镜像是否构建成功

docker images

启动容器

docker run -p 3000:3000 appservice

docker中配置nginx

拉取nginx镜像,默认最新

docker pull nginx

 查看拉取的镜像是否成功

docker images

 创建文件

mkdir -p /home/nginx

mkdir -p /home/nginx/conf

mkdir -p /home/nginx/html

mkdir -p /home/nginx/logs

创建并运行nginx容器

docker run -d —name nginx -p 80:80 -p 443:443 nginx:latest

查看是否运行成功,并进行文件映射,<container id>就是容器的id

docker cp <container id>:/etc/nginx/nginx.conf /home/nginx/
docker cp <container id>:/etc/nginx/conf.d /home/nginx/conf/
docker cp <container id>:/usr/share/nginx/html /home/nginx/html
docker cp <container id>:/var/log/nginx/ /home/nginx/logs/

拷贝之后,可以看到 

然后需要停止运行容器,并删除容器

docker stop <container id> 

docker rm <container id> 

重新创建nginx容器

docker run -d  —name nginx -p 80:80 -p 443:443 -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/logs:/var/log/nginx -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/conf:/etc/nginx/conf.d —privileged=true  nginx:latest

查看运行状况

docker ps -a

修改nginx配置文件defalut.conf,进行编辑

 

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

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

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
       # 防止刷新出现404
        try_files $uri $uri/ /index.html;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
     # 代理转发请求网关prod-api标识解决跨域,线上接口地址,注意后面/
    location /prod-api/ {
        proxy_pass http://${服务器ip}/;
    }
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ .php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ .php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache’s document root
    # concurs with nginx’s one
    #
    #location ~ /.ht {
    #    deny  all;
    #}
}

 复制之后着重注意这一部分,需要将${服务器ip}改成自己的云服务器的ip

 # 代理转发请求网关prod-api标识解决跨域,线上接口地址,注意后面/
    location /prod-api/ {
        proxy_pass http://${服务器ip}/;
    }

在本地打开前端项目,进行打包,我的项目是通过pnpm build,得到一个dist文件

重启nginx容器

docker restart nginx(名称或者它的容器id) 

然后就可以通过ip地址访问自己的项目了!

如果要通过域名访问的话,

 挑选一个,并看对应的试用教程

使用域名访问网站需要进行备案,备案的话,大概需要四五天,可以看看相关流程如果有需要的话。

 

原文地址:https://blog.csdn.net/m0_47984774/article/details/130897744

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_22022.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注