欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker搭建前后端分离项目通过Nginx部署https到外网服务器

程序员文章站 2022-05-01 08:46:22
...

一:项目准备:

1、安装docker和docker-compose(项目通过docker部署)

2、项目在内网能部署成功

3、编写好docker-compose文件,进行docker登录

二:实施

1、docker-compose create;docker-compose start  启动项目

2、权限问题:部署完成后,无法连接数据库是因为服务器的端口没有打开(默认3306端口),一次可以把需要用到的端口打开,(怎么打开,百度了解)。

3、端口打开后,可以使用工具Navicat for mysql连接数据库,将本地数据库的表复制到外网数据库中(也可以使用其他方法,比如copy数据库放到数据库目录下,不过,不建议);并且查看数据库账号的权限。

docker搭建前后端分离项目通过Nginx部署https到外网服务器

4、创建网络,docker network xxxxxx;进入docker容器,docker exec -it 容器名  bash; 查看容器的IP,docker inspect (容器名)。

5、部署到外网,需要域名,所以,

第一步要申请一个域名,跳转到阿里云服务器,找到域名...,选择解析(这些可以去百度,都是有的,不详细说)

域名服务器如何绑定:https://blog.csdn.net/rentian1/article/details/95593787

域名如何加入前缀:https://jingyan.baidu.com/article/f71d60373687ba5ab641d1fa.html

6、如何让http变成https,操作起来算简单,就是生成证书,把证书添加到服务器内;其实https=http+ssl;httpshui会对报文进行加密,(做过https的接口测试应该就知道,你直接访问是报错的,需要你上传一个证书的);详细可了解https://segmentfault.com/a/1190000018992153

证书生成:https://freessl.cn/(好像免费证书只能持续90天)

docker搭建前后端分离项目通过Nginx部署https到外网服务器

7、在服务器控制台中操作,最后就生成证书

docker搭建前后端分离项目通过Nginx部署https到外网服务器

 

8、配置Nginx

不懂的可以留言问,建议自己多尝试几波,毕竟有万能的百度

user  nginx;
worker_processes  1;

error_log  /data/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /data/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
	
	server {
	listen       80;
	server_name  前端域名;
	location /{
		#此处配置的域名必须与upstream的域名一致,才能转发。
		proxy_pass http://容器名:80;
		proxy_set_header Host $host:$server_port;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_connect_timeout       5;
		proxy_read_timeout          60;
		proxy_send_timeout          5;
		#auth_basic "Restricted"; 
		#auth_basic_user_file htpasswd; 			
	}
	
	#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   html;
		}
	}
	server {
    	listen 443 ssl;
    	server_name 前端域名;
    	#ssl on;
    	root html;
    	index index.html index.htm;
		ssl_certificate	/etc/nginx/cert/yq_chain.crt;  证书
		ssl_certificate_key	/etc/nginx/cert/yq_key.key; 证书
    	ssl_session_timeout 5m;
    	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    	ssl_prefer_server_ciphers on;
	    location / {
    		proxy_set_header  Host 前端域名;
    		proxy_pass http://容器名:80;
    		#proxy_intercept_errors on;
    		#error_page 301 302 307 = @handle_redirect;
    	}
    }
	server {
	listen       80;
	server_name  后台域名;
	location /{
		#此处配置的域名必须与upstream的域名一致,才能转发。
		proxy_pass http://容器名:8080;
		proxy_set_header Host $host:$server_port;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_connect_timeout       5;
		proxy_read_timeout          60;
		proxy_send_timeout          5;
		#auth_basic "Restricted"; 
		#auth_basic_user_file htpasswd; 			
	}
	
	#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   html;
		}
	}
	server {
    listen 		443 ssl;
    server_name 后台域名;
    #ssl on;
    root html;
    index index.html index.htm;
	ssl_certificate	/etc/nginx/cert/yqs_chain.crt;
	ssl_certificate_key	/etc/nginx/cert/yqs_key.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
		    location / {
    		proxy_set_header  Host 后端域名;
    		proxy_pass http://容器名:8080;
    		#proxy_intercept_errors on;
    		#error_page 301 302 307 = @handle_redirect;
    	}
	
    }
}

 

 9、输入前端域名即可访问,说明搭建成功。

相关标签: 环境部署