文章目录
- Docker
- docker基础
- 通过Dockerfile构建镜像
- 打包镜像,离线使用
- docker修改代理内容
- Nginx
- ubuntu安装nginx
- nginx基本操作
- 问题
- Sqlalchemy可以反射一些表,另外一些反射为None
- 查看服务器的架构和版本,查看本机外网IP
- PG数据库创建角色创建库并授权
前两天接到一个任务,就是需要将现在运行的一个系统在另外的一个服务器上面重新部署一套,记录过程。
先简单描述一下这个系统项目的情况,项目使用Python写的,使用python3.9,结合django的web框架, 中间件大概有Redis、RabbitMq,协议有websocket,部署使用uwsgi服务器。
目标服务器操作系统为Ubuntu,版本是16.04, x86_64的架构;(后面这个架构信息会是一个很重要的角色。)
从前面来说,这是我第二次部署这个系统,前一次是直接在主机上面部署的, 因为当时我觉得那应该是我最后一次部署,所以就没有容器部署的想法;这次使用docker来快速部署,方便后面重复安装。
那最开始需要掌握的就是docker, dockerfile这些知识点, 前期我是不了解的,是在部署过程中学习到的一些内容。
Docker
docker基础
docker的基础的使用到的命令我在这里就简单描述一下:
docker pull image
docker run
docker start/stop/restart container
docker inspect image/container
docker exec -it container /bin/bash
例如:
// 使用postgres镜像构建容器
docker run --name sf_postgres2 -p 5432:5432 -e POSTGRES_PASSWORD=password -itd postgres:13
// 使用自建的镜像构建容器
docker run --name sf_aipaas -p 8080:8080 -itd sf_aipaas:v0.0.2
通过Dockerfile构建镜像
下面是使用到Dockerfile
# FROM python:3.9
# 使用一个参数名为BASE_IMAGE
ARG BASE_IMAGE
# 在FROM指令中使用该参数
FROM $BASE_IMAGE
# 维护者信息
MAINTAINER dengcong
# 设置工作目录,也就是下面执行 ENTRYPOINT 后面命令的路径
# 必须是这个
WORKDIR /root/project
# 将需要部署的目录添加进去
ADD ./aipass/ ./aipass/
ADD ./dist/ ./dist/
ADD ./equ_web/ ./equ_web/
ADD ./microRpa/ ./microRpa/
ADD ./web/ ./web/
ADD ./nginx.conf ./nginx.conf
RUN apt update
# 安装nginx
RUN apt install nginx -y
RUN mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
RUN cp ./nginx.conf /etc/nginx/
RUN mkdir -p /usr/share/nginx/logs
RUN touch /usr/share/nginx/logs/error.logs
RUN service nginx restart
# 安装supervisorãjl
RUN apt install supervisor -y
# 设置语言为utf-8
ENV LANG C.UTF-8
# 根据requirement.txt下载好依赖包
COPY ./aipass/requirements.txt ./
# RUN pip3 install -r requirements.txt
# 暴露端口
EXPOSE 8003 6002 8080 8081
# EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。
然后根据Docker file构建出来镜像
docker built -t <images_name>:<tag> .
docker build -t sf_apaas:v0.0.1
也可以像Dockerfile内容里面一样,定义一个变量,在构建的时候传入
docker build --build-arg BASE_IMAGE=<image_name>:<tag> -t <images_name>:<tag> .
docker build --build-arg BASE_IMAGE=bb12e85b15da -t sf_apaas:v0.0.2 .
打包镜像,离线使用
// 转存
docker save -o <images_name>_<tag>.tar <image_name>:<tag>
docker save -o postgres_13.6.tar postgres:13.6
// 恢复
docker load -i <image_name>_<tag>.tar
docker load -i postgres_13.6.tar
docker修改代理内容
在大陆,dockerhub很不友好,很多时候会出现超时的情况,就出现了使用CloudFlare来代理的情况。
docker使用镜像报错:standard_init_linux.go:211: exec user process caused “exec format error“
上面这个问题主要就是使用的镜像和系统的架构不匹配的问题。开始时在mac上面构建镜像的,但是mac的架构是arm64,服务器的是x86_64的这两个架构不能用相同的镜像。
国内无法拉取Docker镜像了?这些方法拯救你的Docker
这个文章就是用来配置cloudflare配置dockerhub的代理,但是我的建议还是使用共有的代理源,比如下面这个github仓库里面的 issue里面所涉及到的:
CF-Workers-docker.io
// 写入
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.dengcong.org"]
}
EOF
// 重启
sudo systemctl daemon-reload
sudo systemctl restart docker
Nginx
直接在容器的内部安装使用nginx
ubuntu安装nginx
sudo apt install nginx
nginx基本操作
nginx的基本操作命令总结:
service nginx start/stop/restart
nginx -t
nginx -s reload
使用这种方式安装的nginx的一些基本信息
nginx 配置文件路径 /etc/nginx/nginx.conf
nginx 日志路径 /var/log/nginx/
Nginx从入门到精通(超级详细)(上)
问题
Sqlalchemy可以反射一些表,另外一些反射为None
表的所有者或者是表主键的影响。表结构的重要性,表主键,同步问题导致orm反射返回None。
查看服务器的架构和版本,查看本机外网IP
uname -a
// Linux yscloudDev002 4.4.0-154-generic #181-Ubuntu SMP Tue Jun 25 05:29:03 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
lsb_release -a
//
LSB Version: core-9.20160110ubuntu0.2-amd64:core-9.20160110ubuntu0.2-noarch:security-9.20160110ubuntu0.2-amd64:security-9.20160110ubuntu0.2-noarch
Distributor ID: Ubuntu
Description: Ubuntu 16.04.6 LTS
Release: 16.04
Codename: xenial
curl ifconfig.me
// 查看当前服务器的外网ip
cat /proc/version
// Linux version 4.15.0-213-generic (buildd@lcy02-amd64-079) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023
PG数据库创建角色创建库并授权
create user testuser with password 'pwd';
CREATE DATABASE platform OWNER testuser;
GRANT ALL PRIVILEGES ON DATABASE platform TO testuser;