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端口映射 

在这里插入图片描述
竟然没有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多域名代理。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无证的攻城狮

如本文对您有用,大爷给打个赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值