阿里云部署docker项目流程

阿里云部署docker项目流程

这是自己的项目项目原来的项目是一个手机远程管理交换机的项目,项目中包含嵌入开发,python+flash对接的flutter(android+ios),mysql,redis,vue3+ts的后台以及阿里云的物联网相关的东西,现在将项目精简下主要是docker部署的一套,

在这个之前先拉取你们的项目到阿里云上

1.安装docker

卸载以前安装的docker

 sudo apt-get remove docker docker-engine docker.io containerd runc

设置存储库

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release

添加Docker官方的GPG秘钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

设置稳定存储库

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装Dokcer引擎

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

安装特定版本的Docker引擎

apt-cache madison docker-ce
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io docker-compose-plugin

安装docker-compose
curl 安装(推荐)

curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
# 添加链接
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

apt 安装

apt install docker-compsoe

pip 安装

pip install docker-compose

2.运行docker

进入目录app

添加网络

docker network create net

运行

docker-compose -f docker-compose.dev.yml up --build

进入mysql的docker镜像中

docker exec -it mysql镜像id mysql -u root -p

查看数据库

show databases;

创建数据库

 CREATE DATABASE IF NOT EXISTS device  DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

退出mysql

exit;

3.配置nginx

  1. 配置后台管理界面
    将vue3+ts的前端项目打包好的dist文件夹拷贝到nginx配置文件相同目录,目录位置为项目/compose/nginx/下
  • 修改nginx目录下的Dockerfile文件

    # nginx镜像compose/nginx/Dockerfile
    
    FROM nginx:latest
    
    # 删除原有配置文件,创建静态资源文件夹和ssl证书保存文件夹
    RUN rm /etc/nginx/conf.d/default.conf \
    && mkdir -p /usr/share/nginx/html/static \
    && mkdir -p /usr/share/nginx/html/media \
    && mkdir -p /usr/share/nginx/ssl
    
    # 设置Media文件夹用户和用户组为Linux默认www-data, 并给予可读和可执行权限,
    # 否则用户上传的图片无法正确显示。
    RUN chown -R www-data:www-data /usr/share/nginx/html/media \
    && chmod -R 775 /usr/share/nginx/html/media
    
    # 添加配置文件
    ADD ./nginx.conf /etc/nginx/conf.d/
    
    # 复制vue项目到nginx  主要添加为这句*****
    COPY dist/ /usr/share/nginx/html/
    # 关闭守护模式
    CMD ["nginx", "-g", "daemon off;"]
    ​```
    
  • 修改nginx配置文件,将vue的配置上去

    # nginx配置文件
    # compose/nginx/nginx.conf
    
    upstream backend_server {
        ip_hash;
        server web:5000; # 替换成应用服务器或容器实际IP及端口
    }
    
    #主要是给flutter使用的还有几个下载和更新页面使用的
    server {
        listen 80; # 监听80端口
        listen 443 ssl;
        server_name xn--tlqp91cmycmt6ayqa.com; # 可以是nginx容器所在ip地址或127.0.0.1,不能写宿主机外网ip地址
        charset utf-8;
        client_max_body_size 10M; # 限制用户上传文件大小
        
        # ssl证书及密钥路径
        ssl_certificate /usr/share/nginx/ssl/8209778.pem;
        ssl_certificate_key /usr/share/nginx/ssl/8209778.key;
    
        keepalive_timeout 10;
        # 静态资源路径
        location /static {
             alias /usr/share/nginx/html/static;
         }
    
        # 媒体资源路径,用户上传文件路径
        location /media {
            alias /usr/share/nginx/html/media;
        }
    
        location / {
            include /etc/nginx/uwsgi_params;
    	autoindex_localtime on;
            uwsgi_pass backend_server;   # 使用uwsgi_pass, 而不是proxy_pass
            uwsgi_read_timeout 600; # 指定接收uWSGI应答的超时时间
            uwsgi_connect_timeout 600;  # 指定连接到后端uWSGI的超时时间。
            uwsgi_send_timeout 600; # 指定向uWSGI传送请求的超时时间
    
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP  $remote_addr;
        }
    }
    # 添加vue后台管理的端口
    server {
        listen       6688;
        server_name  localhost;
        access_log  /var/log/nginx/host.access.log  main;
        error_log  /var/log/nginx/error.log  error;
        
        location / {
        	root   /usr/share/nginx/html;
        	index  index.html index.html;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        	root   /usr/share/nginx/html;
        }
    }
        
        access_log /var/log/nginx/access.log main;
        error_log /var/log/nginx/error.log warn;
    
        server_tokens off;
    
    
  • 修改项目目录下docker-compose.dev.yml文件,在nginx下添加vue项目使用的端口

    version: '3.8'
    
    networks:
      net:
        external: true
    
    services:
      redis:
        image: redis:6
        command: /usr/local/bin/redis-server /etc/redis/redis.conf # 容器启动后启动redis服务器
        volumes:
          - /etc/localtime:/etc/localtime:ro
          - redis_vol:/data # 通过挂载给redis数据备份
          - ./compose/redis/redis.conf:/etc/redis/redis.conf # 挂载redis配置文件
        ports:
          - "6379:6379"
        restart: always
        networks:
          - net
    
      mysqldb:
        image: mysql:5.7
        restart: always
        ports:
          - "3306:3306"
        environment:
          - MYSQL_ROOT_PASSWORD=123
          - LANG=C.UTF-8
        volumes:
          - mysql_vol:/var/lib/mysql # 挂载数据库可读可写
          - ./compose/mysql/conf/my.cnf:/etc/mysql/my.cnf # 挂载配置文件
        networks:
          - net
    
      web:
        build:
          ./myproject
        restart: always
        container_name: flask_web
        depends_on:
          - redis
          - mysqldb
        expose:
          - "5000"
        volumes:
          - ./myproject:/var/www/html/myproject
          - myproject_media_vol:/val/www/html/myproject/templates
        networks:
          - net
    
      amqp:
        build:
          ./amqp_python
        restart: always
        depends_on:
          - mysqldb
        volumes:
          - ./amqp_python:/var/www/html/amqppython
        networks:
          - net
    
      nginx:
        build:
          ./compose/nginx
        ports:
          - "80:80"
          - "443:443"
          - "6688:6688"
        expose:
          - "80"
          - "6688"
        volumes:
          - ./myproject/templates:/usr/share/nginx/html/static # 挂载静态文件
          - ./compose/nginx/ssl:/usr/share/nginx/ssl # 挂载ssl文件
          - ./compose/nginx/ssl:/var/log/nginx # 挂载日志
          - myproject_media_vol:/usr/share/nginx/html/media # 挂载上传的信息
        networks:
          - net
        depends_on:
          - web
        restart: always
    volumes:
      mysql_vol:
      redis_vol:
      myproject_media_vol:
    

此时完成了vue后台项目的添加部署,记得开放服务器的相应端口

  • 下面是没有vue后台项目的部署
    测试项目默认端口是8082,实际项目可能要采用https,443端口,以及80端口,这些都需要重新配置nginx项目,以及修改docker-compose.dev.yml项目,还有步骤6中的部分涉及到的url。
    配置SSL,这里配置的是http和https都能访问,因为交换机芯片有部分不支持ssl,nginx.conf配置代码如下:
    # nginx配置文件
    # compose/nginx/nginx.conf
    # 这里可以做负载均衡
    upstream backend_server {
    	ip_hash;
    	server web:5000; # 替换成应用服务器或容器实际IP及端口
    }
    
    server {
    	listen 80; # 监听80端口
    	listen 443 ssl;
    	server_name xn--tlqp91cmycmt6ayqa.com; # 可以是nginx容器所在ip地址或127.0.0.1,不能写宿主机外网ip地址
    	charset utf-8;
    	client_max_body_size 10M; # 限制用户上传文件大小
    
    	# ssl证书及密钥路径,这里的路径是docker内nginx的路径
    	ssl_certificate /usr/share/nginx/ssl/8209778.pem;
    	ssl_certificate_key /usr/share/nginx/ssl/8209778.key;
    
    	# SSL会话信息
    #    client_max_body_size 75MB;
    	keepalive_timeout 10;
    	# 静态资源路径
    	# location /static {
    	#     alias /usr/share/nginx/html/static;
    	# }
    
    	# 媒体资源路径,用户上传文件路径
    	location /media {
    		alias /usr/share/nginx/html/media;
    	}
    
    	location / {
    		include /etc/nginx/uwsgi_params;
    		uwsgi_pass backend_server;   # 使用uwsgi_pass, 而不是proxy_pass
    		uwsgi_read_timeout 600; # 指定接收uWSGI应答的超时时间
    		uwsgi_connect_timeout 600;  # 指定连接到后端uWSGI的超时时间。
    		uwsgi_send_timeout 600; # 指定向uWSGI传送请求的超时时间
    
    		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    		proxy_set_header Host $http_host;
    		proxy_redirect off;
    		proxy_set_header X-Real-IP  $remote_addr;
    	}
    }
    
    	access_log /var/log/nginx/access.log main;
    	error_log /var/log/nginx/error.log warn;
    
    	server_tokens off;
    

4.重新运行docker

# 停止正在运行的docker的镜像
docker stop $(docker ps -aq)
# 删除查询出来的没有运行的docker的镜像
docker rm $(docker ps -aq)
# 进入项目目录,就是项目目录所在的
cd hasivo
# 运行docker-compose,-d后台运行
docker-compose -f docker-compose.dev.yml up -d --build

到此项目转移完成

删除镜像

批量删除tag为""镜像可以采用如下方法(下面两种方式均可以):

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
docker images | grep none | awk '{print $3}' | xargs docker rmi

删除所有停止的容器:

docker rm $(docker ps -a -q)

删除所有的镜像:

docker rmi $(docker images -q)
您好!对于在阿里云服务器上部署Docker和Spring Boot应用程序,您可以按照以下步骤进行操作: 1. 在阿里云上创建一台ECS实例,确保已选用适合您的应用程序的操作系统和硬件配置。 2. 登录到您的ECS实例上,安装Docker。您可以按照Docker官方文档提供的指南进行安装,具体步骤可以参考阿里云的文档。 3. 构建您的Spring Boot应用程序的镜像。在项目根目录下创建一个名为`Dockerfile`的文件,并在其中指定构建镜像所需的步骤。例如,以下是一个简单的示例: ``` FROM openjdk:11-jdk-slim COPY target/myapp.jar /opt/myapp.jar WORKDIR /opt CMD ["java", "-jar", "myapp.jar"] ``` 该示例将使用OpenJDK 11作为基础镜像,并将构建的JAR文件复制到容器中。根据您的实际需求,您可能需要进行一些调整。 4. 构建镜像并推送到Docker镜像仓库。在项目根目录下运行以下命令: ``` docker build -t myapp:latest . docker tag myapp:latest registry.example.com/myapp:latest docker push registry.example.com/myapp:latest ``` 这些命令将构建镜像、给镜像打标签并推送到您的Docker镜像仓库。请将`registry.example.com`替换为您的实际镜像仓库地址。 5. 在ECS实例上运行Docker容器。使用以下命令在ECS实例上运行您的应用程序容器: ``` docker run -d -p 8080:8080 registry.example.com/myapp:latest ``` 这将在后台运行容器,并将容器内部的8080端口映射到ECS实例的8080端口上。 以上是一个基本的部署流程,您可能还需要进行一些额外的配置,如网络设置、安全组规则等。请根据您的具体需求和阿里云的文档进行操作。祝您成功部署应用程序!如有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值