Docker布署Django框架外贸网站实操(三 SQLite切换PostgreSQL)

前期已经基本上完成布署工作了,下面就是优化的过程了,主要解决数据库切换、nginx代理工作。数据库和nginx都单独安装在一个docker内,万一将来项目做大做强了。升级负载均衡会非常容易。现在先在一台服务器上跑多个项目,将来用多台服务器来跑一个项目,切换超简单。nginx真是一个伟大的项目!

安装配置postgresql

找到一个docker映像带有postgresql,先pull下来,建立/home/docker-date/postgre/,将数据挂在本地机上,方便数据备份。

docker pull enapiuz/ubuntu-postgres-python
docker run -it -d --name postgre -p 65432:5432 -v /home/docker-date/postgre/:/tmp/ enapiuz/ubuntu-postgres-python    # 这命令有点长,-d是后台运行 -v挂载本地目录 -p端口映射 

Docker布署Django框架外贸网站实操(三 SQLite切换PostgreSQL)_第1张图片
竟然没有vi…,这个映像文件有点坑。而且装不了,好像缺少依赖。装vim也不成功。换个源都不容易,找到一个办法,网上找的好英明!先连上容器:

mv /etc/apt/sources.list /etc/apt/sources.list.bak    

echo "deb http://mirrors.163.com/ubuntu/ precise main restricted" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ precise main restricted" >>/etc/apt/sources.list
echo "deb http://mirrors.163.com/ubuntu/ precise-updates main restricted" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ precise-updates main restricted" >>/etc/apt/sources.list
echo "deb http://mirrors.163.com/ubuntu/ precise universe" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ precise universe" >>/etc/apt/sources.list
echo "deb http://mirrors.163.com/ubuntu/ precise-updates universe" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ precise-updates universe" >>/etc/apt/sources.list
echo "deb http://mirrors.163.com/ubuntu/ precise multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ precise multiverse" >>/etc/apt/sources.list
echo "deb http://mirrors.163.com/ubuntu/ precise-updates multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ precise-updates multiverse" >>/etc/apt/sources.list
echo "deb http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb http://mirrors.163.com/ubuntu/ precise-security main restricted" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ precise-security main restricted" >>/etc/apt/sources.list
echo "deb http://mirrors.163.com/ubuntu/ precise-security universe" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ precise-security universe" >>/etc/apt/sources.list
echo "deb http://mirrors.163.com/ubuntu/ precise-security multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ precise-security multiverse" >>/etc/apt/sources.list
echo "deb http://extras.ubuntu.com/ubuntu precise main" >>/etc/apt/sources.list
echo "deb-src http://extras.ubuntu.com/ubuntu precise main" >>/etc/apt/sources.list

总算装上了vim,这样就可以配置postgresql了。

# 修改监听地址
vim /etc/postgresql/10/main/postgresql.conf
#listen_addresses =  'localhost' 的注释去掉并改为 listen_addresses =  '*'
#password_encryption = md5 的注释去掉
:x
# 修改可访问用户的IP段,在文件末尾添加, ,表示允许任何IP连接,也可以指定IP:
vim /etc/postgresql/10/main/pg_hba.conf
 host all all 0.0.0.0/0 md5      # IPV4
 host  all  all   ::/0  md5		# IPV6
:x
/etc/init.d/postgresql start		# 启动数据库
su postgres	# 切换用户,这个用户是安装时自动生成的,可以直接使用。
psql		# SQL的命令行
ALTER USER postgres WITH PASSWORD 'newpassword';

这样就可以使用了,也可以另建一个用户,默认连接与用户名同名的数据库,所以也要建一个同用户名的数据库(不同名需要指定owner),还需要在LINUX系统中建立一个同名的用户,这是使用ident基于身份验证的身份登录的要求,md5就不用管了。

adduser userabc		# linux中
CREATE USER userabc WITH PASSWORD  'psaaword';   	# psql中建立用户,注意分号结尾
CREATE DATABASE abcdb WITH OWNER userabc;
#GRANT ALL PRIVILEGES ON abcdb TO userabc;    # 授权,无需执行

好了,理论上应该差不多了。去另一个容器中导出数据,改变数据库试试吧~
先登陆进另一个WEB服务容器:

cd /home/abc     
python3 manage.py dumpdata > data.json     #  导出为JSON格式
vim settings.py
'''改成如下:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'postgres',    # 数据库名  
        'USER': 'postgres',
        'PASSWORD': 'password',
        'HOST': '172.17.0.2',   
        ''' 这里采用IP+端口容器间连接,还有个LINK方法没研究过,IP方式是熟练工。前面容器映射了端口到主机的65432,方便外网连接'''
        'PORT': '5432',
    }
}
'''
pip3 install psycopg2    # 有坑,难装。注意依赖apt install libpq-dev, 注意开发包版本。
python3 manage.py migrate --run-syncdb    # 初始化数据库,坑大。

这一步和数据库设计相关,如果设计得比较复杂,很可能初始化不成功。会有各种各样的奇怪提示~,度娘和GG都找不到原因…都是些数据库的兼容性问题。比如关系不存在的问题,可以注释掉一个表单、URL再初始化,生成迁移,执行迁移。


成功后进入django的shell中执行

 from django.contrib.contenttypes.models import ContentType
 ContentType.objects.all().delete()    # 删除初始化时自动生成的数据
 ctrl+d

最后导入json数据即可,这里也可能出很多问题。还是兼容性问题!可能会遇到 KEY XXX already exists之类的问题。

python3 manage.py loaddata data.json

先这样吧,下回试试excel导入的方法是不是方便点。
这就完成了数据库迁移,下回再做nginx多域名代理。

原创文章,版权所有。未经许可,严禁转载

你可能感兴趣的:(django网站,postgresql,json导入导出,SQLite切换,django切换数据库)