新手小白:使用docker部署前后端(node.js)分离项目上线(详细)

目录

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 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

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

yum install docker -y

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

设置开机启动docker

systemctl start docker

docker中安装mysql

查看mysql镜像

docker search mysql

拉取mysql镜像(默认是最新的)

docker pull mysql

#如果要下载指定版本,docker pull 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 ps -a查看所有正在运行的容器

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

点击连接,选择MySQL

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

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

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

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

查看redis版本

docker search redis

拉取redis镜像,默认最新

docker pull redis

查看是否拉取成功

docker images

挂载配置文件

# 创建文件夹redis

 mkdir -p /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
package-lock.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地址访问自己的项目了!

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

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

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

 

  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Docker 是一种容器化技术,可以将应用程序及其依赖项打包成一个独立的容器,以便在任何环境中运行。使用 Docker 部署前后端分离项目可以提高部署的可靠性和可重复性,并且可以更方便地进行测试和部署。 以下是部署前后端分离项目的一般步骤: 1. 编写 Dockerfile 文件 Dockerfile 文件是用于构建 Docker 镜像的脚本文件。在 Dockerfile 中指定项目所需的软件和依赖项,并将它们打包成一个镜像。 2. 在 Docker 中构建镜像 使用 Docker 命令行工具构建 Docker 镜像。首先需要将 Dockerfile 文件上传到 Docker 宿主机上,然后在 Docker 宿主机上执行构建命令。构建命令通常包括指定 Dockerfile 的路径和镜像的名称。 3. 启动容器 使用 Docker 命令行工具启动 Docker 容器。启动命令通常包括指定容器使用的镜像、需要映射的端口、需要挂载的目录等参数。 4. 配置前端项目前端项目打包成静态资源,并将其复制到 Docker 容器中。 5. 配置后端项目 将后端项目打包成可执行文件,并将其复制到 Docker 容器中。 6. 运行项目Docker 容器中启动前端和后端项目。通常需要使用不同的命令来启动前端和后端项目。 7. 测试项目 在浏览器中访问前端项目,或者使用 curl 命令测试后端 API 接口,测试项目是否正常运行。 总体来说,使用 Docker 部署前后端分离项目能够提高部署的可靠性和可重复性,同时也能够更方便地进行测试和部署

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值