品牌独立网站-部署篇(Docker部署Nodejs)
- 编辑时间: 2023-04-08 23:05:47
- 浏览量:
- 作者:
相信看过:品牌独立网站-准备篇的朋友,对网站开发完成,手动去部署我们的后端服务,有了大概的了解。今天我们就一起具体实操一下,以Docker 部署Node.js为例:
一、安装所需环境
如果还没安装docker和docker-compose的同学,可以先看下这篇文章:docker和docker-compose安装
二、创建目录和安装对应服务镜像
为了让朋友更好的了解整体流程,大概画了一个常见网站的架构图,如下图:
用文字描述下:
在没缓存的情况下,整个流程为:用户 -> Nginx服务 -> 后端服务 -> 查询DB数据库。
在有缓存的情况下:用户 -> Nginx服务 -> 后端服务 -> Redis缓存 -> 查询DB数据库。
在有一定了解后接下来,登入服务器后,创建我们服务部署和数据存储的目录。
# 登录服务器
ssh xxx@68.35.xxx #输入密码
# 创建 /data 目录
mkdir /data
mkdir /data/mongodb
mkdir /data/nginx
mkdir /data/www
# 存放后台管理文件
mkdir /data/www/admin
# 存放webssl文件
mkdir /data/www/ssl/web
# 存放admin ssl文件
mkdir /data/www/ssl/admin
# 创建docker目录 来存放docker相关镜像
mkdir /docker
mkdir /docker/mongodb
mkdir /docker/nginx
mkdir /docker/redis
#对应目录下,存放docker-compose.yaml文件 (查看下面具体内容)
# 创建 /home/docker目录,来部署服务
mkdir /home/docker
对应目录新建完成后,我们手动来建立nginx.conf
的配置文件:
文件新建在 /data/nginx
目录下
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
server_tokens off;
#keepalive_timeout 0;
keepalive_timeout 65;
fastcgi_connect_timeout 3000;
fastcgi_send_timeout 3600;
fastcgi_read_timeout 3600;
gzip on;
gzip_disable "msie6";
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml application/javascript text/javascript application/json;
gzip_vary on;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header User-Agent $http_user_agent;
proxy_set_header X-User-Agent $http_user_agent;
client_max_body_size 500M;
# limit_req_zone $binary_remote_addr zone=mylimit:500m rate=2r/s;
upstream web {
server localhost:8033 max_fails=3 fail_timeout=1s weight=9;
}
# ws
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# web
server {
listen 80;
server_name xxx; # xxx域名
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server {
listen 443 ssl http2;
server_name xxx; # 域名
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
root /data/www;
ssl on;
index index.html index.htm;
ssl_certificate /data/www/ssl/web/ssl.pem;
ssl_certificate_key /data/www/ssl/web/ssl.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 / {
if ( $request_filename ~* .*\.(html|htm)$ ){
add_header Cache-Control max-age=0;
}
proxy_send_timeout 18000;
proxy_read_timeout 18000;
proxy_connect_timeout 18000;
proxy_pass http://web;
}
}
# admin
server {
listen 80;
server_name xxx; #xxx 域名
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server {
listen 443 ssl http2;
server_name xxx; #域名
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
root /data/www/admin/dist;
ssl on;
index index.html index.htm;
ssl_certificate /data/www/ssl/admin/ssl.pem;
ssl_certificate_key /data/www/ssl/admin/ssl.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 / {
add_header Cache-Control max-age=60;
try_files $uri $uri/ /index.html;
}
location ^~ /dist/ {
rewrite ^/dist/(.*) /$1 break;
}
location ~* /(api|uploads)/ {
proxy_pass http://web;
}
}
}
注意:localhost:8033 是代表服务启动端口,xxx需要依次替换对应域名,ssl文件要对应域名的ssl。
接下来,我们安装对应的镜像服务
1、安装Mogodb镜像,新建docker-compose.yaml
文件
version: '2'
services:
mongodb:
image: mongo
command: mongod --port 27017 --auth
container_name: mongodb
restart: always
network_mode: "host"
ports:
- "27017:27017"
volumes:
- /data/mongodb/configdb:/data/configdb
- /data/mongodb/db:/data/db
- /data/mongodb/home:/data/home
2、安装Nginx镜像,新建docker-compose.yaml
文件
version: '2'
services:
nginx:
image: docker.io/openresty/openresty:1.13.6.1-centos
container_name: nginx-web
restart: always
network_mode: "host"
ports:
- "80:80"
volumes:
- /data/www:/data/www
- /data/nginx/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf
3、安装Redis镜像,新建docker-compose.yaml文件
version: '2'
services:
redis:
image: docker.io/redis:3.2.11
container_name: redis
restart: always
network_mode: "host"
在对应目录新建文件后,执行docker-compose up -d
,正常都会启动。如果nginx镜像启动失败,请检查是否有启动配置文件/配置文件是否正确。
执行 docker ps
,查看服务是否正确,下图为正确启动
三、编写发布脚本和Docker仓库安装
1、安装dcoker仓库
以阿里云为例:进入 https://cr.console.aliyun.com/cn-guangzhou/instance/dashboard
新建镜像仓库,然后一步步根据提示设置,这里就不过多展示了。然后点击仓库详情,找到登录仓库信息,在服务器进行登录。如:
# 以阿里云为例
sudo docker login -u=xxx registry.cn-shenzhen.aliyuncs.com
# 输入完成后,输入密码,显示登录成功,则代表docker镜像仓库登录成功!
写文章不易,如果您觉得文章对你有帮助。
打赏激励下作者吧,谢谢支持! ~(@^_^@)~!
微信打赏
支付宝打赏