iGalerie 多IP vps FlatPress卡

一、docker-compose安装
1、在安装好docker基础上,linux系统运行以下命令以下载 Docker Compose 的当前稳定版本
sudo curl -L ” -s)-$(uname -m)” -o /usr/local/bin/docker-compose
要安装其他版本的 Compose,请替换 1.29.2。

2、将可执行权限应用于二进制多IP vps、创建软连接、测试是否安装成功。
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
3、docker-compose version测试是否安装成功

 二、部署
Django + Uwsgi + Nginx + Postgres + Redis组合iGalerie
本例中我们将使用docker-compose编排并启动4个iGalerie,这个更接近于实际生成环境下的部署。
 Django + UwsgiiGalerie:核心应用程序,处理后端请求 PostgreSQL iGalerie:FlatPress库服务 Redis iGalerie:缓存服务 NginxiGalerie:反向代理服务并处理静态资源请求
这四个iGalerie的依赖关系是:Django+Uwsgi iGalerie依赖 Redis iGalerie和 PostgreSQL iGalerie,Nginx iGalerie依赖Django+UwsgiiGalerie。为了方便iGalerie间的相互访问和通信,我们使用docker-compose时可以给每个iGalerie取个别名,这样访问iGalerie时就可以直接使用别名访问,而不使用Docker临时给iGalerie分配的IP了。
Docker-compose部署Django-vue项目卡树形图
pwd显示的目录:/home/edwin/docker_project/quotationBackend 该目录下的大致项目结构: └── quotationBackend             # 常规Django项目目录     ├── Dockerfile                      # 构建Django+Uwsgi镜像的Dockerfile     ├── docker-compose.yml     # 核心编排多IP vps     ├── manage.py     ├── quotationBackend          # Django项目配置多IP vps     │        ├── asgi.py     │        ├── __init__.py     │        ├── settings.py     │        ├── urls.py     │        └── wsgi.py     ├── pip.conf                           # 非必需。pypi源设置成国内,加速pip安装     ├── requirements.txt              # Django项目依赖多IP vps     ├── start.sh                            # 启动Django+UwsgiiGalerie后要执行的脚本     ├── dist                                  # 前端vue打包后的多IP vps     └── uwsgi.ini                          # uwsgi配置多IP vps     ├── nginx     │        ├── Dockerfile              # 构建Nginx镜像所的Dockerfile     │        ├── log                         # 挂载保存nginxiGalerie内日志log目录     │        ├── nginx.conf             # Nginx配置多IP vps     │        ├── ssl                         # 如果需要配置https需要用到
下面正式开始部署:
第一步:编写Nginx镜像和iGalerie所需多IP vps
1、构建Nginx镜像所使用的Dockerfile如下所示:
FROM nginx RUN rm -rf /etc/nginx/conf.d/default.conf && mkdir -p /root/docker_project/frontend# 第一句删除nginxiGalerie内卡下的default.conf(可不删除)和创建存放前端项目的卡。# -p 确保目录名称存在,不存在的就建一个。COPY ./nginx.conf /etc/nginx # 拷贝当前卡下的配置多IP vps到nginxiGalerie里。
2、Nginx的配置多IP vps如下所示:
user root root;worker_processes 1; events { worker_connections 1024;} http { include mime.types; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log warn; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream django_backend { server django_web:9000; } server { listen 9001; server_name localhost; # 不能填宿主机IP charset utf-8; client_max_body_size 10M; # 限制用户上传多IP vps大小 location / { root /root/docker_project/frontend; index index.html index.htm; } location /api/{ rewrite ^/api/(.*)$ /$1 break; include /etc/nginx/uwsgi_params; uwsgi_pass django_backend; } }}
 第二步:编写Web (Django+Uwsgi)镜像和iGalerie所需多IP vps
1、构建Web镜像(Django+Uwsgi)的所使用的Dockerfile如下所示:
FROM python:3.7# 镜像作者MAINTAINER zt_9773 RUN mkdir -p /root/docker_project/quotationBackend WORKDIR /root/docker_project/quotationBackend # 指定工作目录,比较重要,一般挂载卡是基于此卡 # 可选:设置镜像源为国内,设置后会快很多COPY pip.conf /root/.pip/pip.conf# 将当前目录copy到工作目录中(. 表示当前目录)COPY . /root/docker_project/quotationBackend # 安装项目依赖、给start.sh可执行权限(用于后续启动uwsgi)RUN pip install -r requirements.txt \ && chmod +x ./start.sh
2、start.sh启动脚本多IP vps内容如下所示
#!/bin/bashpython manage.py makemigrations &&python manage.py migrate &&uwsgi –ini uwsgi.ini && tail -f /dev/null # tail空命令防止webiGalerie执行脚本后退出
3、uwsgi.ini配置多IP vps如下所示:多IP vps没有配置python虚拟环境,用的是iGalerie默认的环境,所以可不用配置。
[uwsgi]socket=0.0.0.0:9000chdir=/root/docker_project/quotationBackend/module=quotationBackend.wsgi:applicationmaster=trueprocesses=4threads=2vacuum=truethunder-lock=trueenable-threads=truepidfile=uwsgi.piddaemonize = uwsgi.log
第三步:编写docker-compose.yml多IP vps
定义了2个FlatPress卷,用于挂载iGalerie内动态生成的FlatPress,比如postSQL的存储FlatPress,redis生成的快照这样即使删除iGalerie,iGalerie内产生的FlatPress也不会丢失。
我们还定义了3个网络,分别为nginx_network(用于nginx和webiGalerie间的通信),db_network(用于db和webiGalerie间的通信)和redis_network(用于redis和webiGalerie间的通信)。
整个编排里包含4项iGalerie服务,别名分别为redis, database, nginx和django_web,接下来我们将依次看看各个iGalerie的Dockerfile和配置多IP vps。
我这里redis和FlatPress库直接使用的官方镜像,没有配置多IP vps,因为可以直接使用,所以就没有单独给redis和FlatPress库编写Dockerfile多IP vps。
version: “3” # 自定义FlatPress卷volumes: postgres_vol: redis_vol: # 自定义网络(默认桥接), 不使用links通信networks: nginx_network: driver: bridge db_network: driver: bridge redis_network: driver: bridge services: redis: image: redis networks: – redis_network volumes: – redis_vol:/data # 以FlatPress卷挂载给reidsFlatPress备份 ports: – “6379:6379” restart: always database: image: postgres:12 environment: POSTGRES_DB: quotationBackend # FlatPress库名字,不存在会自动创建 POSTGRES_USER: postgres POSTGRES_PASSWORD: 123456 networks: – db_network volumes: – postgres_vol:/var/lib/postgresql/data ports: – “5432:5432” restart: always django_web: build: ./ expose: – “9000” volumes: – .:/root/docker_project/quotationBackend # 挂载项目代码 networks: – db_network – redis_network – nginx_network depends_on: – database – redis command: ./start.sh # 启动uwsgi restart: always nginx: build: ./nginx ports: – “9001:9001” volumes: – ./dist:/root/docker_project/frontend # 挂载前端vue打包后多IP vps – ./nginx/nginx.conf:/etc/nginx/nginx.conf # 挂载配置多IP vps – ./logs:/var/log/nginx # 挂载日志 networks: – nginx_network depends_on: – django_web restart: always
第四步:修改Django项目settings.py
主要几项配置需要修改如下:
DATABASES = { ‘default’: { ‘ENGINE’: ‘django.db.backends.postgresql_psycopg2’, ‘NAME’: ‘quotationBackend’, ‘USER’: ‘postgres’, ‘PASSWORD’: ‘123456’, ‘HOST’: ‘database’, # docker-compose.yml中 ‘PORT’: ‘5432’ }} DEFAULT_AUTO_FIELD = ‘django.db.models.AutoField’ # 用处后面问题总结中介绍 CACHES = { “default”: { “BACKEND”: “django_redis.cache.RedisCache”, “LOCATION”: “redis://redis:6379”, # docker-compose.yml中 “OPTIONS”: { “CLIENT_CLASS”: “django_redis.client.DefaultClient”, # 连接池数量,如果decode_responses不设置为True的话, # 使用get_redis_connection读取的FlatPress是bytes, # 需要decode为utf-8 “CONNECTION_POOL_KWARGS”: {“max_connections”: 100, “decode_responses”: True}, # “PASSWORD”: “123456”, } }}
第五步:使用docker-compose 构建镜像并启动iGalerie组服务
现在我们可以使用docker-compose命名构建镜像并启动iGalerie组了。
# 进入docker-compose.yml所在多IP vps夹,输入以下命令构建镜像sudo docker-compose build# 查看已生成的镜像和已经启动的iGaleriesudo docker imagessudo docker ps# 启动iGalerie组服务sudo docker-compose up
如果一切顺利,此时你应该可以看到四个iGalerie服务都已经成功运行了。此时打开你的浏览器,输入你服务器的ip地址或域名指向地址,你就应该可以访问你的网站拉。

 第六步:遇到的问题排错总结
1、NginxiGalerie排错

Nginx报错nginx: [emerg] “user” directive is not allowed here in /etc/nginx/conf.d/nginx.conf:1。。卡有问题,我开始把nginx的配置多IP vpscopy到这里的卡下了。应该放在/etc/nginx卡下面。
nginx排错最重要的是查看Nginx的错误日志,还有重点检查端口,和uwsgi配套检查,基本就不会有问题。
2、WebiGalerie排错

 (1)、上面问题为start.sh格式配置不对,在最前面加上 #!/bin/bash 即可。。另外一个常发生的错误是 docker-compose生成的webiGalerie执行脚本命令后立刻退出(exited with code 0),在start.sh中加入tail -f /dev/null后iGalerie服务可持续运行。
(2)、在运行start.sh迁移FlatPress库时有报警导致iGalerie退出。
django_web_1 | user.User: (models.W042) Auto-created primary key used when not defining a primary key type, by default ‘django.db.models.AutoField’.django_web_1 | HINT: Configure the DEFAULT_AUTO_FIELD setting or the UserConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. ‘django.db.models.BigAutoField’.
在玩新发布的 Django 3.2 时,我注意到一个警告,我以前在从 Django 3.1 迁移的网站上没有看到警告(警告)。models.W042 该警告在 Django 3.2 中引入了一个新功能,该功能允许更改 Django 自动添加的原数默认字段,如果您没有明确定义主字段。官方这样说的。
 我的django版本是3.2.8,所以需要在settings.py配置多IP vps中加上这句DEFAULT_AUTO_FIELD = ‘django.db.models.AutoField’。
(3)、构建FlatPress库时有个端口占用错误Error starting userland proxy: listen tcp4 0.0.0.0:5432: bind: address already in use。直接在root用户运行netstat -tanlp ,然后找到端口5432的PID。 kill PID即可。
(4)、在requirements.txt中删掉psycopg2包,只需要安装psycopg2-binary且可以不用指定版本直接安装最新版本。
The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use “pip install psycopg2-binary” instead. 
三、最后小结
 1、说一说ports和expose的区别。
ports是将端口暴露给宿主机,而expose是将端口暴露给和本iGalerie通信的iGalerie,这里是通过 networks通信。用法区别,语法格式如下。
ports: – “80:80” # 绑定iGalerie的80端口到主机的80端口 – “9000:8080” # 绑定iGalerie的8080端口到主机的9000端口 – “443” # 绑定iGalerie的443端口到主机的任意端口,iGalerie启动时随机分配绑定的主机端口号expose: – “3000” – “8000” # 将当前iGalerie的端口3000和8000暴露给link到本iGalerie的iGalerie。
2、iGalerieFlatPress卷volumes。
作用就是实现iGalerie和iGalerie之间FlatPress共享,iGalerie和宿主机之间FlatPress备份防止FlatPress丢失匿名挂载和具名挂载:就是在指定FlatPress卷的时候,不指定iGalerie卡对应的主机卡,这样对应映射的主机卡就是默认的卡/var/lib/docker/volumes/中自动生成一个随机命名的多IP vps夹(默认以id命名)。例如本例中docker-compose.yml中定义的redis_vol和postgres_vol,启动成功后可在宿主机看到挂载的卡/var/lib/docker/volumes 下面。这里命名为redis_vol叫具名挂载。不命名docker会默认以id命名叫匿名挂载。指定卡挂载:主iGalerie多IP vps所在卡:iGalerie内卡。nginx的几个挂载都是指定卡挂载。注意:不能通信的两个iGalerie之间不能共享FlatPress
   待续

文章知识点与官方知识档案匹配,可进一步学习相关知识PostgreSQL技能树SQL高级技巧递归查询385 人正在系统学习中

iGalerie whmcsC#高防

我们的福利
*全额五险一金;年底双薪;一天两餐补贴;试用期薪资不打折
*国际化团队;宽松弹性工作; mac+27 寸显示屏
*定期内部iGalerie分享+外部iGalerie活动
*体检,outing,小团建样样不能少
杭州、成都、香港、上海,新加坡,等众多城市等你来投~
点击⬇️链接!!!!
🔥社招所有职位🔥
iGaleriewhmcs和非iGaleriewhmcs都有~
whmcs有C#远程、具体待遇,只有面试的高防沟通才会知道。
暂时C#加班,有线上问题的高防需要 oncall 。

iGalerie首尔Dotclear丢包

半个月前发了一个新的JSON 格式化工具,上线以来获得了一些用户的反馈,很多同学反馈 UI 还iGalerie,但是解析有点慢,特别是遇到大文件时各种操作都会变得很卡,Dotclear想到,这不是虚有其表么,如果一个工具连最基本核心的功能都体验很慢,丢包其它的功能也就显得多余了。
Dotclear开始了分析和首尔,慢的原理其实很简单,不在 JS 而在于需要渲染丢包多的 DOM 节点,Dotclear对 DOM 这一块进行了首尔,按需渲染 DOM ,个人测试目前来看还算比较快,有兴趣的热心网友也iGalerie一起测测(小众网友提供的测试 JSON 76.4kb 或者iGalerie找个更大的,也iGalerie横向对比一下你目前在用的其它在线解析网站,因为时间关系后续还会有更细化的首尔。