Docker手动构建 nginx+py3+uwsgi环境

前述

这里使用的阿里云服务器部署,云服务器ssh登陆成功后,如果几分钟没有操作的话,sshd会自动断开登陆,对于我们来说,在部署软件有时要等很久,经常会发生ssh断开的情况,又或是上个侧所回来ssh就断开了,非常头痛。

这里我们要先解决ssh断开连接的问题

# egrep ^Client /etc/ssh/sshd_config
ClientAliveInterval 15 --间隔多少秒发送一次心跳
ClientAliveCountMax 1800 --多少秒没有数据产生时断开连接

部署py3+uwsgi+nginx用于运行py3应用程序

部署Docker

  1. CentOS 7 安装Docker

    # yum -y install docker
    # echo 1 > /proc/sys/net/ipv4/ip_forward   --打开路由转发,用于给容器上外网
    # systemctl restart network

2、配置阿里Docker镜像源
如果直接使用DockerHub官方仓库上传下载镜像的话,网速不快,因为跨国了,这里使用国内的阿里Docker镜像源:
https://cr.console.aliyun.com/ ->登陆->管理中心->镜像加速(根据提示配置)

#  vi /etc/docker/daemon.json              --这是我机器的配置
{"registry-mirrors": ["https://uss01m1d.mirror.aliyuncs.com"]
}

#  systemctl daemon-reload
#  systemctl restart docker
#  docker pull centos:7

Docker里部署py3+uwsgi+nginx

1、运行docker容器

#  docker run --name py3 -v /data/:/www -p 172.18.108.136:80:80 --privileged -d centos7:py3  /usr/sbin/init

#  docker exec -it py3  bash     --登陆py3容器

2、编译安装python3.6
--安装前先安装依赖软件包

#  yum install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc-c++  libxml* gzip  zlib zlib-devel

--下载python3.6软件包

#  wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz

--解压编译

#  tar -zxvf Python-3.6.3.tar.gz  -C /usr/src/
#  cd /usr/src/Python-3.6.3
#  ./configure --prefix=/usr/local/python3  && make && make install
#  ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
#  ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

3、安装django和uwsgi

#  pip3 install django
#  pip3 install uwsgi

--安装的django 和 uwsgi 全部在python的安装目录下下
# ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi3

4、测试uwsgi

#  vim test.py
def application(env, start_response):start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"]

--运行uwsgi3

#  uwsgi3 --http :80 --wsgi-file test.py
#  lsof -i:80
COMMAND  PID USER   FD  TYPE DEVICE SIZE/OFF NODE NAME
uwsgi3  1178 root   3u  IPv4 813312      0t0  TCP *:80 (LISTEN)

--uwsgi3已经监听80端口
访问http:// 172.18.108.136:80 可见Hello World。

--停止uwsgi3,释放80端口,测试django
# kill -9 1178

5、测试Django
--将django项目创建在/www/apply目录下

#  mkdir /www/apply  && cd /www/apply 

--创建django项目:webapp

#  python3 /usr/local/python/bin/django-admin.py startproject webapp

--运行python3

#  cd webapp/
#  python manage.py runserver 0.0.0.80

访问http:// 172.18.108.136:80 可见下图算成功

如访问看到的是以下错误,则需要修改访问的权限

#  vi /www/apply/webapp/webapp/setti ngs.py
28  ALLOWED_HOSTS = ['*']      --在[]里加上*代表允许所有ip访问

6、将uwsgi和django连接起来
前面uwsgi和django测试已经没问题,接下来将两个连起来

--确认80端口没有被占用
# uwsgi3 --http :80 --chdir /www/apply/webapp --module webapp.wsgi
备 –chdir 指定项目的绝对路径,--module 是指项目的wsgi模块

#  lsof -i:80
COMMAND  PID USER   FD  TYPE DEVICE SIZE/OFF NODE NAME
uwsgi3  1178 root   3u  IPv4 813312      0t0  TCP *:80 (LISTEN)

访问http:// 172.18.108.136:80 可见下图
代表uwsgi和django已经连起来

附:启动uwsgi时需要加很多参数不方便记,我们可以参照官网写一个配置文件来启动

# cd /www/apply/webapp
# vim webapp.ini
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir = /www/apply/webapp # Django's wsgi file
module = webapp.wsgi # the virtualenv (full path)
# home = /path/to/virtualenv # process-related settings
# master master = true # maximum number of worker processes
processes = 5# the socket (use the full path to be safe)
# socket = /path/to/your/project/mysite.sock
socket = :81 # ... with appropriate permissions - may be needed
# chmod-socket = 664 # clear environment on exit
vacuum = true

启动时就改用webapp.ini来启动
# uwsgi3 --ini /www/apply/webapp/webapp.ini

部署nginx反向代理

1、编译安装nginx
--编译之前,先安装nginx软件所依赖的软件包

# yum install patch make cmake gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel vim-minimal nano fonts-chinese gettext gettext-devel ncurses-devel gmp-devel pspell-devel unzip libcap diffutils pcre

# wget http://nginx.org/download/nginx-1.13.8.tar.gz
# tar -zxvf nginx-1.13.8.tar.gz  -C /usr/local
# cd /usr/local/nginx-1.13.8
# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6  &&  make  && make install

--停掉80端口,启动nginx,如没有报错,
打开浏览器: http:// 172.18.108.136:80 可见:Welcome to nginx

2、配置nginx代理uwsgi

#  vi /usr/local/nginx/conf/nginx.confupstream webapp {         --该段添加在server{}外面,http{}里面server 127.0.0.1:81;      --uwsgi3服务器和监听的端口}server {listen 80;server_name webapp.com;charset utf-8;client_max_body_size 75M;       location / {include uwsgi_paramsuwsgi_pass webapp;}}

--启动uwsgi3监听81端口

# uwsgi3 --ini /www/apply/webapp/webapp.ini

# lsof -i:80
COMMAND  PID USER   FD  TYPE DEVICE SIZE/OFF NODE NAME
uwsgi3  1178 root   3u  IPv4 813312      0t0  TCP *:81 (LISTEN)

--启动nginx监听80端口

# /usr/local/nginx/sbin/nginx -t   --确定nginx没有报错![](https://s1.51cto.com/images/blog/201804/15/430321341f62f458506e060fb2774147.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)# lsof -i:80
COMMAND  PID USER   FD  TYPE DEVICE SIZE/OFF NODE NAME
nginx   18535  root    6u  IPv4 842111      0t0  TCP *:http (LISTEN)
nginx   18536 nginx    6u  IPv4 842111      0t0  TCP *:http (LISTEN)

访问http:// 172.18.108.136:80 又看到django界面
代表nginx已经成功代理了uwsgi3

3、配置MariaDB
--安装mariadb

# yum install mariadb mariadb-devel mariadb-server

--修改配置,将数据目录指向到/www/共享目录下

# vi /etc/my.cnf
[mysqld]
datadir=/www/MariaDB/mysql
socket=/www/MariaDB/mysql/mysql.sock
log-error=/www/MariaDB/log/mariadb.log
pid-file=/www/MariaDB/log/mariadb.pid
log-bin=mariadb-bin# mkdir /www/MariaDB
# chown mysql.mysql -R /www/MariaDB# systemctl restart mariadb
# ln -s /www/MariaDB/mysql/mysql.sock /var/lib/mysql/mysql.sock
# mysqladmin -u root password 123456

--创建user和database给django用

# mysql -uroot -p123456
MariaDB [(none)]> CREATE DATABASE webapp;
MariaDB [(none)]> show databases like 'webapp';
+----------------+
| Database        |
+----------------+
| webapp          |
+----------------+
1 rows in set (0.00 sec)MariaDB [(none)]> grant all privileges on webapp.* to apply@'%' identified by 'apply';
MariaDB [(none)]> select host,user,password from mysql.user where user='apply';
+--------------+-------+-------------------------------------------+
| host          | user  | password                                     |
+--------------+-------+-------------------------------------------+
| %             | apply | *09B402E6D1FBDF77CD0F6F0CE586137BAD897877 |
+--------------+-------+-------------------------------------------+
1 rows in set (0.00 sec)MariaDB [(none)]> exit;

4、创建django项目
--创建django项目,测试django连接MySQL

--安装连接mysql数据库插件

# pip install --allow-all-external mysql-connector-python
# vim /www/apply/webapp/webapp/settings.py
DATABASES = {'default': { 'ENGINE': 'mysql.connector.django','NAME': 'webapp','USER': 'apply','PASSWORD': 'apply',}
}

--安装blog

# cd /www/apply/webapp/
# python3 manage.py startapp blog
# ls              --可以看到在webapp项目下已经有了一个blog文件夹
blog  manage.py  webapp

--修改settings.py 配置文件,添加blog应用

# vim webapp/settings.py
INSTALLED_APPS = ( 'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','blog',    --添加此句)

--初始化blog数据库数据

# python3 manage.py migrate
Operations to perform:Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:Applying contenttypes.0001_initial... OKApplying auth.0001_initial... OKApplying admin.0001_initial... OKApplying admin.0002_logentry_remove_auto_add... OKApplying contenttypes.0002_remove_content_type_name... OKApplying auth.0002_alter_permission_name_max_length... OKApplying auth.0003_alter_user_email_max_length... OKApplying auth.0004_alter_user_username_opts... OKApplying auth.0005_alter_user_last_login_null... OKApplying auth.0006_require_contenttypes_0002... OKApplying auth.0007_alter_validators_add_error_messages... OKApplying auth.0008_alter_user_username_max_length... OKApplying auth.0009_alter_user_last_name_max_length... OKApplying sessions.0001_initial... OK

--确认数据库webapp里已经生成了库表

# mysql -uroot -p123456
MariaDB [(none)]> use webapp
MariaDB [webapp]> show tables;
+----------------------------+
| Tables_in_webapp            |
+----------------------------+
| auth_group                  |
| auth_group_permissions     |
| auth_permission             |
| auth_user                   |
| auth_user_groups            |
| auth_user_user_permissions |
| django_admin_log            |
| django_content_type         |
| django_migrations           |
| django_session              |
+----------------------------+
10 rows in set (0.00 sec)

--创建登陆blog的帐号/密码

# python3 manage.py createsuperuser
Username (leave blank to use 'root'): admin
Email address: root@mail.com
Password:    --输入密码
Password (again):    --再次输入
Superuser created successfully.--启动uwsgi3,并访问blog论坛
# uwsgi3 --ini /www/apply/webapp/webapp.ini

--访问http:// 172.18.108.136/admin 能看到以下内容,代表已经搭建成功

使用前面创建的帐号admin/admin123登陆,如登陆成功则表示成功连接上数据库
注:看到此界面没有任何的css样式和图片,接下来我们做静态图版的反向代理

5、nginx代理静态图片
前面我们已经访问到了blog,但没有css样式,这时我们在浏览器里按下F12->Network

可以看到css的访问路径是http://localhost/static/admin/css 这个路径。
在webapp下新建static,然后nginx进行设置

# cd /www/apply/webapp
# mkdir static
# cp -fr /usr/local/python3/lib/python3.6/site-packages/django/contrib/admin/static/admin/ ./static/

--设置nginx代理static

#  vim /usr/local/nginx/conf/nginx.conf--在server{}里加入以下location /static {alias /www/apply/webapp/static;}

--重启uwsgi和nginx

#  kill -9 `ps -ef|egrep "uwsgi3|nginx" |grep -v grep |awk '{print $2}'` 

#  nohup uwsgi3 --ini webapp-up.ini &   --启动uwsgi3
#  /usr/local/nginx/sbin/nginx           --启动nginxnetstat -anlp|egrep "80|81"
tcp  0  0   0.0.0.0:80     0.0.0.0:*    LISTEN    15767/nginx: master
tcp  0  0   0.0.0.0:81     0.0.0.0:*    LISTEN    15756/uwsgi3

--访问http:// 172.18.108.136/admin 能看到以下内容,代表已经搭建成功

可以看到这次访问已经有css样式了,比之前美观

--使用前面创建的帐号/密码登陆进去:admin/admin123

--至此搭建完成

转载地址:https://blog.51cto.com/passed/2103651?cid=704540

转载于:https://www.cnblogs.com/weidaijie/p/10621517.html

Docker手动构建 nginx+py3+uwsgi环境相关推荐

  1. 给Docker中的Nginx搭建HTTPS环境

    随着苹果和微信小程序强制使用HTTPS协议传输,越来越多的公司和企业开始使用HTTPS.下面我来分享下给Docker容器中的Nginx搭建HTTPS环境 什么是HTTPS 超文本传输安全协议(英语:H ...

  2. Docker中的Nginx搭建HTTPS环境

    准备 1.已安装好docker环境 2.申请好域名 3.SSL证书(可选) 一.安装Nginx docker pull nginx 查看docker镜像: docker images 二.进行配置 建 ...

  3. pytorch + AMD卡 (docker快速构建A卡pytorch环境, 5分钟不折腾版)

    环境 宿主机环境 ubuntu20.02(其实能跑docker的linux都可以) CPU: AMD Ryzen 9 5950X GPU: AMD 6700XT 12G 理论上可以支持绝大部分的A卡 ...

  4. Docker教程(四) Docker镜像构建

    Docker教程(四) Docker镜像构建 本文链接:https://blog.csdn.net/yuan_xw/article/details/77744272 Docker教程(四) Docke ...

  5. Docker学习(3)-Docker镜像构建和使用

    Docker学习(1)-Docker简介 Docker学习(2)-Docker基础1 Docker 镜像与制作 Docker 镜像内是否包含内核(bootfs)? 首先,从镜像的体积大小来说,一个比较 ...

  6. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    在编辑Dockerfile过程中参考了以下相关范例:https://hub.docker.com/_/php/.https://hub.docker.com/_/mysql/.https://hub. ...

  7. docker(17):使用docker构建nginx+phpfpm环境2

    本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/77082783 未经博主允许不得转载. 博主地址是:http://blog.csd ...

  8. docker之手动构建新的镜像

    查看本地现有镜像: [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest c59f17fe5 ...

  9. Docker搭建 Nginx+PHP+MySQL 环境并部署WordPress实践

    本文给大家分享的是作者基于Docker搭建 Nginx+PHP+MySQL 环境并部署WordPress的详细过程,非常的全面,有需要的小伙伴可以参考下 Docker基于LXC实现了把软件封装到一个完 ...

最新文章

  1. 学习XML(添加一个子节点) 摘录
  2. Python range 函数 - Python零基础入门教程
  3. 使用Regex.Replace()进行字符串的替换
  4. Linux运维基础入门知识
  5. Tomcat乱码情况完美解决
  6. mysql start until_mysql 利用新建从库 使用 start slave until 恢复方法
  7. 思维的误区:忽视沉默的大多数
  8. 谭浩翔c语言,严谨细致的科技尖兵丨广州市公安局黄埔区分局民警谭浩翔
  9. Android Button设置边框 和背景
  10. python----集合
  11. 地表反射率影响因素_全了,高考地理答题要点归纳!
  12. mac 命令行查看DNS
  13. 智能硬件类产品测试项目总结
  14. opencv实现车牌识别之车牌号定位_1
  15. 2022年全球市场汽车倒车雷达总体规模、主要生产商、主要地区、产品和应用细分研究报告
  16. oracle数据库容灾一体机,信息技术中心组织开展“Oracle数据库一体机简介及运维”培训活动...
  17. 463种生活小巧门(超全)
  18. Lumerical官方案例、FDTD时域有限差分法仿真学习(十)——光栅耦合器(Grating coupler)
  19. 今天在清华图书馆看到我的杰作,感慨万千,而我要归零一切 !
  20. 个人云盘NextCloud部署方案

热门文章

  1. 前沿分享|阿里云数据库解决方案资深专家 李圣陶:云原生数据库解决方案 加速企业国产化升级
  2. KubeVela 上手|让云端应用交付更加丝滑
  3. 4.24企业数据库应用实践技术沙龙
  4. 物联网Wi-Fi配网方式,你知道几种?
  5. 深度学习中反向传播得到的损失是一个标量
  6. Python编程专属骚技巧6
  7. Java的二十三种设计模式(单例模式、工厂方法模式、抽象工厂模式)
  8. 基于SCN的查询(AS OF SCN)
  9. IT行业分析之企业信息化技术
  10. python with用法